LAC WATCH

セキュリティとITの最新情報

RSS

株式会社ラック

メールマガジン

サイバーセキュリティや
ラックに関する情報をお届けします。

ラックピープル | 

攻撃手法から学ぶサイバーセキュリティ~第12回CTF for GIRLSワークショップ開催~

CTF for Girlsロゴマーク

こんにちは。鈴木悠です。
私が運営メンバーとして参加しているCTF for GIRLSが、9月1日(日)に第12回ワークショップを開催しました。今回対象とした分野は、「バイナリ解析」と「Exploit(Pwn)」です。

※ CTF for GIRLSとは、日本ネットワークセキュリティ協会(JNSA)の中で組織されたSECCON実行委員会の支援を基に発足した企画(組織)です。

バイナリ解析は実行プログラムをバイナリデータ(アセンブリ言語)表示で解析していくもの、また、Exploitはバイナリ解析でプログラムの脆弱性にあたりを付けて攻撃コードを実行するというものです。特に、ExploitはCTF for GIRLSで初めての講義・演習ということもあり、90名以上(会場:8割、オンライン:2割)の女性が参加して大盛況でした。

バイナリ解析講義の様子

バイナリ解析講義の様子

バイナリ解析

バイナリ解析については、2014年の初開催以降、これまでに2回取り組んでいます。
CTF for GILRSは初心者を想定しているため、過去2回は利用者が多いWindows環境でのバイナリ解析としました。

しかし、今回は後半のExploit講義でLinux操作が必要ということもあり、バイナリ解析も同様にLinux環境としました。Linux環境での実行ファイル形式であるELFファイルをgdb(GNU Project Debugger)というデバッガを用いて解析します。

OllyDbgでのバイナリ解析(Windows)

OllyDbgでのバイナリ解析(Windows)

gdbでのバイナリ解析(Linux)

gdbでのバイナリ解析(Linux)

デバッガは、「0」と「1」の2進数で表記されたバイナリデータをアセンブリ言語で表示してくれます。通常の用途は、開発したプログラムの不具合を確認する、一時的に値を変更して動作確認をするといった検証・テストに使用されます。CTFでは、問題として提示された実行ファイルをデバッガで起動し、アセンブリ言語を解読しながらプログラムの動きやソースコードを推測して解いていきます。

例えば、実行するとパスワード入力を求めるプログラムがあるとします。
パスワードはわかりません。入力したパスワードが正しければ成功で、CTFとしてはFlagという回答が得られそうです。バイナリ解析では、この正解/不正解の条件判定を回避するために、デバッガでプログラムを実行した際の記憶領域(レジスタ)の値や変数を一時的に書き換えていきます。条件判定を回避する方法はいくつかあります。

条件判定の回避方法

  1. 条件を満たしたことにする(例:正解のパスワードが入力されたことにする)
  2. 条件を変更する(例:正解のパスワード自体を変えてしまう)
  3. 条件判定をさせない(例:正誤判断をさせない)

デバッガでの基本動作は、条件判定をする直前までプログラムを実行し、一時停止で書き換え、再実行して次へ進む、これを繰り返します。

講義では、実際に動かして基本動作を解説するデモだけでなく、アセンブリコードを1行ずつ読んで理解していく、いわゆる「アセンブリ読経」も交えながら、バイナリ解析への理解を深めました。CTF for GIRLSのTwitterハッシュタグ「#ctf4g」でも、アセンブリ読経やろう女子が急増中です!

Exploit

バイナリ解析でアセンブリ言語の知識やデバッガの使い方を学んだうえで、コードの脆弱な箇所を特定して攻撃コードを実行(Exploit)します。CTFのExploit(Pwn)問題は、通常では運営側が用意したサーバ上で動いているプログラムの脆弱性を突いてFlagを得るというものですが、今回は参加者へ事前に配布したローカル環境で攻撃コードを実行してもらうことにしました。

Exploitで対象とした脆弱性は、スタックバッファオーバーフローです。
バッファオーバーフローとは、プログラムが実行に必要として確保している領域(バッファ)の上限よりも多いデータが入力されることで、データがあふれてしまう脆弱性です。

バッファは、プログラム実行時に一時的に情報が格納されるスタック領域と、計算や操作のためのデータを格納するヒープ領域を合わせたものです。今回は、スタック領域のサイズを超えたデータ(攻撃コード)を入力することでスタックのバッファをオーバーフローさせ、Flagを表示させるという内容としました。

攻撃コードの実行に必要なコードの設置場所やデータ長を知るために、バイナリ解析で学習したデバッガ「gdb」を活用します。

演習と解説

講義のあとは演習・解説となります。
演習問題は、バイナリ解析が初級2問と中級2問の計4問、Exploitが初級2問と中級・上級が1問ずつの計4問でした。攻撃手法を実践することで回答を得るという問題ですが、実は演習問題のプログラムとそのソースコードをセットで配布しています。

参加者がソースコードを参照できると、問題が解きやすくなるだけでなく、実際に脆弱性が存在している箇所を知ることもできます。CTFでは、攻撃手法を学ぶだけではなく、脆弱性を作らないためにはどうすればいいかも一緒に学んでもらいたいと思っています。

バイナリ解析の問題解説をしました

バイナリ解析の問題解説をしました

私は今回バイナリ解析の演習問題4問を作成したこともあり、当日、解説をしました。
参加者からの質問で、「バイナリ解析やデバッガなどを普段から使うお仕事をしているのですか?」と聞かれましたが、まったく使う機会はありませんね...。

さらに詳しく知るにはこちら

ラックセキュリティアカデミー

ラックではトップクラスの社員が講師となる自主参加型の社内研修があります。
私は、インシデントレスポンス・フォレンジックコース、マルウェア解析コース、ログ解析コースなどを初級から上級まで軒並み受講しているので、そのおかげでしょう。研修で学んだものの、日常業務では使用していないスキルを定期的に磨く機会として、CTFはとても有用ですね。

CTF for GIRLSの運営は、昨年度、子連れ参加やオンライン配信など、参加者の多様性を考慮した取り組みを開始しました。加えて今年度は、Black Hat Asia2019やBlack Hat USA 2019で講演するなど、活動の場を海外にまで広げています。

今後の活動については、CTF for GIRLS公式Webサイトで随時公開していますので、興味がある方は是非チェックしてみてくださいね!

この記事は役に立ちましたか?

はい いいえ