Awk를 사용하여 Bro 로그에서 온라인 텍스트 파일에 있는 IP/키워드를 검색하세요.

Awk를 사용하여 Bro 로그에서 온라인 텍스트 파일에 있는 IP/키워드를 검색하세요.

Bro 로그를 확인하고 있으며 AWK를 사용하여 추적기에서 IP를 얻는 방법을 찾고 있습니다.협회그리고 Bro 로그에서 이러한 IP를 자동으로 검색하고 각 일치 결과를 [custom-name].txt파일로 인쇄합니다.

추가 정보:

나는 awk를 처음 접했지만 여러 가지를 하나로 묶으려고 노력하고 있습니다. 이 작업을 수행하는 더 좋은 방법이 있다면 awk에 감사하지 않을 것입니다. 효율적이면 좋을 것 같습니다.

이제 Excel 함수를 사용하여 잘못된 IP 열(링크에서 정기적으로 업데이트됨)을 매우 긴 awk OR 문자열로 수동으로 연결합니다.

cat http* | awk '/123\.456\.789\.012/ || /2nd IP/ || /3rd IP/' | sort -n > file.txt

현재 http.log에는 일반적인 Bro 헤더가 있습니다... TS UID ID.orig_h ID.orig_p 등.

평신도의 관점에서 내가하고 싶은 일은 다음과 같습니다.

라인 1의 IP인 경우협회http.log에서 발견되면 line_1_ip.txt에 결과를 인쇄합니다. IP 연결 line 2가 http.log에서 발견되면 결과를 line_2_ip.txt에 인쇄합니다.

IP 조각은 다음과 같습니다.

#############################################################################################
# abuse.ch ZeuS IP blocklist "BadIPs" (excluding hijacked sites and free hosting providers) #
#                                                                                           #
# For questions please refer to https://zeustracker.abuse.ch/blocklist.php                  #
#############################################################################################

103.230.84.239
103.241.0.100
103.26.128.84
103.4.52.150
103.7.59.135
104.218.48.99
104.219.232.12
104.236.55.19
107.150.58.84
108.61.193.211

그냥 텍스트 파일이에요.

실제로 IP를 추출하기 위해 원격 웹페이지를 참조할 때 어디서부터 시작해야 할지 모르겠습니다. 그러나 로컬 텍스트 파일에서 추출할 수 있다면 작업을 위한 출발점이 될 것입니다.

답변1

입력 형식을 본 적이 없기 때문에 구문 분석하려는 내용이 무엇인지 잘 모르겠지만 IP 목록을 읽고 해당 출력 파일로 인쇄하려는 경우 다음을 시도해 볼 수 있습니다.

awk 'NR==FNR{a[$1]=NR; next} {
    for(ip in a){ 
        if($0~ip){ 
            print >> "line_"a[ip]"_ip.txt" 
        } 
    }
}}' <(wget -O - "https://zeustracker.abuse.ch/blocklist.php?download=badips" 2>/dev/null | 
    grep -Ev "#|^ *$") http.log 

하지만 좀 복잡하므로 간단히 풀어보겠습니다.

  • wget -O - https://zeustracker.abuse.ch/blocklist.php?download=badips 2>/dev/null | grep -Ev "#|^ *$": IP 목록을 다운로드하고, 포함된 줄 #이나 빈 줄을 제거하고 표준 출력으로 인쇄합니다.
  • <(command): 이것은 ... 불리운다프로세스 교체이는 프로세스의 출력을 다른 명령의 입력 파일로 처리할 수 있도록 하는 일부 쉘(bash, zsh 및 ksh 등)의 트릭입니다.
  • 따라서 조각에는 두 개의 "파일"이 표시됩니다. 첫 번째는 awk명령 파이프의 출력이고 두 번째는 파일입니다.wgetgrephttp.log
  • NR==FNR{a[$1]=NR; next}: NR은 현재 입력 라인 번호이며 FNR동일하지만 다릅니다.현재 파일. 둘은 첫 번째 파일을 읽을 때만 동일합니다. 따라서 a키가 IP이고 값이 현재 행 번호인 배열이 생성됩니다.
  • for(ip in a): 배열을 반복하여 a각 키(IP)를 ip.
  • if($0~ip){}: 이 줄( $0)이 이것과 일치하는 경우 ip.
  • print >> "line_"a[ip]"_ip.txt"line_: 해당 IP에 대한 입력 줄 번호를 표시하는 파일에 줄을 인쇄합니다 _ip.txt. 이렇게 >>하면 파일이 추가되고 덮어쓰이지 않게 됩니다.

답변2

로그 파일에서 데이터를 bro추출합니다 .bro-cut

다음을 수행할 수 있습니다.

bro-cut id.orig_h id.resp_h < conn.log | grep -wFf <(
  curl 'https://zeustracker.abuse.ch/blocklist.php?download=badips' |
  grep '^[^#]'
)

그리고 awk:

awk '
  NR == FNR {
    if (/^[^#]/) bad[$0]=""
    next
  }
  ($1 in bad) || ($2 in bad)
' <(curl 'https://zeustracker.abuse.ch/blocklist.php?download=badips') \
  <(bro-cut id.orig_h id.resp_h < conn.log)

(루프에서 힘든 문자열 일치를 수행하는 대신 해시 테이블을 사용하는 것이 더 효율적입니다.)

또한 새로운 위협 규칙 세트에는 이러한 Zeus 추적기 목록(및 기타 목록)을 추적하는 규칙이 있습니다. 따라서 bro-ids 외에 해당 규칙 세트와 함께 snort/surricata를 사용하는 경우 bro를 사용하여 수행하는 것은 결국 중복되게 됩니다.

관련 정보