LoginSignup
1
1

More than 1 year has passed since last update.

Elastic Securityにおける脅威インテリジェンス(Threat Intelligence)を試してみた

Last updated at Posted at 2022-12-01

はじめに

久しぶりのQiita記事、今回はElasticsearchの2022年アドベントカレンダーのために書きます。(カレンダー作ってくれた吉岡洋さんに感謝!)
色々Elasticの製品で触ってみたことを書いていこうかと思いますが、
今回は脅威インテリジェンス(Threat Intelligence)のための脅威情報の取り込みとそれを使って脅威を検知するところを試していきます。

脅威インテリジェンスとは? 自分も今までセキュリティの分野は本格的にやってこなかったので、何回か説明聞いてもイマイチわかりませんでした。インテリジェンスって言葉を使うところがややこしい。方法論やプラットフォームを指している時もあれば、脅威情報そのものを言うこともあります。TIフィードと言ったりも。今回試す脅威検知は脅威インテリジェンスの一部かもしれませんが、検知の部分は触って理解していくと割とシンプルだったりもすると感じました。

Elastic Stackで用意されたインテグレーション機能を使えば比較的簡単にサードパーティの脅威データベース情報を取り込んで、BeatsやElastic Agentで集めたFWログやプロキシログ、PCのログなどに含まれる脅威情報を検知させることができます。(マルウェアのダウンロードサイトに誰かがアクセスしてしまった、など)

Elastic Stack (Elasticsearch)の環境としてはクラウド版のElastic Cloudを使っていきますが、ご自分でインストールしたオンプレでもほぼ同じ手順でできると思います。(ただし、Beatsではなく、Beatsの後継であるElastic Agentを使うので、そのためのElasticsearch側のFleetサーバーというElastic Agentを集中管理するためのものが必要であり、自分でインストールする場合はそれのセットアップが少し手間取るかもしれません。)

なお、今回はElasticのv8.5.2で試していますが、異なるバージョンでは違うところが出てくるかと思います。ご了承ください。

手順

Elastic Cloudを使ってElastic Stack環境をデプロイ

Elastic Cloudは以下のURLから使うことができます。初めての場合フリートライアルがあります。
https://www.elastic.co/jp/cloud/
その他、AWS,Azure,GCPからもこのElastic Cloudを使うことができます。自分は今回AWSマーケットプレイスからのを使って見ました。(いきつくところは同じなんですが、BillingはAWSです)
image.png

ここでは全てデフォルト値で進めました。バージョンはv8.5.2でした。5分くらいで完了します。
image.png

Threat Intelligence系のIntegrationの選択とElastic Agentのインストール

デプロイが完了したらそのままコンソールにログインできるので、そこでIntegrationsのメニューをクリックします。Integrationsにて、Elastic Stackにデータを集めるための連携機能(プラグインのようなもの)を選択できます。
image.png

左のカテゴリからThreat Intelligenceをクリックして絞り込みすると、サポートされているThreat Intelligenceの連携機能の一覧が確認できます。Betaとタグされたやつもあるように、時間経過とともにラインアップは増えていくと期待しています。
image.png

今回はAbuseCHを使います。その他のは、Threat Intelligenceプロバイダ側のユーザーアカウントを事前に用意しないとAPIアクセスさせてもらえないのですが、AbuseCHは何もしなくてもデータ取得させてくれます。よって今回はこれを使用します。

Add AbuseCHのボタンをクリックします。
image.png

初めて使うときは、最初にElastic Agentを何処かのPCかサーバーにインストールしておく必要があるので、Install Elastic Agentというボタンが表示されます。
image.png

インストール先に応じて表示されたコマンドのコピペでインストールできます。
image.png

自分はコンテナ上で動かしたいので、以下のdocker-compose.ymlを使ってインストールしました。FLEET_URLの文字列とFLEET_ENROLLMENT_TOKENの文字列は上記web画面のコマンドに表示されていますので、コピーしてください。

version: "3"

