【入門編】 Living off the Land (LotL) 攻撃の検知:PowerShellの難読化解除と実行ログ分析 – インシデントレスポンス & フォレンジック(DFIR)防御ガイド

こんにちは!日々の開発やインフラの保守、本当にお疲れ様です。

いきなりですが、皆さんのご自宅の防犯について少し想像してみてください。泥棒が入ってきたとき、もし彼らが「あなたのお家にもともと備え付けられている合鍵」や「庭にあるスコップ」を使って侵入し、金品を持ち去ったとしたらどうでしょう? 見知らぬ工具を使われるよりも、なんだかゾッとしますよね。

実は、最近のサイバー攻撃の世界でも、これとまったく同じことが起きているんです。
攻撃者は、自分たちの専用の危ないツールを持ち込まず、Windowsに最初から入っている正当な管理ツールを悪用して侵入・破壊活動を行います。 これを「Living off the Land(ロットル / 土地の恵みを使って暮らす)」、略してLotL攻撃と呼びます。

今回は、そのLotL攻撃の代表格である「PowerShell(パワーシェル)」に焦点を当て、攻撃者がどのように私たちを欺こうとするのか、そして現場のセキュリティ担当者がどうやってその尻尾を掴むのかを、一緒に優しく紐解いていきましょう!

—

1. なぜPowerShellが狙われるのか?(LotL攻撃の恐ろしさ)

PowerShellは、Windowsのシステム管理者が日々の面倒な作業を自動化するために使う、いわば「万能な魔法の杖」のような超便利ツールです。Windowsに標準で入っているので、インストールする手間もありません。

しかし、この「便利さ」は、攻撃者にとっても非常に都合が良いものなんです。

セキュリティソフト(ウイルス対策ソフト)は、通常「いかにも怪しい見知らぬウイルス」を見つけて退治するのが得意です。しかし、PowerShellのような「Windows公式の正当なツール」が動いているとき、セキュリティソフトは「あ、管理者がお仕事をしているんだな」と見過ごしてしまいがちになります。

攻撃者はこの盲点を突き、PowerShellを使ってこっそり悪事を働きます。これがLotL攻撃の正体です。

—

2. 攻撃者の常套手段:言葉を隠す「難読化(なんどくか)」

攻撃者もバカではありません。そのままの分かりやすい命令(コマンド)をPowerShellに入力すると、すぐにログに残って見つかってしまいます。

そこで彼らは、人間には読めないように文字をぐちゃぐちゃに混ぜ合わせる「難読化」というテクニックを使います。

例えば、家に入るときに「玄関の鍵を開けてください」と堂々とメモを貼るバカはいませんよね。「あかさたな…」と別の暗号に置き換えて、玄関の前で自分たちで解読しながら入るようなものです。

PowerShellの悪意あるコマンドは、よくこんな見た目になっています(※イメージです)。

# 攻撃者が使うような、文字がぐちゃぐちゃに難読化されたコードの例
$s = New-Object IO.MemoryStream([Convert]::FromBase64String("VwByAGkAdABlAC0ASABvAHMAdAA=")); IEX (New-Object IO.StreamReader($s)).ReadToEnd()

これ、パッと見ても何をしているかさっぱり分かりませんよね。「Base64」という暗号のような形式で文字が隠されています。これを現場の私たちはどうやって暴けばいいのでしょうか?

—

3. 解決の鍵:Windowsの「防犯カメラ」をフル活用する

幸いなことに、Windowsには、こうして隠されたコマンドの「正体」を暴くための強力な機能が備わっています。それが、Script Block Logging(スクリプト・ブロック・ロギング) と Module Logging(モジュール・ロギング) です。

通常のPowerShellのログは、「PowerShellが起動しました」という大まかなことしか記録してくれません。これでは玄関を通ったことしか分からず、家の中で何をしたかが見えない状態です。

しかし、先ほどの防犯機能を有効にすると、「難読化されてどんなにぐちゃぐちゃに隠されたコマンドであっても、最終的にWindowsが実行する直前の『裸の姿(解読後)』の状態でログに記録」してくれるのです!

