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
350
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
OSC 2016 Hiroshima LT "オンラインコンパイラAmadeusの開発"
mrtc0
March 01, 2017
More Decks by mrtc0
See All by mrtc0
Datadog を使ったプロダクトとクラウドの セキュリティモニタリング
mrtc0
0
3.4k
コードで理解する eBPF セキュリティモニタリング
mrtc0
2
310
Product Security Casual Talk #1 - Datadog を使ったセキュリティモニタリングと 自動化の取り組み
mrtc0
2
730
GMO ペパボ株式会社 23卒・24卒向け セキュリティ勉強会 実践 DevSecOps パイプライン
mrtc0
1
760
実践 DevSecOps パイプライン ~システム開発へのセキュリティの取り入れ方~
mrtc0
2
610
脅威モデリングで考える Kubernetes セキュリティ / CloudNative Days Tokyo 2021 #CNDT2021 #CNDT2021_B
mrtc0
8
3.5k
ProSec-IT 2021 Container Security
mrtc0
2
830
GMO Developer Day 2021 - DevSecOps 推進の取り組みの紹介.pdf
mrtc0
4
1.9k
Web セキュリティ研修 / GMO ペパボ 新卒研修 2021
mrtc0
7
47k
Featured
See All Featured
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
560
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
290
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
630
Git: the NoSQL Database
bkeepers
PRO
432
67k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
190
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
650
4 Signs Your Business is Dying
shpigford
187
22k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
890
The Spectacular Lies of Maps
axbom
PRO
1
860
Odyssey Design
rkendrick25
PRO
2
730
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
420
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