snort.ruleファイルがあり、行からcve番号と参照キーを抽出して再追加する必要があります。MSG中かっこ内の同じ行にあるフィールド、下には前のログがあります。
警告 udp $HOME_NET 1900 -> すべて (msg: "ET INFO UPnP 検索検索応答脆弱な UPnP デバイス 2"; コンテンツ: "UPnP デバイス用 Intel SDK"; pcre: "/^Server\x3a[^\ r\n] *UPnP デバイス用 Intel SDK/mi"; リファレンス: /infosec/blog/2013/01/29; リファレンス: arch/UPnP-arch-DeviceArchitecture-v1.1.pdf; リファレンス: cve,2012 -5958; リファレンス: CVE 、2012-5959; SID: 2016303; 改訂: 4;
希望の出力は次のとおりです。新しい変更は太字で表示されます。
警告 udp $HOME_NET 1900 -> any any(msg:"ET INFO UPnP 検索応答 脆弱な UPnP デバイス 2{cve,2012-5958 cve,2012-5959}"; content:"UPnP デバイス用の Intel SDK"; pcre:"/^Server\x3a[^\r\n]*UPnP デバイス用の Intel SDK/mi"; 参照: /infosec/blog/2013/01/ 29;参照: Arch/UPnP-arch-DeviceArchitecture-v1.1.pdf; 参照: cve, 2012-5958; 参照: cve, 2012-5959;)
以下の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
答え1
perl
ここを利用します
perl -pe '$" = " "; @cves = /reference:\s*(cve,\d+-\d+)/g;
s/msg:\s*"(?:\\.|[^\\"])*\K/ {@cves}/ if (@cves)'
また、msg
埋め込み項目も処理します\"
。