セキュリティキャンプ全国大会 2017 に応募してきたので応募用紙と感想
2017年6月16日追記
セキュリティキャンプ2017年受かりました。たくさん学んできます。
はじめに
セキュリティキャンプ全国大会に応募してきました。
この一ヶ月間はほとんどこの応募課題に取り組んでいました。選択課題はA-4,A-5,A-6に取り組みました。理由は、リバースエンジニアリング系に興味があり、今回のセキュリティキャンプでは主にその講義を受講したいと思ったためです。また、問題をパッと見たときに全くわからなかったので、1ヶ月あるから十分に手を動かす時間はあるし、面白そうだからという理由で選択しました。
考察が甘かったり、表現が間違っていることが多々あるかとは思いますが、大目に見るかコメントでマサカリを投げてくれると助かります><
以下、設問の感想と選択問題の回答です。
設問の感想
回答がとても長いため、先に感想を書いておきます。正直この1ヶ月はめちゃくちゃ大変でしたが、今思い返すと初めて挑戦することばかりだったので、いい勉強になりました。また、問題を解きながら更にセキュリティキャンプに行きたい気持ちが高まっていきました。
選択問題は以下の問題を回答しました。
- A-4
- A-5
- A-6
A-4 printf()について調べる問題
A-4のprintf()について調べる課題は、最初にglibcのソースコードを読もうとしたらあまりの分量にビビって、gdbで動かしながら内部で呼ばれている関数やその引数を調査して行いました。この後で動きを確認するためにソースコードを読んでみると以前より若干読めるようになっていて、glibcやカーネルのソースを読むことに対するハードルが低くなったように思います。デバッガの出力や逆アセンブル結果を貼ったら1万字を超えていたので提出時に焦りましたが、なんとか提出することができました。しかし、他の方のwriteupをみていると、とてもうまくまとまっていて、自分みたいにやってみたことをつらつらと書いていく方針でやったのは少し読みにくかったのかなぁと反省しています。
A-5 カーネルの権限昇格の脆弱性の再現
A-5のCVE-2016-0728のexploit問題とかは結局フォーラムのコメントに上がっていたことを実際に実験して検証してみて、VMが落ちるところまでしかできず、また自分のexploitを記述できたわけではなく拾い物のPoCしか試せなかったのがとても悔しいです。この問題を解く前に、katagaitai勉強会のUAF勉強会の資料を読んでweird_snusとかを解析してみたりしたんですが、結局最後までできなかったり、(今回の脆弱性は参照カウンタのオーバーフローを利用した攻撃で、しかも自由に一般ユーザー権限でプログラムを実行できるという状況だったため。言い訳かもしれないですが…)カーネルメッセージはダンプしたもののそれを読んで分析することができなかったりと、まだまだできないことがたくさんあり、自分の未熟さを痛感しました。しかし、今回の問題で初めてカーネルのエクスプロイトの実証に取り組んでみて、カーネルのソースコードや機能についてのドキュメントを読むことで、さらにLinuxカーネルについて学びたい気持ちが強くなりました。(というかこういうことも回答として書いてもいいことを他の人のwriteupを読んで気づいた…)
A-6 PEファイルフォーマットの解析
A-6のPEの解析では、デバッガによるx86プログラム解析や、リバースエンジニアリングバイブルの前半を読んだことはあったのですが、自分で解析プログラムを1から実装してみることで、ヘッダの構造やメンバについてより詳しく知ることができたと思います。本を読むだけではなく、手を動かして学んでいく必要があると再度認識させられました。また、gnu binutilsの実装について調べてみたのもあって、意外な発見もありました。あとは開発意欲が刺激されたのも大きいです。
最後に
今思えば、去年の今頃は簡単なスタックBOFの問題も解けなくて、64bitと32bitでアドレスの長さがどう変わるかも知らない。アセンブリもレジスタすら知らない。低レイヤーに興味はあるけど何もやったことがない。という状態だったことを考えると、少しはできること、知ってることが増えてたのかなぁと思います。それも、CODE BLUEの学生スタッフとして参加して、そこで出会った同期や先輩、後輩がセキュリティだけでなく広い分野で活躍していることに大きく刺激を受けた結果かなぁと思います。本当に感謝です。
また、応募課題にフィードバックをくれた同期にはとても感謝しています。こちらで改めてお礼を言いたいと思います。
以下、各設問の回答です。またしばらくしてこれを読む頃には黒歴史だから…って言えるくらいに強くなろうと思います。
2017年6月16日追記
各設問の回答については長いのでこちらにまとめました。興味のある人はみてください。