2018년 2월 25일 일요일

xpath를 이용한 이벤트 로그 필터링

강의하다 보면 공개하기 껄끄러운 정보가 포함된 이벤트 로그를 사용해야 할 때가 있는데, 윈도우 이벤트 로그는 텍스트가 아니라서 편집도 안 되고, 시스템 해킹이라도 하지 않는 이상 건드릴 방법이 없어서 난감해진다.

옛날엔 winzapper를 이용해서 특정 이벤트 로그를 지워버리는 방법이 있었지만, 말 그대로 옛날 얘기(..) 원하는 정보만 골라서 쏙 빼버릴 수는 없을까?


로그 필터링 기능을 이용해보자. 그러나 기본 제공되는 기능은 헤더 영역에 대한 필터링만 가능하기 때문에 데이터 영역, 즉 주요 메시지에 대한 필터링이 어렵다.

로그 헤더

로그 데이터

'누가, 어디서, 무엇을' 했는지 등의 정보를 필터링 하려면 XML 구조 검색을 가능하게 해주는 XPath 쿼리문을 작성해야 한다.

쿼리문 추가 전

다음은 '로그온에 실패(EventID=4625)한 특정 사용자'만을 검색해주는 XPath 쿼리문.

쿼리문 추가 후

표현식은 트리 구조를 이루는 상하위노드의 경로와 검색하려는 최종 노드의 값을 입력하는 방식. 이때 노드 이름은 대소문자를 구분, 값은 구분하지 않으며, 상하위노드 트리를 []로 감싸줘야 한다.

*[System/EventID=4625]
*[상위노드/하위노드=노드값]

그리고 '속성'이 존재하는 노드를 검색할 때는 '@'로 노드와 속성을 구분한 후, 해당 속성과 이름을 별도의 []로 감싸줘야 한다.

*[EventData/Data[@Name='TargetUserName']='속성값']
*[상위노드/하위노드[@노드속성='속성이름']='속성값']

참고로 표현식은 반드시 '*'로 시작해야 하는데, 조건과 일치하는 결과를 모두 가져오라는 의미인 듯. 이제 원래 목적대로 전체 로그에서 원하는 정보를 제외시켜 보자. 방법은 간단하다. 부정(!=) 연산자를 이용하면 됨.


이후엔 필터링 결과를 다른 이름으로 저장하면 끝.


XPath 최신 버전 2.0은 정규표현식까지 지원하지만, 윈도우 이벤트 로그는 XPath 1.0을 제한적으로 지원하기 때문에 와일드카드 검색도 안 된다(..) 그래도 이거라도 되는 게 어디냐 싶음. 2.0도 어서 지원해줬음 좋겠다.

댓글 없음:

댓글 쓰기

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