CTFでのLinuxのユーザランド以外の問題についてまとめる
はじめに
これはCTF Advent Calendar 2019の1日目です。執筆時点でまだまだたくさん空きがあるので、埋めていきましょう。 adventar.org
CTFで出題されたユーザランドでの簡単な問題を除く少し特殊な問題についてまとめる。 とりあえず、まとめられるだけまとめて後からこの系統の問題はどうすればいいか足掛かりになりそうな情報やリンクを自分のためにまとめた。
時間が全然足りないので、とりあえず2019年に出題されたものを中心にまとめた。時間ができれば追記する予定である。
インデックス
- Linux Kernel
- QEMU, VirtualBox
- Browser, JavaScript Engine
- Interpreter
Linux Kernel
1118daysober from Insomni'hack teaser 2019
CVE-2015-8966。armのlinux kernelにおいて、あるシステムコールの処理の最中にfsをkernel dsに変更するが、元のユーザのものに戻さずに終了するバグが存在した。これを利用すると、ユーザランドからカーネルランドに対して任意の読み書きが可能になる。
p4fmt from CONFidence CTF 2019 Teaser
独自フォーマットの実行バイナリを実行するカーネルモジュール
Hfsipc from Midnight Sun CTF 2019 Quals
ノート管理するカーネルモジュール。作成時にoff-by-oneのオーバーフローがあるので、それを利用して、解法済みのチャンクに存在するリンクを破壊し、AAW/AARを作る。
hack_me from * CTF 2019
ノート管理系のカーネルモジュール。読み書き時にオフセットとサイズを指定するが、そのチェックが甘く、想定される領域外も読み書き可能。
Brainfuck64 from Security Fest 2019
kpets from Facebook CTF 2019
Fast&Furious, Fast&Furious2 from 0CTF/TCTF 2019 Finals
KrazyNote from Balsn CTF 2019
PoE II - Cord from HITCON CTF 2019 Quals
PoE III - TPU from HITCON CTF 2019 Quals
- binary
Browser, JavaScript Engine
oob-v8 from * CTF 2019
speedrun-012 from DEF CON CTF Qualifier 2019
JSエンジンであるduktapeにバグを仕込まれている。
Exploit 400 ChakraCore from Trend Micro CTF 2019 - Raimund Genes Cup - Online Qualifier
Appetizer from Real World CTF 2019 Quals
ChakraCore
accessible from Real World CTF 2019 Quals
v8
Interpreter
Rust Jail from SpamAndFlags Teaser 2019
Rustのコードをビルドして実行してくれる。unsafeが使用できない。flagファイルの中身を読めれば勝ちで、マクロの include_str!
を使う。
plang from 0CTF/TCTF 2019 Quals
JSに似た独自言語のインタプリタ。配列の添字のチェックが甘く、負数を入れるとout-of-boundsが発生する
Gomium Browser from Google CTF 2019 Finals
Golangで書かれたソースコードをビルドして実行してくれる。fmtしかimportできない制限下で電卓を起動する問題。Golangには、sliceなどにlockがなくdata raceを起こせるので、それを用いてメモリ破壊を起こし任意コード実行に持ち込む。
MAL from SECCON 2019 Online CTF
Rustの実行系の内部で使われるallocate/deallocateが独自に書き直されている。制限がかかった状況で、こちらのRustのコードをビルドして実行してくれるので、メモリ破壊を起こして任意コード実行に持ち込む。 lockがないので、適当に2つのスレッドでmallocをさせると、両方のスレッドで同じ領域を取ることができた。