ホームサーバーを運用するうえで一番重要だったのはセキュリティだった。
いくらウェブサイトの機能を気に入るように構築しても、四方八方から飛んでくるハッキングに一度やられてしまうと無用の長物になってしまった。
前回ハッキングで3日間抜かれていたときは本当に怖かった。
そこでハッキングについて勉強してみることにした。
YouTubeで해킹 맛보기という本がバイブルのような本だと言われていて、買ってみたのだが…
出版日が2015年だということを見落としていた。

結局本は届き、本を開いてみると、Internet Explorer、旧式のChrome、httpと書かれたURLを見て何かがおかしいと気づいた。
ムーアの法則で半導体の集積度が2の指数関数的に増加するので、10年前というのは100〜300年前の本と同じだ。
重力を勉強すると言ってニュートンの著書『プリンキピア』を読むようなものだ。
しかしもう遅かった。
とりあえずできるだけ早く読み進めて、流れだけ把握することで満足するしかなさそうだった。

1. 内容を見てみる
第1章) 맛보기(味見)
1章の「味見」の内容は、今となってはあまりに古く、ほとんど当てはまらないものが多い。
それでも学べることはある。
著者が紹介しているハッキングサイトWechallは今では古くなっており、TryHackMe、Hack The Boxのようなサイトの方がシェアが高いそうだ。
項目 | WeChall | TryHackMe | Hack The Box |
|---|---|---|---|
主な用途 | 各種ウォーゲームのランキング・リンク集 | 初〜中級向けのセキュリティ実習+学習 | 実戦的ペネトレーションテスト+上級演習 |
ユーザー数 | (公式公開なし) | 約450万ユーザー | 非常に活発、業界でも人気 |
学習構造 | 主に外部ウォーゲームへのリンク集 | 段階別学習コース+CTF | 実システムのハッキング演習が中心 |
主な関心層 | ウォーゲーム愛好家、スコア競争 | 初級〜中級のセキュリティ学習者 | 中級〜専門家および実戦準備者 |
また、2drunk2hackというイベントもなくなっており、Parosのようなハッキングツールも今ではレガシーだそうだ。
それでも本を読みながら、ハッキングツールというものが別に存在するという事実は知ることができた。
レガシーな機能は身につける必要はないので、こういうのがあったんだなくらいで流してしまえばよい。
項目 | Paros | Burp | ZAP | mitmproxy |
|---|---|---|---|---|
メンテナンス | ❌ 中止 | ✅ 活発 | ✅ 活発 | ✅ 活発 |
最新HTTPS対応 | ❌ | ✅ | ✅ | ✅ |
実務利用 | ❌ | ✅ 圧倒的 | △ | △ |
自動化 | ❌ | △ | △ | ✅ |
無料 | ✅ | ❌(Pro) | ✅ | ✅ |
YouTubeで現在購読中のNomaltic Placeという方は、OverTheWireのようなウォーゲームサイトも紹介してくれている。
この本の1章よりは、下記の内容の方が少し役に立ちそうだ。
第2章)ウェブハッキング
ウェブハッキングでは、php・mysqlのインストールから始まり、検索を利用した脆弱性探索、ファイルアップロード、クロスサイト、クエリインジェクションを簡単に扱っている。
Googleハッキングの部分が少し面白くて、下のようにサイト運営者のミスで露出した脆弱性を検索を通じて探すものだ。
目的 | 検索例 |
|---|---|
露出したバックアップファイル |
|
環境変数の露出 |
|
ディレクトリリスティング |
|
ログファイル |
|
設定ファイル |
|
カメラ |
|
管理者ページ |
|
アップロード画像を利用したハッキング方法もあった。
画像タグに<img src="/board/file/shell.php>のように注入してshellを実行するというものだ。
以前ホームサーバーで画像プロキシAPIを公開しておいたら、誰かが画像タグの中にonerror={}を仕込んで、ここにfetch関数とコマンドを使ってファイルをダウンロードして実行しようとしたものの、管理者権限を取得できず失敗しているのを見たことがある。

