Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

4,190 views

Published on

ヒカラボ発表資料
活用事例は、以下参照!
https://www.slideshare.net/hibinohisashi/ss-77133588

Published in: Engineering
  • Be the first to comment

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

  1. 1. Elastic Stack Technology Innovation Group 2017.06.20(Tue) Masamitsu Maehara 世界にさらしたサーバを可視化してみた
  2. 2. 自己紹介  前原 応光(まえはら まさみつ)  Future Architect, Inc.  Technology Innovation Group  AWSをゴニョゴニョやってますー  ゆるふわエンジニア @micci184
  3. 3. 目的  Elastic Stackの魅力を知ってもらう  ログを可視化する楽しさを知ってもらう
  4. 4. Elastic Stack??
  5. 5. Elastic Stack Elastic CLoud LogStash Beats Elasticsearch Kibana + Security Alert Monitor Graph  Logstash/Beats:取込み  Elasticsearch:保存/インデックス/分析  Kibana:ユーザインターフェース
  6. 6. 世界にさらす?
  7. 7. HoneyPot
  8. 8. ??
  9. 9. HoneyPot  高対話型ハニーポット  本物のOSやアプリケーションを利用する  情報が得られやすい  リスク高い  低対話型ハニーポット  OSやアプリケーションをエミュレートして監視する  機能制限がある  攻撃者にバレる可能性がある  高対話型より安全
  10. 10. Dionaea  低対話型ハニーポット  マルウェア収集するよ  SMB/HTTP/HTTPS/FTP/TFTP/MSSQL/SIP  それっぽくするために、フロントの画面はつくる  低対話型ハニーポット  SSH特化  Kippoよりもよくできている Cowrie
  11. 11. 今回の構成について  AWSを使用  ハニーポットにBeatsをインストール  Elastic Stackにデータを統合 Dionaea Region@Virginia HaneyPot VPC Public Subnet Cowrie Elastic Stack Wordpress Client・ ・ ・ Monitoring Attack Logging
  12. 12. 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
  13. 13. 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).
  14. 14. Beats  データシッパー  Beatsには家族がいるよ  Filebeat:ログファイルを送る  Metricbeat:メトリックデータ(CPU/Mem..etc)を送る  Packetbeat:パケットキャプチャデータを送る  Winlogbeat:Windowsイベントログを送る  Hearbeat:稼働状況の監視
  15. 15. 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 KibanaMetric Beat Filebeat Amazon Linux + Apache Apache WordPress Packetbeat + MySQL
  16. 16. 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"]
  17. 17. 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
  18. 18. !!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
  19. 19. !!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
  20. 20. Visualization♥
  21. 21. 素敵♥
  22. 22. 今までは…  Filebeatで可視化したいログをLogstashに送る  Logstashが受け付けたログを正規化して、Elasticsearchにストア  Kibanaでいい感じに見れるようにDashbordを作成
  23. 23. あれ? Logstash不要説?
  24. 24. そんなことはない!
  25. 25. Logstash & Dionaea
  26. 26. 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
  27. 27. 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
  28. 28. 仕込まれたマルウェアを リアルタイムに監視したい…
  29. 29. 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 KibanaMetric Beat
  30. 30. ちなみに、みなさん使ってます? Logstash
  31. 31. Logstash vs fluentd  Google Trendで比較  国別で比較  青:Logstash  赤:fluentd
  32. 32. Grok filter
  33. 33. 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
  34. 34. つらい…
  35. 35. Grok Constructorhttp://grokconstructor.appspot.com/do/match
  36. 36. Grok Constructor  Webブラウザでテスト可能  Logstashで標準出力で試すのもあり  Logstash.conf書き換えるの面倒とかだったら便利
  37. 37. ここにログを貼る Grok Filter 貼っつけたらGO!!
  38. 38. Grok Constructor  結果は、こんな感じ  checkにOK/FOUNDが抽出できている  ただし、マルウェア名が抽出できていない  再度、Grok Filter
  39. 39. dataで抽出した値を対象とする Grok Filter 貼っつけたらGO!!
  40. 40. Grok Constructor  結果は、こんな感じ  malwareにマルウェア名が抽出できている
  41. 41. 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/" } }
  42. 42. いい感じに取れてる
  43. 43. Malware♥
  44. 44. まとめ  Elastic Stackを活用することで、インプットからアウトプットまで、全てを任せ ることができる  Beatsを使うことで簡単に可視化できる  とりあえずサーバを公開すれば、ログの幅が広がる  この発表を聞いて今すぐにでもサーバ公開したくなったはず?  Logstashに負けないで!
  45. 45. Thanks

×