前回 から、詳解セキュリティコンテスト: CTFで学ぶ脆弱性攻略の技術 Compass Booksシリーズ という書籍を読み進めています。前回は Reversing の全ての章を読みました。
今回から、Pwnable を読んでいきます。Pwnable は難易度が高く、何回かに分けて読んでいきたいと思います。今回は、30章の Pwnable への導入と 31章のシェルコードの内容を進めたいと思います。
それでは、やっていきます。
参考文献
今回、題材にさせて頂いた「詳解セキュリティコンテスト」です。
はじめに
「セキュリティ」の記事一覧です。良かったら参考にしてください。
・第2回:Ghidraで始めるリバースエンジニアリング(使い方編)
・第3回:VirtualBoxにParrotOS(OVA)をインストールする
・第4回:tcpdumpを理解して出力を正しく見れるようにする
・第5回:nginx(エンジンエックス)を理解する
・第6回:Python+Flask(WSGI+Werkzeug+Jinja2)を動かしてみる
・第7回:Python+FlaskのファイルをCython化してみる
・第8回:shadowファイルを理解してパスワードを解読してみる
・第9回:安全なWebアプリケーションの作り方(徳丸本)の環境構築
・第10回:Vue.jsの2.xと3.xをVue CLIを使って動かしてみる(ビルドも行う)
・第11回:Vue.jsのソースコードを確認する(ビルド後のソースも見てみる)
・第12回:徳丸本:OWASP ZAPの自動脆弱性スキャンをやってみる
・第13回:徳丸本:セッション管理を理解してセッションID漏洩で成りすましを試す
・第14回:OWASP ZAPの自動スキャン結果の分析と対策:パストラバーサル
・第15回:OWASP ZAPの自動スキャン結果の分析と対策:クロスサイトスクリプティング(XSS)
・第16回:OWASP ZAPの自動スキャン結果の分析と対策:SQLインジェクション
・第17回:OWASP ZAPの自動スキャン結果の分析と対策:オープンリダイレクト
・第18回:OWASP ZAPの自動スキャン結果の分析と対策:リスク中すべて
・第19回:CTF初心者向けのCpawCTFをやってみた
・第20回:hashcatの使い方(GPU実行時間の見積りとパスワード付きZIPファイル)
・第21回:Scapyの環境構築とネットワークプログラミング
・第22回:CpawCTF2にチャレンジします(クリア状況は随時更新します)
・第23回:K&Rのmalloc関数とfree関数を理解する
・第24回:C言語、アセンブラでシェルを起動するプログラムを作る(ARM64)
・第25回:機械語でシェルを起動するプログラムを作る(ARM64)
・第26回:入門セキュリhttps://github.com/SECCON/SECCON2017_online_CTF.gitティコンテスト(CTFを解きながら学ぶ実践技術)を読んだ
・第27回:x86-64 ELF(Linux)のアセンブラをGDBでデバッグしながら理解する(GDBコマンド、関連ツールもまとめておく)
・第28回:入門セキュリティコンテスト(CTFを解きながら学ぶ実践技術)のPwnable問題をやってみる
・第29回:実行ファイルのセキュリティ機構を調べるツール「checksec」のまとめ
・第30回:setodaNote CTF Exhibitionにチャレンジします(クリア状況は随時更新します)
・第31回:常設CTFのksnctfにチャレンジします(クリア状況は随時更新します)
・第32回:セキュリティコンテストチャレンジブックの「Part2 pwn」を読んだ
・第33回:セキュリティコンテストチャレンジブックの「付録」を読んでx86とx64のシェルコードを作った
・第34回:TryHackMeを始めてみたけどハードルが高かった話
・第35回:picoCTFを始めてみた(Beginner picoMini 2022:全13問完了)
・第36回:picoCTF 2024:Binary Exploitationの全10問をやってみた(Hardの1問は後日やります)
・第37回:picoCTF 2024:Reverse Engineeringの全7問をやってみた(Windowsプログラムの3問は後日やります)
・第38回:picoCTF 2024:General Skillsの全10問をやってみた
・第39回:picoCTF 2024:Web Exploitationの全6問をやってみた(最後の2問は解けず)
・第40回:picoCTF 2024:Forensicsの全8問をやってみた(最後の2問は解けず)
・第41回:picoCTF 2024:Cryptographyの全5問をやってみた(最後の2問は手つかず)
・第42回:picoCTF 2023:General Skillsの全6問をやってみた
・第43回:picoCTF 2023:Reverse Engineeringの全9問をやってみた
・第44回:picoCTF 2023:Binary Exploitationの全7問をやってみた(最後の1問は後日やります)
・第45回:書籍「セキュリティコンテストのためのCTF問題集」を読んだ
・第46回:書籍「詳解セキュリティコンテスト」のReversingを読んだ
・第47回:書籍「詳解セキュリティコンテスト」のPwnableのシェルコードを読んだ ← 今回
以下は「詳解セキュリティコンテスト: CTFで学ぶ脆弱性攻略の技術 Compass Booksシリーズ」のサポートサイトです。問題ファイルをダウンロードすることが出来ます。
では、書籍の章を参考に書き進めていきます。
30章:Pwnableへの導入
30章では、15ページぐらいの分量で、Pwnable として扱われる問題の全体像と、様々な出題パターンの解説と、Pwnable で使うツールについて、説明されています。
Pwnable の解説については読み物なので、ここでは割愛します。Pwnable でよく使うツールについては、簡単に紹介したいと思います。
まずは、gdb を拡張するツールがいくつか紹介されています。
| ツール | 特徴 | 詳細 |
|---|---|---|
| peda | x86、amd64に特化したツール | 追加された機能一覧とその説明あり(phelp参照) |
| gef | x86、amd64以外もARMなど様々なアーキテクチャに対応している | gef helpで詳細を確認すること |
| pwndbg | 様々なアーキテクチャに対応している | pwndgコマンドで詳細を確認すること |
| pwngdb | ヒープの状況を可視化する機能がある |
現在、私は、pwndbg を使用しています。以前は gdb-peda を使っていましたが、ヒープ領域の状況を可視化するツールが必要になったため、別のツールに乗り換える必要がありました。上の peda 以外のツールは、いずれもヒープ領域の可視化に対応していると思います。peda 以外の 3つのツールは、いずれも高機能です。そのうち、pwndbg を選んだ理由は、TeraTerm(v5以降)で文字化けしなかったことです。gef と pwngdb も、v5以降の TeraTerm なら文字化けしないかもしれないのですが、試せてないです。
それ以外のツールとして、nasm、pwntools、checksec が紹介されています。いずれも以前の記事で取り扱っています。あと、ROPガジェットを列挙するツールとして、ROPgadget と rp++ が紹介されています。私は rp++ を使っているのですが、rp++ は x86 と x86-64 にしか使えず、ROPgadget の場合は、ARM などの他のアーキテクチャにも対応しているそうです。これは、初めて知りました。どこかで ROPgadget に乗り換える必要があるかもしれません。
あとは、Seccomp Tools と OneGadget について紹介されています。いずれも後ろの章で説明があるそうです。私はどちらも使ったことがありません。最後に、libc6-dbg が簡単に紹介されていました。
30章は以上です。
31章:シェルコード
31章は、24ページぐらいの分量です。
31.1:シェルコードとは
シェルコードの概要と、NULL文字、改行文字などを含まないようにする説明と、どのようなアセンブラを書けば、それらの特定文字を含まないように実装できるかの解説があります。
シェルコードについては、以下の以前の記事で実装しています。今回の機会に、この記事を更新しています。
1つ目の更新は、この記事で実装したシェルコードは、NULL文字を含んでいるのですが、なぜか scanf関数で正しく動作していました。その理由は、scanf関数に指定していたのが、"%[^\n]" となっていたためで、改行文字以外は NULL文字であっても入力として認識してくれるようになっていたということです。
2つ目の更新は、NULL文字を含んでいたシェルコードを変更して、特定文字を含まないように改良しました。
daisuke20240310.hatenablog.com
31.2:システムコール
システムコールについての概要と、実際にシステムコールを使って、open、read、writeするアセンブラを書いて、動作確認まで行っています。
31.3:緩和機構
緩和機構とは、セキュリティ機構のことであり、ここでは、checksec などで見られる NX(No eXecute)のことについて解説されていrます。これは、データ領域のコードを実行できないようにする機能で、Intel CPU ではハードウェアとしてこの機能をサポートしているそうです。
その後、seccomp(SECure COMPuting mode)について解説がされています。seccomp とは、対象のプロセスにおいて、システムコールの発行を制限することが出来る機能です。seccomp については、現状はすぐに必要ないと思われるので、CTF をやっていて、必要になったときに、ここに追記したいと思います。
31.4:緩和機構の回避
seccomp によるシステムコールの発行が制限されていた場合に、それを回避する手法について解説されています。こちらについても、必要になったときに、ここに追記したいと思います。
31.5 は、実践問題で、こちらも seccomp に関する内容のようですので、割愛します。
以上で、31章のシェルコードは終わりです。途中から、あんまり、シェルコードは関係ない内容だったように思います。
おわりに
今回は、詳解セキュリティコンテスト: CTFで学ぶ脆弱性攻略の技術 Compass Booksシリーズ の Pwnable の シェルコード の章を読みました。内容について、実際に実装などは、「セキュリティコンテストチャレンジブックの「付録」を読んでx86とx64のシェルコードを作った - 土日の勉強ノート」の記事を更新したため、この書籍の内容の簡単な説明だけになってしまいました。次回は、32章のスタックベースエクスプロイトを読み進めたいと思います。
最後になりましたが、エンジニアグループのランキングに参加中です。
気楽にポチッとよろしくお願いいたします🙇
今回は以上です!
最後までお読みいただき、ありがとうございました。