こんにちはElastic Certified Engineerのノムラです。
昨日、Elastic Stackの7.9がリリースされました。
今回も魅力的な機能が追加されました。
そこで、追加された機能のうち特に面白いと思う機能をご紹介します!
EQL(Event Query Language)
エンタープライズライセンスで利用可能となったSIEM向けの新機能です。
ネットワークログやシステムログのような時系列データに対して、マルウェア等の侵入から感染、不正操作までの一連のイベントを簡単に検索可能とします。
www.elastic.co
検索方法
マルウェアが侵入、インストールされたケースを想定し検索を実行します。
以下のような独自クエリで検索が可能となります。
GET /my-index-000001/_eql/search { "query": """ sequence [ process where process.name == "regsvr32.exe" ] [ file where (file.size > 0 and stringContains(file.name, "scrobj.dll")) ] """ }
条件として、通常のmatch検索だけでなく、sizeの指定やstringContains等のメソッドが利用可能です。
またsequenceを利用することで、検索時の条件を時系列の順に指定可能です。
上記では、
1ドキュメント目:process.nameが"regsvr32.exe"であるドキュメントを検索
2ドキュメント目:fileフィールドのsizeパラメータが0より大きく、かつfile.nameフィールドの値に"scrobj.dll"を含むドキュメントを検索
と各シーケンス毎に条件を指定しています。
検索結果
検索結果は以下です
{
"is_partial": false,
"is_running": false,
"took": 60,
"timed_out": false,
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"sequences": [
{
"events": [
{
"_index": "my-index-000001",
"_id": "OQmfCaduce8zoHT93o4H",
"_version": 1,
"_seq_no": 3,
"_primary_term": 1,
"_score": null,
"_source": {
"@timestamp": "2099-12-07T11:07:09.000Z",
"event": {
"category": "process",
"id": "aR3NWVOs",
"sequence": 4
},
"process": {
"pid": 2012,
"name": "regsvr32.exe",
"command_line": "regsvr32.exe /s /u /i:https://...RegSvr32.sct scrobj.dll",
"executable": "C:\\Windows\\System32\\regsvr32.exe"
}
}
},
{
"_index": "my-index-000001",
"_id": "yDwnGIJouOYGBzP0ZE9n",
"_version": 1,
"_seq_no": 4,
"_primary_term": 1,
"_score": null,
"_source": {
"@timestamp": "2099-12-07T11:07:10.000Z",
"event": {
"category": "file",
"id": "tZ1NWVOs",
"sequence": 5
},
"process": {
"pid": 2012,
"name": "regsvr32.exe",
"executable": "C:\\Windows\\System32\\regsvr32.exe"
},
"file": {
"path": "C:\\Windows\\System32\\scrobj.dll",
"name": "scrobj.dll"
}
}
}
]
}
]
}
}
既存のQuery DSLでは実現できない、時系列の順(マルウェアの侵入から不正操作までの順)で条件を指定して検索できるのはかなり便利な機能だと思います。
Data Streams
BASICライセンスから利用可能な時系列データの読み書きを簡単に管理することができる機能です。
Data Stream機能を利用することで、1インデックスの作成単位の設定(年月日、サイズ)をILM画面から設定可能となります。
www.elastic.co
特徴
通常、時系列ログを扱うときには複数のインデックスを作る必要があり、管理が複雑化していました。
例えば、「index-a-202008」「index-a-202009」「index-a-202010」... と月毎にインデックスを作成していました。
DataStreamを利用すると、単一のインターフェースを提供し、インデックス名を意識せず単一の名前で扱うことができます。
またインデックスの作成単位や、そのローテート期間等の管理をGUIから一括で行うことが可能です。
利用方法
利用方法は以下です
インデックスの作成単位を設定する
下記の設定では、25GB毎に新しいインデックスを作成するように定義しています
PUT /_ilm/policy/my-data-stream-policy { "policy": { "phases": { "hot": { "actions": { "rollover": { "max_size": "25GB" } } } } } }
Index Templateを定義する
SettingsにLife Cycle Policyを定義します。
PUT /_index_template/my-data-stream-template { "index_patterns": [ "my-data-stream*" ], "data_stream": { }, "priority": 200, "template": { "settings": { "index.lifecycle.name": "my-data-stream-policy" } } }
Data Streamを作成する
「my-data-stream-alt」が読み書きの指定対象となります。
PUT /_data_stream/my-data-stream-alt
運用がかなり楽になりそうな機能だと思っており、是非実際に導入してみたい機能です。
Wildcard Datatypeの追加
最後は、Wildcard Datatypeです。
7.9から追加された新しいデータ型でWildcard検索の高速化に利用可能なデータ型です。
特にカーディナリティが高いフィールドに対して、Wildcard Query、Regexp Queryを利用する際、このWildcard Datatypeを利用することで従来のText、Keyword型よりもかなり高速に検索できるそうです。
利用方法
以下のようにIndex Mappingのデータ型にWildcard Datatypeを指定することで、利用可能です
PUT my-index-000001 { "mappings": { "properties": { "my_wildcard": { "type": "wildcard" } } } } PUT my-index-000001/_doc/1 { "my_wildcard" : "This string can be quite lengthy" } POST my-index-000001/_doc/_search { "query": { "wildcard" : { "value": "*quite*lengthy" } } }
より詳細が知りたい方は、昨日投稿されたElastic社のブログも参考になると思います。
www.elastic.co
最後に
今回も内容が濃いリリースでした。
特に、最近のリリースからは
・SIEM
・データ加工を簡単にする
という部分に力を注いでいるように感じます。
ますます便利になるElasticStackを引き続き使い倒していきたいです!
Acroquest Technologyでは、キャリア採用を行っています。
- ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
- Elasticsearch等を使ったデータ収集/分析/可視化
- マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
- 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のデータサイエンティストの求人 - Wantedlywww.wantedly.com