2022년 8월 7일 일요일

Winlogbeat 8의 변화

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' 다음 위치에 추가했는데 보이지 않는다.


당연히 5156 이벤트 전처리도 실패.


파이프라인 삭제, 등록을 몇 번 반복해봤지만 똑같은 결과. 혹시나 싶어 키바나의 'edit pipeline' 메뉴에서 수정 시도. 입력창이 작아서 빡침


이제 됨.


특이한 건 security.yml 지워도 해당 설정 초기 로직 그대로 파이프라인이 등록된다. 설정 파일 왜 있는 거지?

관련 글

댓글 없음:

댓글 쓰기

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