前面的文章《家庭网络防御系统搭建-EDR之sysmon安装过程详解》,这里,介绍了sysmon的安装。
其中sysmon使用的配置是SwiftOnSecurity经过优化的版本,详见这里。本章将对该配置文件进行解读,为后续定制化的配置文件提供参考。
日志类型
sysmon能够记录的事件很多,主要包括进程,注册表,文件,网络,dll调用等artifact相关的数据,如下图:
如果事无巨细的记录所有artifact的各种活动,带来的后果就是日志数量过于庞大,对于存储/搜索/分析都不是很友好。而且有些网络安全不相关的数据也没有必要面面俱到,因此需要对记录的日志进行过滤。过滤相关条件语法如下:
如下将对ProcessCreate, FileCreateTime,NetworkConnect,FileCreate,ImageLoad,RegistryEvent等在网络安全分析和网络安全运营过程中最为常见的事件类型的采集配置进行解析,使得威胁分析人员了解数据采集背后的逻辑。同时对于默认进行记录的事件,其中部分事件需要排除,对于默认不记录的事件,则需要针对关键的事件记录并打tag。
全局配置
sysmon有些全局的配置对于多种类型的事件都是生效的,如下:
HASH
hash在多种事件类型中都会出现,例如可执行程序以及dll等文件的hash。md5和sha256为业界标准,可以兼容多个系统,因此默认用来鉴别文件完整性和唯一性的表示。IMPHASH为mandiant提出,用于记录dll之间调用的顺序,对于一些简单的变种具备一定的识别能力,识别相似家族的文件具有一定作用,因此在安全领域也是可以考虑记录。因此对于hash这三中都可以记录,如下:
<HashAlgorithms>md5,sha256,IMPHASH</HashAlgorithms> <!-- Both MD5 and SHA256 are the industry-standard algorithms. Remove IMPHASH if you do not use DLL import fingerprinting. -->
进程
恶意软件和攻击在主机层面的表现都是借助进程实现,因此进程的创建和调用信息对于安全分析是有意义的信息。
ProcessCreate
进程数据中的目的是记录恶意非法进程活动,由于进程创建事件默认是全部记录的,因此对于windows系统自带的某些高频出现的进程创建活动没有必要全部记录。通过 排除一些windows系统本身常见的合法进程的创建。由于针对的是ProcessCreate,因此这个层次过滤的字段都是围绕着ProcessCreate事件能够提供的字段进行的, 例如针对进程创建过程的commandline 中包含的文件内容进行排除,如下:
<CommandLine condition="begin with">"C:\Program Files (x86)\Microsoft\Edge Dev\Application\msedge.exe" --type=</CommandLine>
排除msedge的进程创建信息,这块浏览器的活动比较常见,进程创建比较频繁,对于常见安全分析帮助效果有限。
<CommandLine condition="is">C:\Windows\system32\svchost.exe -k localServiceNetworkRestricted -s Dhcp</CommandLine>
windows的DHCP服务的启动进程这块也没有必要记录,属于频繁出现的进程。类似的Windows内部不必要的进程还有很多,此处不一一列举。
ProcessAccess
由于进程调用是高频事件,因此该事件默认是不记录的。但是对于一些异常进程调用需要注意,这块主要通过记录一些异常windows进程的调用,如下:
<Rule groupRelation="and">
<TargetImage condition="end with">\lsass.exe</TargetImage>
<GrantedAccess condition="contains any">0x40;0x1000;0x1010;0x1038;0x1410;0x1418;0x1438;0x143a;0x100000;0x1f0fff;0x1f1fff;0x1f2fff;0x1f3fff;0x1fffff</GrantedAccess> <!--0x1400 too noisy-->
</Rule>
针对lsass进程的关键权限授权访问需要格外关注和记录。
文件
通过针对网络攻击的研究发现,多数的网络攻击在主机层面都会有文件操作行为,因此文件相关创建信息对于安全分析是有意义的信息。
FileCreate
文件创建在操作系统中也是高频行为,因此没有必要全部记录,如上述进程创建的过滤机制一样,通过明确要记录的文件创建行为,如下:
<TargetFilename condition="end with">.ashx</TargetFilename> <!-- possible dropped webshell -->
<TargetFilename condition="end with">.asp</TargetFilename> <!-- possible dropped webshell -->
<TargetFilename condition="end with">.aspx</TargetFilename> <!-- possible dropped webshell -->
<TargetFilename condition="end with">.bat</TargetFilename> <!--Batch scripting-->
通常来说shell脚本的创建在多数的计算机上属于低频行为,shell脚本是攻击者最为喜欢的使用技术之一,因此有必要进行记录该文件类型的创建行为。
FileCreateTime
为什么文件创建时间需要单独记录呢?事实上在FileCreate事件中是有文件创建时间的,但是这个文件创建时间来自于用户态的API调用。攻击者可以通过调用用户态的API call修改文件的创建时间来掩盖攻击行为。而文件系统有两个文件创建时间,一个在用户态,一个在内核态。
关于这种攻击的详细内容,详见这里。由于文件时间创建事件和文件创建属于高频事件,因此默认是不记录的,通过记录指定目录的文件创建时间修改行为,如下:
<RuleGroup name="" groupRelation="or">
<FileCreateTime onmatch="include">
<Image name="T1099" condition="begin with">C:\Users</Image> <!--Look for timestomping in user area, usually nothing should be doing that here-->
<TargetFilename name="T1099" condition="end with">.exe</TargetFilename> <!--Look for backdated executables anywhere-->
<Image name="T1099" condition="begin with">\Device\HarddiskVolumeShadowCopy</Image> <!--Nothing should be written here | Credit: @SBousseaden [ https://twitter.com/SBousseaden/status/1133030955407630336 ] -->
</FileCreateTime>
</RuleGroup>
可以看到只记录特定目录,特定类型文件的文件创建时间行为。即使这样,Users目录下也会有频繁的文件创建导致的文件创建时间修改行为日志量也是极大的,因此还需要排除不必要的文件创建时间的记录,如下:
<Image condition="image">OneDrive.exe</Image> <!--OneDrive constantly changes file times-->
由于windows系统中的OneDrive.exe经常会改变文件的时间,因此这块的workload过大,所以出于平衡的考虑,不记录这块文件的创建时间。
<Image name="T1099" condition="begin with">C:\Users</Image> <!--Look for timestomping in user area, usually nothing should be doing that here-->
针对被sysmon标记T1099攻击技术点的时间变换,尤其需要关注。
网络连接
网络连接主要以五元组信息为主,在主机侧,会将五元组映射到对应的进程和文件,这样便和进程,文件等事件形成了有效的关联,对于分析溯源是有帮助的。
NetworkConnect
常见的LOL攻击,会借助windows的组件尝试进行网络连接,所以针对一些不经常产生网络连接的组件产生网络连接需要进行记录,需要特别记录的网络连接通过进行记录,如下:
<Image condition="image">certutil.exe</Image> <!--Windows: Certificate tool can contact outbound | Credit @ion-storm @FVT [ https://twitter.com/FVT/status/834433734602530817 ] -->
<Image condition="image">calc.exe</Image>
<Image condition="image">CalculatorApp.exe</Image>
<Image condition="image">cmd.exe</Image> <!--Windows: Remote command prompt-->
计算器,cerutil等windows组件产生的网路流量需要额外的关注,这种异常行为可能是恶意软件导致。
同时网络流量非常的庞大,不可能全量记录,需要进行排除,需要排除网络连接通过进行记录,如下:
<Image condition="begin with">C:\ProgramData\Microsoft\Windows Defender\Platform\</Image>
<Image condition="end with">\AppData\Local\Microsoft\Teams\current\Teams.exe</Image> <!--Microsoft: Teams-->
<DestinationHostname condition="is">microsoft.com</DestinationHostname> <!--Microsoft:Update delivery-->
<DestinationHostname condition="end with">.microsoft.com</DestinationHostname> <!--Microsoft:Update delivery-->
<DestinationHostname condition="end with">microsoft.com.akadns.net</DestinationHostname> <!--Microsoft:Update delivery-->
<DestinationHostname condition="end with">microsoft.com.nsatc.net</DestinationHostname> <!--Microsoft:Update delivery-->
windows内部的很多组件会频繁的进行更新,因此需要排除掉microsoft.com相关的连接,这些连接对于安全分析帮助不大。
DNSQuery
DNS请求的信息比较特殊,因为其往往都是由操作系统发出的,因此和进程的关联提供不了多少有价值信息。但是DNS蕴含的域名和IP地址信息是可以和网络连接信息进行关联,因此需要单独记录。DNS是最为高频的操作系统事件,因此需要排除笔不要的DNS解析记录,通过进行排除,如下:
QueryName condition="end with">.microsoft.com</QueryName> <!--Microsoft | Microsoft default exclusion-->
<QueryName condition="end with">.microsoftonline.com</QueryName> <!--Microsoft | Microsoft default exclusion-->
<QueryName condition="end with">.microsoftstore.com</QueryName> <!--Microsoft | Microsoft default exclusion-->
<QueryName condition="end with">.ms-acdc.office.com</QueryName> <!--Microsoft: Doesn't appear to host customer content or subdomains-->
<QueryName condition="end with">.msedge.net</QueryName> <!--Microsoft: Doesn't appear to host customer content or subdomains-->
同样是和windows内部的组件会更新相关的域名请求。
注册表
注册表也是高频事件,如上述进程创建的过滤机制一样,通过排除不必要的注册表的记录,如下:
<TargetObject condition="end with">Toolbar\WebBrowser</TargetObject> <!--Microsoft:IE: Extraneous activity-->
<TargetObject condition="end with">Browser\ITBar7Height</TargetObject> <!--Microsoft:IE: Extraneous activity, covers ShellBrowser and WebBrowser-->
<TargetObject condition="end with">Browser\ITBar7Layout</TargetObject> <!--Microsoft:IE: Extraneous activity-->
上述排除IE浏览器中不重要的针对注册表的动作。
通过记录重要的注册表时间,如下:
<TargetObject name="T1060" condition="contains">CurrentVersion\Windows\Load</TargetObject> <!--Windows: [ https://msdn.microsoft.com/en-us/library/jj874148.aspx ] -->
<TargetObject name="T1060" condition="contains">CurrentVersion\Windows\Run</TargetObject> <!--Windows: [ https://msdn.microsoft.com/en-us/library/jj874148.aspx ] -->
<TargetObject name="T1060" condition="contains">CurrentVersion\Winlogon\Shell</TargetObject> <!--Windows: [ https://msdn.microsoft.com/en-us/library/ms838576(v=winembedded.5).aspx ] -->
<TargetObject name="T1060" condition="contains">CurrentVersion\Winlogon\System</TargetObject> <!--Windows [ https://www.exterminate-it.com/malpedia/regvals/zlob-dns-changer/118 ] -->
<TargetObject condition="begin with">HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify</TargetObject> <!--Windows: Autorun location [ https://attack.mitre.org/wiki/Technique/T1004 ] [ https://www.cylance.com/windows-registry-persistence-part-2-the-run-keys-and-search-order ] -->
<TargetObject condition="begin with">HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell</TargetObject> <!--Windows: [ https://technet.microsoft.com/en-us/library/ee851671.aspx ] -->
上述是常见的攻击者经常使用到的注册表项,上述name="T1060"表示被sysmon标记可能的攻击技术点T1060,参考miter att&ck的连接,这里。
上述就是针对SwiftOnSecurity经过优化的配置文件的介绍,关于其他的配置选项可以在需要的情况下详细的进行查看,希望对你有所帮助。更多关于sysmon的内容,请参考我的专栏《家庭网络防御系统搭建》,这里。
本文为优快云村中少年原创文章,未经允许不得转载,博主链接这里。