elastic stack 世界にさらしたサーバを可視化してみた

50
Elastic Stack Technology Innovation Group 2017.06.20(Tue) Masamitsu Maehara 世界にさらしたサーバを可視化してみた

Upload: masamitsu-maehara

Post on 21-Jan-2018

2.927 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: Elastic stack 世界にさらしたサーバを可視化してみた

Elastic Stack

Technology Innovation Group

2017.06.20(Tue) Masamitsu Maehara

世界にさらしたサーバを可視化してみた

Page 2: Elastic stack 世界にさらしたサーバを可視化してみた

自己紹介 前原 応光(まえはら まさみつ)

Future Architect, Inc.

Technology Innovation Group

AWSをゴニョゴニョやってますー

ゆるふわエンジニア

@micci184

Page 3: Elastic stack 世界にさらしたサーバを可視化してみた

目的 Elastic Stackの魅力を知ってもらう

ログを可視化する楽しさを知ってもらう

Page 4: Elastic stack 世界にさらしたサーバを可視化してみた

Elastic Stack??

Page 5: Elastic stack 世界にさらしたサーバを可視化してみた

Elastic Stack

Elastic CLoud

LogStash Beats

Elasticsearch

Kibana

+

Security

Alert

Monitor

Graph

Logstash/Beats:取込み

Elasticsearch:保存/インデックス/分析

Kibana:ユーザインターフェース

Page 6: Elastic stack 世界にさらしたサーバを可視化してみた

世界にさらす?

Page 7: Elastic stack 世界にさらしたサーバを可視化してみた

HoneyPot

Page 8: Elastic stack 世界にさらしたサーバを可視化してみた

??

Page 9: Elastic stack 世界にさらしたサーバを可視化してみた
Page 10: Elastic stack 世界にさらしたサーバを可視化してみた

HoneyPot 高対話型ハニーポット

本物のOSやアプリケーションを利用する

情報が得られやすい

リスク高い

低対話型ハニーポット

OSやアプリケーションをエミュレートして監視する

機能制限がある

攻撃者にバレる可能性がある

高対話型より安全

Page 11: Elastic stack 世界にさらしたサーバを可視化してみた

Dionaea 低対話型ハニーポット

マルウェア収集するよ

SMB/HTTP/HTTPS/FTP/TFTP/MSSQL/SIP

それっぽくするために、フロントの画面はつくる

低対話型ハニーポット

SSH特化

Kippoよりもよくできている

Cowrie

Page 12: Elastic stack 世界にさらしたサーバを可視化してみた

今回の構成について

AWSを使用

ハニーポットにBeatsをインストール

Elastic Stackにデータを統合

Dionaea

Region@Virginia

HaneyPot VPC

Public Subnet

Cowrie Elastic Stack

Wordpress

Client ・・・

Monitoring

Attack

Logging

Page 13: Elastic stack 世界にさらしたサーバを可視化してみた

Install Dionaea ### Ubuntu 14.04 $ sudo apt-get update

$ sudo apt-get dist-upgrade

$ sudo apt-get install software-properties-common

$ sudo add-apt-repository ppa:honeynet/nightly

$ sudo apt-get update

$ sudo apt-get install dionaea

### Start Dionaea

$ sudo service dionaea start

Page 14: Elastic stack 世界にさらしたサーバを可視化してみた

Install Cowrie ### Ubuntu 16.04 $ sudo apt-get install git python-virtualenv libmpfr-dev libssl-dev libmpc-dev libffi-dev build-essential libpython-dev python2.7-minimal authbind

### adduser Cowrie

$ sudo adduser --disabled-password cowrie

$ sudo su - cowrie

### Setup Virtual Enviroment

$ virtualenv cowrie-env

$ source cowrie-env/bin/activate

### Install configuration file

$ export PYTHONPATH=/home/cowrie/cowrie

### Start Cowrie

$ bin/cowrie start

Activating virtualenv “cowrie-env”

Starting cowrie: [twistd -l log/cowrie.log --umask 0077 --pidfile var/run/cowrie.pid cowrie ]...

$ bin/cowrie status

cowrie is running (PID: 5979).

Page 15: Elastic stack 世界にさらしたサーバを可視化してみた

Beats データシッパー

Beatsには家族がいるよ

Filebeat:ログファイルを送る

Metricbeat:メトリックデータ(CPU/Mem..etc)を送る

Packetbeat:パケットキャプチャデータを送る

