我有一个snort.rule文件,我需要从行中提取cve编号和引用键,并将它们追加到花括号内同一行的msg字段中,下面是旧日志。
警告udp $HOME_NET 1900 -> any (msg:"ET INFO UPnP device UPnP UPnP device 2";内容:“Intel for UPnP device”;pcre:"/^Server\x3a*Intel SDK for UPnP device/mi“;参考: /infosec/blog/2013/01/29;cve参考:cve,2012-5958;参考:cve,2012-5959;sid:2016303;rev:4;)
要求的输出在下面,粗体的输出是新的变化,
通知udp $HOME_NET 1900 ->任意(msg:"ET INFO UPnP device UPnP 2 <#>{cve,2012-5958 cve,2012-5959}";内容:“英特尔UPnP设备SDK”;pcre:"/^Server\x3a*Intel UPnP设备SDK /mi“;参考: /infosec/blog/2013/01/29;参考: arch/UPnP-arch-DeviceArchitecture-v1.1.pdf;参考:cve,2012年-5958;参考:cve,2012年-5959;sid:2016303;rev:4;)
下面的awk代码确实有问题,它在显示结果的同时移除所有键之间的分号,最后一个子函数是罪魁祸首,我需要更正以下代码:
awk -F\; '
{
for ( i = 1 ; i <= NF ; i++ ) {
if ( $i ~ "msg" )
a = i
if ( $i ~ "reference:cve," ) {
b = $i
sub ( ".*:" , "" , b )
c = c " " b
}
}
sub ( "$" , "{" c "\"}" , $a )
} 1' snort.rule
发布于 2019-03-07 06:04:49
我会在这里使用perl
perl -pe '$" = " "; @cves = /reference:\s*(cve,\d+-\d+)/g;
s/msg:\s*"(?:\\.|[^\\"])*\K/ {@cves}/ if (@cves)'
同时还使用嵌入式msg
s处理\"
。
https://unix.stackexchange.com/questions/504921
复制