aws security jaws...

Post on 21-Jan-2018

1.725 Views

Category:

Engineering

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Technology Innovation Group2017.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

HoneyPotl 高対話型ハニーポット

l 本物のOSやアプリケーションを利用するl 情報が得られやすいl リスク高い

l 低対話型ハニーポットl OSやアプリケーションをエミュレートして監視するl 機能制限があるl 攻撃者にバレる可能性があるl 高対話型より安全

Dionaeal 低対話型ハニーポット

l マルウェア収集するよl SMB/HTTP/HTTPS/FTP/TFTP/MSSQL/SIPl それっぽくするために、フロントの画面はつくる

Cowriel 低対話型ハニーポット

l SSH特化l Kippoよりもよくできている

Elastic Stackl Logstash: 取り込んで加工してストアl Beats: データシッパー(色々とよしなにやってくれる)l Elasticsearch: 検索や分析に使われてるl Kibana: ビジュアライズやダッシュボードが作れる

Logstashl 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 StackDionaea ×4

Cowrie

Cowrie

Cowrie

Cowrie

Cowrie

Ireland

Virginia

Saopaulo

Tokyo

Singapore

California

Canada

110%

100%118%

160%

126%

131%

109%

バージニアを基準にした場合の料金比率

t2.microで比較

Dionaea、Cowrieでどんなログ取得したい?

Dionaeal マルウェアを収集し、スキャンかけたいl ドメイン、IPアドレスで変化するのかl ドメイン、IPアドレスをpastebin.comに書いたら変化するのか

Cowriel 対象ログを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

dionaeaX

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.json3. 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.jsonl CloudWatch LogsにあるVPCFlow Logsl 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_LogsVPCFLOWLOG %{NUMBER:version} %{NUMBER:account_id} %{NOTSPACE:interface_id} %{IP:src_ip} %{IP:dst_ip} %{POSINT:src_port} %{POSINT:dst_port} %{NOTSPACE:protocol_id} %{NOTSPACE:packets} %{NOTSPACE:bytes} %{NUMBER:start_time} %{NUMBER:end_time} %{NOTSPACE:action} %{NOTSPACE:log_status}

★Pattern FIle

★Conf FIle

VpCFlow Logsl 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}"

}}

# Route53ROUTE53LOG %{NOTSPACE:version}¥s%{TIMESTAMP_ISO8601:date} %{NOTSPACE:host_id}¥s%{URIPROTO:query_name}¥s%{WORD:query_type}¥s%{WORD:response_code}¥s%{WORD:protocol}¥s%{NOTSPACE:edge}¥s%{IP:resolver_ip}¥s(%{IP:edns_client_subnet}/%{POSINT:edns_cidr}|-)

★Pattern FIle

★Conf FIle

Route53l 先ほどのVPCFlow Logsと

要領は一緒l timestampは、今回ISO8601l 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.jsonl 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 Totall Json Filterかけるだけ!l 以上!!

l Input CloudWatch logsl 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.93l SpotFleet: 383h → $3.58

まとめ

まとめl ログをAWS側に寄せることで必要なときに取り出せるl 保管の料金も安くすむ!l リージョン毎に料金が違うので、東京にこだわる必要ないl PASTEBINは有効なサービスなので使うべしl VirusTotalのAPI上限数は気をつけて

l AWSのログは、親切!ログフォーマットの説明が丁寧

l LogstashのGrokは闇深いけど、楽しいよ!

Thanks

top related