在日常的安全评估工作中,时常会对内部主机进行验证扫描,寻找那些因为错过打补丁时间或者是错误配置所导致漏洞。对此我经常使用Nessus,它就像是一位经验十足的系统管理员。渗透测试人员或许会寻找一个特殊的Java或是Flash漏洞,相对系统管理员来说他们并不太想知道某台设备存在多少个漏洞,其最需要的信息是这台设备需要进行Java更新,以及更新与否对业务的影响情况。
总之,在一个中型网络中你完全可以相信Nessus扫描可以获取数万条调查结果。在过去的一年中,我自己写了一些有趣的sed/cut脚本来切割这些数据或者将这些数据导入数据库,方便我们的分析。今天我会使用到PowerShell(免费,易上手并且应用很广)向大家证明Nessus和Powershell的搭配是多么的完美!
实例演示
首先导入从Nessus中获取到CSV文件,看到统计结果总数我反正是吓了跳:
接下来看看数据结构:
接下来寻找Flash Player的问题,我们正在寻找所有非零风险的结果
哪些主机受到影响?有数个主机存在几十个不连续的Flash漏洞,对于维护人员来说取得修复清单成为了首要任务,其次便是未来如何防止这样的事情。
然后我们来解决Java的问题,注意“|”并不是or操作符,并且匹配(match)操作符是不区分大小写的,而字段名是明确区分大小写的。如果你没有引起注意那么你极有可能是查询一个空的变量导致无法获得结果。对于Java,本例中将大约50,000的调查结果缩短为222
你是在找它们么?
如果你是要寻找其他的问题,可以自己去试试
Adobe Reader (以人格担保这里不会将Flash问题也计算在内)
$adobe = $all | Where-Object {$_.Description -match “Adobe Reader” -And $_.Description -notmatch "Flash" -and $_.Risk -notmatch "None"}
.NET Framework:
$dotnet = $all | Where-Object {$_.Description -match "Net Framework" -and $_.Risk -notmatch "None" }
Silverlight:
$silverlight = $all | Where-Object {$_.Description -match "Silverlight" -and $_.Description -notmatch ".Net" -and $_.Risk -notmatch "None" }
Office:
$msoffice = $all | Where-Object {$_.Synopsis -match '(Office|Word|Powerpoint|Excel|Outlook)' -and $_.Risk -notmatch "None" }
Microsoft补丁, 安全警告以及Service Packs:
$misc_microsoft = $whatsleft | Where-Object {$_.Name -match '(MS[0-9][0-9]-[0-9][0-9][0-9]|MS KB|MS Security Advisory|Windows Service Pack)' }
快速生成报告
即使在2015年,不论规模大小依旧有许多的商店,你总能时不时的找到一两个从不打补丁或者安装Service Pack的主机。
险些忘记了,注意将查询分解开来,这样方便阅读:
$whatsleft = $all | Where-Object { $_.Description -notmatch '(Flash|Adobe|JRE|JSE|JAVA|Java|jre|jse)'} | Where-Object {$_.Name -notmatch '(Silverlight|Net Framework|Office|Word|Powerpoint|Excel|Outlook|Explorer)'} | Where-Object {$_.Name -notmatch '(MS[0-9][0-9]-[0-9][0-9][0-9]|MS KB|MS Security Advisory|Windows Service Pack)' } | Where-Object {$_.Risk -notmatch "None"}
最终的问题总结:
$final_summary = $whatsleft2 | select 'Plugin ID', Name | Group-Object 'Plugin ID' | Sort-Object -Descending Count
查看问题:
$final_summary | Out-GridView
回到那个需要清单的运维人员问题上,我们仍然需要处理host-by-host问题
$summary_by_host = $whatsleft2 | select Host,'Plugin ID', Name | Sort-Object Host
接着将清单转储到CSV:
$final_summary_by_host | Export-Csv ./final-summary.csv
将CSV文件导入Excel,制作一个数据透视表,这样你就得到了一份漂亮简介的报告!
作者:鸢尾
来源:51CTO