Python取证技术(3): Windows 事件日志分析

Windows的事件日志都存放在C:\Windows\System32\winevt\Logs目录下。以evtx后缀结尾。
事件日志是在windows上记录重要事件发生的特殊文件,当用户登录系统或者程序报错时,就会被记录。对我的电脑右键菜单管理→事件查看器可以查看

安装python_Evtx

直接使用如下命令安装即可。

pip install python-evtx

如果没有安装pip,下载get-pip.py运行后,在python安装目录有个script目录,里面有安装好后的脚本,将该目录设为环境变量,就可以直接使用pip命令。

python_Evtx 解析日志文件

python_Evtx能够Evtx格式的日志文件解析成可读的XML文件

import mmap
import contextlib

from Evtx.Evtx import FileHeader
from Evtx.Views import evtx_file_xml_view

def MyFun():
    EvtxPath = "D:\Application.evtx" #日志文件的路径

    with open(EvtxPath,'r') as f:
        with contextlib.closing(mmap.mmap(f.fileno(),0,access=mmap.ACCESS_READ)) as buf:
            fh = FileHeader(buf,0)
            # 构建一个xml文件,根元素是Events
            print "<?xml version=\"1.0\" encoding=\"utf-8\"standalone=\"yes\" ?>"
            print "<Events>"
            # 遍历事件
            for xml, record in evtx_file_xml_view(fh):
                print xml
            print "</Events>"

if __name__ == '__main__':
    MyFun()

输出的事件如下(只取了其中一个),有很多节点:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"><System><Provider Name="Microsoft-Windows-EventSystem" Guid="{899daace-4868-4295-afcd-9eb8fb497561}" EventSourceName="EventSystem"></Provider>
<EventID Qualifiers="16384">4625</EventID>
<Version>0</Version>
<Level>4</Level>
<Task>0</Task>
<Opcode>0</Opcode>
<Keywords>0x0080000000000000</Keywords>
<TimeCreated SystemTime="2015-12-07 13:10:17"></TimeCreated>
<EventRecordID>1</EventRecordID>
<Correlation ActivityID="" RelatedActivityID=""></Correlation>
<Execution ProcessID="0" ThreadID="0"></Execution>
<Channel>Application</Channel>
<Computer>KEN-PC</Computer>
<Security UserID=""></Security>
</System>
<EventData><Data Name="param1">86400</Data>
<Data Name="param2">SuppressDuplicateDuration</Data>
<Data Name="param3">Software\Microsoft\EventSystem\EventLog</Data>
</EventData>
</Event>

我们需要着重关注的是EventID、EventData、TimeCreated。

这段脚本运行完毕后会将该文件所有的事件日志信息输出,但我们并不需要如此对所有的事件分析,只分析我们感兴趣的部分。下面就是我改进后的代码:

import mmap
import contextlib

from Evtx.Evtx import FileHeader
from Evtx.Views import evtx_file_xml_view
from xml.dom import minidom

def MyFun():
    EvtxPath = "D:\Application.evtx"

    with open(EvtxPath,'r') as f:
        with contextlib.closing(mmap.mmap(f.fileno(),0,access=mmap.ACCESS_READ)) as buf:
            fh = FileHeader(buf,0)
            print "<?xml version=\"1.0\" encoding=\"utf-8\"standalone=\"yes\" ?>"
            print "<Events>"
            for xml, record in evtx_file_xml_view(fh):
                #只输出事件ID为16384的内容
                InterestEvent(xml,16384)
            print "</Events>"

# 过滤掉不需要的事件,输出感兴趣的事件
def InterestEvent(xml,EventID):
    xmldoc = minidom.parseString(xml)
    # 获取EventID节点的事件ID
    eventID = xmldoc.getElementsByTagName('EventID')[0]
    if EventID == eventID:
        print xml

if __name__ == '__main__':
    MyFun()

常见的一些事件ID

WindowsEventLog

事件ID 名称 描述
20, 24, 25, 31, 34, 35 Windows-Update-Failure windows更新失败
104, 1102 Microsoft-Windows-Eventlog 正常情况下是不可能被清除的,除非是攻击者为了清除痕迹。
106 Microsoft-Windows-TaskScheduler 显示最新注册的计划任务
1014 Microsoft-Windows-DNS-Client DNS解析超时。这个也是非常有用的,恶意程序经常用来测试是否连接到目标网站。
2004, 2005, 2006, 2033 Firewall-Rule-Add/Change/Delete 正常用户一般不会修改防火墙规则
3004 Microsoft-Windows-Windows Defender WD杀毒检测日志
4720, 4724, 4725, 4728, 4732, 4635,4740, 4748, 4756 Microsoft-Windows-Security-Auditing 能够找到远程登录信息,以及用户提权等相关信息
7030, 7045 Service-Control-Manager 监视服务是配置成与桌面交互还是安装在系统中。
8003, 8004, 8006, 8007 App-Locker-Block/Warning 记录被阻止运行或警告的程序信息

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 安装python_Evtx
  2. 2. python_Evtx 解析日志文件
  3. 3. 常见的一些事件ID
,