Windows EventLog를 ElasticSearch로 가져오기

Overview



제목대로입니다.
특히 EvtxtoElk을 사용하여 가져옵니다.
# dockerでelasticsearch, kibanaを建てる
$ docker run -p 9200:9200 -p 9300:9300 -p 5601:5601 sebp/elk

# ライブラリのインストール
$ pip install evtxtoelk
from evtxtoelk import EvtxToElk
EvtxToElk.evtx_to_elk('example.evtx', 'http://localhost:9200')

2019/10/06 추가:

100배 빨라졌습니다
Windows EventLog를 ElasticSearch로 가져 오기 (100 배 빠르게)

Description



DFIR에서 필수 이벤트 로그 조사이지만, 나는 데이터를 조금 볼 때 log2timeline/plaso에서 CSV로 변환하고 ripgrep에서 검색을 수행했습니다.
눈으로 보는 것만으로도 충분하지만 프로그램에서 어느 정도 자동화를 할 때 pandas를 데이터베이스 적으로 사용하거나 SQLite로 검색하는 것은 성능이 매우 나쁩니다.
가능하면 최소한 1 쿼리 0.1 초 이내에 돌아와 주었지만, 거대한 이벤트 로그 검색에는 SQLite에서도 2 초 정도 걸렸습니다.

역시 떡은 떡집, 라고 하는 것으로 빅데이터 해석에 적합하다 ElasticSearch 씨로 시험한 바 0.02초 정도라고 좋은 느낌입니다! ripgrep 수준의 속도를 얻었습니다!
색인에 시간이 걸리는 것은 어려운 일이지만 프로그램을 돌리면 안심할 수 있으므로 검색 할 때마다 좌절하는 것보다 훨씬 훌륭합니다.

EvtxtoElk의 자세한 사용법은 저자의 블로그에 쓰거나 쓰지 않았으므로 읽으십시오.
여기 ブログに書いてなかった(たぶん)実行オプション에 대해서도 씁니다.

그런데 evtx 자체는 AccessData - FTK Imager log2timeline/plaso를 사용하여 추출하는 것이 좋습니다.

Example



나는 분석하고 싶은 파일이 여러 개 있었기 때문에 이런 느낌의 스크립트를 써 실행했습니다

이벤트 로그의 디렉토리 구성


data/
├── server01/
│   └── Security.evtx
│
├── server02/
│   └── Security.evtx
│
└── server03/
    └── Security.evtx

스크립트 (import_evtx.py)


# coding: utf-8

import sys
from pathlib import Path

from evtxtoelk import EvtxToElk


def main():
    evtx_files = Path(sys.argv[1]).glob('**/*.evtx')
    for evtx in evtx_files:
        print(f"index: {evtx}")
        print(f"index-name: {evtx.parent.stem}\n")
        EvtxToElk.evtx_to_elk(evtx, 'http://localhost:9200', elk_index=evtx.parent.stem, bulk_queue_len_threshold=3000)


if __name__ == '__main__':
    main()


옵션 해설



elk_index



색인 이름
기본값 hostlogs이 사용됩니다.

이번에는 어떤 서버의 로그를 알고 싶으므로 evtx가 들어있는 디렉토리의 이름을 index 이름으로 변경

bulk_queue_len_threshold



bulkinsert 버퍼 크기
기본값은 500입니다.
당황하지 않아도 거기까지 속도 변하지 않는 것 같습니다만, 표준 출력이 시끄러워지기 때문에 이번은 3000으로 했습니다.

실행 명령


$ python import_evtx.py data

좋은 웹페이지 즐겨찾기