また、Web Shellの作成に関する内容もあった。
筆者はC99を紹介しているが、今では昔話だ。
今は軽量・暗号化シェルがより多く使われているという。
時期 | 主流Webシェル | 特徴 |
|---|---|---|
2000年代〜2010年代 | C99, R57, WSO | 機能重視、PHPベース、大きくて目立つ |
2020年代前半 | China Chopperの亜種 | 軽量+秘匿+暗号化 |
最近(2024〜2025) | Beima PHP Webshellタイプおよびカスタム/暗号化型シェル | JSONインターフェース、暗号化リクエスト、C2連携 |
クエリインジェクションは以前から知っていた内容だったが、本を読みながらより詳しく知ることができた。
重要な点は、ユーザーの入力を信用してはいけないということだ。
必ず検証プロセスを経てバックエンドに入るように作らなければならない。
第3章)リバースエンジニアリング
リバースエンジニアリングとは、既存のプログラムを再度分解することを意味する。
平たく言えば、Pythonで開発した後にpyinstallerでコンパイルされたexeファイルを、再び.pyに戻してしまうプロセスだと思えばよい。
著者はVisual Studio Express、OllyDbgを紹介している。
最新のリバース系ツールを整理してみた。
ツール | 主な用途 | 特徴 | プラットフォーム |
|---|---|---|---|
Ghidra | 静的解析+デコンパイル | 強力なオープンソースフレームワーク、デコンパイル対応、NSA開発 | Windows / Linux / macOS |
Radare2 | 静的解析(コマンド/スクリプト) | 完全無料のオープンソース、CLI中心、多様なバイナリ対応 | Windows / Linux / macOS など |
x64dbg | 動的デバッグ | Windows向け32/64ビットデバッガ、GUI提供、人気が高い | Windows |
Frida | ランタイム動的解析 | アプリ/バイナリ実行中のフック・トレースが可能、モバイル解析に強み | Windows / Linux / macOS / モバイル |
リバースの過程では電卓をたたくことが多いと言われるが、今はCursorのような自動化アプリに投げてしまえば終わりだ。
ただし難読化のような部分が入ると、人間による解釈が依然として必要になる。
以下のような部分はAIが解釈するのは簡単ではないと言われている。
領域 | 理由 |
|---|---|
ロジックバグ | 意図の問題 |
境界条件 | 設計上の判断 |
セキュリティ/リバース | 文脈依存 |
異常値 | 直感が必要 |
そしてコンピュータアーキテクチャとアセンブリ言語の部分が本当にやばかった。
CPUの構造は以前習って知ってはいたが、変数が格納される場所、数値を計算する場所、文字列が入る場所がすべて違うというのは初めて知った。
アセンブリ言語で16進数に変換された加算、条件文、ループ文などを見ると目が回った。

その後にはOllyDbgを使った実際のリバース実習の部分が出てくる。
どうせ使わないプログラムなので、すぐに4章へ飛ばした。
第4章)システムハッキング
システムハッキングは、OSハッキングと同じ意味だ。
Pythonのインストールのような部分もあるが、主に脆弱性を扱ってみる。
(1) コマンドインジェクション脆弱性
コマンドインジェクション方式は、開発者がユーザーの入力を信頼してしまうことで発生しうる。
例えば次のようなコードがあるとしよう。
system("ping " + user_input);このときユーザーが; rm -rf /と入力してしまえば、開発者の意図しないコマンドが実行されることになる。
ユーザーからの入力を受けるときは、必ず検証プロセスが必要だ。
(2) レースコンディション攻撃
レースコンディション攻撃は、マルチスレッド、または多重リクエスト環境で、共有リソースの状態確認と使用の間に生じる時間差を狙う。
リソースを確認してから使用するまでの間に順序が狂ってしまう状況を悪用するのだ。
問題はこのタイミングをどうつかむかである。
そこで攻撃者はリクエストを高速に、同時に、大量に送り込み、実行の隙間を突いてくる。

