Skip to content

Elasticsearchとの連携

Shusei Tomonaga edited this page Nov 13, 2023 · 2 revisions

1. Elasticsearchとの連携
2. Docker Composeの使用
3. 運用上の注意

Elasticsearchとの連携

LogonTracerは、EVTXファイルをインポートするだけではなく、Elasticsearchに保存されているイベントログをインポートすることができます。また、LogonTracerでイベントログを分析した結果をElasticsearchに保存することができます。
デフォルトでは、Winlogbeatで送信されたADイベントログをインポートの対象にしています。

LogonTracer-with-elasticsearch

Web GUIからの設定

ElasticsearchのログをLogonTracerにインポートする場合は、"Load from ES"ボタンから行うことができます。ロードする対象ログの期間を指定しない場合は、すべてのログがロードされるため、ログの量が多い場合は、必ず設定してください。LogonTracerでイベントログを分析した結果をElasticsearchに保存する場合は、"Add results analyzed by LogonTracer to Elasticsearch"を有効にしてください。

load-from-es

ElasticsearchのログをLogonTracerにインポートする際の、さらに詳細な設定に関しては、CUIから行うことができます。

Pythonスクリプトでインポートする方法

ElasticsearchのログをCUIでLogonTracerにインポートする場合は、オプション"--es"を使用します。また、LogonTracerでイベントログを分析した結果をElasticsearchに保存する場合は、オプション"--postes"をつけてください。

$ python3 logontracer.py --es --postes --es-server 192.168.1.1:9200

さらに、関連する以下のオプションがあります。必要に応じて、設定してください。

  • --es-server: Elastic Search server address. (default: localhost:9200)
  • --es-index: Elastic Search index to search. (default: winlogbeat-*)
  • --es-prefix: Elastic Search event object prefix. (default: winlog)
  • --es-user: Elastic Search ssl authentication user. (default: elastic)
  • --es-pass: Elastic Search ssl authentication password.
  • --es-cafile: Elastic Search ssl cert file.
  • --es: Import data from Elastic Search. (default: False)
  • --postes: Post data to Elastic Search. (default: False)

Kibanaでの可視化

オプションでLogonTracerでイベントログを分析した結果をElasticsearchに保存した場合、Kibana上で確認することができます。LogonTracerでの分析結果は、index名"logontracer-user-index"および"logontracer-host-index"で保存されています。

kibana

Elasticsearchの検索

LogonTracerでイベントログを分析した結果をElasticsearchで直接検索する場合は、以下のようなクエリを使用することで可能になります。

Search for top 10 user ranks

$ curl -H "Content-Type: application/json" -XPOST 'localhost:9200/logontracer-user-index/_search?pretty' -d '
{
  "query": {
    "match_all": {}
  },
  "size": 10,
  "sort": {
    "rank": {
      "order": "desc"
    }
  }
}'

Search for policy changes and user add/del

$ curl -H "Content-Type: application/json" -XPOST 'localhost:9200/logontracer-user-index/_search?pretty' -d '
{
  "query": {
    "match": {
      "status": "2020 "
    }
  }
}'

Search for admin user

$ curl -H "Content-Type: application/json" -XPOST 'localhost:9200/logontracer-user-index/_search?pretty' -d '
{
  "query": {
    "match": {
      "rights": "system"
    }
  }
}'

Docker Composeの使用

Elasticsearchとの連携テストのために、LogonTracer、ElasticsearchおよびKibanaを同時に起動するdocker-compose.ymlを公開しています。実運用の際は、ログの量などを考慮して、コンテナのクラスタリングやパフォーマンスチューニングをしてください。

LogonTracerをダウンロード

$ git clone https://github.com/JPCERTCC/LogonTracer.git
$ cd LogonTracer\docker-compose-with-elastic-stack

docker-compose.ymlのカスタマイズ

docker-compose.ymlの内容を必要に応じて変更してください。

LogonTracerサーバのIPアドレスを設定

localhost以外の場合は、IPアドレスなどに変更。

environment:
  - LTHOSTNAME=localhost

Composeネットワークの作成

$ docker network create neo4j-network

Docker Composeの起動

$ docker compose build
$ docker compose up -d

運用上の注意

LogonTracerに、長期間(1ヶ月、1年)のログをインポートすることは、LogonTracerの可視化速度の低下につながるためお勧めできません。1週間または1日(適切な期間はホスト数やユーザ数によって異なります)などの間隔で、必要なログをインポートして、分析することを推奨します。

LogonTracerを、ADイベントログの監視に使用する場合は、cronなどで定期的にイベントログを読み込んで(--deleteオプションで読み込み時に、データベースの過去ログを削除する)分析し、結果をElasticsearchに蓄積する(オプション--postes)ようにします。それによって、不審なログやアカウントランキングをKibana上で監視することが可能になります。確認が必要なログが見つかった場合、LogonTracerに対象期間のログをインポートしてログの可視化を行うことで、効率的な監視が可能になります。

Clone this wiki locally