Metasploit 3.0――ユーザの良心が試されるシステム貫入試験ツール
今回のリリースにおける目立った変更は実験的なGUIモジュールの試験採用であるが、真に注目すべきは、同ツールによるエクスプロイト(exploit:侵入手口)の検出と実行を自動処理するdb_autopwnの追加とすべきかもしれない。
MSFは、コンピュータシステムへの貫入試験を自動実行するために構築されたツールである。そのため同ツールには、Windows、Linux、BSD、Unix、Mac OSの各種リリースという特定のターゲットへの不正進入手段として知られている様々なエクスプロイトが満載されている。ツールの実行プラットフォームとしては、これらオペレーティングシステムの大半を用いることができるが、その他にもタブレット型のNokia N800マシンから実行できたという報告もある。
MSFのオリジナル開発者はH. D. Moore氏であり、2.0リリースの段階においてMatt Miller氏など開発者数名が参加したとのことだ。そして昨年、これらの開発陣によって「商用的な不正使用を防止し、同プロジェクトの長期的な存続を図る」ことを目的に結成されたのがMetasploit LLCである。Metasploitというソフトウェア本体および、その商標やドメインに関するすべての権利は、このMetasploit LLCが掌握している。またMSFはMetasploit Framework Licenseという独自のライセンス下で提供されており、OSIによる承認を受けておらず、FSFによるフリーソフトウェアライセンスの裁定も得ていない。
現行の開発バージョン(svnにおけるリビジョン4701)では、MSFには100以上のペイロード(payload)および190種のエクスプロイトが実装されている。ここで言うエクスプロイトが侵入者用の武器だとすれば、ペイロードはそこから発射される弾丸だとでも思えばいいだろう。ペイロードには侵入後にどのような行動を取ればいいのかの指示が収められているからだ。なおmsfconsoleからエクスプロイトおよびペイロードを実行する具体的な手順については、以前に本サイトで掲載した2.6リリースに対するレビュー記事を参照して頂きたい。
db_autoPwnのインストールと使用法
db_autopwnモジュールを使用するには、データベースのサポート用に若干の追加インストールをしておく必要がある。利用するデータベースマネージャについては、MySQL、Postgres、SQLiteが選択可能だ。私の場合、MSFのインストール先はUbuntu 7.04 Feisty Fawnとし、データベースエンジンはSQLite3を選択した。
オンライン上ではプラットフォーム別のインストールガイドが用意されている他、Moore氏のMetsploitブログにはdb_autopwnの使用法についての参考情報が紹介されている。私と同様Ubuntu 7.04およびSQLite3という組み合わせで使用する場合、MFSの最新開発バージョンのインストールおよびdb_autopwnモジュールの使用に必要な準備は、基本的に下記の手順に従えばいいはずである。
- Subversionをインストールする
- svnからMSFをインストールする
- Rubyおよび関連パッケージをインストールする
- RubyGemsをインストールする
- Ruby on Railsをインストール(「
gem install rails
」を実行)し、すべての質問にYと答える - libgtk2-ruby、libglade2-ruby、sqlite3をインストールする
- libsqlite3-ruby1.8、libdbd-sqlite3-ruby1.8をインストールする
- Nmapをインストールする
すべてのインストールが正常に行われると、db系コマンドをmsfconsoleから実行できるようになる。その中には、Nmapを実行してその結果をデータベースに自動登録するコマンドも用意されているが、必要であればNmapを個別に実行させ、スキャン結果を収めたXMLファイルをインポートすることも可能である。同様にNessusスキャンの結果をNBEフォーマットに出力させることもできる。
次に必要な準備は、データベースの作成である。その際には、svnで作成されるMSFのサブディレクトリに移動してから「sudo ./msfconsole
」とコマンドを入力する。msfconsoleのロードが完了すると、下記の2つのコマンドによるデータベースドライバのロードおよび必要なデータベース作成が行えるようになる。
msf> load db_sqlite3 msf> db_create pentest
ここまでの設定に問題がないかを確認するには、MSF consoleで「help
」と入力すればいい。これにより使用可能なコマンドが一覧され、リストの上部にはデータベース関連の全コマンドが表示されるはずである(以下参照)。
Database Backend Commands ========================= Command Description ------- ----------- db_add_host Add one or more hosts to the database db_add_port Add a port to host db_autopwn Automatically exploit everything db_hosts List all hosts in the database db_import_nessus_nbe Import a Nessus scan result file (NBE) db_import_nmap_xml Import a Nmap scan results file (-oX) db_nmap Executes nmap and records the output automatically db_services List all services in the database db_vulns List all vulnerabilities in the database SQLite3 Database Commands ========================= Command Description ------- ----------- db_connect Connect to an existing database ( /path/to/db ) db_create Create a brand new database ( /path/to/db ) db_destroy Drop an existing database ( /path/to/db ) db_disconnect Disconnect from the current database instance
なおMoore氏による説明では、この段階でdb_autopwnを引数無しで実行させて、具体的にどのような操作ができるかを確認しておくことが推奨されている。これを実行すると、下記の出力が得られるはずだ。
msf> db_autopwn [*] Usage: db_autopwn [options] -h Display this help text -t Show all matching exploit modules -x Select modules based on vulnerability references -p Select modules based on open ports -e Launch exploits against all matched targets -s Only obtain a single shell per target system (NON-FUNCTIONAL) -r Use a reverse connect shell -b Use a bind shell on a random port -I [range] Only exploit hosts inside this range -X [range] Always exclude hosts inside this range
この“とりあえず何ができるかを確認しておく”段階では、show
コマンドの確認もしておくといいかもしれない。これにより同フレームワークで認識されたすべてのエクスプロイトとペイロードがリストアップされる他、SQLite3との併用に必要なプラグインやオグジリアリ(auxiliary)扱いのRubyスクリプトなども一覧される。ここで言うオグジリアリであるが、Moore氏はこれを「エクスプロイト以外のすべて」と定義しており、具体的には、検出スクリプト、ファザー(fuzzer)類、DOS(Denial of Service:サービス拒否攻撃)、管理者攻撃などが該当するとのことである。
テストの実行
私の環境では、Linksysルータも含めて3基のLinuxマシンがLAN接続されている。今回のテストではこの環境でMSF 3.0を動作させてみた。最初に実行したのは、とりあえずの状況確認として、LAN上に存在する全システムのdb_nmapコマンドによる検索である。
msf > db_nmap 192.168.1.* Starting Nmap 4.20 ( http://insecure.org ) at 2007-04-18 15:15 CDT Interesting ports on 192.168.1.1: Not shown: 1693 closed ports PORT STATE SERVICE 22/tcp open ssh 23/tcp open telnet 53/tcp open domain 80/tcp open http MAC Address: 00:0F:66:49:9A:AF (Cisco-Linksys) Interesting ports on desktop.lan (192.168.1.101): Not shown: 1695 closed ports PORT STATE SERVICE 22/tcp open ssh 5900/tcp open vnc Interesting ports on hamshack.lan (192.168.1.111): Not shown: 1694 closed ports PORT STATE SERVICE 80/tcp open http 139/tcp open netbios-ssn 445/tcp open microsoft-ds MAC Address: 00:00:00:00:00:00 (Edimax Technology CO.) Nmap finished: 256 IP addresses (3 hosts up) scanned in 38.580 seconds
次に、検出されたこれらのホストがデータベースに登録されていることをdb_hostsコマンドを用いて確認してから、db_servicesコマンドを実行してみた。その結果得られたのが、下記の出力である。
msf > db_services [*] Service: host=192.168.1.1 port=22 proto=tcp state=up name=ssh [*] Service: host=192.168.1.1 port=23 proto=tcp state=up name=telnet [*] Service: host=192.168.1.1 port=53 proto=tcp state=up name=domain [*] Service: host=192.168.1.1 port=80 proto=tcp state=up name=http [*] Service: host=192.168.1.101 port=22 proto=tcp state=up name=ssh [*] Service: host=192.168.1.101 port=5900 proto=tcp state=up name=vnc [*] Service: host=192.168.1.111 port=80 proto=tcp state=up name=http [*] Service: host=192.168.1.111 port=139 proto=tcp state=up name=netbios-ssn [*] Service: host=192.168.1.111 port=445 proto=tcp state=up name=microsoft-ds
なおデフォルト設定のままdb_autopwnコマンドを実行するとデータベースにあるすべてのホストが攻撃されるので、特定のホストを除外させたければ、あらかじめ該当するものを削除しておくか、先に確認した処理対象の範囲指定オプションを用いて、db_autopwnコマンドの実行時にホストを限定しておく必要がある。
次に行ったのは、db_autopwnコマンドによる脆弱性のチェックである。その結果、これらに関して実行可能なエクスプロイト用ツールは存在しないことが確認できた。
msf > db_autopwn -t [*] Analysis completed in 3.79338097572327 seconds (0 vulns / 0 refs)
自分の環境がセキュリティ的に健全であることを確認できたのは結構なのだが、本稿のレビューを進める関係上、喜んでばかりもいられない。そこで今回はコンソールからinfo
コマンドを実行して、いくつかのLinuxエクスプロイトに関する詳細情報を確認し、何か脆弱性に関連したパッケージをインストールできないかをチェックしてみた。使える可能性が高かったのは、linux/proxy/squid_ntlm_authenticateである。
msf > info linux/proxy/squid_ntlm_authenticate Name: Squid NTLM Authenticate Overflow Version: 4419 Platform: Privileged: No License: Metasploit Framework License Provided by: skape Available targets: Id Name -- ---- 0 Linux Bruteforce Basic options: Name Current Setting Required Description ---- --------------- -------- ----------- RHOST yes The target address RPORT yes The target port Payload information: Space: 256 Description: This is an exploit for Squid's NTLM authenticate overflow (libntlmssp.c). Due to improper bounds checking in ntlm_check_auth, it is possible to overflow the 'pass' variable on the stack with user controlled data of a user defined length. Props to iDEFENSE for the advisory. References: http://www.osvdb.org/6791 http://www.idefense.com/application/poi/display?id=107 http://www.securityfocus.com/bid/10500 http://cve.mitre.org/cgi-bin/cvename.cgi?name=2004-0541 http://milw0rm.com/metasploit/67
だが結局のところ、この試みは徒労に終わった。Squidをインストールして実行させても、システムをエクスプロイトすることはできなかったのである。
GUIなどの操作インタフェースについて
クリックで拡大 |
MSFではコンソール以外にもコマンドライン形式のインタフェースが利用可能で、簡単なスクリプトの記述および貫入試験の自動実行をすることができるが、その他にWeb形式インタフェースを介した操作も行える。今回これらのインタフェースの操作性をすべて確認する余裕はなかったが、現在開発途上にある実験的なGUI操作については一通り試すことができた。
GUIでの操作を行うためには、先に「sudo ./msfconsole
」を実行したフレームワークのディレクトリに移動して「sudo ./msfgui
」を実行しておく必要がある。コマンドの送信直後は空白状態のフレームワークが表示されるだけだが、その後10秒くらい待機すると、ツールにより認識された、エクスプロイト、ペイロード、オグジリアリその他のモジュールに関するドロップダウン形式のメニューが表示される。
これは実際に操作して確認したのだが、先に挙げたすべての情報はGUI画面でも表示させることはできるものの、その際には必要なアイテムのアイコンをクリックして該当するカテゴリを展開させてから、あらためて対象アイテムを再クリックする必要がある。これにより、選択したアイテムについての全情報がメニューリストの直下にあるペインに表示される。
更に試行錯誤を繰り返すうちに、選択アイテムを右クリックすることで別のアイコンが表示され、これを再度クリックすることで選択アイテムが実行されるという仕様を突き止めることができた。その一方で、IPアドレス、ポート、ペイロードの引数など、ターゲットに関する情報をどうすれば設定できるかについては、未だ特定できていない。メーリングリストで確認したところによると、何らかの方法でそうした操作ができるのは確かなようである。
補足:msfguiの開発者であるFabrice Mourron氏から、私が遭遇しているトラブルについての助言を得ることができた。同氏がこの問題を検証したところ、Ubuntu 7.04リポジトリに収められていた旧バージョンのlibgtk2-rubyに潜むバグに辿り着いたとのことだ。また同氏は新たに、msfguiでのmsdns_zonenameエクスプロイトを実演するデモムービーも作成してくれた。
ドキュメントおよびサポートの入手法について
操作マニュアルについては手際よくまとめられた「MSF 3.0 User Guide」がPDFフォーマットで提供されている。また各種APIに関するドキュメント類および「Developer Guide」も同じページから入手できる。これらの情報に目を通しても不明な点がある場合は、同プロジェクトのメーリングリストを購読するか(framework-subscribe@metasploit.comに空メールを送信する)、あるいはメーリングリストのアーカイブを探せばいいだろう。
まとめ
MSF 3.0のリリースは、セキュリティの自動テストという分野における大きな前進と見なすことができるだろう。それは、db_autopwn機能に代表される従来バージョンからの機能的な格段の進歩を遂げたことだけではなく、実験的に装備されたGUIによる操作性の大幅な向上を評価してのことである。
MSF 3.0に同梱されているエクスプロイトの大部分については、若干陳腐化している感が否めない。もっとも陳腐化したということは、それだけ対策が進んだことの裏返しであるから、そうした観点からは歓迎すべき事態だと見るべきである。とはいうものの、そうしたエクスプロイトを利用した攻撃への対策が施されていないシステムがインターネット上には数多く残されている訳であり、その攻撃手段としての脅威度が完全に失われていないのも事実である。それほど深い知識を有さないユーザであってもMSF 3.0を使えば、そうした進入路を即座にクラッキングできてしまうのだから。
ここで少し想像力を働かせてみよう。悪意を持ったクラッカーが対策に不備のあるエクスプロイトを満載したデータベースと危険な攻撃用ペイロードを準備し、適当な犠牲者を求めてサブネットをスキャンすれば、msfconsoleを介したクラッキングなど朝飯前の出来事である。これはあまりゾッとしない現実ではなかろうか? その一方で、セキュリティの専門家がパッチを検証して独自の貫入試験を実行できれば、悪用される前にセキュリティホールの存在を特定することも可能なのだ。
MSF 3.0は強力なツールであるが、それを悪用するもしないも、すべては使う人間次第である。自分のシステムに侵入されるのがイヤであれば、その前にシステムのセキュリティを検証しておくべきであろう。