2021년 7월 19일 월요일

enrich processor

다음은 네트워크를 사용하는 프로세스 현황. 고작 1시간짜리 데이터인데 프로세스별 현황 파악이 쉽지 않다. 프로세스 범주를 좁힐 수는 없을까? 개발사별로 묶으면 딱인데. 하지만 네트워크 사용 이벤트(eventid: 5156)는 프로세스 개발사 정보를 가지고 있지 않다.
 

대신 sysmon의 프로세스 실행 이벤트(eventid: 1)가 가지고 있음.


process.name 필드는 같으니 RDB면 이런 식으로 쿼리 날리면 되지만,
select a.process.pe.company
from event1 a
join event5156 b
on a.process.name = b.process.name

아쉽게도 엘라스틱은 조인을 지원하지 않는다. 물론 처음부터 조인이 가능한 데이터 구조를 만들어주면 흉내는 내볼 수 있는데, 부모/자식 관계를 만들어주는 거라 이게 조인? 이런 느낌.


그나마 좀 더 조인다운, 사실 엑셀 lookup과 같은 기능. 일단 sysmon 이벤트의 프로세스와 개발사 정보를 별도 인덱스로 저장. 이후 공식 문서가 시키는 대로 


1. enrich policy 생성.
PUT _enrich/policy/proc_company
{
  "match": {
    "indices": "proc_company",
    "match_field": "name",
    "enrich_fields": ["company"]
  }
}

2. policy 실행.
POST _enrich/policy/proc_company/_execute

3. enrich processor를 이용한 ingest pipeline 추가.
PUT _ingest/pipeline/winevent
{
  "processors": [
    {
      "enrich": {
        "if": "ctx.winlog.event_id != 1",
        "policy_name": "proc_company",
        "field": "process.name",
        "target_field": "procs",
        "ignore_missing": true
      }
    }
  ]
}

다음은 네트워크를 사용하는 프로세스의 개발사별 발생 현황.


그런데 악성 프로세스가 유명 개발사 흉내내면 어쩌지?

관련 글

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스