
脆弱性の悪用と脆弱性防止の実装
CVE-2017-8464の脆弱性を検出するアプリケーションの構築
内容:
第1部: CVE-2017-8464の概要
LNKファイルの概念 CVE-2017-8464の脆弱性を持つシステムの構築 CVE-2017-8464の脆弱性を攻撃するツール第2部: Metasploitツールを使用したCVE-2017-8464の悪用
2.1. CVE-2017-8464の悪用モデル
2.2. CVE-2017-8464の悪用の実行
第3部: Python言語に基づくCVE-2017-8464検出ツールの構築
3.1. キャプチャしたネットワークパケットに基づくCVE-2017-8464のシグネチャ分析
3.2. パケットのシグネチャ分析に基づくCVE-2017-8464悪用検出処理関数
結論
**
第1部: CVE-2017-8464の概要
LNKは、Microsoftによって開発されたバイナリ形式のシステムファイル(Windowsショートカット)です。

図1: Windowsのショートカットアイコン
LNKファイルは、Windowsがファイル、フォルダー、またはアプリケーションのルートへの参照として使用するショートカットまたは「リンク」であり、Macintoshプラットフォームのエイリアスに似ています。これには、ターゲットの種類、場所、ファイル名に加えて、ターゲットファイルを開くプログラム、およびオプションのショートカットキーが含まれます。ファイルはWindowsで、ファイル、フォルダー、または実行可能プログラムを右クリックし、[ショートカットの作成]を選択することで作成できます。
この脆弱性はMicrosoft Windowsに存在し、特別に作成されたショートカットのアイコンが処理される際に、攻撃者がリモートからコードを実行できるようにするものです。

図2: .LNKファイルを介して攻撃コードをダウンロード・実行するショートカットを手動で作成
脆弱なコンポーネントはネットワークスタックに関連しています。このような脆弱性は一般に「リモートで悪用可能(remotely exploitable)」と呼ばれ、プロトコルレベルまたは複数のネットワークホップ(例えば、1台以上のルーターを経由する)で悪用可能な攻撃と見なされます。
CVE-2017-8464の脆弱性の影響を受けるシステムは、Microsoft Windows Server 2008 SP2およびR2 SP1、Windows 7 SP1、Windows 8、Windows 8.1、Windows Server 2012 GoldおよびR2、Windows RT 8.1、Windows 10 Gold、1511、1607、1703、Windows Server 2016のWindows Shellです。これらのシステムでは、手動で作成された.LNKファイルがWindows Explorerまたはショートカットのアイコンを解析するその他のアプリケーションでアイコン表示中に正しく処理されないため、ローカルユーザーまたはリモートの攻撃者が任意のコードを実行できます。これは「LNK Remote Code Execution Vulnerability(LNKリモートコード実行の脆弱性)」とも呼ばれます。
この脆弱性を修正するセキュリティ更新プログラムは、ショートカットアイコンの参照を正しく検証するよう修正します。Microsoft Windowsは2017年6月にこの脆弱性の更新プログラムをリリースしました。この脆弱性はWindows XPおよびそれ以前のバージョンのWindowsには影響しません。
Metasploit
Metasploit Frameworkは、コマンドラインインターフェイス上で使用されるサービスのテスト、攻撃、脆弱性の悪用を行うための環境です。このツールはKali Linux(VMware版)で利用できます。

図3: Metasploitツール
Armitage
Metasploitプロジェクトに基づくGUIツール。

図4: Armitageツール
第2部: Metasploitツールを使用したCVE-2017-8464の悪用
2.1. CVE-2017-8464の悪用モデル
被害者マシン – Windows 7 Pro

図5: 被害者のOSバージョン

図6: 被害者マシンのIPアドレス
攻撃者マシン – Kali Linux – Metasploitツールを使用。

図7: 攻撃者マシンのIPアドレス
アクティブなネットワーク層はVMnet8サブネット192.168.169.0です。
2.2. CVE-2017-8464の悪用の実行

図8: ペイロードを作成し、攻撃者マシンへのTCP接続を待ち受ける

図9: マルウェアを自動実行する.lnkファイルを作成

図10: ペイロードの設定情報

図11: .lnkファイルとマルウェアの生成

図12: すべてのマルウェアをUSBにコピー

図13: マルウェアを含む悪意のある.lnkファイルが入ったUSBを被害者が挿入

図14: 攻撃者が悪用に成功し、被害者マシンへの侵入に成功
**
第3部: Python言語に基づくCVE-2017-8464検出ツールの構築
3.1. キャプチャしたネットワークパケットに基づくCVE-2017-8464のシグネチャ分析

図15: CVE-2017-8464の脆弱性を利用した攻撃パケットをキャプチャしたもの

図16: 攻撃者へのTCP接続成功後に送信されるPSHフラグ付きパケット

図17: 攻撃者が被害者に送信したキャプチャパケット内の不審な兆候
PEファイル形式(Portable Executable File Format)は、Win32専用のファイル形式です。Win32上で実行可能なすべてのファイル(*.EXE、*.DLL(32ビット)、*.COM、*.NET、*.CPLなど)はPE形式です。ただし、VxDsファイルと*.DLL(16ビット)は除きます。

図18: PEファイルの構造
DOS MZヘッダー
すべてのPEファイルは、単純なDOS MZヘッダーで始まります。これは最初の64バイトを占めます。この領域は、プログラムがDOS環境で実行される場合に使用されます。
e_magic: PEファイルのシグネチャ。値: 4Dh, 5Ah(文字「MZ」。MS-DOSの創始者Mark Zbikowskyの名前)。この値は、有効なDOSヘッダーを示し、その後の実行を許可します。

図19: キャプチャしたパケット内のPEファイルシグネチャ
e_lfanew: DOSヘッダーの最後に位置するDWORDで、ファイルの先頭位置に対するPEヘッダーのオフセットを格納するフィールドです。
DOS STUB
DOS Stubは、エラーメッセージを表示する小さなDOS EXEプログラムに過ぎず、16ビットWindowsとの互換性を確保するための部分です。

図20: 攻撃者が被害者に送信したパケット内のDOS STUB情報
PEヘッダー
PEヘッダーは、実際にはIMAGE_NT_HEADERS構造体であり、ローダーがファイルをメモリに読み込むために必要な情報を含みます。
Signature: PEヘッダーの先頭にある1つのDWORDで、PEシグネチャ(50h, 45h, 00h, 00)を含みます。

図21: e_lfanewからPEヘッダーのSignature部分を示す情報
セクションテーブル
セクションテーブルはPEヘッダーの直後に続くコンポーネントで、IMAGE_SECTION_HEADER構造体の配列で構成されています。

図22: キャプチャしたパケット内のセクションテーブルの内容

図23: シグネチャとマルウェア関連情報をCSVファイルに保存
3.2. パケットのシグネチャ分析に基づくCVE-2017-8464悪用検出処理関数