これはフォレンジック(鑑識・調査)の現場において、最強の武器になります。

実際に防犯カメラ(ログ設定)を有効にする方法

企業や組織のPC環境では、グループポリシー(GPO)などを使って、このログ機能を有効化します。設定の場所は以下のパスになります。

  • 設定場所の目安:

コンピューターの構成 > 管理用テンプレート > Windows コンポーネント > Windows PowerShell

ここで、以下の2つの項目を「有効(Enabled)」に設定します。

1. PowerShell スクリプト ブロックのログ記録を有効にする (Turn on PowerShell Script Block Logging)

  • これが、実行されたスクリプトの中身を丸裸にして記録してくれる設定です。

2. PowerShell モジュールのログ記録を有効にする (Turn on PowerShell Module Logging)

  • 特定の機能(モジュール)がどのように使われたかを細かく追うための設定です。

—

4. SOCアナリストが現場で使う「ログ解析」のリアル

設定を有効にすると、Windowsのイベントビューア(またはSIEMというログ収集システム)に、Event ID: 4104 というイベントがたくさん記録されるようになります。

ここには、先ほどのような難読化されたコマンドが、どのように解読されて実行されたのかの全貌が残されます。

例えば、インシデント調査の現場では、次のようなスクリプト(PythonやPowerShellを使った解析スクリプトの一例)を書いて、怪しいログからキーワードを抽出したりします。

# 【実務参考用】イベントログから怪しいPowerShellの実行痕跡を探すための擬似コード
import json

def analyze_powershell_log(log_entry):
    """
    Event ID 4104 (Script Block Logging) のデータを解析し、
    危険なキーワード(ダウンロードや難読化の痕跡)が含まれていないかチェックする関数
    """
    # スクリプトブロックの中身を取得
    script_content = log_entry.get("ScriptBlockText", "")
    
    # 攻撃者がよく使う怪しいキーワードのリスト
    suspicious_keywords = [
        "FromBase64String", # 難読化された文字列の復元によく使われる
        "IEX",              # 読み込んだ文字列をそのまま実行するコマンド (Invoke-Expressionの略)
        "DownloadString",   # 外部から悪意あるファイルをダウンロードする
        "Bypass"            # セキュリティ制限をすり抜ける
    ]
    
    # キーワードが含まれているかチェック
    detected_items = [kw for kw in suspicious_keywords if kw in script_content]
    
    if detected_items:
        print(f"[!] 警告: 怪しいPowerShellの実行を検知しました!検知キーワード: {detected_items}")
        print(f"--- 該当スクリプトの抜粋 ---\n{script_content[:300]}...\n--------------------------")
    else:
        print("[+] 正常な操作と判断します。")

# テスト用のダミーログデータ
sample_log = {
    "EventID": 4104,
    "ScriptBlockText": "IEX ([System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('...'))) "
}

# 解析を実行してみる
analyze_powershell_log(sample_log)

現場のアナリストは、こうしたログを日々見つめながら、「おっ、この文字列はBase64で隠されているな」「外部から何か変なファイルを引っ張ろうとしてるぞ」と、パズルを解くように攻撃者の足跡を追っていくのです。

—

一歩ずつ、確実に対策を学んでいきましょう!

「ログの設定」や「難読化の解除」と聞くと、なんだかすごく難しそうに感じるかもしれません。でも、基本の考え方は身の回りの防犯と同じです。

1. 「普段使っている便利な道具(PowerShell)も、悪用されるリスクがある」と知ること
2. 「見えないように隠されても、正体を暴くための防犯カメラ(Script Block Logging)をしっかり回しておくこと」

この2つを意識するだけで、セキュリティに対する視点がガラリと変わり、あなたも立派なサイバー防衛の担い手になります。

難解なサイバー攻撃のニュースを見ると不安になるかもしれませんが、基本の仕組みを一つずつ、焦らずに理解していけば必ず対策は見えてきます。一緒に一歩ずつ、安全なデジタル社会を作っていきましょう!

コメント

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