Technology Innovation Group
2017.11.13(Mon)
Masamitsu Maehara
経済的にハニーポットの
ログ分析をするためのベストプラクティス?
- SecurityJAWS -
自己紹介
l 前原 応光(まえはら まさみつ)
l Future Architect, Inc.
l Technology Innovation Group
l エンプラでAWSとかゴニョゴニョやってます
l ゆるふわエンジニア
@micci184
1 登場人物のご紹介
2 やりたいこと
3 構成について
4 ログを取り込むには
5 どんな結果が出たのよ
6 まとめ
X X
HoneyPot
l 高対話型ハニーポット
l 本物のOSやアプリケーションを利用する
l 情報が得られやすい
l リスク高い
l 低対話型ハニーポット
l OSやアプリケーションをエミュレートして監視する
l 機能制限がある
l 攻撃者にバレる可能性がある
l 高対話型より安全
Dionaea
l 低対話型ハニーポット
l マルウェア収集するよ
l SMB/HTTP/HTTPS/FTP/TFTP/MSSQL/SIP
l それっぽくするために、フロントの画面はつくる
Cowrie
l 低対話型ハニーポット
l SSH特化
l Kippoよりもよくできている
Elastic Stack
l Logstash: 取り込んで加工してストア
l Beats: データシッパー(色々とよしなにやってくれる)
l Elasticsearch: 検索や分析に使われてる
l Kibana: ビジュアライズやダッシュボードが作れる
Logstash
l INPUT: 様々なデータソースを収集
l Filter: PluginのGrokや地理情報を得るためのGeoIPなどを
使いフィルタをかける
l Output: フィルタしたデータを送る
Logstash
INPUT FILTER OUTPUT
ここまで紹介したのを
AWSで環境を構築しますー
!
AWSで構築するハニーポットは、
低対話型です!!
やりたいこと
l いろんなリージョンにハニーポットを配置したい
l 工夫することでマルウェアの収集に影響があるのか
l リージョンごとで攻撃の傾向が違うのかみたい
l いろんなログを収集し、可視化・分析したい
l お金を節約したい
AWSだしリージョンあるし
いろんなところに配置しよう
Ireland
Virginia
Saopaulo
Tokyo
Singapore
California
Canada
Cowrie
Elastic Stack
Dionaea ×4
Cowrie
Cowrie
Cowrie
Cowrie
Cowrie
Ireland
Virginia
Saopaulo
Tokyo
Singapore
California
Canada
110%
100%118%
160%
126%
131%
109%
バージニアを基準にした場合の料金比率
t2.microで比較
Dionaea、Cowrieで
どんなログ取得したい?
Dionaea
l マルウェアを収集し、スキャンかけたい
l ドメイン、IPアドレスで変化するのか
l ドメイン、IPアドレスをpastebin.comに書いたら変化するのか
Cowrie
l 対象ログをCowrie.jsonとする
l パスワードやユーザ名の傾向を知る
l どこの国から攻撃してきているかを知る
l Cowrieの配置場所として良いところとは?
どうやってログを収集する?
どうやってログを収集する?
l 各リージョンにあるcowrieのログをElasticStackに送る
l Dionaeaで収集したログも送る
Cowrie
Cowrie
Cowrie
Cowrie
ElasticStack
dionaea
dionaea
dionaea
dionaea
どうやってログを収集する?
l 各リージョンにあるcowrieのログをElasticStackに送る
l Dionaeaで収集したログも送る
Cowrie
Cowrie
Cowrie
Cowrie
ElasticStack
dionaea
dionaea
dionaea
dionaea
X
l 常にElasticStackを起動したくない
l できるだけログがロストしない仕組み
にしたい
l いつでもログを取り出したい
てことで、こんな構成
l ログはAWSサービスに寄せる
l S3やCloudWatch Logsに保管
Cloudwatch Logs
Bucket
Attack
Cowrie
Dionaea
ElasticStack
Attack
てことで、こんな構成
l ログはAWSサービスに寄せる
l S3やCloudWatch Logsに保管
Attack
Cowrie
Dionaea
ElasticStack
Attack
ここにログを集める!
Cloudwatch Logs
Bucket
Dionaea
Dionaeaの準備
1. Dionaeaを構築を4台構築する(リージョンは、バージニア)
2. それっぽいトップページを作成する
3. ドメインを取得する
4. 取得したドメインとIPアドレスをpastebin.comに記載する
5. Route53のロギングを有効にする
6. 放置する
7. 定期的に収集したマルウェアをスキャンし、スキャン結果の
ログをS3にアップロード
8. Logstashでログを取得し、Elasticsearchにストア
l dionae02: architect-tech.com →
PASTEBIN
l dionae01: Global IP address
l dionae03: Global IP address
l dionae04: architect-tech.net
→
PASTEBIN
PASTEBINに公開する・しない
マルウェアのスキャン
l マルウェアはbinariesディレクトリに格納される
l 複数のアンチウィルスソフトでスキャンしたいので、VirusTotal
を利用する
l VirusTotalはAPIを提供している(1分間に4回まで)
l AmazonLinuxは、Pythonの実行環境が整っているので
Pythonでスクリプト作成
l スキャン結果のログをS3にアップロード
dionaea01
dionaea04 Bucket
...
Cowrie
Cowrieの準備
1. Cowrieを構築を各リージョンに構築する
2. 取得したいログを対象にAWS Logsのconfファイルを作成
対象: cowrie.json
3. VPC FlowLogsのログを可視化したいので、Cowrieにアタッチ
されているENIに対してVPC FlowLogs有効化
#VPCレベルでやるとすべてのENIが対象になるので注意
4. 放置する
5. Logstashでログを取得し、Elasticsearchにストア
Cowrie
California
Cowrie Cowrie Cowrie Cowrie Cowrie
Cloudwatch Logs
Canada
Cloudwatch Logs
Ireland
Cloudwatch Logs
Saopaulo
Cloudwatch Logs
Singapore
Cloudwatch Logs
Tokyo
Cloudwatch Logs
Logstash
Virginia
ログ集約方法
l CloudWatch LogsにCowrieのログをアップロード
l LogstashからCloudWatch LogsのLog Groupからログを取得
Logstash
取得したいログ
l CloudWatch LogsにあるCowrie.json
l CloudWatch LogsにあるVPCFlow Logs
l CloudWatch LogsにあるRoute53のログ
l S3にあるMalwarescanLogs
Grok : VpcFlow Logs & Route53
JsonFilter : Cowrie.json & Scan Logs
Logstashのフィルタ対応
input {
cloudwatch_logs {
region => "us-east-1"
log_group => [ "/aws/route53/architect-tech.com" ]
sincedb_path => "/var/lib/logstash/sincedb_architect_tech_com"
}
}
filter {
grok{
patterns_dir => [ "/etc/logstash/patterns/vpcflowlogs_patterns" ]
match => { "message" => "%{VPCFLOWLOG}"}
}
date {
match => ["start_time", "UNIX"]
target => "@timestamp"
}
geoip {
source => "src_ip"
target => "src_geoip"
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
index => ”vpcflow-logs-%{+YYYYMMdd}"
}
}
# VPC_Flow_Logs
VPCFLOWLOG %{NUMBER:version} %{NUMBER:account_id} %{NOTSPACE:interfac
e_id} %{IP:src_ip} %{IP:dst_ip} %{POSINT:src_port} %{POSINT:dst_port} %{NOTSP
ACE:protocol_id} %{NOTSPACE:packets} %{NOTSPACE:bytes} %{NUMBER:start_ti
me} %{NUMBER:end_time} %{NOTSPACE:action} %{NOTSPACE:log_status}
★Pattern FIle
★Conf FIle
VpCFlow Logs
l InputCloudWatch Logs
Pluginのインストールが必須
l GrokPatternは外だし
l GrokFillterから呼び出す
l UNIXタイムなので、Date
フィルタで定義する
l GeoIPで地理情報を取得
l OutputでIndexを定義
l あらかじめIndexTemplateを
つくっておくこと
(作り方は割愛)
input {
cloudwatch_logs {
region => "us-west-1"
log_group => [ "california_cowrie" ]
sincedb_path => "/var/lib/logstash/sincedb_vpcflowlogs_california"
}
}
filter {
grok {
patterns_dir => [ "/etc/logstash/patterns/route53_patterns" ]
match => { "message" => "%{ROUTE53LOG}" }
}
date {
match => [ "date", "ISO8601" ]
target => "@timestamp"
}
geoip {
source => "resolver_ip"
target => "src_geoip"
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
index => ”Route53-logs-%{+YYYYMMdd}"
}
}
# Route53
ROUTE53LOG %{NOTSPACE:version}¥s%{TIMESTAMP_ISO8601:date} %{NOTSPACE:
host_id}¥s%{URIPROTO:query_name}¥s%{WORD:query_type}¥s%{WORD:respon
se_code}¥s%{WORD:protocol}¥s%{NOTSPACE:edge}¥s%{IP:resolver_ip}¥s(%{IP:e
dns_client_subnet}/%{POSINT:edns_cidr}|-)
★Pattern FIle
★Conf FIle
Route53
l 先ほどのVPCFlow Logsと
要領は一緒
l timestampは、今回ISO8601
l GeoIPで地理情報を取得
l OutputでIndexを定義
l ちなみに
GrokPatternを作成したい
そんな方はログフォーマットを
ちゃんと読むべしー
input {
s3 {
bucket => "cowrie-log"
region => "us-east-1"
prefix => "california/"
interval => "30"
sincedb_path => "/var/lib/logstash/sincedb_cowrie_json_california"
codec => json
}
}
filter {
json {
source => "message"
}
date {
match => [ "timestamp", "ISO8601" ]
target => "@timestamp"
}
geoip {
source => "src_ip"
target => "src_geoip”
}
geoip {
source => "dst_ip"
target => "dst_geoip"
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
index => "cowrie-json-logs-%{+YYYYMMdd}"
}
}
★Conf FIle
Cowrie.json
l S3InputPluginのインストール
が必須
l JsonなどでJson Filterで
読み込む
l SourceIP & DistinaetionIP
共に地理情報を取得
l インデックステンプレートを
作成するときにGeoIPなどの
マッピングすること
input {
s3 {
bucket => "cowrie-log"
region => "us-east-1"
prefix => "california/"
interval => "30"
sincedb_path => "/var/lib/logstash/sincedb_cowrie_json_california"
codec => json
}
}
filter {
json {
source => "message"
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
index => "vt-logs-%{+YYYYMMdd}"
}
}
★Conf FIle
Viurus Total
l Json Filterかけるだけ!
l 以上!!
l Input CloudWatch logs
l S3 Input Plugin
Install Plugin
★Install Input CloudWatch logs
$ cd /usr/share/logstash/
$ bin/logstash-plugin install logstash-input-cloudwatch_logs
★Install S3 Input Plugin
$ cd /usr/share/logstash/
$ bin/logstash-plugin install logstash-input-s3
結果
VPcFlow Logs
国別
マルウェア件数
ユーザ名
アクセス件数
スキャン結果
Domain
Domain
IP
IP
Best10 Username
Best10 Password
Cowrieの結果より
l アクセス件数はアイルランド、サンパウロ、シンガポールが多い
l 利用料金から考えるとアイルランドがコスパがよい
l アイルランド: 109%
l サンパウロ: 160%
l シンガポール: 126%
l そもそもt2.microで動くのでそこまで意識しなくていいかも
ちりつもはあるが。。
Dionaeaの結果より
l グローバルIPではなく、ドメインを登録した方がマルウェアの取
得率が高い
l さらにPASTEBINに登録することで取得率が更にあがる
l やっぱりWannaCryが多い
l ディスク要領使うのでデフォルト8GBだと2週間もたない
l なので、何かしらの施しが必要
l 実は、DionaeaをオンデマンドとSpotFleetで稼働してみた
l Region: Virginia
l InstanceType: m3.medium
l On-demand: 222h → $14.93
l SpotFleet: 383h → $3.58
まとめ
まとめ
l ログをAWS側に寄せることで必要なときに取り出せる
l 保管の料金も安くすむ!
l リージョン毎に料金が違うので、東京にこだわる必要ない
l PASTEBINは有効なサービスなので使うべし
l VirusTotalのAPI上限数は気をつけて
l AWSのログは、親切!ログフォーマットの説明が丁寧
l LogstashのGrokは闇深いけど、楽しいよ!
Thanks

AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?