捐血一袋救人一命

2011年6月27日 星期一

將 Exchange POP3 驗證失敗事件記錄存成 .csv 檔案

因為Windows 2003 Server的事件檢事器,內建的匯出清單功能,就是真的只能匯出清單,沒有詳細的 Log Message,不足以判斷是否為 POP3 Auth Attack

所以自己寫一支 Script ,方便將 Exchange 2003 Server 的 POP3 Log 從 Windows 事件檢視器中 Dump 成 .csv 檔案

strComputer = "MAIL"
LogDate = "20110628"
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Security)}!\\" & strComputer & "\root\cimv2")
Set colLoggedEvents = objWMIService.ExecQuery ("Select * FROM Win32_NTLogEvent WHERE Logfile = 'Application' " & "AND EventCode = '1011'")

Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objLogFile = objFSO.CreateTextFile("POP3 Auth Attack Log_" & LogDate & ".csv", ForWriting, True)
    objLogFile.Write "Record Number#"
    objLogFile.Write "Date Time#"
    objLogFile.Write "Message"
    objLogFile.WriteLine
For Each objEvent in colLoggedEvents
    if mid(objEvent.Message,3,10) <> "192.168.1." and left(objEvent.TimeGenerated,8) = Logdate then
        objLogFile.Write objEvent.RecordNumber & "#"
        objLogFile.Write objEvent.TimeGenerated & "#"
        objEvent.Message = replace(objEvent.Message,vbCRLF,"")   
        objLogFile.Write objEvent.Message
        objLogFile.WriteLine
    end if
Next
objLogFile.Close
msgbox("Finish !")

其中

if mid(objEvent.Message,3,10) <> "192.168.1." then

只是為了濾掉在內網的驗證錯誤記錄,只查網際網路上發生的驗證錯誤記錄。

另外

EventCode = ‘1011’

是 POP3 驗證錯誤代碼

此外

objEvent.Message = replace(objEvent.Message,vbCRLF,"")

因為 objEvent.Message 當中包含不必要的跳行,匯入資料庫或 Excel 時,會造成困擾,所以先用 Replace 函數將 Carriage Return & Line Feed 取代掉

left(objEvent.TimeGenerated,8) = LogDate

因為 Event 很多,所以只選擇匯出某一天的 Event,也避免 Excel 一次只能匯入 65535 行資料

最後,再顯示一個 Message Box ,提醒使用者程式已結束。

PS.匯入 Excel 時,在做資料剖析時,請選擇其他字元 #,因為 Message 裡可能會有逗號,所以故意將欄位分隔符號改為 #

0 意見: