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
310
OSC 2016 Hiroshima LT "オンラインコンパイラAmadeusの開発"
mrtc0
March 01, 2017
Tweet
Share
More Decks by mrtc0
See All by mrtc0
Datadog を使ったプロダクトとクラウドの セキュリティモニタリング
mrtc0
0
1.8k
コードで理解する eBPF セキュリティモニタリング
mrtc0
2
150
Product Security Casual Talk #1 - Datadog を使ったセキュリティモニタリングと 自動化の取り組み
mrtc0
2
500
GMO ペパボ株式会社 23卒・24卒向け セキュリティ勉強会 実践 DevSecOps パイプライン
mrtc0
1
520
実践 DevSecOps パイプライン ~システム開発へのセキュリティの取り入れ方~
mrtc0
2
410
脅威モデリングで考える Kubernetes セキュリティ / CloudNative Days Tokyo 2021 #CNDT2021 #CNDT2021_B
mrtc0
7
2.7k
ProSec-IT 2021 Container Security
mrtc0
2
650
GMO Developer Day 2021 - DevSecOps 推進の取り組みの紹介.pdf
mrtc0
4
1.6k
Web セキュリティ研修 / GMO ペパボ 新卒研修 2021
mrtc0
7
44k
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
A better future with KSS
kneath
238
17k
Building Adaptive Systems
keathley
38
2.3k
The Language of Interfaces
destraynor
154
24k
Building Your Own Lightsaber
phodgson
103
6.1k
Music & Morning Musume
bryan
46
6.2k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
BBQ
matthewcrist
85
9.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
For a Future-Friendly Web
brad_frost
175
9.4k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
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