例えば遊園地に、次のような順序で入場するとしてみよう。
スタッフが入場者のチケットを確認 → ドアを開ける → チケット確認済みの人が入場 → ドアを閉めるこのとき、先に来たAがチケット確認を受けたのに、開いたドアから後から来たBが入ってしまったとしたら、これはレースコンディション攻撃だ。
これを防ぐには、次のような設計が必要になる。
1. 共有状態を減らす
2. 原子性を保証する → チェック+入場を同時に処理する
3. 共有リソースに触る部分をLockで囲み、一度に一つのリクエストだけ処理する
4. DB/ストレージに任せる
5. 一時/共有ファイルを安全に扱う
6. 再試行/冪等性設計 → 同一リクエストは一度だけ処理する(3) メモリ破壊攻撃
バッファオーバーフロー攻撃について、もう少し細かく理解することができた。
以前Cの配列を習いながらオーバーフローについて学んだことがあったので、少しは楽だった。
下のような状況で、ユーザー入力が長くなると隣接メモリが侵されることになる。
char arr[3];
scanf("%s", arr);第5章)バグハンティング
バグの中でも問題を引き起こしうるバグをセキュリティ脆弱性という。
攻撃者はこのような脆弱性を利用して権限を取得したり、ユーザーを攻撃したりできる。
(1) 脆弱性の発見
脆弱性を見つける方法は様々だ。
ソースコード監査 - コードそのものを一つ一つ解析しながら脆弱性を探す
バイナリ監査 - ソフトウェアのソースがないとき、やむを得ずコンパイル済みバイナリを解析する
ファジング - ソフトウェアの入力値を自動生成して入力し、その結果から脆弱性を探索する
(2) 脆弱性の種類
メモリ破壊 - スタックオーバーフロー、ヒープオーバーフロー、ヌルポインタ参照、解放後使用
設計 - セキュリティ面を完全には考慮しきれていないロジック
(3) ウェブでのバグハンティング
本ではXpressEngine(제로보드 XE)のリモートコード実行を記述しているが、あまりに古い内容なので、最近話題になったReact2Shellについて調べることにした。
最近あった中で最大級の脆弱性で、リモートでshellとコマンド実行が可能なセキュリティホールだ。
問題は、APIが一切ないnpx create-next-appで作成したアプリに対しても攻撃が可能だということだ。
攻撃方法については、Githubユーザーzr0nが実装している。
また、AhnLabに行くと脆弱性の原因と攻撃方法が詳しく分析されている。
核心だけ言えば、次のような内容だ。
Flight ストリームで参照/レコードを解釈する過程の一部が Promise resolution(thenable の取り込み)を経由するが、攻撃者は : パス代入における __proto__ 検証の甘さを突いてプロトタイプを汚染する。その結果、_response._formData.get のようなメソッドが Function にすり替わると、その後の正常なコードパス上で get(...) 呼び出しが文字列実行に変質する。thenable は、この変質したパスが自動的に実行されるようトリガーの役割を果たす。
最も重要なプロセスは、__proto__というマジックプロパティを利用してプロトタイプを汚染することだ。
このような攻撃手法をプロトタイプ汚染(Prototype Pollution)という。
(4) さまざまな環境でのバグハンティング
その後の内容では、Androidでの権限昇格バグ、WindowsでのGOM Player、Hangul(ハングルワープロ)のリモートコード実行などを扱っている。
第6章)デジタルフォレンジック
デジタルデータの特性、証拠能力を担保するための要件、証拠の種類などを扱っている。
本自体が古いこともあり、まだデジタルフォレンジックにはそれほど興味がないので、ざっと目を通して終わりにした。
第7章)脆弱性マーケット
脆弱性マーケットとしてブラックマーケットを紹介しているが、今ではほとんど追跡不可能だそうだ。
ブラックマーケットの使い方は不要なので、下の表で代替する。
区分 | 状態 |
|---|---|
公開ブラックマーケット | ❌ ほぼ消滅 |
ダークウェブフォーラム | ⚠️ 縮小・偽装 |
メッセンジャー基盤の非公開取引 | ✅ 活発 |
ランサムウェア生態系 | ✅ 非常に活発 |
バグバウンティ | ✅ 合法ルート |
国家/情報機関のグレー市場 | ✅ 高額取引 |
2. 読書後記
本を読みながら、ハッキングの基本的な概念をつかむことができた。
ハッキングとはセキュリティ脆弱性を探すプロセスであり、このプロセスは家の防犯を考えるプロセスと同じだ。
誰がどこから侵入できるのか、どうやって入ってきて、その権限をどうやって取得するのかを見ればよい。
それなりに面白くて、これからもハッキングについて継続的に勉強していきたいと思った。
昔はコーディングに関する情報を得るのが難しかったが、今はAIやウェブを通じて誰でも簡単にアクセスできる内容になった。
そして10年という時間は、開発の世界ではものすごく長い時間なのだと思う。
本で扱われている内容の中には、今では消えてしまったものがあまりにも多い。
ハッキングについて詳しく知りたいなら、今は別の本を買うかウェブを利用する必要がありそうだ。

댓글을 불러오는 중...