HoneypotのDionaeaでマルウェアを収集しちゃって、APIでスキャンして、結果をビジュアライズしちゃうぞ


# はじめに

こんばんはー
Advent Calendar11日目ですね！
そして、間違えて同じ日に二つもエントリーしてしまいましたd(ﾟ∀ﾟd)ｫｩｨｪ!! 

ちなみに、もう一つのQiita記事は、以下なので興味ある人は見て頂ければと思います。

[絶対的に使った方がいいLogstashのMultiple Pipelinesについて書いてみた](https://qiita.com/micci184/items/24e197a168891f089b3d)

今年は、ハニーポッターになるべく、いろいろ試してたのですが、Qiita記事を一切書いてませんでした。。
書こう書こうと思ってたら、今年ももう終わり。。
でも、最後の追い上げ！ということで、しっかりと足跡を残したいと思いますー

てことで、今回は、Dionaeaというハニーポットツールを使ってマルウェアを収集して、スキャンとか可視化までをゆるーく書いていきます。
流れはこんな感じです！

1. 環境について
2. 全体構成について
3. Dionaeaのインストール
4. VirusTotalのAPIを利用するよ！
5. Logstashで取り込むよ
6. Kibanaで見てみる

# 環境について

すべてAWSで構築してます。

* Dionaea Server
  + Ubuntu Server 14.04 LTS
  + Dionaea
  + Python 2.7.6

* ElastciStack Server
  + Logstash 6.0
  + logstash-input-s3
  + Elasticsearch 6.0
  + Kibana 6.0

# 全体構成について

ざっくりと構成について説明しますー

![test.png](https://qiita-image-store.s3.amazonaws.com/0/152721/f4f439e3-e3e3-dade-efbd-3ebfa9b8b154.png)

Dionaeaを配置し、VirusTotalにAPIコールし、マルウェアかどうかをスキャンします。
スキャン結果のjsonファイルをS3に格納し、Logstashがデータを取得します。
Logstashが取得したデータをElasticsearchにストアし、Kibanaがビジュアライズします。
といった感じの構成です！


# Dionaeaのインストール

Dionaeaのインストールは、以下の手順でインストール完了です。
公式の手順に則るため、Ubuntuのバージョンは14.04にしてます。

参考：[Install Dionaea](http://dionaea.readthedocs.io/en/latest/installation.html#ubuntu-14-04)

```bash
$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo add-apt-repository ppa:honeynet/nightly
$ sudo apt-get update
$ sudo apt-get install dionaea
$ sysv-rc-conf dionaea on
$ sysv-rc-conf --list | grep dionaea
$ service dionaea start
```

## Dionaeaについて

Dionaeaは、低対話型のハニーポットのため、危険度は低いです。
ただ、一般的なサーバのセキュリティ対応は実施していることを前提にしてます。
細心の注意を払って対応してくださいね！

Dionaeaが、アタックされるように対象ポートをセキュリティグループでフルオープンにします。

|Port     |Service      |Source    |
|---------|-------------|----------|
|21/TCP   |ftp          |0.0.0.0/0 |
|42/TCP   |nameserver   |0.0.0.0/0 |
|80/TCP   |http         |0.0.0.0/0 |
|135/TCP  |msrpc        |0.0.0.0/0 |
|443/TCP  |https        |0.0.0.0/0 |
|445/TCP  |microsoft-ds |0.0.0.0/0 |
|1433/TCP |mssql        |0.0.0.0/0 |
|3306/TCP |mysql        |0.0.0.0/0 |
|5060/TCP |sip          |0.0.0.0/0 |
|5061/TCP |sip-tls      |0.0.0.0/0 |

## Dionaeaのディレクトリについて

* /opt/dionaea/var/dionaea/binaries/: マルウェアが配置されるディレクトリ
* /opt/dionaea/log/: dionaea自身のログを保存
* /opt/dionaea/wwwroot/: Webのドキュメントルート

# VirusTotalのAPIを利用するよ！

VirusTotalは、マルウェアなんじゃないか？！とか、怪しいURLなのでは？！といった時に使用するマルウェアチェックサービスです。
VirusTotalは、マルウェア検出するために50種類以上のエンジンで検査ができます。
しかも、APIも公開されており、スキャン結果を容易に取得できます。
そして、無料！

今回は、VirusTotalのAPIを利用して、Dionaeaに仕込まれたマルウェアをスキャンします。
APIを利用するには、API Keyの取得が必要なため、以下のサイトからアカウント登録を実施してAPI Keyを取得します。

アカウント登録：[VirusTotal](https://www.virustotal.com/ja/)

注意点ですが、APIは、1分間に4回までしかリクエストできません。
以下のドキュメントを参考にしてください。

参考：[Document VirusTotal](https://www.virustotal.com/ja/documentation/public-api/)

あと、森久さんのサイトも非常に参考になります！
VirusTotalだけの話ではなく、ハニーポットに興味ある方は、読んだ方がいいです！

参考：[www.morihi-soc.net](http://www.morihi-soc.net/?p=600)

## APIコール用のスクリプト

Dionaeaのbinariesに仕込まれたマルウェアに対してスキャンを実行するスクリプトです。

```python
#!/usr/bin/env python
import sys
import json
import urllib
import urllib2
import os
import time

files = os.listdir('/opt/dionaea/var/dionaea/binaries/')

for hash in files:
  print hash

  url = "https://www.virustotal.com/vtapi/v2/file/report"
  # API Keyにはアカウント登録した際に取得したKeyを入力する
  params = {"resource": hash, "apikey": "API Key"}

  data = urllib.urlencode(params)
  request = urllib2.Request(url, data)
  response = urllib2.urlopen(request)
  json = response.read()

  with open("{}.json".format(hash), "w") as result:
    result.write(json)

  print "..processing"
  # 1分間に4回までのAPIコール制限があるためスリープを設ける
  time.sleep(20)
```

結果をjsonファイルで出力します。
出力したファイルをS3マウントした箇所に配置することで、S3にアップロードされます。

# Logstashで取り込むよ

ElasticStackはすでにインストール済みを前提にしてます。
また、S3にアクセスするため、Logstashのプラグインの"logstash-input-s3"もインストールしていることとします。
もしインストールされていない場合は、対応お願いします。

* [Install Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/current/_installation.html)
* [Install Kibana](https://www.elastic.co/guide/en/kibana/current/install.html)
* [Install Logstash](https://www.elastic.co/guide/en/logstash/current/installing-logstash.html)
* [Install logstash-input-s3](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-s3.html)

## Logstash.conf

Logstashのconfですが、データソースがjsonのため、フィルタに書くのはjsonだけです。
めっちゃ楽ですね！
これでElasticsearchにストアされます。

```bash:logstash.conf
input {
  s3 {
    tags => "dionaea"
    bucket => "hoge_backet"
    region => "ap-northeast-1"
    prefix => "hoge/"
    interval => "30"
    sincedb_path => "/var/lib/logstash/sincedb_dionaea"
    codec => json
  }
}
filter {
  json {
    source => "message"
  }
}
output {
  elasticsearch {
    hosts => [ "localhost:9200" ]
    index => "vt-logs-%{+YYYYMMdd}"
  }
}
```

# Kibanaで見てみる

それでは、ElasticsearchにストアしたデータをKibanaで確認してみましょう！

![FireShot Capture 50 - Kibana_ - http___54.211.11.251_5601_app_kibana#_discover.png](https://qiita-image-store.s3.amazonaws.com/0/152721/e64f7823-5389-a473-9960-761f6e735259.png)

ちゃんとビジュアライズできてますね！

# 最後に

こんな感じでマルウェアを収集し、スキャン結果をビジュアライズできちゃうのです！
それでは、楽しいお時間をお過ごしくださいーヽ(*ﾟдﾟ)ノ

ではでは、明日は、"GoogleHome"についてですね！
めっちゃ楽しみだー