この記事でわかること
- pwn・CTF未経験の人間が、3ヶ月ちょいで何をどの順番でやったか
- 各ステップにどれくらい時間がかかったか(正直な内訳)
- 「ここは深追いしなくていい」「ここは絶対に外せない」の線引き
目次
- はじめに
- 前提
- 全体像(3ヶ月の内訳)
- ステップ1:pwn.collegeでアセンブリを読み書きできるようになる
- ステップ2:nightmareでいきなり実践
- ステップ3:セキュキャン全国大会の応募課題を解く
- エクストラステップ:実際の過去の脆弱性を再現
- まとめ
はじめに
今年、セキュリティ・キャンプ全国大会の脅威解析クラスに応募したのですが、選考課題で普通に落ちました。(pwnに時間を掛けすぎて、他の課題が疎かになったのが要因?)
ただ内定先の企業がスポンサーをしている縁があり、スポンサー枠で講義そのものは直接聞くことができました。
しかしながら、事前課題をやっていない状態でも講義の内容に全然ついていけたどころか、下記で紹介する内容が偶然講義の先取りになっていた部分すらありました。
pwnもヒープエクスプロイトも、3ヶ月ちょい前までは完全に未経験でした。AIを活用することで今まででは達成できなかった速度で到達できるようになったと感じました。
この記事では、その3ヶ月間でやったことをステップごとに振り返りつつ、後輩たちがpwn・低レイヤーの脆弱性に入門するときの参考になればと思ってまとめました。
+αの部分(最初のpwn.collegeにかけた期間)は正直記憶が曖昧なので、そこはご了承ください。
前提
筆者のスタート地点はこんな感じです。
- pwnは基礎的なCTFの問題すら触ったことがない
- 普段はWebアプリ開発やWeb/モバイルアプリの脆弱性診断がメインで、低レイヤーはほぼ未経験
- PC歴は3年ほど(大学から始めて、これに取り組んだのは4回生の頭から)
つまりバイナリもアセンブリも、本当にゼロからのスタートでした。同じような立場の人には、多分結構参考になると思います。
全体像(3ヶ月の内訳)
先に全体の流れだけ表にしておきます。細かい話は後で読むとして、まずはここだけ見れば道のりがつかめるはずです。
| ステップ | 期間 | ゴール |
|---|---|---|
| ステップ1:pwn.college | 約1ヶ月 | 1〜2行のアセンブリを読み書きできる |
| ステップ2:nightmare | 約1ヶ月半 | スタックBOFからROPまでを一通り経験 |
| ステップ3:セキュキャン応募課題 | 残り2週間 | ヒープエクスプロイトの流れを理解 |
| エクストラ:実脆弱性の再現 | 約2週間(趣味・並行) | アプリ層〜ヒープの実例を追体験 |
ステップ1:pwn.collegeで1、2行のアセンブリを読み書きできるようになる
まず最初にやったのは、pwn.collegeという学習サイトでアセンブリに慣れることです。
サイトに入ってすぐ下にある、Getting Started — Learn the Basics! と書いてある場所のすぐ下に、いくつかページ(Dojoと呼ばれる)が並んでいてその中のComputing 101というDojoを上からやります。
意外とシンプルなので、身構えていたほど難しくはありませんでした。
💡 躓きポイントであり、最重要ポイント
レジスタに入った値がシステムコール番号や引数になっている部分だけは、最初ここでつまずきました。逆に言うと、ここさえ理解できれば大部分は乗り越えられます。
正直、そこまで長い時間をかける必要はないです。筆者はcomputing101のDojoの「Your first program」から「The stack」まで全部と、「Software introspection」をいくつかやりました。今振り返ると、もっと短くても十分だったと思います。
結構ゆっくりやっていたので1ヶ月くらいかかりましたが、正直もっと早くできます。
ステップ2:nightmareでいきなり実践
次はnightmareというサイトに移って、いきなり実践に入りました。
nightmareは、色々なCTFから厳選したpwn問題を集め、そのwrite up(解き方)を初学者でもわかるよう丁寧に解説したものが各問題ごとにつけているサイトです。
問題はこのGitHubリポジトリからダウンロードできます
普通はまず自力で解くものだと思いますが、正直わからなさすぎるので、最初からwrite upを読むことにしました。その際、AIに「これは何をしているのか」「何のためにやっているのか」をひたすら解説してもらいます。
また実際に手を動かすのがとても重要なので
- 一度理解してから、write upを読みながらその通り手を動かす
- 最初からwrite upを読みながら手を動かして、その過程でAIに解説させる
のどちらかをやります。ここでデバッグの方法なども身についていきます。
pwntoolsの細かい使い方ももちろん大事ですが、それよりも「なぜこの方法を使うのか」「なぜこのやり方じゃダメなのか」というエクスプロイトの流れを理解することを優先しました。
とりあえずスタックBOFでのROPまではマストだと思います。できれば各防御機構のバイパスも経験しておきたいところですが、筆者自身ASLRとNXくらいまでしかできておらず、RELROとカナリアは正直やっていません。
💡 問題の選び方
AIに聞きながら、似たような問題はなるべく飛ばして、新しい学びが多く得られるものをメインに選ぶのがおすすめです。ただし類似問題を使ってwrite upを先に読まずにまず自力で挑戦するのはありだと思います。
ここは1ヶ月半くらいかかりました。
ステップ3:セキュキャン全国大会の応募課題を解く
↑の専門コースC【脅威解析クラス】と書かれたものが課題です。
2026年の応募課題は、大きく2つに分かれていました。
| 課題の種類 | 内容 |
|---|---|
| 一般解説問題 | スタックからヒープエクスプロイトまでの一般的な理解を問う |
| CTF実践問題 | 実際にヒープエクスプロイトのCTF的な問題を解いて、それを解説する |
まず先にCTF問題の例題を読みました。スタックの部分は、ここまでの内容とAIに聞いて補った部分で、まだ手を動かせていなかった防御機構バイパスなどの概要を理解しました。
問題自体はヒープなのですが、CTF問題の例題には解説の書き方の例も載っているので、それをwrite up代わりにして、ステップ2と同じようにAIを使いながら完全に理解していきました。ヒープはアロケーターなどの概念を知る必要があるので、当然そこの土台からです。
例題を解いた時点で一般的な解説問題のヒープに進んでもいいのですが、筆者はCTF問題のステップ2、3を先に進めてから戻って解説を書き直す、という順番でやりました。
💡 超細かい部分は理解を捨てていい
たとえばFSOPで使う細かいFILE構造体の中身は覚えていません。それよりも、「なぜFILE構造体を使うのか」「なぜvtableのバリデーションがないと偽造したvtableを使ってRIPが取れるのか」という流れを理解することを優先しました。
もちろんできるなら、GDBでガチャガチャ動かしながらどの構造体がどのタイミングで呼ばれて、なぜこのエクスプロイトで通るのかまで細かく理解できるに越したことはありません。
ここは残り2週間ほどで詰め込みました。ただこれは課題の提出期限があったから詰め込んだだけなので、余裕があるなら自分のペースで進めるのがいいと思います。
エクストラステップ:実際の過去の脆弱性を再現
筆者がpwnに興味を持ったそもそもの理由は、スマホ周りの低レイヤー脆弱性を見つけられるようになりたいと考えたからです。なので、スマホアプリとヒープが合体した脆弱性を再現してみることにしました。
選んだのは、発火元がアプリ層で、実際に発火する脆弱性はCライブラリのヒープ脆弱性という組み合わせで、しかもユーザー操作なし・脱獄なしでRCEまで取れてしまうという強力なものです。この脆弱性の選定自体もAIに相談して決めました。
まず詳細を調査して、そこからエミュレーター上で再現するところまでやりました。正確には、脆弱性のコアになっているライブラリの部分だけを検証しています。詳しい内容はこちらにまとめてあります。
面白いことに、これがセキュキャン全国大会の講義内容とたまたま大きく重なっていました。詳細は言えませんが、CVEこそ違うものの流れはほぼ同じでした。自分が扱ったものと同じく画像や動画のパーサー系の脆弱性で、自分が扱ったものがたまたまの産物ではなく、リアルな世界でありがちなパターンなんだとわかりました。
これは普段のインターンの合間に完全に趣味でやっていたので、2週間ほどかかりました。
まとめ
pwn完全未経験から3ヶ月ちょいで、ここまでたどり着けた一番の理由は、AIを専属トレーナーとして使えたことだと思っています。
-
マクロな部分。pwn.college → nightmareというルート
- 日本ではメジャーではないが海外でメジャーだった情報をAIでキャッチアップできました。
-
ミクロな部分。「アライメントが揃っていなくて発火しない」みたいな、詰まったときの原因の切り分け
- まず知識がない状態では仮説を立てられず、どうしたらいいかわからなくなります。それに対して助言を貰えるのは大きく、時間を短縮できただけでなく、わからないまま投げ出さずに済みました。
単に速いだけではなく、write-upを読みながら「なぜこの方法を使うのか」「なぜこのやり方じゃダメなのか」を都度聞けるので、以前なら「動いたからヨシ」で流していたであろう部分まで理解して進めました。速度と深さのどちらも、AIを使うことで大きく引き上げられたと感じています。
低レイヤーやpwnに少しでも興味がある人がいたら、ぜひ気負わずpwn.collegeから触ってみてほしいです。
最初の1ヶ月は正直地味ですが、その先はどんどん理解が楽しくなると思います。