搜尋此網誌

2014/06/05

使用Windows 事件檢視器的「附加工作到此事件」功能,並傳指定的參數到該事件指定的工作上

最近由於任務上的需要,需針對Windows的事件進行一些處理,研究了一下如何將事件的內容當參數,傳給附加的工作。

有不少中文網頁有說如何附加工作到事件,但是我看不到有詳細說明如何帶參數的中文網頁,故決定自行筆記一下。

建立附加的工作所要執行的程式

產生一個測試用的批次檔,內容如下:

@echo off
D:
cd D:\SourceCode
echo in >out.txt
echo %1 >>out.txt
echo %2 >>out.txt
echo %3 >>out.txt
echo %4 >>out.txt
echo %5 >>out.txt
echo %6 >>out.txt
echo %7 >>out.txt
echo %8 >>out.txt

建立附加的工作

首先建立附加的工作到要試驗的事件中,在此我們選4663檔案存取

匯出附加的工作

執行完上述的工作後,將該工作匯出成XML檔案,再來要修改該檔案,以便可以傳參數
匯出來的XML長得像這樣:

.
.

取得可帶入參數

我們可從Event Log中,得到該Event可帶入的參數:
XML如下,標綠字者應該為可使用的參數:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
  <Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-A5BA-3E3B0328C30D}" />
  <EventID>4663</EventID>
  <Version>0</Version>
  <Level>0</Level>
  <Task>12800</Task>
  <Opcode>0</Opcode>
  <Keywords>0x8020000000000000</Keywords>
  <TimeCreated SystemTime="2014-05-26T06:31:54.851241400Z" />
  <EventRecordID>53790</EventRecordID>
  <Correlation />
  <Execution ProcessID="4" ThreadID="60" />
  <Channel>Security</Channel>
  <Computer>xxxxxxxxxxxxx.com</Computer>
  <Security />
  </System>
<EventData>
  <Data Name="SubjectUserSid">S-1-5-21-1447328650-650804133-1252796110-2892</Data>
  <Data Name="SubjectUserName">xxxxxxx</Data>
  <Data Name="SubjectDomainName">XXXXXXXXX</Data>
  <Data Name="SubjectLogonId">0x5921c</Data>
  <Data Name="ObjectServer">Security</Data>
  <Data Name="ObjectType">File</Data>
  <Data Name="ObjectName">D:\工具\cpu-z\cpuz.ini</Data>
  <Data Name="HandleId">0xf8</Data>
  <Data Name="AccessList">%%4416</Data>
  <Data Name="AccessMask">0x1</Data>
  <Data Name="ProcessId">0xd88</Data>
  <Data Name="ProcessName">C:\Windows\System32\notepad.exe</Data>
  </EventData>
</Event>

建立可帶參數的工作

在此實驗中,我將把TimeCreated、Computer、SubjectUserName、SubjectDomainName、ObjectType、ObjectName、Opcode、ProcessName加入,要加入參數,需自行新增XML tag如下:
把它加在匯出的XML、<EventTrigger>tag中:
<ValueQueries>
<Value name="TimeCreated">Event/System/TimeCreated/@SystemTime</Value>
<Value name="Computer">Event/System/Computer</Value>
<Value name="SubjectUserName">Event/EventData/Data[@Name='SubjectUserName']</Value>
<Value name="SubjectDomainName">Event/EventData/Data[@Name='SubjectDomainName']</Value>
<Value name="ObjectType">Event/EventData/Data[@Name='ObjectType']</Value>
<Value name="ObjectName">Event/EventData/Data[@Name='ObjectName']</Value>
<Value name="Opcode">Event/System/Opcode</Value>
<Value name="ProcessName">Event/EventData/Data[@Name='ProcessName']</Value>   
</ValueQueries>

第二段:

 <Triggers>
   <EventTrigger>
     <Enabled>true</Enabled>
     <Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="Security"&gt;&lt;Select Path="Security"&gt;*[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and EventID=4663]]&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
 <ValueQueries>
   <Value name="TimeCreated">Event/System/TimeCreated/@SystemTime</Value>
   <Value name="Computer">Event/System/@Computer</Value>
   <Value name="SubjectUserName">Event/EventData/Data[@Name='SubjectUserName']</Value>
   <Value name="SubjectDomainName">Event/EventData/Data[@Name='SubjectDomainName']</Value>
   <Value name="ObjectType">Event/EventData/Data[@Name='ObjectType']</Value>
   <Value name="ObjectName">Event/EventData/Data[@Name='ObjectName']</Value>
   <Value name="Opcode">Event/System/@Opcode</Value>
   <Value name="ProcessName">Event/EventData/Data[@Name='ProcessName']</Value>   
 </ValueQueries>
   </EventTrigger>
 </Triggers>

修改<Arguments>參數:
     <Arguments>/c D:\SourceCode\evtout.cmd '$(TimeCreated)' '$(Computer)' '$(SubjectUserName)' '$(SubjectDomainName)' '$(ObjectType)' '$(ObjectName)' '$(Opcode)' '$(ProcessName)'</Arguments>

將該XML存檔後,在工作排程器中,刪除舊的附加工作,接著把工作匯入:

修改工作內容,如果事件在同時間會觸發多個時,可用平行或是佇列執行,在此選佇列執行:


測試輸出結果

果於直接使用cmd.exe來執行批次檔,在執行時會有看到視窗跳出來的狀況,由於我們的批次檔,只是直接把輸入的參數存進out.txt中,而由上面的設定中,是用佇列執行的方式,故out.txt中會保留最後一個執行時帶入的資料,經測試後結果是滿意的:

AccessList參數說明

我們可由Event中的AccessList來得知此Event的操作為何:
1537 = Delete
1538 = Read_CONTROL
1541 = synchronize
4416 = ReadData(or List Directory)
4417 = WriteData(or Add File)
4418 = AppendData (or AddSubdirectory or CreatePipeInstance)
4419 = ReadEA
4420 = WriteEA
4423 = ReadAttributes
4424 = WriteAttributes

附錄一:關閉篩選平台連線記錄

篩選平台連線的記錄非常多,常常把整個事件記錄佔滿了。我們可以用以下指令取得目前有audit的category:
auditpol /get /category:*
輸出部份的結果如下:

再下達以下指令關掉「篩選平台連線」成功時的記錄:
AUDITPOL /SET /SUBCATEGORY:"篩選平台連線" /SUCCESS:DISABLE

沒有留言: