ログファイルはデータを抽出し、同じ行を再度追加します。

ログファイルはデータを抽出し、同じ行を再度追加します。

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;)

CVE番号を抽出できますが、再追加した後は取得できません。

cat /tmp/snort.rule | grep -o -E -e 'sid:[^;]+' -e 'reference:cve,[^;]+'

ベストアンサー1

試してみてシェルファイルにコピーして実行すると、出力を新しいファイルに保存できます。 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' /tmp/snort.rule

おすすめ記事