2016년 12월 8일 목요일

이벤트 실패 로그에 있는 공격 IP 뽑아내기.

이벤트 로그에 지속적인 공격이 들어오는 게 보인다. ㅅㅂㄹㄷ

이벤트 로그를 한개 한개 뒤져서 체크 하기가 힘들다.

예전에 작성했던 자동 차단 파워쉘을 조금 수정해서 목록만 뽑도록 만듬.

원격데스크탑(RDP)
###################### Config #######################아래의 형식으로 있는 IP 주소를 가져오기 위한 정규식$regex2 = [regex] "원본 네트워크 주소:\t(\d+\.\d+\.\d+\.\d+)";#아래 값 이상인 것만 차단 리스트($blacklist)에 추가$deny_count = 5#이벤트 로그가 많을 경우 어마무시하게 오래 걸림. 불러올 로그 개수$newest = 1000###################### Config ###################### ##최종 공격자 IP 배열$blacklist = @(); #초기화$list=""#메인 명령어( 이 스크립트의 코어임.)#이벤트 실패 로그인 4625 ID 에서 아이피가 있는 message 부분에서 IP만 뽑아낸다.#list 변수 = 이벤트 실패 로그 아이피 (중복포함)$ips = get-eventlog Security -Newest  $newest | Where-Object {$_.EventID -eq 4625 } | foreach {    $m = $regex2.Match($_.Message); $ip = $m.Groups[1].Value; $ip;    } | Sort-Object | Tee-Object -Variable list | Get-Unique     # ($list | Select-String 211.217.48.254 -SimpleMatch | Measure-Object).count;     foreach ($forIp in $ips) {        #로그인 실패 이벤트 로그 중에는 IP가 없는 것들도 있는 데, 그런 경우        #빈값이 들어오므로 continue로 넘겨준다.        if([string]::IsNullOrEmpty($forIp))        {            #'continue';             continue;        }        if (-not ($blacklist -contains $forIp)) {            $attack_count = ($list | Select-String $forIp -SimpleMatch | Measure-Object).count;             "Found RDP attacking IP on 3389: " + $forIp + ", with count: " + $attack_count;             if ($attack_count -ge $deny_count) {$blacklist = $blacklist + $forIp;}         }    }"""========$deny_count 회 이상 실패 IP==============="#방화벽 등록 명령어를 이용해서 자동 차단으로 해도 된다.$blacklist

 

MSSQL
로그 예제 : 사용자 'sa'이(가) 로그인하지 못했습니다. 원인: 암호가 제공된 로그인의 암호와 일치하지 않습니다. [클라이언트: 211.41.41.203]
###################### Config #######################아래의 형식으로 있는 IP 주소를 가져오기 위한 정규식$regex2 = [regex] "클라이언트: (\d+\.\d+\.\d+\.\d+)";#아래 값 이상인 것만 차단 리스트($blacklist)에 추가$deny_count = 5;#이벤트 로그가 많을 경우 어마무시하게 오래 걸림. 불러올 로그 개수$newest = 1000###################### Config ###################### ##최종 공격자 IP 배열$blacklist = @(); #초기화$list=""#메인 명령어( 이 스크립트의 코어임.)#이벤트 실패 로그인 18456 ID 에서 아이피가 있는 message 부분에서 IP만 뽑아낸다.#list 변수 = 이벤트 실패 로그 아이피 (중복포함)$ips = get-eventlog Application -Newest  $newest | Where-Object {$_.EventID -eq 18456 } | foreach {    $m = $regex2.Match($_.Message); $ip = $m.Groups[1].Value; $ip;    } | Sort-Object | Tee-Object -Variable list | Get-Unique     # ($list | Select-String 211.217.48.254 -SimpleMatch | Measure-Object).count;     foreach ($forIp in $ips) {        #로그인 실패 이벤트 로그 중에는 IP가 없는 것들도 있는 데, 그런 경우        #빈값이 들어오므로 continue로 넘겨준다.        if([string]::IsNullOrEmpty($forIp))        {            #'continue';             continue;        }        if (-not ($blacklist -contains $forIp)) {            $attack_count = ($list | Select-String $forIp -SimpleMatch | Measure-Object).count;             "Found RDP attacking IP on MSSQL: " + $forIp + ", with count: " + $attack_count;             if ($attack_count -ge $deny_count) {$blacklist = $blacklist + $forIp;}         }    }"""========$deny_count 회 이상 실패 IP==============="#방화벽 등록 명령어를 이용해서 자동 차단으로 해도 된다.$blacklist

 


언제 한번 날 잡아서 완성형으로 만들어야 될 듯...

댓글 없음:

댓글 쓰기