Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OSC 2016 Hiroshima LT "オンラインコンパイラAmadeusの開発"
Search
mrtc0
March 01, 2017
0
330
OSC 2016 Hiroshima LT "オンラインコンパイラAmadeusの開発"
mrtc0
March 01, 2017
Tweet
Share
More Decks by mrtc0
See All by mrtc0
Datadog を使ったプロダクトとクラウドの セキュリティモニタリング
mrtc0
0
3k
コードで理解する eBPF セキュリティモニタリング
mrtc0
2
260
Product Security Casual Talk #1 - Datadog を使ったセキュリティモニタリングと 自動化の取り組み
mrtc0
2
640
GMO ペパボ株式会社 23卒・24卒向け セキュリティ勉強会 実践 DevSecOps パイプライン
mrtc0
1
690
実践 DevSecOps パイプライン ~システム開発へのセキュリティの取り入れ方~
mrtc0
2
580
脅威モデリングで考える Kubernetes セキュリティ / CloudNative Days Tokyo 2021 #CNDT2021 #CNDT2021_B
mrtc0
8
3.4k
ProSec-IT 2021 Container Security
mrtc0
2
800
GMO Developer Day 2021 - DevSecOps 推進の取り組みの紹介.pdf
mrtc0
4
1.8k
Web セキュリティ研修 / GMO ペパボ 新卒研修 2021
mrtc0
7
46k
Featured
See All Featured
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
100
Java REST API Framework Comparison - PWX 2021
mraible
34
9.1k
Optimizing for Happiness
mojombo
379
70k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
76
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
200
Are puppies a ranking factor?
jonoalderson
0
2.6k
Ruling the World: When Life Gets Gamed
codingconduct
0
120
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
0
34
First, design no harm
axbom
PRO
1
1.1k
A Soul's Torment
seathinner
1
2.1k
For a Future-Friendly Web
brad_frost
180
10k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
Transcript
オンラインコンパイラ 「Amadeus」の開発 OSC 前夜祭 @mrtc0
> whoami もりたこ(@mrtc0) 広島工業大学 B3 #seccamp'15,16 #ctf4b NW/Forensics WebApp Pentenster
(好きな||嫌いな)脆弱性: DOM Based XSS 2
Amadeusとは? 3
Aiming to the most accessible development environment for university students
学生のための開発環境(オンラインコンパイラ) 4
牧瀬紅莉栖とは関係ないです 5
> 背景 プログラミング初学者がどこで躓くのか テスト(試験)だけではわからない コーディングの様子を監視したい 環境構築に時間を取らせたくない VisualStudio, MSYS, Cygwin... オンラインコンパイルつくるか!!
6
> 構成 バックエンド Django REST Framework, NodeJS フロントエンド VueJS, ReactJS,
Electron コンテナ LXD 7
8
> 特徴 多言語 C(gcc,clang), Java, Scala, Python, Ruby... RESTful API
補完可能なエディタ AceEditorをfork 入力を1文字ずつロギング Online Judge機能 9
> 特徴 ユーザーのリアルタイム監視 コピペの検知, 正解までのdiffなど 変数トレーサー GDBのPythonAPIを利用 Terminal gottyをfork etc
チャットなど 10
> DEMO 11
> コンテナ ユーザーのコードを安全に実行 コード実行環境を隔離/仮想化 コンテナ技術の利用 cgroupsやNamespaceによるホストとの分離 ホスト側/他コンテナに影響を及ぼさない できるだけ速く,オーバーヘッドが小さいもの 12
> どのコンテナ使うか問題 Docker? FreeBSD Jail? LXC? Dockerはオーバーヘッドが大きい印象があった 速度, スケーラビリティでLXDを採用 LXCをより柔軟に扱うための機構
(OpenStackプラグインもあるので遊びたい... 13
> Security 各種リソース制限 LXC cgroupsでCPUやメモリ使用量, プロセス 数を制限 ディスク領域の制限 特に設けていない(!w) LXDはZFS,
btrfsでのみ制限可能 Quotaで制限をかけるか検討中 14
> Restful API Django REST Frameworkで実装 $.ajax({ 'type': 'POST', 'url':
'/api/compiler/', 'data' : { 'post_code': '#include <stdio.h>\nint main()...', 'stdin': '1 2 3', 'language': 'c-gcc', ... }, 'dataType' : 'json', ... 15
> ユーザーの監視 担当講師が1人ずつ見て回るのは大変 全員のコーディング状況を把握 チャットによるアドバイス Server Sent EventとWebSocket 16
> DjangoでWebSocket しんどい Nginx + uwsgiで苦戦 NodeJS(Express)で実装することに DjangoのセッションをNodeJSから利用する Redisにセッション情報を保存 NginxのリバースプロキシでCookieのSOP制限
回避 17
18
> その他 無限ループ対策 SIGALRMをPythonから叩く @timeout(5) def execute_code(): # コンテナでコードを実行する関数 ...
except TimeoutError: container.execute('kill -9 a.out') ... 19
> 作ってみて/運用してみて 型... UI構成が難しい ここが一番しんどかった どこに何のボタンを配置すればいいか DB, モデル設計大事... 「SQLアンチパターン」をもっと早く読んでお くべきだった...
20
> 作ってみて/運用してみて 学習から試験まで使える上に全てのログが取れる ので重点的に教える箇所が分かる ユーザー(学生)から好評 やはりこれが一番うれしかった 21
> 今後の展望 取得したデータの分析 対応言語などの拡張 教師の自動化とプログラムの評価 できればOSS化していきたい 22