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
임베디드 항목 도 처리합니다 \"
.