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