Powershell v5脚本块审计能力探究

Powershell V5脚本块审计能力探究

前言:

这几天在测试SPN扫描的时候准备提取特征,寻思目前使用的两种比较常见的手法

  • Windows自带程序setspn
  • 脚本连接LDAP查询用户属性

心想如果一个SPN的Powershell脚本大概率会在脚本中过滤出serviceprincipalname字段,看了几个SPN的脚本也确实如此,这时准备从4104事件的scriptContent中做匹配。

利用脚本GetUserSPNs.ps1做POC测试提取日志样例时,Windows Powershell审计始终无法获得脚本内容。这情况以前没遇到,就开始排查为啥,和以前的脚本有什么区别。

发现:

怀疑过new-object新建对象问题,怀疑过是否只能监控cmdlet和Function函数块的问题。但是经过大量测试,最后发现居然是:当有传参传入时,Windows只能记录Function块里的内容,当没有参数时,则可以记录脚本所有内容!!!

找了半天也没人说这个问题,不知道Windows内部是如何实现的

截图:

image-20200402212847879

image-20200402212932189

无参数传入时,均可以记录

image-20200402212552869

image-20200402212608384

结论:

在某种程度上,对脚本传入参数并且不适用函数则可以一定程度的逃避Windows 4104事件的审计。虽然这并不能逃避4103事件,但是4103事件是针对于单个cmdlet做审计,在分析过程中想要对此类事件进行分析挖掘,难度是较大的,没有4104脚本块内容来的直观。