
CVE-2025-54918(Windows NTLM脆弱性)のシミュレートされた悪用と緩和策。検出スクリプト、Ansibleパッチ、CI/CD強化を含む。ハイブリッドクラウド環境における低レベルアクセスからSYSTEMへの権限昇格を実演。
CVE-2025-54918(Windows NTLM の欠陥)のシミュレーションされた悪用と緩和策。検出スクリプト、Ansible パッチ適用、CI/CD 強化が含まれます。ハイブリッドクラウド環境における低レベルアクセスから SYSTEM への権限昇格を示します。
Mark Mallia 著
今日のハイブリッドクラウド環境では、ユーザーの操作とシステム侵害の境界線はかつてないほど曖昧になっています。この記事では、一見無害に見えるグラフィックスの欠陥 CVE-2025-55226(Windows グラフィックスカーネルの競合状態)から始まり、CVE-2025-54918(重大な NTLM 認証バイパス)を介して完全な SYSTEM レベルの制御に至る、現実世界の攻撃チェーンを探ります。
これらの脆弱性は、攻撃者がリモートコード実行から権限昇格へとわずか数ステップでどのようにピボットできるかを示しています。しかし、それ以上に重要なのは、シニア DevOps エンジニアが自動化、CI/CD 統合、および Infrastructure-as-Code を使用して、そのような脅威をどのように検出、緩和、監視できるかを示している点です。
公開日: 2025年9月16日 (Patch Tuesday)
マイクロソフトの最新のセキュリティアドバイザリは、Windows のデスクトップ版とサーバー版の両方で使用されるコアグラフィックスカーネルである win32k.sys における深刻な欠陥を特定しています。この弱点は競合状態であり、脆弱なドライバーが実行されている任意のシステム上で、攻撃者がリモートコード実行 (RCE) をトリガーすることを可能にします。このドライバーは GDI (Graphics Device Interface) の中核に位置するため、カーネルモードで任意のコードを実行するために悪用される可能性があり、これはマシン全体を危険にさらす可能性のある特権レベルです。
これが重要な理由:
- これは、通常のオフィスコンピュータから高性能サーバーに至るまで、すべてのグラフィカルユーザーインターフェースを動かすコアサブシステムを標的としています。
- 火曜日にリリースされたパッチは即座の修正を提供しますが、それは管理者が時間内に発見、展開、監視する方法を知っている場合に限ります。
次のスニペットは、レジストリから win32k.sys の現在のバージョンを取得し、パッチ適用済みバージョンと比較し、一致しないものを CSV ファイルに記録します。この CSV ファイルは Excel や Tableau にインポートできます。
# DetectWin32k.ps1 – 脆弱な win32k.sys をチェック
$target = 'Microsoft-Windows-GraphicsKernel'
$patchVersion = '6.0.22.7' # 期待されるパッチ適用済みバージョン
$regPath = "HKLM:\SYSTEM\CurrentControlSet\Services\$target"
$currentVer = Get-ItemProperty $regPath | Select-Object -ExpandProperty ImagePath
$kernelFile = Join-Path $env:SystemRoot \System32\win32k.sys
$fileVersion = (Get-ChildItem $kernelFile).VersionInfo.FileVersion
if ($fileVersion -ne $patchVersion) {
Write-Output "vulnerable: $currentVer (actual=$fileVersion, expected=$patchVersion)" | Out-File -Encoding ascii .\report.csv
}
機能:
次の YAML ファイルは、Ansible に win32k.sys アップデートを適用し、すべてのターゲットホストで GDI サービスを再起動するように指示します。
---
- name: Deploy Windows graphics kernel patch
hosts: windows_servers
gather_facts: yes
tasks:
- name: Copy new win32k.sys
copy:
src: /tmp/patches/win32k.sys
dest: C:\Windows\System32\
mode: '0644'
force: yes
- name: Restart GDI service
win_service:
name: w32k
state: restarted
機能:
windows_servers) 内のすべての Windows サーバーにプッシュします。時間経過に伴う GDI オブジェクトテーブルの使用状況を可視化するシンプルなパネルを作成します。
# grafana-dashboard.yml
apiVersion: 1
dashboard:
title: “GDI Usage”
panels:
- name: “Objects in use”
type: graph
targets:
- query: "SELECT timestamp, gdi_objects FROM win32k_stats WHERE $__timeFilter()"
機能:
win32k_stats) からメトリクスをプルし、Grafana パネルに表示します。使用量がしきい値を超えたときにアラートを設定できます。これはドライバーの回帰の初期指標となります。Jenkins または GitHub Actions パイプラインにテストステップを追加し、軽量ツール (例: wdfuzz) を使用して win32k.sys をファジングすることでパッチをテストします。
# .github/workflows/cve55226.yml
name: CVE‑2025‑55226 CI
on:
push:
branches:
- main
jobs:
test_and_deploy:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- name: Run fuzzer
run: |
wdfuzz.exe -t win32k.sys -c config.yaml
if ($LASTEXITCODE -eq 0) { Write-Host "Fuzz passed" }
- name: Deploy patch
uses: ansible/[email protected]
with:
playbook: DetectWin32k.ps1
機能:
main ブランチにプッシュされるたびにコードベースをチェックアウトします。それはグラフィックスエンジンの単一の欠陥から始まります。攻撃者は、上記で実証されたように、Windows カーネルの競合状態を悪用し、防御をすり抜けてリモートでコードを実行する方法を見つけます。それが CVE-2025-55226 です。しかし、本当の危険は、彼らがそれを CVE-2025-54918 (NTLM 認証の弱点) と組み合わせたときに現れます。突然、彼らは内部に侵入しただけでなく、制御下に置くことになります。
グラフィックスのバグとして始まったものが、本格的な権限昇格へと変わり、SYSTEM レベルのアクセスを彼らに与えます。この一連のイベントは理論上のものだけではありません。今日のハイブリッド環境では、脆弱性が単独で存在することはほとんどないということを思い出させるものです。
公開日: 2025年9月9日 (Patch Tuesday)
CVSS v3.1 スコア: 8.8 (高)
ベクター: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CWE: CWE‑287 – 不適切な認証
影響を受けるコンポーネント: Windows NTLM (New Technology LAN Manager)
この欠陥は、NTLM が認証データを検証する方法における論理エラーです。最小限の特権であっても、ネットワーク経由でホストに到達できる攻撃者は、システムを欺いて SYSTEM レベルの権限を付与させることができます。これは、ワークステーションまたはドメインコントローラーを侵害した後、攻撃者がアプリケーションをインストールし、機密ファイルを外部に持ち出し、新しい管理者アカウントを作成できることを意味します – 実質的にターゲットを完全に制御できることになります。
この脆弱性は、2025 年に増加しているパターンの一部です。すでに 2 つの他の NTLM バグ (CVE‑2025‑53778、CVE‑2025‑21311) が報告されています。この問題に対するマイクロソフトのパッチは、特定のハッシュ値を誤って受け入れる不正確な比較ルーチンを修正します。
# 脆弱な NTLM 設定を持つホストを検出
$target = "dc01.company.local"
Invoke-Command -ComputerName $target -ScriptBlock {
Get-WmiObject -Class Win32_OperatingSystem |
Select-Object CSName, Version, BuildNumber
} | Out-File -FilePath C:\temp\nlm_detection.txt
# NTLM ポリシー値を確認
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon" |
Select-Object "LmCompatibilityLevel"
# 簡単な確認用に CSV にエクスポート
$report = @()
foreach ($item in Get-WmiObject -Class Win32_Service | Where { $_.Name -eq "netlogon"}) {
$report += [pscustomobject]@{
Service = $item.Name
LmCompat = (Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon").LmCompatibilityLevel
}
}
$report | Export-Csv -Path C:\temp\nlm_report.csv -NoTypeInformation
このスクリプトは、現在の OS ビルドを取得し、Netlogon キーがマイクロソフト推奨の値 (3) に設定されていることを確認し、結果を簡単に利用できる CSV に書き込みます。
---
- name: Windows サーバーに NTLM パッチを適用
hosts: windows_dc01, windows_dc02, windows_dc03
gather_facts: true
tasks:
- name: Netlogon 互換性レベルを有効化
win_regedit:
path: HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon
key: LmCompatibilityLevel
value: 3
datatype: dword
- name: マイクロソフトパッチ KB5000000 をインストール
win_updates:
category_name: Security
search_keyword: KB5000000
reboot_after: true
すべてのドメインコントローラーに Playbook を展開します。このタスクにより、ポリシーが正しく設定され、最新のセキュリティアップデートがインストールされるため、同じ論理的な欠陥が悪用できなくなります。
Responder と Impacket を使用して、現実世界の NTLM リレー攻撃を模倣できます:
secretsdump.py は認証データをキャプチャします。# 攻撃ボックスで Responder を起動
responder -i eth0 -f
# 被害者から資格情報をダンプ
python3 impacket/secretsdump.py <victim-ip> <domain-admin-username>
# ターゲットにハッシュをリプレイ
python3 impacket/ntlmrelay.py <victim-ip> <target-ip>
管理された環境でスクリプトを実行し、SYSTEM レベルのアクセスが取得されることを検証します。
パイプラインに NTLM 強化タスクを追加します:
- name: Netlogon 互換性レベルを検証
win_regedit:
path: HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon
key: LmCompatibilityLevel
value: 3
datatype: dword
state: present
# 新しいパッチが適用されたときにトリガー
- name: 必要に応じて再起動しサービスを再開
win_reboot:
reboot_timeout_sec: 120
このタスクは、新しいパッチビルドによってパイプラインがトリガーされるたびに自動的に実行されます。
脆弱なハッシュパターンに一致する NTLM 認証でホストがログインしたときに発報するアラートを作成します:
input {
beats {
type => "winlogbeat"
}
}
filter {
if [event_id] == "4624" and [logon_type] =~ /NTLM/ {
mutate {
add_field => { "[ntlm_match]" => "true" }
}
}
}
output {
elasticsearch {
hosts => ["es.company.local"]
index => "ntlm_audit"
}
}
アラートは可視化のために Sentinel に送られ、採用担当者が修正が適用され監視されていることを確認できるようにします。
セキュリティとは、脆弱性にパッチを当てることだけではありません。それらがどのように接続され、どのように進化し、すぐには明らかではない方法でどのように武器化されるかを理解することです。CVE-2025-55226 と CVE-2025-54918 を連鎖させることで、グラフィックスドライバーの単一の欠陥がどのようにして完全なシステム侵害への扉を開くかを示しました。しかし、それ以上に重要なのは、DevOps エンジニアが技術的な修正だけでなく、先見性、自動化、および回復力をもってどのように対応できるかを実証したことです。