none
Fehlgeschlagene Loginversuche, Get-Eventlog -log security die IPs abfragen? RRS feed

  • Frage

  • Hallo Zusammen ;)

    Ich habe zZ recht häufig Passwortrateversuche auf meinem Winows VServer.

    Ich würde jetzt ganz gern per Powershell die IPs aus dem Eveltog holen, und dann ggf in der Firewall blocken.

    Ich bekomms aber nicht hin ;(  Bin allerdings auch noch Anfänger und am Üben.

    Probiert habe ich sowas wie "get-eventlog -log security |Where-Object {$_.message -eq "Quellnetzwerkadresse"}"

    scheint aber nicht zu passen.

    Ein get-eventlog -log security | where {$_.eventID -eq 4625} |fl   Funktioniert fast, gibt mir aber zuviele Infos.

    Wie komm ich an Mesage -> Quellnetzwerkadresse ran?

    Danke! ;)

    Category : (xxx) CategoryNumber : xxxx ReplacementStrings : {xxx Source : Microsoft-Windows-Security-Auditing TimeGenerated : 05.05.2012 20:40:15 TimeWritten : 05.05.2012 20:40:15 UserName : Index : 411644 EntryType : FailureAudit InstanceId : 4625 Message : Fehler beim Anmelden eines Kontos. Antragsteller: Sicherheits-ID: xxxx Kontoname: xxxx Kontodomäne: WORKGROUP Anmelde-ID: Xxx Anmeldetyp: 10 Konto, für das die Anmeldung fehlgeschlagen ist: Sicherheits-ID: S-1-0-0 Kontoname: administrator Kontodomäne: xxxx Fehlerinformationen: Fehlerursache: %%2313 Status: 0xc000006d Unterstatus:: 0xc000006a Prozessinformationen: Aufrufprozess-ID: 0x47 Aufrufprozessname: C:\Windows\System32\winlogon.exe Netzwerkinformationen: Arbeitsstationsname: xxxx

    Quellnetzwerkadresse: xxxx

    Quellport: 4642 Detaillierte Authentifizierungsinformationen: Anmeldeprozess: User32 Authentifizierungspaket: Negotiate Übertragene Dienste: - Paketname (nur NTLM): - Schlüssellänge: 0

    Samstag, 5. Mai 2012 18:45

Antworten

  • >wieso kann ich nicht direct von $A  aus ein    "$A | Select-String -pattern Quellnetzwerkadresse:"  machen? 

    Weil $a kein String ist. $a ist ein Array aus Eventlogentry-Objekten. Nimmst du eines davon, also das erste z.b. $a[0] und davon den Textteil $a[0].message könntest du diesen auch filtern.

     

    Grundsätzlich war dein erster Versuch übrigens gut, du musst nur statt "-eq" (bedeutet "ist exakt gleich"), "-like" nehmen:

    get-eventlog -log security |Where-Object {$_.message -like "*Quellnetzwerkadresse*"}
     

    Besser wäre aber zum einen die Anzahl der Events zu beschränken (z.b. täglich auszuführen) und dann gleich die IPs aus dem Text zu filtern. Dazu nimmst du Regex und suchst nach dem Pattern "Quellnetzwerkadresse <RegexMusterFürIPAdresse>" und extrahierst daraus dann die IP:
     

    $IPs = @()
    $regexPattern = [regex]"Quellnetzwerkadresse:	\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"     # Suchpattern festlegen
    
    get-eventlog -log security -After (Get-Date).adddays(-1) |        # lese eventlogentrys des letzen Tages
    Where-Object {$_.message -match $regexPattern  } |  		   # filtere nach Einträgen mit angegebem Pattern
    ForEach-Object { $IPs += $matches[0].substring(22)  }		   #extrahiere die IP-Adresse
    
    Write-Output $IPs
     

    Mhm, und was dein grundsätzliches Vorhaben betrifft:

    Ich will da jetzt nicht tiefer einsteigen, aber sich IP's nach einem Angriff zu merken, ist ungefähr so effektiv wie zu versuchen, aus der der Zusammensetzung des Hundehäufchens auf den Hund zu schließen, der da immer deinen Vorgarten verschandelt. ;-)  IPs sind nur Schall und Rauch.

    Sicher deinen Server lieber mit einem wirklich starken Passwort, sieh zu das Patches umgehend eingespielt werden und achte drauf das nur die Ports offen stehen die nötig sind.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".




    Sonntag, 6. Mai 2012 11:33
    Moderator

Alle Antworten

  • Huhu ;)

    Ich habs jetzt über einen Umweg gebastelt,

     $A = Get-EventLog -log Security -EntryType Failureaudit |fl
     $A > C:\log.txt
     $log =  Get-Content C:\log.txt
     $log | Select-String -pattern Quellnetzwerkadresse:

    Dazu aber gleich wieder eine Frage: Wieso kann ich nicht direct von $A  aus ein    "$A | Select-String -pattern Quellnetzwerkadresse:"  machen?   *grummel*

    Der Umweg über das File gefällt mir nicht wirklich, sollte also noch jemand eine Idee haben, gern ;)  Das geht doch sicher eleganter?

    danke!


    • Bearbeitet Heiko_DNB Sonntag, 6. Mai 2012 08:30
    Sonntag, 6. Mai 2012 07:36
  • >wieso kann ich nicht direct von $A  aus ein    "$A | Select-String -pattern Quellnetzwerkadresse:"  machen? 

    Weil $a kein String ist. $a ist ein Array aus Eventlogentry-Objekten. Nimmst du eines davon, also das erste z.b. $a[0] und davon den Textteil $a[0].message könntest du diesen auch filtern.

     

    Grundsätzlich war dein erster Versuch übrigens gut, du musst nur statt "-eq" (bedeutet "ist exakt gleich"), "-like" nehmen:

    get-eventlog -log security |Where-Object {$_.message -like "*Quellnetzwerkadresse*"}
     

    Besser wäre aber zum einen die Anzahl der Events zu beschränken (z.b. täglich auszuführen) und dann gleich die IPs aus dem Text zu filtern. Dazu nimmst du Regex und suchst nach dem Pattern "Quellnetzwerkadresse <RegexMusterFürIPAdresse>" und extrahierst daraus dann die IP:
     

    $IPs = @()
    $regexPattern = [regex]"Quellnetzwerkadresse:	\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"     # Suchpattern festlegen
    
    get-eventlog -log security -After (Get-Date).adddays(-1) |        # lese eventlogentrys des letzen Tages
    Where-Object {$_.message -match $regexPattern  } |  		   # filtere nach Einträgen mit angegebem Pattern
    ForEach-Object { $IPs += $matches[0].substring(22)  }		   #extrahiere die IP-Adresse
    
    Write-Output $IPs
     

    Mhm, und was dein grundsätzliches Vorhaben betrifft:

    Ich will da jetzt nicht tiefer einsteigen, aber sich IP's nach einem Angriff zu merken, ist ungefähr so effektiv wie zu versuchen, aus der der Zusammensetzung des Hundehäufchens auf den Hund zu schließen, der da immer deinen Vorgarten verschandelt. ;-)  IPs sind nur Schall und Rauch.

    Sicher deinen Server lieber mit einem wirklich starken Passwort, sieh zu das Patches umgehend eingespielt werden und achte drauf das nur die Ports offen stehen die nötig sind.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".




    Sonntag, 6. Mai 2012 11:33
    Moderator
  • Get-EventLog -log Security -EntryType Failureaudit | foreach {$_.Message -split "`n"} | select-string -inputobject {$_} -pattern "Quellnetzwerkadresse:" | select-object Line


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '

    Sonntag, 6. Mai 2012 12:34
  • Ui ;)

    @Denniver Reining: *hmpf* das olle -like ;) so nahe dran ;(

    Vielen dank, Klappt prima,

    Meisten dauern diese PW Rateversuche recht lange, bzw kommen von der selben Quelle wieder. Wenn ich zeitnah feststelle das jemand zugange ist, dann kann ich die lästigsten IPs per FW zu erden.

    @Peter Kriegel: auch an dich vielen Dank!

    Sonntag, 6. Mai 2012 16:57
  • Hallo Leute,

    Also die IPS zu blockieren ist schon sinnvoll wenn es im monent des Angriffs passiert.. spart sehr viel CPU-Zeit ein und schont die Event-Logs.

    Du kannst allerdings nicht in Echtzeit alle fehlgeschlagenen Logins gleich bannen, du müsstest LIVE ein gewisses Muster erkennen,

    was weiß ich, zb 5 falsche Versuche von einer IP innerhalb von 1 Minute.

    Normalerweise läuft das so ab dass alle 3-5 Sekunden ein neuer Audit-Failure geworfen wird. Man müsste also nur solche Angriffe erkennen und anlassbezogen die IP kurzzeitig sperren (es reicht wahrscheinlich schon 1-2h). Mit Powershell kommst du da wahrscheinlich nicht sehr gut zurande.

    Wie Denniver schon sagt, nachträglich zu bannen ist total sinnlos und kannst du dir sparen.

    Um so etwas effektiv zu blockieren müsstest du einen Dienst laufen lassen oder ein IDS installieren.

    Wenn das nur vereinzelt vorkommt und die Ressourcen deines Rechners nicht zu sehr stört, reicht es, ein sehr starkes Passwort zu haben,

    Wenn nicht siehe diesen Beitrag http://community.spiceworks.com/topic/153235-auto-banning-ips-using-event-log-and-windows-firewall

    mfg Michael



    • Bearbeitet Mscoen Freitag, 23. November 2012 21:05
    Freitag, 23. November 2012 20:58
  • Bitte grabe keine alten Threads wieder aus.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Freitag, 23. November 2012 21:00
    Moderator