はじめに
こんばんはー
Advent Calendar11日目ですね!
そして、間違えて同じ日に二つもエントリーしてしまいましたd(゚∀゚d)ォゥィェ!!
ちなみに、もう一つのQiita記事は、以下なので興味ある人は見て頂ければと思います。
絶対的に使った方がいいLogstashのMultiple Pipelinesについて書いてみた
今年は、ハニーポッターになるべく、いろいろ試してたのですが、Qiita記事を一切書いてませんでした。。
書こう書こうと思ってたら、今年ももう終わり。。
でも、最後の追い上げ!ということで、しっかりと足跡を残したいと思いますー
てことで、今回は、Dionaeaというハニーポットツールを使ってマルウェアを収集して、スキャンとか可視化までをゆるーく書いていきます。
流れはこんな感じです!
- 環境について
- 全体構成について
- Dionaeaのインストール
- VirusTotalのAPIを利用するよ!
- Logstashで取り込むよ
- 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
全体構成について
ざっくりと構成について説明しますー
Dionaeaを配置し、VirusTotalにAPIコールし、マルウェアかどうかをスキャンします。
スキャン結果のjsonファイルをS3に格納し、Logstashがデータを取得します。
Logstashが取得したデータをElasticsearchにストアし、Kibanaがビジュアライズします。
といった感じの構成です!
Dionaeaのインストール
Dionaeaのインストールは、以下の手順でインストール完了です。
公式の手順に則るため、Ubuntuのバージョンは14.04にしてます。
$ 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
注意点ですが、APIは、1分間に4回までしかリクエストできません。
以下のドキュメントを参考にしてください。
あと、森久さんのサイトも非常に参考になります!
VirusTotalだけの話ではなく、ハニーポットに興味ある方は、読んだ方がいいです!
APIコール用のスクリプト
Dionaeaのbinariesに仕込まれたマルウェアに対してスキャンを実行するスクリプトです。
#!/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"もインストールしていることとします。
もしインストールされていない場合は、対応お願いします。
Logstash.conf
Logstashのconfですが、データソースがjsonのため、フィルタに書くのはjsonだけです。
めっちゃ楽ですね!
これでElasticsearchにストアされます。
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で確認してみましょう!
ちゃんとビジュアライズできてますね!
最後に
こんな感じでマルウェアを収集し、スキャン結果をビジュアライズできちゃうのです!
それでは、楽しいお時間をお過ごしくださいーヽ(*゚д゚)ノ
ではでは、明日は、"GoogleHome"についてですね!
めっちゃ楽しみだー