winlogbeat는 모듈 설정을 이용해서 주요 윈도우 이벤트에 대한 데이터 전처리를 지원한다. 버전 7까지는 자바스크립트 기반 beat processor 사용.
버전 8부터는 ingest processor를 사용한다. winlogbeat 실행 시 ingest pipeline이 엘라스틱 노드에 등록됨.
버전 7까지는 winlogbeat에서 데이터 전처리를 끝냈는데, 버전 8부터는 노드에서 데이터 전처리를 한다는 얘기. 그래서 버전 8은 beat 콘솔에서 전처리 테스트를 할 수 없다. 그런데 그게 문제가 아니고(..)
다음은 5156 이벤트 처리를 위해 security.yml에 추가한 스크립트.
- script: lang: painless ignore_failure: false tag: Network Event 5156 description: Network Event 5156 source: |- if (ctx?.event?.code == null || !["5156"].contains(ctx.event.code)) { return; } if (ctx?.winlog?.event_data?.ProcessID != null) { if (ctx?.process == null) { HashMap hm = new HashMap(); ctx.put("process", hm); } if (ctx.winlog.event_data.ProcessID instanceof String) { Long pid = Long.decode(ctx.winlog.event_data.ProcessID); ctx.process.put("pid", pid.longValue()); } else { ctx.process.put("pid", ctx.winlog.event_data.ProcessID); } ctx.winlog.event_data.remove("ProcessID"); } if (ctx?.winlog?.event_data?.Application != null) { if (ctx?.process == null) { HashMap hm = new HashMap(); ctx.put("process", hm); } ctx.process.put("executable", ctx.winlog.event_data.Application); ctx.winlog.event_data.remove("Application"); } if (ctx?.winlog?.event_data?.SourceAddress != null && ctx.winlog.event_data.SourceAddress != "-") { if (ctx?.source == null) { HashMap hm = new HashMap(); ctx.put("source", hm); } ctx.source.put("ip", ctx.winlog.event_data.SourceAddress); ctx.winlog.event_data.remove("SourceAddress"); } if (ctx?.winlog?.event_data?.SourcePort != null && ctx.winlog.event_data.SourcePort != "-") { if (ctx?.source == null) { HashMap hm = new HashMap(); ctx.put("source", hm); } ctx.source.put("port", Long.decode(ctx.winlog.event_data.SourcePort)); ctx.winlog.event_data.remove("SourcePort"); } if (ctx?.winlog?.event_data?.DestAddress != null && ctx.winlog.event_data.DestAddress != "-") { if (ctx?.destination == null) { HashMap hm = new HashMap(); ctx.put("destination", hm); } ctx.destination.put("ip", ctx.winlog.event_data.DestAddress); ctx.winlog.event_data.remove("DestAddress"); } if (ctx?.winlog?.event_data?.DestPort != null && ctx.winlog.event_data.DestPort != "-") { if (ctx?.destination == null) { HashMap hm = new HashMap(); ctx.put("destination", hm); } ctx.destination.put("port", Long.decode(ctx.winlog.event_data.DestPort)); ctx.winlog.event_data.remove("DestPort"); } if (ctx?.process?.name == null && ctx?.process?.executable != null) { def parts = ctx.process.executable.splitOnToken("\\"); ctx.process.put("name", parts[-1]); }
저장 후 winlogbeat를 실행하면 분명 파이프라인이 등록된다.
그런데 추가 스크립트는 반영이 안 됨. 'Process Event 4688' 다음 위치에 추가했는데 보이지 않는다.
파이프라인 삭제, 등록을 몇 번 반복해봤지만 똑같은 결과. 혹시나 싶어 키바나의 'edit pipeline' 메뉴에서 수정 시도. 입력창이 작아서 빡침
이제 됨.
특이한 건 security.yml 지워도 해당 설정 초기 로직 그대로 파이프라인이 등록된다. 설정 파일 왜 있는 거지?
관련 글
댓글 없음:
댓글 쓰기