2017년 5월 20일 토요일

Windows Event Log 분석(DNS Request - 4th)

윈도우에서 DNS 조회 관련 이벤트를 자동으로 저장한다는 사실을 알게 됐다. 같이 기록되는 프로세스 ID를 이용하면 프로세스 이름도 알 수 있다. 그래서 파워쉘 스크립트 작성.
$DNS_CMDLET = Get-WinEvent microsoft-windows-dns-client/operational -MaxEvents 1 -FilterXPath "*[System/EventID=3006]"
$PROC_ID = $DNS_CMDLET | Select-Object -ExpandProperty processid
$TIMESTAMP = $DNS_CMDLET | Select-Object -ExpandProperty timecreated
$LOG_MSG = $DNS_CMDLET | Select-Object -ExpandProperty message
$PROC_NAME = Get-Process -id $PROC_ID | Select-Object -ExpandProperty processname
$TIMESTAMP_SPLIT = $TIMESTAMP -split " "
$LOG_DATE = $TIMESTAMP_SPLIT[0]
$LOG_TIME = $TIMESTAMP_SPLIT[1]
$LOG_URL = $LOG_MSG -replace '^\S{2}\s([^,]+).+','$1'
$LOG = "$LOG_DATE`t$LOG_TIME`t$PROC_ID`t$PROC_NAME`t$LOG_URL"
$LOG >> C:\dns.csv

URL 추출은 정규표현식 ^\S{2}\s([^,]+).+에 의해 검사된 전체 메시지 내용 중, URL 영역만을 캡쳐 그룹으로 저장한 후, 역참조($1)를 이용해서 전체 메시지를 다시 덮어 씌우는 방식(replace).


그리고 3006 이벤트가 발생할 때마다 실행되도록 작업 스케줄 생성.


백그라운드 작업 설정



결과는 다음과 같다.


잘 되는 줄 알았으나, 이상한 점 발견(..)


같은 시간대에 여러 개의 DNS 조회가 발생하면, 가장 마지막 이벤트만 기록되는 듯하다. 작업 스케줄러의 한계인가? 스크립트를 좀 손 보면 될 것도 같고?

관련 글

댓글 없음:

댓글 쓰기

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