ハッキングの華麗な手法図鑑① 〜枠から文字を溢れさせて操るバッファオーバーフロー、1億人で店に突撃するDDoS攻撃〜
1. 素朴な疑問:ハッカーって、映画みたいに「パスワード当て」をしてるの?
ハリウッド映画に出てくるハッカーは、ターゲットのパソコンの前に座り、緑色の英数字が滝のように流れる画面を猛スピードでタイピングします。 そして残り時間「00:01」の瞬間に「よし、侵入成功だ!」と叫びます。
これを見ていると、多くの人がこう信じ込んでしまいます。 「ハッキングって、複雑な暗号を天才的な頭脳で解読したり、特殊なツールでパスワードを総当たり(ブルートフォース)で当てたりする作業なんでしょ?」
結論から言いましょう。現実のハッカーは、そんな面倒なことはほとんどしません。 第6話や第15話で学んだとおり、現代の暗号(AESやRSA)は、宇宙が終わるまでスーパーコンピュータを回し続けても解けないほど数学的に頑丈です。正面から暗号を破ろうとするハッカーはいません。
では、世界最強の国家機関や大企業がハッキングされるのはなぜでしょうか? ハッカーが狙うのは、強固な暗号の扉ではなく、**「人間(開発者)がうっかり作り忘れた、建物の裏口の小さな段差(メモリや通信ルールの不備)」**です。 その中でも、コンピュータの歴史上「最も美しく、最も凶悪」と呼ばれた2大技術を解剖しましょう。
2. 概念の芯:伝説のハック「バッファオーバーフロー(溢れさせて操る)」
ハッキングの歴史の中で、数千億円規模の被害を出し、今もなお対策が続いている伝説の脆弱性。 それが**「バッファオーバーフロー(Buffer Overflow / バッファ溢れ)」**です。
これは暗号を破る技術ではありません。 **「コンピュータのメモリ(作業机)の仕組みを逆手に取り、相手のパソコンに自分の書いたプログラムを無理やり実行させる知能パズル」**です。
アンケート用紙の「名前欄」に仕掛けられた罠
役所の受付で、「お名前をこの枠の中に書いてください」とアンケート用紙を渡された場面を想像してください。 この用紙の裏側には、事務員への**「次の指示(戻り先)」**があらかじめ印刷されています。
[ お名前:____________ ](※10文字分の枠)
--------------------------------------------------
【事務員への業務指示】:名前を確認したら、次は「201号室の窓口」へ案内せよ。
普通の人は、枠の中に「田中洋平」と書きます。 事務員は名前を確認し、指示通りにあなたを「201号室」へ案内します。何の問題もありません。
ところが、ここに悪意あるハッカーがやってきました。 ハッカーは、10文字しか入らない枠を完全に無視して、**枠を大きくはみ出す「500文字の異常に長い文章」**を強引に書き殴りました。
紙からはみ出た文字は、なんと下の欄に印刷されていた**「事務員への業務指示(戻り先)」の文字を真っ黒に塗りつぶし、上から勝手に書き換えてしまった**のです!
事務員(CPU)は、相手がハッカーだとは微塵も疑いません。 「えーと、名前欄……うわっ、文字が溢れてるな。まあいいや、次の指示を読もう。『次はハッカーの秘密基地へ行け』……よし、指示通りにそこへ行こう!」
こうしてCPUは、正規のプログラムに戻るはずだった予定を狂わされ、ハッカーが用紙にこっそり書き込んでおいた「不正な命令コード(シェルコード)」をそのまま実行してしまうのです。
3. 本題:なぜ防げない? C言語の「人間を信じすぎた性善説」
「そんなの、10文字の枠からはみ出そうになったら『長すぎます!』とエラーを出して止めればいいじゃないか!」と思いますよね。 現代のプログラミング言語(PythonやJava、Rustなど)は、最初からその安全装置が組み込まれています。
しかし、第6話で学んだOS(WindowsやLinux、macOS)の心臓部や、工場の制御システム、家電製品のプログラムは、半世紀前(1970年代)に作られた**「C言語」**という極限までスピードを追求する言語で書かれています。
スピードのために「安全確認」をサボった悲劇
C言語が作られた時代、コンピュータの性能は極めて低く、メモリもカツカツでした。 技術者たちは、1ミリ秒でも速く動かすために、こう考えたのです。
「文字数を入力するたびに、いちいち『枠のサイズを超えていないか?』をチェックしていたら、計算が遅くなってしまう。プログラマーは賢いんだから、わざわざ枠を超えるような文字数を流し込むバカなコードは書かないはずだ。チェックは省いて、そのままメモリに流し込もう!」
この**「人間への過信(性善説)」**が、後世に最悪の爪痕を残しました。 プログラマーがうっかり「文字数のチェック」を1行書き忘れたプログラムを公開した瞬間、世界中のハッカーが「文字の洪水」を流し込み、サーバーの管理者権限を一瞬で奪い取っていったのです。
現在では、メモリに「カナリア(Canary / 毒見役の目印)」を埋め込んで改ざんを検知したり、OSが「データの枠ではプログラムの実行を禁止する(DEP / NXビット)」といった幾重もの防壁が築かれていますが、プログラムが巨大化し続ける現代でも、この「溢れさせるパズル」との戦いは終わっていません。
4. 力ずくの暴力:「DoS攻撃」と「DDoS攻撃(1億人の突撃)」
バッファオーバーフローが「針の穴を通すような知能犯の技術」なら、もう1つの巨頭は**「純粋な物量による暴力」です。 それが「DoS(ドス / サービス妨害)攻撃」と「DDoS(ディー・ドス / 分散型サービス妨害)攻撃」**です。
この攻撃の目的は、データの盗難でも改ざんでもありません。 **「そのWebサイトやサービスを、パンクさせて完全に停止させること(営業妨害)」**です。
居酒屋を潰す「最悪の迷惑客」
人気ラーメン店を想像してください。 悪いヤツが1人で店に入ってきて、ラーメンも頼まずに「すいません! お冷ください! メニュー見せてください! トイレどこですか!」と1秒に100回怒鳴り散らしたらどうなるでしょうか? 店員はその迷惑客の対応に追われ、他のお客さんにラーメンを出せなくなります。これが単独犯による**「DoS攻撃」**です。
しかし、店員もバカではありません。「あいつは迷惑客だ!」と特定したら、警察を呼んでつまみ出せば(そのIPアドレスを着信拒否すれば)解決します。
そこでハッカーは、**「DDoS攻撃(分散型)」**へと進化させました。
なぜ防ぐのが絶望的なのか?
ハッカーは自分1人で攻撃しません。あらかじめ世界中の「パスワードが初期設定のまま放置された監視カメラ」や「ウイルスに感染した一般人のパソコン」を何百万台も乗っ取り、遠隔操作できるゾンビ軍団(ボットネット)を裏で作っておきます。
そして号令ひとつで、世界中に散らばる100万台のゾンビ機器から、ターゲットの会社へ一斉にアクセスを集中させるのです。
防御する側のサーバーから見ると、これは悲劇です。 なぜなら、送られてくるデータ自体は「普通のWebアクセス」とまったく同じだからです。 「100万人のうち、誰が本物のお客さんで、誰がゾンビ機器なのか」を通信の段階で見分けることは神様でも不可能です。 すべてのアクセスを遮断すれば自分の商売が終わるし、受け入れればサーバーが熱暴走して死ぬ。この「防ぎようのない理不尽さ」こそが、DDoS攻撃の真の恐怖です。
5. 仕組みの種明かし:几帳面さを逆手に取る「SYN Flood攻撃」
DDoS攻撃の中でも、第11話を読んだあなたなら**「うわっ、その手があったか!」と膝を打つ極悪な手法があります。 それが、TCPの「几帳面さ」を悪用した「SYN Flood(シン・フラッド)攻撃」**です。
第11話で、TCP通信を始めるときは必ず「3ウェイハンドシェイク」という3往復の挨拶をすると学びましたよね。
- クライアント:「もしもし、通信していいですか?(SYN)」
- サーバー:「いいですよ、聞こえますか?(SYN+ACK)」
- クライアント:「はい、聞こえてます!(ACK)」
サーバーは「1」のSYNを受け取った瞬間、相手からの最後の返事「3」が来るのを待つために、手元の作業机(メモリ)に「保留用の椅子(接続待ち枠)」を用意して相手を待ちます。
ハッカーはこの仕組みを悪用します。 差出人の住所(IPアドレス)を架空のデタラメに偽装した上で、サーバーに向けて1秒間に数万回もの「もしもし!(SYN)」だけを猛連打して送りつけ、最後の「はい!(ACK)」を絶対に返さずにバックレるのです。
サーバーは律儀で几帳面なため、「あれ? 返事が来ないな……もう少し待ってみよう」と、何万個もの「保留用の椅子」をメモリ上に確保し続けます。 あっという間にサーバーの作業机(メモリ)は返事待ちのゴミデータで埋め尽くされ、本物の一般客が「もしもし」とアクセスしてきたときには、「もう席がいっぱいです!」と弾かれてしまうのです。 几帳面で真面目なプロトコルの性質そのものが、凶悪な武器へと裏返された瞬間です。
触って試す:ポートの応答体験
🔍 ポートの応答体験(防御側の視点で)
攻撃者は侵入の前に、まず「どのポートが開いているか」を調べます(ポートスキャン)。サーバーのポートは設定によって開いている/閉じている/ファイアウォールで無応答の3状態があり、SYNを送ったときの返し方がまったく違います。状態を選んでから「SYNを送る」を押してください。第11話の3ウェイハンドシェイクと、この後のSYN Floodの話がつながります。
まずはポートの状態を選んでください(初期状態は「開いている」です)。
6. 現実世界のドラマ:世界を麻痺させた監視カメラ軍団「Mirai」
このDDoS攻撃が、世界の歴史を物理的に塗り替えた事件が2016年に起きました。 それが、ウイルス**「Mirai(ミライ)」**による大事件です。
当時、世界中で急速に普及し始めていた「安価な家庭用Wi-Fi監視カメラ」や「ルーター」。
多くのユーザーは、工場出荷時の初期パスワード(ユーザー名「admin」、パスワード「123456」など)を一度も変更せずにそのままネットに繋ぎっぱなしにしていました。
Miraiを作ったハッカーたちは、ネット上をクローラーで自動探索し、初期パスワードのまま放置されている世界中のカメラやルーターを**数十万台もハッキングしてゾンビ化(ボットネット化)**させました。
2016年10月21日、この数十万台の監視カメラ軍団から、アメリカの主要DNSサービスに向けて、毎秒1テラビットを超える史上最大規模のデータが一斉に撃ち込まれました。 その結果、DNSサーバーがノックアウトされ、**Twitter、Netflix、Spotify、GitHub、Amazonといった名だたる世界最高峰のサービスが、アメリカ全土で半日間にわたって一斉に消滅(アクセス不能)**したのです。
国家の最高機密を盗むためではなく、安物カメラの初期設定の甘さという「人間のちょっとした油断」が組み合わさるだけで、地球半分のインターネットが物理的に止められてしまう。 ハッキングとは、SF映画のような魔法ではなく、私たちが日常で作った「ちょっとした隙」を突く、極めて現実的で冷酷な力学なのです。
📝 3行で頭に入る「試験・実務の要点まとめ」
- バッファオーバーフロー攻撃:入力データの長さを適切に検証しない脆弱性を突き、メモリのスタック領域等にある**リターンアドレス(戻り番地)**を悪意あるコードの配置番地へ上書きして不正実行させる攻撃。C言語等のポインタを直接扱うシステムで多発する。
- DoS/DDoS攻撃(サービス妨害):標的サーバーに過大なトラフィックや不完全なリクエストを送りつけ、処理能力や帯域を枯渇させて正当なサービス提供を妨害する攻撃。多数のゾンビマシン(ボットネット)から一斉に行うものをDDoSと呼ぶ。
- SYN Flood攻撃:TCPの3ウェイハンドシェイクを悪用し、送信元IPを偽装したSYNパケットを大量に送出。サーバー側の接続待ちキュー(SYN_RECEIVED状態)を満杯にさせて新規接続を不能にする代表的なDoS手法。