Winlogbeat:Windowsイベントログを送る

Hearbeat:稼働状況の監視

Page 16: Elastic stack 世界にさらしたサーバを可視化してみた

Data Flow WordPressのApache/MySQLは直接Elasticsearchにストア

ハニーポットが出力するログをLogstashを介してElasticsearchにストア

Dionaea Filebeat

Ubuntu

+ Log /dionaea.log /binalies/*

Amazon Linux

Logstash + Input + Filter + Output

Cowrie Filebeat

Ubuntu

+ Log /cowrie.log

Elastic search

Kibana Metric Beat

Filebeat

Amazon Linux

+ Apache

Apache

WordPress

Packetbeat + MySQL

Page 17: Elastic stack 世界にさらしたサーバを可視化してみた

Filebeat Modules Filebeat をインスール

$ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.0.0-alpha2-x86_64.rpm

$ sudo rpm -vi filebeat-6.0.0-alpha2-x86_64.rpm

### Configuring

$ vim /etc/filebeat/filebeat.yml

#------------------------------- Apache2 Module ------------------------------

- module: apache2

# Access logs

access:

enabled: true

var.paths: ["/var/log/httpd/access_log"]

error:

enabled: true

var.paths: ["/var/log/httpd/error_log"]

#-------------------------- Elasticsearch output -------------------------------

output.elasticsearch:

hosts: [“xxx.xxx.xxx.xxx:9200"]

Page 18: Elastic stack 世界にさらしたサーバを可視化してみた

Ingest Plugins Ingest Geoip & Ingest user agent をインストール

Ingest Geoip:IPアドレスの地図マッピングをよしなに

Ingest user agent:ユーザーエージェントをよしなに

Ingenst Pluginsは、Elastic Stackサーバにインストール

### Ingest Geoip

$ sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-geoip

### Ingest user agent

$ sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-user-agent

Page 19: Elastic stack 世界にさらしたサーバを可視化してみた

!!Attention #01 プロキシ環境は気を付けて

Ingest Pluginsインストール時にタイムアウトエラー

起動スクリプトにプロキシ設定を実施し、インストール

$ sudo /usr/share/elasticsearch/bin//elasticsearch-plugin install ingest-user-agent

-> Downloading ingest-user-agent from elastic

Exception in thread "main" java.net.ConnectException: 接続がタイムアウトしました (Connection timed out)

### Setup Proxy

$ export ES_JAVA_OPTS="-Dhttp.proxyHost=xxx -Dhttp.proxyPort=xxx -Dhttps.proxyHost=xxx -Dhttps.proxyPort=xxx"

### Install ingest-user-agent

$ /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-user-agent

-> Downloading ingest-user-agent from elastic

[=================================================] 100% ### Ingest Geoip

Page 20: Elastic stack 世界にさらしたサーバを可視化してみた

!!Attention #02 プロキシ環境は気を付けて

Filebeat起動時にDashboardsをインポートしてくれる優れもの

#filebeat.ymlのDashbords設定で起動時にインポートが可能

ただし、プロキシ環境だと起動できずに死亡。。Orz

なので手で入れましょう

$ sudo vim /etc/filebeat/filebeat.yml

#============================== Dashboards =====================================

- #setup.dashboards.enabled: false

+ #setup.dashboards.enabled: enable

$ sudo /usr/share/filebeat/scripts/import_dashboards -file /tmp/beats-dashboards-x.x.zip -es http://xxx:9200

Page 21: Elastic stack 世界にさらしたサーバを可視化してみた

Visualization♥

Page 22: Elastic stack 世界にさらしたサーバを可視化してみた
Page 23: Elastic stack 世界にさらしたサーバを可視化してみた
Page 24: Elastic stack 世界にさらしたサーバを可視化してみた
Page 25: Elastic stack 世界にさらしたサーバを可視化してみた

素敵♥

Page 26: Elastic stack 世界にさらしたサーバを可視化してみた

今までは…

Filebeatで可視化したいログをLogstashに送る

Logstashが受け付けたログを正規化して、Elasticsearchにストア

Kibanaでいい感じに見れるようにDashbordを作成

Page 27: Elastic stack 世界にさらしたサーバを可視化してみた

あれ? Logstash不要説?

Page 28: Elastic stack 世界にさらしたサーバを可視化してみた

そんなことはない!

Page 29: Elastic stack 世界にさらしたサーバを可視化してみた

Logstash & Dionaea

Page 30: Elastic stack 世界にさらしたサーバを可視化してみた

Malware Dionaeaに仕込まれたマルウェア?

/opt/dionaea/var/dionaea/binariesにウヨウヨ…

$ ll /opt/dionaea/var/dionaea/binaries

-rw------- 1 dionaea dionaea 53 Jun 6 02:59 d41d8cd98f00b204e9800998ecf8427e.gz

-rw------- 1 dionaea dionaea 162168 Jun 7 22:56 dc8c32d7f26352c8484bc490b6467843.gz

-rw------- 1 dionaea dionaea 153820 Jun 7 02:34 dd0400bed68d272b08d1d0272bc18462.gz

-rw------- 1 dionaea dionaea 129803 Jun 5 01:01 de1e602b2452a95ba57ef53347e50094.gz

-rw------- 1 dionaea dionaea 22778 Jun 6 17:38 e0ddd8bf8e3b97ad25855721dc75daae.gz

-rw------- 1 dionaea dionaea 155154 Jun 7 04:33 e53ed987e82ad7bf076c23d91401cac7.gz

-rw------- 1 dionaea dionaea 1189 Jun 8 15:32 ead49a9b7b0c8ad6894be45674cebf77.gz

-rw------- 1 dionaea dionaea 22777 Jun 6 17:39 eb18a7d302bbc8c0b3ed2cd1612e8d59.gz

-rw------- 1 dionaea dionaea 21966 Jun 5 16:52 ee0efafc69a13cd57d714ffdc603d8fc.gz

-rw------- 1 dionaea dionaea 154329 Jun 4 16:48 f09ee5028fd1b1eaaf22df1538de159b.gz

-rw------- 1 dionaea dionaea 156637 Jun 9 08:51 f5f1fd0d093d81a4a769c20aca1d6232.gz

-rw------- 1 dionaea dionaea 29643 Jun 8 15:34 fc9b0b8b711e44ce0d4f91b0cedb1c76.gz

Page 31: Elastic stack 世界にさらしたサーバを可視化してみた

ClamScan マルウェア?ってことで、スキャン実行

FOUNDがマルウェア判定

$ clamscan /opt/dionaea/var/dionaea/binaries/

/opt/dionaea/var/dionaea/binaries/f09ee5028fd1b1eaaf22df1538de159b.gz: Win.Worm.Kido-200 FOUND

/opt/dionaea/var/dionaea/binaries/621c0b356c49edc5ce4cf3ee88c30f82.gz: OK

/opt/dionaea/var/dionaea/binaries/90e02a26204ade7771acf7e8521bdf09.gz: Win.Worm.Kido-297 FOUND

/opt/dionaea/var/dionaea/binaries/02830b424d88664cc3576941dd9841f9.gz: Win.Worm.Kido-307 FOUND

/opt/dionaea/var/dionaea/binaries/a7bc14c1bd7271a45391f1e1541afe43.gz: Win.Worm.Downadup-110 FOUND

/opt/dionaea/var/dionaea/binaries/87136c488903474630369e232704fa4d.gz: Win.Worm.Kido-113 FOUND

/opt/dionaea/var/dionaea/binaries/1195dfde6305980ed050a9751b157f42.gz: Win.Worm.Kido-293 FOUND

/opt/dionaea/var/dionaea/binaries/1b4cd56e54d3f9030a153590fb3fa9e5.gz: Win.Worm.Kido-316 FOUND

/opt/dionaea/var/dionaea/binaries/fc9b0b8b711e44ce0d4f91b0cedb1c76.gz: OK

/opt/dionaea/var/dionaea/binaries/cae8a8524eeb0e7de1fb3704bd14b7ba.gz: Win.Trojan.Ramnit-1847 FOUND

/opt/dionaea/var/dionaea/binaries/7bb455ea4a77b24478fba4de145115eb.gz: Win.Worm.Kido-197 FOUND

/opt/dionaea/var/dionaea/binaries/eb18a7d302bbc8c0b3ed2cd1612e8d59.gz: OK

/opt/dionaea/var/dionaea/binaries/smb-az4poq4s.tmp.gz: OK

/opt/dionaea/var/dionaea/binaries/16acf30169d089b8a967f40d9a38d8f7.gz: Win.Trojan.Agent-129152 FOUND

Page 32: Elastic stack 世界にさらしたサーバを可視化してみた

仕込まれたマルウェアを リアルタイムに監視したい…

Page 33: Elastic stack 世界にさらしたサーバを可視化してみた

Data Flow 定期的にClamScanを実行し、ログ出力

FilebeatがログをElastic Stackサーバに送る

Logstashはインプットしたデータを正規化し、Elasticsearchにストアする

Kibanaで可視化

Dionaea Filebeat

Ubuntu

+ Log /binalies/* /log/scan.log

clamscan.sh

Amazon Linux

Logstash + Input + Filter + Output

Elastic search

Kibana Metric Beat

Page 34: Elastic stack 世界にさらしたサーバを可視化してみた

ちなみに、みなさん使ってます?

Logstash

Page 35: Elastic stack 世界にさらしたサーバを可視化してみた

Logstash vs fluentd Google Trendで比較

国別で比較

青:Logstash

赤:fluentd

Page 36: Elastic stack 世界にさらしたサーバを可視化してみた

Grok filter

Page 37: Elastic stack 世界にさらしたサーバを可視化してみた

Grok Filter

ClamScanした結果が、以下でしたね

これをいい感じに正規化して必要なKey-Valueを抽出する必要あり

欲しい値

OK/FOUND (Key : check)

マルウェア名 (Key : malware)

$ clamscan /opt/dionaea/var/dionaea/binaries/

/opt/dionaea/var/dionaea/binaries/f09ee5028fd1b1eaaf22df1538de159b.gz: Win.Worm.Kido-200 FOUND

/opt/dionaea/var/dionaea/binaries/621c0b356c49edc5ce4cf3ee88c30f82.gz: OK

/opt/dionaea/var/dionaea/binaries/90e02a26204ade7771acf7e8521bdf09.gz: Win.Worm.Kido-297 FOUND

/opt/dionaea/var/dionaea/binaries/02830b424d88664cc3576941dd9841f9.gz: Win.Worm.Kido-307 FOUND

Page 38: Elastic stack 世界にさらしたサーバを可視化してみた

つらい…

Page 39: Elastic stack 世界にさらしたサーバを可視化してみた

Grok Constructor http://grokconstructor.appspot.com/do/match

Page 40: Elastic stack 世界にさらしたサーバを可視化してみた

Grok Constructor

Webブラウザでテスト可能

Logstashで標準出力で試すのもあり

Logstash.conf書き換えるの面倒とかだったら便利

Page 41: Elastic stack 世界にさらしたサーバを可視化してみた

ここにログを貼る

Grok Filter

貼っつけたらGO!!

Page 42: Elastic stack 世界にさらしたサーバを可視化してみた

Grok Constructor

結果は、こんな感じ

checkにOK/FOUNDが抽出できている

ただし、マルウェア名が抽出できていない

再度、Grok Filter

Page 43: Elastic stack 世界にさらしたサーバを可視化してみた

dataで抽出した値を対象とする

Grok Filter

貼っつけたらGO!!

Page 44: Elastic stack 世界にさらしたサーバを可視化してみた

Grok Constructor

結果は、こんな感じ

malwareにマルウェア名が抽出できている

Page 45: Elastic stack 世界にさらしたサーバを可視化してみた

Logstash.conf

最終的にこんな感じ

input { beats { port => 5044 } } filter { grok { match => [ "message", "/[^/]+/[^/]+/[^/]+/[^/]+/(?<field>[^/]+)/%{GREEDYDATA:data}%{WORD:check}"] remove_field => [ "host", "message" ] } grok { match => [ "data", "(?:[¥w._/%-]+)%{WORD}(?:[:]*)%{GREEDYDATA:malware}"] remove_field => [ "data" ] } } output { elasticsearch { hosts => "http://xxx.xxx.xxx.xxx:9200/" } }

Page 46: Elastic stack 世界にさらしたサーバを可視化してみた

いい感じに取れてる

Page 47: Elastic stack 世界にさらしたサーバを可視化してみた
Page 48: Elastic stack 世界にさらしたサーバを可視化してみた

Malware♥

Page 49: Elastic stack 世界にさらしたサーバを可視化してみた

まとめ Elastic Stackを活用することで、インプットからアウトプットまで、全てを任せ

ることができる

Beatsを使うことで簡単に可視化できる

とりあえずサーバを公開すれば、ログの幅が広がる

この発表を聞いて今すぐにでもサーバ公開したくなったはず?

Logstashに負けないで!

Page 50: Elastic stack 世界にさらしたサーバを可視化してみた

Thanks