이벤트 로그를 한개 한개 뒤져서 체크 하기가 힘들다.
예전에 작성했던 자동 차단 파워쉘을 조금 수정해서 목록만 뽑도록 만듬.
원격데스크탑(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
언제 한번 날 잡아서 완성형으로 만들어야 될 듯...