Sysmon是Windows Sysinternals系列中的一款工具。如果你想实时监控Windows系统又对其他第三方软件有顾虑,使用Sysmon这款轻量级Microsoft自带内部软件是最好的选择。
在打开应用或者任何进程创建的行为发生时,Sysmon会使用sha1(默认),MD5,SHA256或IMPHASH记录进程镜像文件的hash值,包含进程创建过程中的进程GUID,每个事件中包含session的GUID。除此之外记录磁盘和卷的读取请求/网络连接(包括每个连接的源进程,IP地址,端口号,主机名和端口名),重要的是还可在生成初期进程事件能记录在复杂的内核模式运行的恶意软件。
在https://download.sysinternals.com/files/Sysmon.zip 下载Sysmon,打开CMD(Admin权限)到放置路径下运行
在实际生产环境应用时,根据不同的配置,这时候自定义监控规则显得尤为重要,又由于避免产生庞大的数据记录,需要通过精简配置来达到高效率日志生成。
Sysmon提供了xml格式的配置文件来让用户自定义过滤规则,配置文件的东西比较多,以下提供一个测试用例。(xml大小写敏感)
<Sysmon schemaversion="4.23">
<!-- Capture all hashes -->
<HashAlgorithms>*</HashAlgorithms>
<EventFiltering>
<!-- Log all drivers except if the signature -->
<!-- contains Microsoft or Windows -->
<DriverLoad onmatch="exclude">
<Signature condition="contains">microsoft</Signature>
<Signature condition="contains">windows</Signature>
</DriverLoad>
<!-- Do not log process termination -->
<ProcessTerminate onmatch="include" />
<!-- Log network connection if the destination port equal 443 -->
<!-- or 80, and process isn't InternetExplorer -->
<NetworkConnect onmatch="include">
<DestinationPort>443</DestinationPort>
<DestinationPort>80</DestinationPort>
</NetworkConnect>
<NetworkConnect onmatch="exclude">
<Image condition="end with">iexplore.exe</Image>
</NetworkConnect>
</EventFiltering>
</Sysmon>
完成了XML的编写,即可上传到Sysmon
在上面我们看到了不同标识的tag用来定义xml配置文件,下面列出可选择的事件过滤器(tag)
ProcessCreate | 进程创建 | ProcessAccess | 进程访问 |
---|---|---|---|
FileCreateTime | 进程创建时间 | FileCreate | 文件创建 |
NetworkConnect | 网络链接 | RegistryEvent | 注册表事件 |
ProcessTermina | 进程结束 | FileCreateStreamHash | 文件流创建 |
DriverLoad | 驱动加载 | PipeEvent | 管道事件 |
ImageLoad | 镜像加载 | WmiEvent | WMI事件 |
CreateRemoteThread | 远程线程创建 | DNSEvnet | DNS事件 |
RawAccessRead | 驱动器读取 | Error | 报错 |
具体详细内容可参考 https://technet.microsoft.com/en-us/sysinternals/sysmon。
onmatch选项只能设置为include或exclude。
condition根据不同的需求可设置为如下值:
Condition | Description |
---|---|
Is | Default, values are equals |
is not | Values are different |
Contains | The field contains this value |
Excludes | The field does not contain this value |
begin with | The field begins with this value |
end with | The field ends with this value |
less than | Lexicographical comparison is less than zero |
more than | Lexicographical comparison is more than zero |
Image | Match an image path (full path or only image name). For example: lsass.exe will match c:\windows\system32\lsass.exe |
在实际生产中请根据实际情况调整,以下为个人用例
<Sysmon schemaversion="4.23">
<!-- Capture all hashes -->
<HashAlgorithms>*</HashAlgorithms>
<EventFiltering>
<!-- Log all drivers except if the signature -->
<!-- contains Microsoft or Windows -->
<DriverLoad onmatch="exclude">
<Signature condition="contains">Microsoft</Signature>
<Signature condition="contains">Windows</Signature>
</DriverLoad>
<ProcessTerminate onmatch="include" >
<Image condition="end with">MsMpEng.exe</Image>
</ProcessTerminate>
<!-- Log network connection if the destination port equal 443 -->
<!-- or 80, and process isn't InternetExplorer -->
<!--NetworkConnect onmatch="include">
<DestinationPort>443</DestinationPort>
<DestinationPort>80</DestinationPort >
</NetworkConnect -->
<FileCreateTime onmatch="exclude" >
<Image condition="end with">chrome.exe</Image>
</FileCreateTime>
<ImageLoad onmatch="include">
<Signed condition="is">false</Signed>
</ImageLoad>
<!-- Log access rights for lsass.exe or winlogon.exe is not PROCESS_QUERY_INFORMATION -->
<ProcessAccess onmatch="exclude">
<GrantedAccess condition="is">0x1400</GrantedAccess>
</ProcessAccess>
<ProcessAccess onmatch="include">
<TargetImage condition="end with">lsass.exe</TargetImage>
<TargetImage condition="end with">winlogon.exe</TargetImage>
</ProcessAccess>
<CreateRemoteThread onmatch="include">
<TargetImage condition="end with">explorer.exe</TargetImage>
<TargetImage condition="end with">svchost.exe</TargetImage>
<TargetImage condition="end with">winlogon.exe</TargetImage>
<SourceImage condition="end with">powershell.exe</SourceImage>
</CreateRemoteThread>
</EventFiltering>
</Sysmon>
在EventViewer->Applications and Services ->Microsoft->Windows->Sysmon即可找到Sysmon监控得到的日志,如下图以QQ浏览器为例(非Microsoft三方软件,因为Microsoft软件已被列入白名单):
记录下来QQ浏览器访问了进程,属于进程访问事件。
关键的一点就是 GrantedAccess的值为0x1410,这个值表示QQ浏览器对lsass拥有上述受限制的访问权限,包括写进程内存和读进程内存,这样就能获取到用户口令。
访问网站,可以看到连接的详细信息,包括ip,端口,pid等,如图通过Sysmon监控到Outlook对网络的访问
通过CMD对自己进行ping操作
目前的恶意软件为了对抗检测很多都有日志删除功能,Sysmon跟EventView的配合可以更好的将日志定制保存位置。
Sysmon作为Microsoft自创配合Windows的监控软件,结合其他Windows工具能让监控系统变得更容易和更效率,相对于其他第三方的监控软件提供了更安全高效和最轻量级的服务。
领取专属 10元无门槛券
私享最新 技术干货