EC2上にHoneypot(T-Pot)をインストールして、サイバー攻撃をELKで可視化してみた 

**(2017/07/29修正)**

* T-Potのautoinstall対応OSが変更されてたため修正しました

# はじめに

サイバー攻撃を肌で感じてみたい！と思い立ち実際に攻撃を受けてみました。

今回は、T-PotというHoneypotのマルチプラットフォームをAWS上のEC2に構築して、サイバー攻撃の観測(Honeypot) ⇒ 可視化(ELK) を行うまでの手順を紹介したいと思います。

さまざまなプロトコルの攻撃を収集し、可視化することでどのような攻撃がどのような原理で動作し、どの程度の規模で発生しているか等、サイバー攻撃のトレンドを探ってみようと思います。

* **T-Potによる攻撃分析イメージ(構築後、実際の分析画面)**
![tpot-kibana-dashborad.png](https://qiita-image-store.s3.amazonaws.com/0/108052/e9b87ad1-899a-93fd-19a8-2483d48578e2.png)


# T-Potとは？

Honeypotとは"おとり"としてサイバー攻撃を観測するツールです。脆弱なシステムを模擬して攻撃を誘い込み、攻撃ログを収集することを目的としています。

今回紹介する**T-Pot**とは..

> * 異なる特徴を持つHoneypotを複数稼働させ、攻撃ログを収集
> * 収集した攻撃ログを、Elastic社製 ELKスタックにより解析・可視化
> * これら機能を複数のDockerコンテナを連携させにて提供してくれるマルチプラットフォームです

開発は[ドイツテレコム社](https://www.telekom.com/en)が行っています。

インストールと連携設定が複雑そうな、Honeypot及び、ELKのサービスは、Dockerコンテナ上にて提供してくれるため**インストール作業は非常に簡単**です。
誰でも簡単にHoneypot設置から攻撃の可視化・分析が可能なのはとても魅力的ですね。

GitHubは[こちら](https://GitHub.com/dtag-dev-sec/)にて公開されています。

提供方法としては、[iso形式](https://GitHub.com/dtag-dev-sec/tpotce) or [autoinstall形式](https://GitHub.com/dtag-dev-sec/t-pot-autoinstall)での提供が行われており、今回は、autoinstall形式でEC2上にこちらのT-Potの導入を行っていきます。


## T-Potのアーキテクチャ

![tpot-architecture.PNG](https://qiita-image-store.s3.amazonaws.com/0/108052/401e9b58-7cbd-9aba-00e7-b512ca5a64d2.png)

公式サイトで公開されている[アーキテクチャ図](https://raw.GitHubusercontent.com/dtag-dev-sec/tpotce/master/doc/architecture.png)もありますが、ざっくりとした概要を表しました。

* 複数のHoneypotとELKのコンテナを連携することで、T-Potは実装されています
* Honeypot,ELKの細かな設定は、T-PotプロジェクトのDockerfileリポジトリで管理されています

低対話型のHoneypotと言え、万が一マルウェアに感染したとしても、ホストOSの制御まで乗っ取られないかつ、コンテナごと破棄してしまえばよいので安全ですね。



## 攻撃観測の仕組み

![tpot-dataflow.PNG](https://qiita-image-store.s3.amazonaws.com/0/108052/3e6fa73c-c209-f0e3-749e-b87fd0f3b91d.png)

各コンテナ上で稼働しているHoneypotで収集された各種攻撃ログデータは、全コンテナ共通でマウントしている/data配下にて解析用ELKコンテナに共有されます。
そして、logstach経由でElasticSerchに取り込まれ、Kibanaで可視化が行われます。

* **それぞれのHoneypotが対応する各種攻撃プロトコル**

| Honeypot   | tcp/udp | port                               |
|------------|---------|------------------------------------|
| Glastopf   | tcp     | 80                                 |
| Cowrie     | tcp     | 22                                 |
| elasticpot | tcp     | 9200                               |
| Dionaea    | tcp     | 21,42,69,135,330,443,445,5060,8081 |
| Dionaea    | udp     | 69,5060                            |
| Honeytrap  | tcp     | 0-65535                            |
| Honeytrap  | udp     | 0-65535                            |

※ T-Pot標準インストールのHoneypot構成
※ 今回、honeytrapはポート全開放を許可したくなかったため使用していません。(私Honeypot初心者のため、念のため)



# 今回構築したAWS構成

![aws-system.PNG](https://qiita-image-store.s3.amazonaws.com/0/108052/9c713309-b3db-c46f-f57a-5d16b1f7e637.png)

* EC2はPublicに配置
* EIPを割り当て
* EC2へのsshアクセスは、鍵認証でインターネット経由で行う

構成は非常に簡単で、たったこれだけです。このEC2にT-Potをインストールして、サイバー攻撃の観測プラットフォームを構築します！わくわく。


# 構築手順

基本的に、T-PotのインストールはGitHubリポジトリで公開されている[install.sh](https://GitHub.com/dtag-dev-sec/T-Pot-autoinstall)を叩くだけです。
このinstall.shがシェルでゴリゴリdockerインストール～コンテナ起動設定までを行ってくれます。

T-Potには4種類のインストールタイプがありますが、今回はStandardタイプでインストールを実行していきます。

* **インストールタイプとシステム要件**

| Type               | RAM [GB] | DISK [GB] | メモ                           |
|--------------------|----------|-----------|--------------------------------|
| STANDARD           | 4        | 64        | 標準Honeypot + ELK             |
| HONEYPOTS ONLY     | 3        | 64        | 標準Honeypotのみ               |
| INDUSTRIAL EDITION | 3        | 64        | 工業用に特化したHoneypot + ELK |
| FULL INSTALLATION  | 8        | 128       | フルインストール               |


## EC2作成

* ~~**OS  :  Ubuntu14.04**~~
~~今回、autoinstallに対応しているのは"Ubuntu14.04"のみなのでAWS Marketplaceからそちらを選択します。~~

* **OS  :  Ubuntu16.04**
今回、autoinstallに対応しているのは"Ubuntu16.04"のみなのでAWS Marketplaceからそちらを選択します。

**※ autoinstallの対応OSが変更されていました([2017/01/31](https://github.com/dtag-dev-sec/t-pot-autoinstall/commit/42f89b347b8e93a7bf0b749a0b908b60811cb8c3)) 2017/07/29 修正**
**そのアップデートに伴い、以下の実行ログも異なる場合があります。ご了承ください。**

* **インスタンスタイプ  :  m1.medium**  
STANDARD Typeで必要なのは、最低でも4GB RAMなので"t2.medium"を選択しようと思いきやUbuntu14.04は旧世代インスタンスのみでしか稼働しないとのことなので、"m1.medium"を選択します。
Diskサイズは64GBを確保して、インスタンス作成してください。  


## SecurityGroup設定
まずは、自端末からのみssh接続できるよう設定します。攻撃観測用のためのInbound PolicyはT-Potのインストール後に設定します。


## OS設定
### T-Potインストール用ユーザ作成
* インスタンスが立ち上がったら、インストール用ユーザを適当な名前で作成します。  
※EC2デフォルトのubuntuユーザでもT-Potのインストールは可能です。私は念のためデフォルトユーザでのログインは不可に設定しました。

```
# adduser your-user
# gpasswd -a your-user sudo
```

* 新規に作成したユーザでも鍵認証(EC2作成時のもの)でsshログインできるようにします。

```
# cp /home/ubuntu/.ssh/authorized_keys /home/your-user/.ssh/
# cd /home/your-user/
# chown your-user:your-user .ssh/authorized_keys
```


### gitのインストール

* gitをインストールしておきます。

```
$ apt-get install git
```

<br />
OSの設定でやることはこれくらいです。


## T-Potインストール
これからT-Potのインストールを行います。とは言っても、install.shを叩くだけ

* **gitでtpot-auto installをクローン**

```
$ git clone https://github.com/dtag-dev-sec/t-pot-autoinstall.git
Cloning into 't-pot-autoinstall'...
remote: Counting objects: 97, done.
remote: Total 97 (delta 0), reused 0 (delta 0), pack-reused 97
Unpacking objects: 100% (97/97), done.
Checking connectivity... done.
```

### インストール実行

* **install.sh実行**

```
$ sudo su -
# cd ./t-pot-autoinstall
# ./intall.sh
```

* **T-Potで使用するユーザを聞かれます**

```
Make sure the SSH login for your normal user is working!

Which user do you usually work with? This script is invoked by root, but what is your normal username?
Enter username: xxxxx
```

* **インストールタイプを選びます**

```
##########################################################
#                                                        #
#     How do you want to proceed? Enter your choice.     #
#                                                        #
# 1 - T-Pot's STANDARD INSTALLATION (w/o INDUSTRIAL)     #
#     Requirements: >=4GB RAM, >=64GB disk               #
#     Services: Cowrie, Dionaea, ElasticPot, Glastopf,   #
#     Honeytrap, ELK, Suricata+P0f                       #
#                                                        #
# 2 - T-Pot's HONEYPOTS ONLY (w/o INDUSTRIAL)            #
#     Requirements: >=3GB RAM, >=64GB disk               #
#     Services:                                          #
#     Cowrie, Dionaea, ElasticPot, Glastopf, Honeytrap   #
#                                                        #
# 3 - T-Pot's INDUSTRIAL EDITION                         #
#     Requirements: >=3GB RAM, >=64GB disk               #
#     Services: ConPot, eMobility, ELK, Suricata+P0f     #
#                                                        #
# 4 - T-Pot's FULL INSTALLATION                          #
#     Requirements: >=8GB RAM, >=128GB disk              #
#     Services: Cowrie, Dionaea, ElasticPot, Glastopf,   #
#     Honeytrap, ELK, Suricata+P0f                       #
#                                                        #
##########################################################

Your choice: 1

```

* **しばらく待ちます**
Dockerエンジンのインストールから、各コンテナイメージをPullしてくれています。
<br />

* **インストール完了後、OSが再起動します**
(これでもう完了です！)

### インストール後の動作確認

* **SecurityGroupの再設定 (制御ssh用)**
sshのポートが下記のように変更されるので、そのポートでログインできるようにSecurity GroupのInbound Policyを変更します。
変更前 port ： 22
変更後 port ： **64295**
<br />

* **sshでEC2にログイン**

```
 ssh -i ec2-key.pem -p 64295 your-user@xx.xx.xx.xx
```

* **Dockerコンテナの起動確認**  
Dockerコンテナが複数生成されていることを確認します

```
# docker ps
CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS              PORTS                                                                                                                                                                                                                                                          NAMES
xxxxxxxxxxxx        dtagdevsec/honeytrap:latest1603    "/usr/bin/supervisord"   x minutes ago       Up x minutes                                                                                                                                                                                                                                                                       honeytrap
xxxxxxxxxxxx        dtagdevsec/cowrie:latest1603       "/usr/bin/supervisord"   x minutes ago       Up x minutes        0.0.0.0:22->2222/tcp                                                                                                                                                                                                                                           cowrie
xxxxxxxxxxxx        dtagdevsec/dionaea:latest1603      "/usr/bin/supervisord"   x minutes ago       Up x minutes        0.0.0.0:21->21/tcp, 0.0.0.0:42->42/tcp, 0.0.0.0:135->135/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:445->445/tcp, 0.0.0.0:1433->1433/tcp, 0.0.0.0:3306->3306/tcp, 0.0.0.0:69->69/udp, 0.0.0.0:5060-5061->5060-5061/tcp, 0.0.0.0:5060->5060/udp, 0.0.0.0:8081->80/tcp   dionaea
xxxxxxxxxxxx        dtagdevsec/suricata:latest1603     "/usr/bin/supervisord"   x minutes ago       Up x minutes                                                                                                                                                                                                                                                                       suricata
xxxxxxxxxxxx        dtagdevsec/elk:latest1603          "/usr/bin/supervisord"   x minutes ago       Up x minutes        127.0.0.1:64296->8080/tcp                                                                                                                                                                                                                                      elk
xxxxxxxxxxxx        dtagdevsec/elasticpot:latest1603   "/usr/bin/supervisord"   x minutes ago       Up x minutes        0.0.0.0:9200->9200/tcp                                                                                                                                                                                                                                         elasticpot
xxxxxxxxxxxx        dtagdevsec/glastopf:latest1603     "/usr/bin/supervisord"   x minutes ago       Up x minutes        0.0.0.0:80->80/tcp                                                                                                                                                                                                                                             glastopf
```

コンテナ起動していますね。それぞれのコンテナでHoneypotが攻撃を受ける準備が整いました！


## SecurityGroupの再設定 (Honeypot攻撃観測用)
次は、Honeypotの攻撃観測用のInbound PolicyをSecurityGroupに加えます。先ほどのsshポートを含め、下記のように設定します。
Sourceを0.0.0.0/0で開放して、攻撃観測スタートです！

* **SecurityGroup Inbound Policy**

| Type       | Protocol | Port Range | Souce     | Honeypot   |
|------------|----------|------------|-----------|------------|
| TCP Custum | tcp      | 64295      | myIP      | N/A        |
| TCP Custum | tcp      | 21         | 0.0.0.0/0 | Dionaea    |
| TCP Custum | tcp      | 42         | 0.0.0.0/0 | Dionaea    |
| TCP Custum | tcp      | 135        | 0.0.0.0/0 | Dionaea    |
| TCP Custum | tcp      | 443        | 0.0.0.0/0 | Dionaea    |
| TCP Custum | tcp      | 445        | 0.0.0.0/0 | Dionaea    |
| TCP Custum | tcp      | 143        | 0.0.0.0/0 | Dionaea    |
| TCP Custum | tcp      | 330        | 0.0.0.0/0 | Dionaea    |
| TCP Custum | udp      | 69         | 0.0.0.0/0 | Dionaea    |
| TCP Custum | tcp      | 5060       | 0.0.0.0/0 | Dionaea    |
| TCP Custum | udp      | 5060       | 0.0.0.0/0 | Dionaea    |
| TCP Custum | tcp      | 8081       | 0.0.0.0/0 | Dionaea    |
| TCP Custum | tcp      | 22         | 0.0.0.0/0 | Cowrie     |
| TCP Custum | tcp      | 80         | 0.0.0.0/0 | Glastopf   |
| TCP Custum | tcp      | 9200       | 0.0.0.0/0 | Elasticpot |



## Kibana Web UIへのアクセス
最後に、Kibana Web UIへの接続を行うためにsshトンネルを張ります

```
ssh -i ec2-key.pem -p 64295 -N -L8080:127.0.0.1:64296 your-user@xx.xx.xx.xx
```

sshトンネルを張ったあとは下記URLへアクセス
**http://localhost:8080/**

![tpot-kibana-loading.PNG](https://qiita-image-store.s3.amazonaws.com/0/108052/f025ffa7-405f-c258-88d1-bcb2c8d924e8.png)
アクセスするとKibanaのloadingが始まります。


# 攻撃観測開始！！

実は、本記事を書く1週間前からEC2上でT-Potを配置して攻撃を受けていたのですが、はたして記事のネタになるくらい攻撃が収集できるか非常に不安でした。
でも、大丈夫。たくさん攻撃受けてました。


## 条件
* **AWSリージョン**  : **東京リージョン**
* **期間**  :  **2016/11/30 ~ 2016/12/07**

## 攻撃集計結果

| Honeypot | 攻撃種類 | count / 7days  |
|----------|----------|--------|
| Cowrie   | ssh      | 256414 |
| Glastopf | http     | 38     |
| Dionaea  | https    | 1031   |

その他のHoneypotへの攻撃は、数件か0件程度でした。
sshの攻撃回数は非常に多かったですね。1hあたり1500件ほど攻撃されていることになります。

Cowrieで収集したsshの攻撃に関して、少しグラフを見てみようと思います。

* **攻撃元IP Geolocation**  
ロシアからの攻撃が断トツで多いですね。

![tpot-ssh-atack-map.PNG](https://qiita-image-store.s3.amazonaws.com/0/108052/062475f8-0355-f625-622e-a4ba242343a5.png)

<br />

* **国別の攻撃回数の時系列データ**  
ロシアは執拗に攻撃してきます。

![tpot-ssh-atackt-timeline.PNG](https://qiita-image-store.s3.amazonaws.com/0/108052/01ae945f-6877-920c-5236-812a874328b0.png)

<br />

* **sshクラックに使用されたuser/password**  
こちらも文字として可視化できます。みなさんも使用しているものはありませんか？

![tpot-ssh-atack-usrpass.PNG](https://qiita-image-store.s3.amazonaws.com/0/108052/1a676dd7-333b-f521-5e6c-10e631306805.png)


このようにT-Pot標準で用意してくれるKibana Dashboardでも十分いろいろな分析ができます。
まだまだ紹介したいグラフ・分析結果はありますが、長くなってしまうので今回はこのくらいにします。



# 最後に
本記事ではT-Potの構築手順のみを取り上げました。今後は、別の記事にて収集した攻撃をさまざまな角度から分析していきたいと考えています。ElasticSearchにデータは取り込んであるので分析し放題です。
(直近はクリスマスの時期に攻撃は増えるのか、減るのか？を見れたらと考えています。クリスマスだし、ハッカーさんもお休みしているのでは？検証結果が楽しみです！)


# 参考ページ
[T-Pot: A Multi-Honeypot Platform](http://dtag-dev-sec.github.io/mediator/feature/2015/03/17/concept.html)
[T-PotによるDockerized Multi Honeypotなサイバー攻撃観測環境を構築する](http://blog.takanabe.tokyo/2015/04/24/293/)