(2017/07/29修正)

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

はじめに

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

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

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

  • T-Potによる攻撃分析イメージ(構築後、実際の分析画面) tpot-kibana-dashborad.png

T-Potとは?

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

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

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

開発はドイツテレコム社が行っています。

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

GitHubはこちらにて公開されています。

提供方法としては、iso形式 or autoinstall形式での提供が行われており、今回は、autoinstall形式でEC2上にこちらのT-Potの導入を行っていきます。

T-Potのアーキテクチャ

tpot-architecture.PNG

公式サイトで公開されているアーキテクチャ図もありますが、ざっくりとした概要を表しました。

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

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

攻撃観測の仕組み

tpot-dataflow.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

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

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

構築手順

基本的に、T-PotのインストールはGitHubリポジトリで公開されているinstall.shを叩くだけです。
この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) 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



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してくれています。

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

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

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

  • 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
アクセスすると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


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

tpot-ssh-atackt-timeline.PNG


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

tpot-ssh-atack-usrpass.PNG

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

最後に

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

参考ページ

T-Pot: A Multi-Honeypot Platform
T-PotによるDockerized Multi Honeypotなサイバー攻撃観測環境を構築する