CTFするぞ

あたまよくないけどがんばります

Global Cybersecurity Camp 2020参加記

はじめに

Global Cybersecurity Camp 2020が2月9日から15日までの1週間、船橋で開催されました。 残念ながら謎のウイルスの影響で韓国は参加しませんでしたが、他の国は全参加で開催されました。 講義資料とかは公開したらダメなやつなので、あまり詳しく書けませんが、軽い参加記を残しておきます。

Ice Breaking Party [1日目]

ご飯いっぱい食べました。 日本人で固まるのは良くないよね、ということで分散したのですが、私はコミュ力そんなに無いので台湾とマレーシアあたりと話したくらいで後はひたすらご飯食べてました。

IR [2日目]

ランダムに作ったグループでCTF形式のインシデントレスポンスをしました。 保全したディスクやプロキシサーバーのログなどがSSDで渡されるので、それを解析して問題に解答していきます。 問題が多かったり、何回か間違えると二度と解けなくなったり、ヒントに点数が付いていたりして割と辛かったです。

内容については書けませんが、各種ツールの使いどころをまとめておきます。

  • Arsenal Image Mounter:Windows版のmountみたいな。
  • AutoRuns:自動起動系に登録されたプログラムを列挙する。wmiとかタスクスケジューラは割とガバくて、手動で見に行くと見つかることがあるので注意。
  • WinPrefetchView:X:\Windows\Prefetch にあるpfを見る。ここにはプログラムが最初に起動された時刻が書かれている。SYSTEM権限で起動したものは書かれてないっぽい。
  • AppCompatCacheParser:ShimCacheをパースしてくれる。こっちはSYSTEM権限で起動したものも残っているが、実行時刻は残っていないので注意。
  • NTFS Log Tracker:TSKとかで取ったUSNJornalを投げたら解析してくれる。
  • Event Log ExplorerX:\Windows\System32\winevt\Logs にあるイベントログを解析してくれる。auth.log的なものだが、powershellの実行履歴とかも残されている。ログイン履歴とか残ってるので重要。
  • ShadowKit:Shadow Copyからファイルを復元してくれる。攻撃者が削除する前のデータがあれば復元できるので重要。
  • RegistryExplorer:X:\Users\hoge\NTUSER.dat からレジストリの内容を見る。自動起動はAutoRunsで見られるが、他にもプログラムを開いた履歴とかが残ってるのでチェックしておきたい。
  • foremost + ewfmount:どうしようもない時にデータカービングする。

他にも山のようにツールや使い方が書かれた資料を貰い、とても勉強になりました。 シナリオはかなり作り込まれていて、問題に関係無い部分からもいろんな証拠が出てきて面白かったです。 まじで何ヶ月くらいかけて作ったんだろう......

CTFは4日間続き、その間の夜も解かないと負けるという不安で最初の方の夜は頑張って問題を解いていました。 しかし、せっかくアジア中から強い人が集まっているのに部屋でCTFしているのはもったいなく感じ、3日目くらいから僕はCTFは放棄しました。 他の講義中もSSDを繋いでCTFしている人が多かったので、CTFは最初の2日くらいで完結させてほしかったです。(とはいえ数日で調査するのも難しいが......)

4日目に調査結果の発表があり、各チーム個性的な発表で面白かったです。 CTFは辛かったですが、なんだかんだで発表が終わると達成感がありました。

Fuzzing [3日目]

最初に使ったのがzuffで、これは入力をbitflip/byteflip, insertとかで脳死で改変してクラッシュを見つけます。 例えばobjdumpをfuzzingするには次のように起動します。(sample.exeは普通のexe)

$ zuff -s 0:1000000 -c -C 0 -q -T 3 objdump -x sample.exe

運が良ければクラッシュが見つかります。

次にAFLを使いました。これは結果をフィードバックして次の入力を生成するので、zuffよりも精度が高いです。 分岐にIDを付けることで実現しており、通常はソースコードをafl-gccコンパイルして使います。

$ CC=afl-gcc ./configure
$ make

これをafl-fuzzでファジングします。演習ではnm-newをファジングしてみました。

$ afl-fuzz -i initial -t 10000 -m 1024 -o output -- nm-new @@

AFLはエミュレータを使って分岐にIDを付けられるので、ソースコードがなくてもできるそうです。(afl-qemu

最後のグループワークでは、実世界のプログラムに対してfuzzingをしてバグを見つけます。 私はp7zを調査しましたが、全然クラッシュしなかったので対象を変え、割とマイナーな野良ツールにかけたら3つクラッシュを検知しました。 完全に死ぬ入力も見つけたので暇な時に調査したいです。

Firmware Exploit [3日目]

win7が無いと死ぬ講義だったので死んでいたのですが、使ったフレームワークは使いこなせば良さげなので春休み中に別の記事でまとめます。 Fuzzingもそうですが、環境構築を事前課題にすれば講義中内容に集中できて良かったんじゃないかなーと思います。

IR [4日目 前半]

こっちのIRはapacheのログを解析するという、割と内容が簡単になったIRでした。 サービスやネットワークの情報は分からず、apacheのログだけ渡されるのでgrepawkを使ってデカいログを解析しましょうという感じです。 一見簡単ですが、複数IPから攻撃があったり、そもそもPOSTのデータが無いので何が起きているかや、何が入れられたかを特定するのは思ったより難しかったです。

OSINT [4日目 中盤]

OSINTというと個人的につまらないイメージしかないですが、今回は統計に基づいたデータ解析をし、非常に興味深かったです。 内容としては、台湾の選挙におけるPTT(選挙のフォーラム)の投稿から情報操作をしているユーザーなどを探し出すというものです。 例えば特定の政党以外はネガティブな意見を書いていたり、記事の投稿から書き込みまでの時間が異常に短いユーザーなどを探します。 いわゆるプロパガンダ部隊的なのを見つけ出す感じで面白かったです。

観光 [5日目]

最終日はグループに分かれて行動しました。 私のグループは観光グループで、東京スカイツリーの後、浅草と秋葉原に行きました。 観光グループは海外勢2人と日本人4人という偏った班でしたが、最終日にもなると日本人同士で英語で話すことに違和感がなかったのでコミュニケーションは問題ありませんでした。 観光が終わったら飲み会してパーティーして飲み会に行って寝ました。

おわりに

2時に寝て7時に起きる生活を繰り返して体力的に消耗していましたが、なんとか無事全日程を終えることができました。 講義でスキルを得たのもそうですが、何より多くの人との新しい繋がりができたので良かったです。 参加者、講師やスタッフの方々、そして運営・協賛の皆様、大変ありがとうございました。 謎ウイルスに感染してませんように (・人・`)