【入門編】 メモリ上のコードインジェクション手法(Process Hollowing)の検知 – インシデントレスポンス & フォレンジック(DFIR)防御ガイド

こんにちは!セキュリティの現場で日々、見えない敵と戦っているSOCアナリストです。

今日は、ハッカーたちが好んで使う少しずる賢いテクニック「Process Hollowing(プロセス・ハロウィング)」について、お話ししようと思います。

名前だけ聞くと難しそうですよね。でも、身近な例え話で考えると、その「悪意」の正体がとてもクリアに見えてくるはずです。一緒に紐解いていきましょう!

—

1. Process Hollowingって何?「泥棒のすり替わり」作戦

想像してみてください。あなたは自分の家の玄関に「信頼できる宅配業者さん」を入れました。ところが、その業者が家に入った瞬間、姿を消し、中身が「泥棒」に入れ替わっていたらどうでしょう?

これがコンピュータの世界で行われる「Process Hollowing」です。

1. 正規のプロセスを起動: まず、Windowsの計算機(calc.exe)など、誰もが怪しまない「信頼できるプログラム」をわざと起動させます。
2. 中身を空っぽにする: 攻撃者はそのプログラムのメモリ領域を一時停止させ、中身を抜き取って「空っぽ」の状態にします。
3. 悪意あるコードを注入: その「空っぽの箱」の中に、自分たちが用意した「悪意あるプログラム(バックドアなど)」を流し込みます。
4. 再開: 何食わぬ顔でプログラムを再開させます。

外から見れば「ただの計算機が動いているだけ」に見えるため、ウイルス対策ソフトも騙されやすい……これが彼らの狙いです。

—

2. なぜバレるのか?「VAD属性」というボロ

彼らがどんなに巧妙に振る舞っても、一つだけ隠せない「ボロ」があります。それがVAD(Virtual Address Descriptor)の不整合です。

VADというのは、Windowsが「このプログラムのメモリのこの場所は、何のために使っているのか(読み込み専用なのか、実行可能なのか)」を管理している「お品書き」のようなものです。

本来、計算機のようなプログラムのメモリには、明確なルールがあります。しかし、攻撃者が無理やりコードをねじ込むと、このお品書きに「おや? 本来あるはずのない『実行権限』が、書き換え可能な領域についているぞ?」という矛盾が生じます。

これが、僕たちフォレンジックのプロが真っ先にチェックする「足跡」になるんです。

—

3. 実践:メモリ上の不整合を検知するヒント

もし皆さんがサーバや端末のメモリを調査するなら、Volatiltyというツールを使うのが一般的です。ここでは、そんな調査の勘所を少しだけコード(Python風の概念図)で紹介しますね。

# メモリフォレンジックにおけるVAD検査のイメージ
# 実際にはVolatilityなどのツールを使いますが、概念はこんな感じです

def check_vad_integrity(process_memory_map):
    for entry in process_memory_map:
        # 1. 領域の属性を確認
        # PAGE_EXECUTE_READWRITE (0x40) は要注意!
        # 通常のプログラムで「書き込み」と「実行」が同時に許可されることは稀です
        if entry.protection == "PAGE_EXECUTE_READWRITE":
            print(f"[!] 警告: 不審な実行権限を発見: {entry.address}")
            
        # 2. ファイル名との照合
        # メモリ上のコードなのに、ディスク上のファイルと紐付いていない領域がないか確認
        if entry.is_mapped_file == False and entry.is_executable == True:
            print(f"[!] 警告: ファイルに紐付かない実行領域を発見。ハロウィングの可能性大!")

# これを検知することで、隠れた泥棒を見つけることができます。

なぜこれが重要なの?

もし皆さんが開発者なら、自社アプリケーションが「なぜそんなに広いメモリ権限を要求しているのか?」を意識してみてください。例えば、JavaScriptのeval()関数のように、動的にコードを実行する仕組みは便利ですが、これこそが「悪意あるコードを後から注入できる隙」にもなり得るのです。

—

4. 最後に:セキュリティは「疑う」ことから始まる

Process Hollowingのような高度な攻撃は、一見すると防ぎようがないように思えるかもしれません。でも、忘れないでください。「攻撃者は必ず、何らかの痕跡を残す」ということを。

  • プログラムの挙動を監視する: 突然、計算機が外部と通信し始めたら怪しいと思いませんか?
  • ログを溜める: 異常なプロセス起動の履歴は、後から必ず役に立ちます。

最初は難しく感じるかもしれませんが、「このプログラムは、本当にこの動作をしていいんだっけ?」と一歩立ち止まって考える習慣こそが、最強の防御の第一歩になります。

もし皆さんの環境で「何か怪しい挙動があるな」と感じたら、ぜひこの記事のチェックポイントを思い出してみてください。現場の第一線で戦う皆さんの力になれたら嬉しいです。

それでは、また次回のセキュリティ・ラボでお会いしましょう!

コメント

タイトルとURLをコピーしました