2020년 6월 28일 일요일

winlogbeat-security.js

프로세스 실행을 의미하는 4688 이벤트는 경로를 포함한 프로세스 이름을 NewProcessName 필드에 저장한다.


그런데 언제부턴가 winlogbeat로 연동하면 해당 필드가 안 보임. 대신 process.executable 필드 등장. 덤으로 프로세스 이름만 별도로 추출해서 process.name 필드에 저장해준다.


이게 어떻게 되는 건가 싶었는데 이벤트 로그를 해석해주고, 기본 필드를 ECS(Elastic Common Schema) 스타일로 바꿔주는 winlogbeat-security.js라는 게 있더라. 해당 자바스크립트를 대충 훑어보니 특정 필드에 대해 여러가지 처리를 해주는 renameNewProcessFilds 함수(?)를 만들고,


event4688 함수에서 renameNewProcessFilds 함수를 불러온 후,


실행하는 식. 코딩 알못이라 더 이상의 자세한 설명은 생략 


그런데 네트워크 연결을 의미하는 5156 이벤트를 처리해주는 함수는 없다.


5156 이벤트의 프로세스 정보가 저장되는 필드는 Application. renameNewProcessFilds 함수를 카피해서 Application 필드를 process.name과 process.executable, 두 개의 필드로 분리해주는 renameApplicationFields 함수를 만들었다.
var renameApplicationFields = new processor.Chain()
    .Convert({
        fields: [
            {from: "winlog.event_data.Application", to: "process.executable"}
        ],
        mode: "rename",
        ignore_missing: true,
        fail_on_error: false,
    })
    .Add(function (evt) {
        var name = evt.Get("process.name");
        if (name) {
            return;
        }
        var exe = evt.Get("process.executable");
        if (!exe) {
            return;
        }
        evt.Put("process.name", path.basename(exe));
    })
    .Build();

이후 해당 함수를 사용하는 event5156 함수를 추가하고,


실행.


잘 된다.


관련 글

댓글 없음:

댓글 쓰기

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