Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

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

4 852 vues

Publié le

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

Publié dans : Ingénierie
  • Soyez le premier à commenter

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

×