services:
  # Env variables reference: https://www.elastic.co/guide/en/fleet/current/agent-environment-variables.html
  elastic-agent:
    image: docker.elastic.co/beats/elastic-agent:8.5.2
    container_name: elastic-agent
    hostname: qiita-threat-intel
    restart: always
    environment:
      - FLEET_ENROLLMENT_TOKEN=xxxxxxxxx
      - FLEET_ENROLL=1
      - FLEET_URL=https://xxxxxx.fleet.us-east-2.aws.elastic-cloud.com:443

Docker起動して、接続確認できたらOK。
image.png

さっさとやりたい場合はこのまま右下のSave and Continueでも良いのですが、一旦詳細チェックします。
image.png

詳細を確認すると、このAbuseCHのIntegration機能では4つの脅威情報データベースのAPIから情報を取得することがわかります。
AbuseCH Malware ... https://urlhaus-api.abuse.ch/v1/payloads/recent/
AbuseCH MalwareBazaar ... https://mb-api.abuse.ch/api/v1/
AbuseCH Threat Fox ... https://threatfox-api.abuse.ch/api/v1/
AbuseCH URL ... https://urlhaus-api.abuse.ch/v1/urls/recent/

また、10分間隔でアクセスする設定になってます。
image.png

確認が終わったらSave and Continueのボタンを押し、進めましょう。これでElastic Agentが上記APIにアクセスしてデータ収集を開始し始めます。
image.png

左メニューを開き、そこからDiscoverを開きましょう。開くと下のような画面が表示されます。
image.png

下の操作にて、Elastic Agentが集めたAbuseCHのURLの脅威情報を確認します。
image.png

そして個々の脅威情報をこのように確認します。(中に含まれるURLには直接アクセスしないようにしてください)
image.png

本家abuse.chサイトの以下のデータベースからこの脅威URL文字列を検索すると同じ情報を確認できます。Elasticに取り込まれたデータと見比べてくて見てください。
https://urlhaus.abuse.ch/browse/

image.png

Elastic Securityのアラート設定

左メニューからSecurityカテゴリのAlertsを開き、中のManage rulesボタンをクリックします。
image.png

初めての場合、製品で用意されている検知ルールをまずロードします。
image.png

たくさんの検知ルールがロードされましたね。
image.png
なお、これらをドキュメントで手軽に確認したい場合はここで見ることができます。
https://www.elastic.co/guide/en/security/8.5/prebuilt-rules.html

今回のAbuseCHの脅威情報を使って脅威検知するためのルールは、Threat Intel Indicator Matchというルールです。これを有効化します。
image.png

ルール名のリンクをクリックして、どんなルールとなっているのかを見てみます。
image.png

ログに対して脅威検知させる

本当はプロキシログやWebサーバーログなどを別途Elastic Agentで収集して、そのログに脅威情報が含まれるかを検知させるのですが、今回は簡易的にCLIで擬似的なログデータを送信して反応を試します。

左メニューからDevToolsを開き、以下のリクエストを実行します。擬似的なログデータをElasticsearchに投入しています。logs-qiita-testというインデックスに格納しています。インデックスパターンがlogs-*であるものが検知ルールでのスキャン対象ですので、インデックス名がlogs-で始まるようにしておくことがポイントです。
image.png

POST /logs-qiita-test/_doc
{
  "@timestamp": "2022-12-01T21:30:38+09:00",
  "url.full": "http://xxxx/xxx.xx"
}

GET /logs-qiita-test/_search

試すときは、上のタイムスタンプも実際の時間に近いものにしてください。また危ないURLを直接載せたくないので、上記ではURLはマスクしています。試す際はお着替えください。検知ルールは1時間ごとに実行され、直近の1時間のログを見るようになっています。

長くて1時間待つ必要がありますが(間隔は変更可能)、その後再度左メニューのSecurity配下のAlertsを開くと、このようにアラートが表示されているはずです。
image.png

検知された脅威の情報をこのように確認をすることができます。脅威データベースへのリンクを開くと良いです。
image.png

終わりに

Elasticで色々な脅威情報を取ってきて集約して、ログなどに対する脅威検知の自動化に使えることが確認できました。次に検知後のアクションをどうしていくかが重要となってきますが、それについては別の機会にまた試していきたいと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1