Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

감사합니다.

Powershell - Event Log Parsing 본문

Microsoft/Powershell

Powershell - Event Log Parsing

springjunny 2017. 11. 30. 12:45

회사 서버에 공인 IP를 할당해 두었는데 공격이 많이 들어온다.

최근에는 계정이 털려서 복구했는데 채굴 프로그램이 돌아가고 있더라...


공격 들어오는 IP를 차단하고 싶어서 진행한 내용을 정리해본다. 물론 방화벽장비에서 처리하는게 맞겠지만 테스트겸...


1. 계정 이름 및 패스워드 변경 : 윈도우 보안 적용


2. 계정 감사 정책 설정 (권장 설정은 아님)



3. Security 이벤트 로그에서 로그온 이벤트 확인


4. 방화벽 정책 생성


5. 파워쉘로 이벤트 로그 파싱

#find security log with event id 4625


$Events = Get-WinEvent -FilterHashtable @{logname='Security'; id=4625} -MaxEvents 10


foreach($Event in $Events){

# Convert the event to XML

$eventXMLs = [xml]$Event.ToXml()


    foreach($eventXML in $eventXMLs){

    #$eventXML.Event.EventData.Data

    $logs = New-Object psobject -Property @{

    UserName = $eventXML.Event.EventData.Data[5].'#text'

    IPAddress = $eventXML.Event.EventData.Data[19].'#text'

    Date = $Event.TimeCreated

        }

    $logs

    }

}




6. 방화벽 차단 IP 등록(1번 항목에서 등록한 계정의 패스워드가 틀린 경우는 제외)

#find security log with event id 4625


$Events = Get-WinEvent -FilterHashtable @{logname='Security'; id=4625} -MaxEvents 50


foreach($Event in $Events){

# Convert the event to XML

$eventXMLs = [xml]$Event.ToXml()

    foreach($eventXML in $eventXMLs){

    #$eventXML.Event.EventData.Data

    $logs = New-Object psobject -Property @{

        UserName = $eventXML.Event.EventData.Data[5].'#text'

        IPAddress = $eventXML.Event.EventData.Data[19].'#text'

        Date = $Event.TimeCreated

        }


    if($logs.UserName -ne "★★★★★★"){

       $firewallrule = Get-NetFirewallRule -DisplayName "Block IP"

       $ips = ($firewallrule | Get-NetFirewallAddressFilter ).RemoteAddress

       $logsip = $logs.IPAddress

       $diff = $ips | Where-Object{$_ -eq $logsip} -ErrorAction Ignore -Verbose

       

       if(-not $diff){

        $ips += $logsip

        Set-NetFirewallRule -DisplayName $firewallrule.DisplayName -RemoteAddress $ips -Verbose

        }

        }

    }

}



7. 스크립트를 스케줄러에 등록하여 반복 실행한다.