脆弱性スキャナNessusの観察
~パケットモニタリングを添えて~
観察対象と動機
Spectre / Meltdown はOS上のメモリを読み取られる脆弱性
パケットを送り込んで遠隔コード実行可能なものではないはず
どうやってリモートから脆弱性の有無を判断するんだろう・・・?
Spectre and Meltdownテンプレート
注:テンプレートとは
脆弱性スキャナのパラメータやプラグインのプリセットのこと
テンプレートを使用せず自分で同じ条件のスキャナを組むこともできる
検証環境
Win10-Host
Win7-Guest
allow tcp 445
注1:
Administratorアカウントが有効になっていないと
脆弱性を検出できなかった
注2:
SMBが有効かつ445ポートが空いていないと
脆弱性を検出できなかった
脆弱性の検出結果
Meltdown/Spectreに対する
セキュリティアップデートの状況に
問題が見つかった
KB4056897/KB4056894が必要
ntoskrnl.exeのバージョンが低い
(カーネルパッチが当たっていない)
どうやってこの結果を調べたのか?
レジストリキーの列挙
リモートレジストリサービス(WINREG)
へのアクセスを観測
OpenHKLM:
HKEY_LOCAL_MACHINEを開く
OpenKey:
指定のレジストリキーを開く
QueryInfoKey:
サブキーの数と更新日を得る
EnumKey:
サブキーを列挙する
システムに適用されているKBが
このレジストリキーに列挙されている
プラグインで指定したKBが見つからなければアラートを上げる
システムファイルの確認
システムファイル
ntoskrnl.exe : Windowsカーネル
itss.dll : ヘルプファイル用ライブラリ
win32k.sys : Windowsカーネルドライバ
bcrypt.dll : 暗号モジュール
srv.sys: SMBドライバ
プラグインで指定したファイルのバージョンが古ければアラートを上げる
備考: 名前付きパイプ
IPC$/svcctl: Windowsサービス制御
IPC$/winreg : リモートレジストリサービス
IPC$/lsarpc : 認証情報の取得
結論
Win10-Host
Win7-Guest
レジストリキー
システムファイル
1
2
3
5
6
1.
AdministratorアカウントでIPC$に接続する
2.
WINREG経由でレジストリにアクセスする
3.
KBの適用状況一覧を取得して脆弱性が残ってい
るか確認する
4.
AdministratorアカウントでC$に接続する
5.
C:/Windows/System32/にアクセスする
6.
システムファイルを取得して脆弱性が残っている
か確認する
4
おまけ:他のテンプレートは何をしているのか
WannaCry Ransomeware
1.マルウェアスキャナ(tenable_mw_scan)を
対象クライアントに書き込む
2.svcctl 経由でtenable_mw_scanを起動する
3.スキャン結果が記載されたtxtを取得する
備考: tenable_mw_scan:
既知のマルウェアのハッシュ値と比較して
システム内のWannaCryを検出する実行ファイル
PeekNamedPipe Requestに対して
STATUS_INSUFF_SERVER_RESOURCESが返る
= Eternal Blueが利用可能な状態
脆弱性の有無を確認
感染の有無を確認
備考: Metasploitでも同じ手法で脆弱性の有無を調査する
Basic Network Scan
名前付きパイプへのアクセスが多数
RPC経由でシステム情報を収集している
※WannaCryテンプレートのようなカスタムスキャナは無い
オープンポートをスキャン
一通りのサービスポートをSYNスキャン
Listen状態のポートは更に情報取得を試みる
5357 :WSD
49154-49157:lsass
135, 139, 445:SMB/RPC
システム情報収集

Nessusの仕組み / How Nessus works