{"id":208565,"date":"2024-01-24T09:28:18","date_gmt":"2024-01-24T09:28:18","guid":{"rendered":"https:\/\/www.ninjaone.com\/script-hub\/erkennen-und-verhindern-von-brute-force-angriffen-mit-powershell\/"},"modified":"2024-03-04T16:43:40","modified_gmt":"2024-03-04T16:43:40","slug":"erkennen-und-verhindern-von-brute-force-angriffen-mit-powershell","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/de\/script-hub\/erkennen-und-verhindern-von-brute-force-angriffen-mit-powershell\/","title":{"rendered":"Erkennen und Verhindern von Brute-Force-Angriffen mit PowerShell"},"content":{"rendered":"<p>Zwar entwickeln sich Cyber-Bedrohungen st\u00e4ndig weiter, doch die meisten Angriffe beruhen nach wie vor auf grundlegenden und bew\u00e4hrten Techniken. Warum sollte man eine Zero-Day-L\u00fccke ausnutzen, wenn das Erraten h\u00e4ufig verwendeter Passw\u00f6rter oder das Ausnutzen von Passw\u00f6rtern, die in mehreren Konten verwendet werden, einen einfachen Zugriff erm\u00f6glichen kann?<\/p>\n<p>Brute-Force-Angriffe sind nach wie vor eine sehr h\u00e4ufige Bedrohung f\u00fcr Unternehmen. Es ist von entscheidender Bedeutung, diese Versuche so schnell wie m\u00f6glich zu erkennen und zu blockieren, da sie oft Vorboten f\u00fcr weitere sch\u00e4dliche Aktivit\u00e4ten und b\u00f6sartige Zugriffsversuche sind. Da in solchen Situationen jede Minute z\u00e4hlt, sind Richtlinien zur Kontosperrung und Echtzeitwarnungen bei fehlgeschlagenen Anmeldeversuchen eine \u00e4u\u00dferst wichtige fr\u00fchzeitige Abschreckungs- und Warnma\u00dfnahme.<\/p>\n<p>Aber was ist mit der <strong>Erkennung von ferngesteuerten Brute-Force-Angriffen<\/strong> und in gro\u00dfem Umfang \u00fcber ein ganzes Unternehmensnetzwerk?<\/p>\n<p>Da dies eine Herausforderung sein kann, haben wir das folgende Skript bereitgestellt, mit dem Administratoren den Prozess automatisieren k\u00f6nnen, indem sie <a href=\"https:\/\/www.ninjaone.com\/blog\/find-failed-login-attempts-windows-powershell\/\">fehlgeschlagene Anmeldeversuche \u00fcberwachen<\/a> und auf der Grundlage anpassbarer Schwellenwerte Warnmeldungen ausl\u00f6sen.<\/p>\n<h2>Skript zur Erkennung und Verhinderung von Brute-Force-Angriffen<\/h2>\n<p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"powershell\">#Requires -Version 5.1\r\n\r\n&lt;#\r\n.SYNOPSIS\r\n    Condition for helping detect brute force login attempts.\r\n.DESCRIPTION\r\n    Condition for helping detect brute force login attempts.\r\n.EXAMPLE\r\n     -Hours 10\r\n    Number of hours back in time to look through in the event log.\r\n    Default is 1 hour.\r\n.EXAMPLE\r\n    -Attempts 100\r\n    Number of login attempts to trigger at or above this number.\r\n    Default is 8 attempts.\r\n.OUTPUTS\r\n    PSCustomObject[]\r\n.NOTES\r\n    Minimum OS Architecture Supported: Windows 10, Windows Server 2016\r\n    Release Notes:\r\n    Initial Release\r\nBy using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https:\/\/www.ninjaone.com\/terms-of-use.\r\n    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. \r\n    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. \r\n    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. \r\n    Warranty Disclaimer: The script is provided \u201cas is\u201d and \u201cas available\u201d, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. \r\n    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. \r\n    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. \r\n    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).\r\n#&gt;\r\n\r\n[CmdletBinding()]\r\nparam (\r\n    [Parameter()]\r\n    [int]\r\n    $Hours = 1,\r\n    [Parameter()]\r\n    [int]\r\n    $Attempts = 8\r\n)\r\n\r\nbegin {\r\n    function Test-IsElevated {\r\n        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()\r\n        $p = New-Object System.Security.Principal.WindowsPrincipal($id)\r\n        $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)\r\n    }\r\n    function Test-StringEmpty {\r\n        param([string]$Text)\r\n        # Returns true if string is empty, null, or whitespace\r\n        process { [string]::IsNullOrEmpty($Text) -or [string]::IsNullOrWhiteSpace($Text) }\r\n    }\r\n    if (-not $(Test-StringEmpty -Text $env:Hours)) {\r\n        $Hours = $env:Hours\r\n    }\r\n    if (-not $(Test-StringEmpty -Text $env:Attempts)) {\r\n        $Attempts = $env:Attempts\r\n    }\r\n}\r\nprocess {\r\n    if (-not (Test-IsElevated)) {\r\n        Write-Error -Message \"Access Denied. Please run with Administrator privileges.\"\r\n        exit 1\r\n    }\r\n\r\n    if ($(auditpol.exe \/get \/category:* | Where-Object { $_ -like \"*Logon*Success and Failure\" })) {\r\n        Write-Information \"Audit Policy for Logon is set to: Success and Failure\"\r\n    }\r\n    else {\r\n        Write-Error \"Audit Policy for Logon is NOT set to: Success and Failure\"\r\n        exit 1\r\n        # Write-Host \"Setting Logon to: Success and Failure\"\r\n        # auditpol.exe \/set \/subcategory:\"Logon\" \/success:enable \/failure:enable\r\n        # Write-Host \"Future failed login attempts will be captured.\"\r\n    }\r\n\r\n    $StartTime = (Get-Date).AddHours(0 - $Hours)\r\n    $EventId = 4625\r\n\r\n    # Get failed login attempts\r\n    try {\r\n        $Events = Get-WinEvent -FilterHashtable @{LogName = \"Security\"; ID = $EventId; StartTime = $StartTime } -ErrorAction Stop | ForEach-Object {\r\n            $Message = $_.Message -split [System.Environment]::NewLine\r\n            $Account = $($Message | Where-Object { $_ -Like \"*Account Name:*\" }) -split 's+' | Select-Object -Last 1\r\n            [int]$LogonType = $($Message | Where-Object { $_ -Like \"Logon Type:*\" }) -split 's+' | Select-Object -Last 1\r\n            $SourceNetworkAddress = $($Message | Where-Object { $_ -Like \"*Source Network Address:*\" }) -split 's+' | Select-Object -Last 1\r\n            [PSCustomObject]@{\r\n                Account              = $Account\r\n                LogonType            = $LogonType\r\n                SourceNetworkAddress = $SourceNetworkAddress\r\n            }\r\n        } | Where-Object { $_.LogonType -in @(2, 7, 10) }\r\n    }\r\n    catch {\r\n        if ($_.Exception.Message -like \"No events were found that match the specified selection criteria.\") {\r\n            Write-Host \"No failed logins found in the past $Hours hour(s).\"\r\n            exit 0\r\n        }\r\n        else {\r\n            Write-Error $_\r\n            exit 1\r\n        }\r\n    }\r\n\r\n    # Build a list of accounts \r\n    $UsersAccounts = [System.Collections.Generic.List[String]]::new()\r\n    try {\r\n        $ErrorActionPreference = \"Stop\"\r\n        Get-LocalUser | Select-Object -ExpandProperty Name | ForEach-Object { $UsersAccounts.Add($_) }\r\n        $ErrorActionPreference = \"Continue\"\r\n    }\r\n    catch {\r\n        $NetUser = net.exe user\r\n        $(\r\n            $NetUser | Select-Object -Skip 4 | Select-Object -SkipLast 2\r\n            # Join each line with a \",\"\r\n            # Replace and spaces with a \",\"\r\n            # Split everything by \",\"\r\n        ) -join ',' -replace 's+', ',' -split ',' |\r\n            # Sort and remove any duplicates\r\n            Sort-Object -Descending -Unique |\r\n            # Filter out empty strings\r\n            Where-Object { -not [string]::IsNullOrEmpty($_) -and -not [string]::IsNullOrWhiteSpace($_) } |\r\n            ForEach-Object {\r\n                $UsersAccounts.Add($_)\r\n            }\r\n    }\r\n    $Events | Select-Object -ExpandProperty Account | ForEach-Object { $UsersAccounts.Add($_) }\r\n\r\n    $Results = $UsersAccounts | Select-Object -Unique | ForEach-Object {\r\n        $Account = $_\r\n        $AccountEvents = $Events | Where-Object { $_.Account -like $Account }\r\n        $AttemptCount = $AccountEvents.Count\r\n        $SourceNetworkAddress = $AccountEvents | Select-Object -ExpandProperty SourceNetworkAddress -Unique\r\n        if ($AttemptCount -gt 0) {\r\n            [PSCustomObject]@{\r\n                Account              = $Account\r\n                Attempts             = $AttemptCount\r\n                SourceNetworkAddress = $SourceNetworkAddress\r\n            }\r\n        }\r\n    }\r\n\r\n    # Get only the accounts with fail login attempts at or over $Attempts\r\n    $BruteForceAttempts = $Results | Where-Object { $_.Attempts -ge $Attempts }\r\n    if ($BruteForceAttempts) {\r\n        $BruteForceAttempts | Out-String | Write-Host\r\n        exit 1\r\n    }\r\n    $Results | Out-String | Write-Host\r\n    exit 0\r\n}\r\nend {\r\n    $ScriptVariables = @(\r\n        [PSCustomObject]@{\r\n            name           = \"Hours\"\r\n            calculatedName = \"hours\" # Must be lowercase and no spaces\r\n            required       = $false\r\n            defaultValue   = [PSCustomObject]@{ # If not default value, then remove\r\n                type  = \"TEXT\"\r\n                value = \"1\"\r\n            }\r\n            valueType      = \"TEXT\"\r\n            valueList      = $null\r\n            description    = \"Number of hours back in time to look through in the event log.\"\r\n        }\r\n        [PSCustomObject]@{\r\n            name           = \"Attempts\"\r\n            calculatedName = \"attempts\" # Must be lowercase and no spaces\r\n            required       = $false\r\n            defaultValue   = [PSCustomObject]@{ # If not default value, then remove\r\n                type  = \"TEXT\"\r\n                value = \"8\"\r\n            }\r\n            valueType      = \"TEXT\"\r\n            valueList      = $null\r\n            description    = \"Number of login attempts to trigger at or above this number.\"\r\n        }\r\n    )\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<br \/>\n<div class=\"in-context-cta\"><p>Zugriff auf \u00fcber 300 Skripte im NinjaOne Dojo<\/p>\n<p><a href=\"https:\/\/www.ninjaone.com\/de\/kostenlosetestversionformular\/\">Zugang erhalten<\/a><\/p>\n<\/div><\/p>\n<h2>Das Skript verstehen und verwenden<\/h2>\n<p>Unser Skript h\u00e4ngt von zwei Hauptparametern ab: `Stunden` und `Versuche`. Der Parameter &#8222;Hours&#8220; gibt den Zeitraum an, der im Ereignisprotokoll \u00fcberpr\u00fcft werden soll (Standardwert: 1 Stunde). Der Parameter &#8222;Versuche&#8220; legt den Schwellenwert f\u00fcr Anmeldeversuche fest, bevor ein Alarm ausgel\u00f6st wird (Standardwert: 8 Versuche).<\/p>\n<h3>Um das Skript zu installieren und auszuf\u00fchren, gehen Sie folgenderma\u00dfen vor:<\/h3>\n<ol>\n<li>\u00d6ffnen Sie PowerShell mit Administratorberechtigungen.<\/li>\n<li>Kopieren Sie das Skript in Ihre PowerShell-Umgebung.<\/li>\n<li>Passen Sie die Parameter &#8222;Hours&#8220; und &#8222;Attempts&#8220; nach Bedarf an.<\/li>\n<li>F\u00fchren Sie das Skript aus.<\/li>\n<\/ol>\n<p>Das Skript wertet dann die Ereignisprotokolle anhand der angegebenen Parameter aus. Wenn die Anzahl der fehlgeschlagenen Anmeldeversuche innerhalb des angegebenen Zeitraums den Schwellenwert \u00fcberschreitet, werden Sie auf einen m\u00f6glichen Brute-Force-Angriff hingewiesen.<\/p>\n<p>Ein Beispiel: Sie m\u00f6chten die Anmeldeversuche der letzten drei Stunden \u00fcberwachen und eine Warnung ausgeben, wenn es mehr als 15 Fehlversuche gibt. Mit NinjaOne haben Sie die Flexibilit\u00e4t, Ihr Sicherheitskonzept anzupassen, indem Sie das Skript mit ma\u00dfgeschneiderten Parametern wie -Stunden 3 -Versuche 15 ausf\u00fchren. Mit dieser Funktion k\u00f6nnen Sie sich an die individuellen Sicherheitsanforderungen und Risikoprofile Ihres Unternehmens anpassen.<\/p>\n<h2>Zus\u00e4tzliche Sicherheitsma\u00dfnahmen<\/h2>\n<p>Die Erkennung von Brute-Force-Angriffen ist nur eine Komponente einer ganzheitlichen Cybersicherheitsstrategie. Weitere wichtige Ma\u00dfnahmen sind:<\/p>\n<ul>\n<li><strong> Starke Passw\u00f6rter:<\/strong> Ermuntern Sie die Benutzer:innen, solide, eindeutige Passw\u00f6rter zu erstellen &#8211; idealerweise eine Mischung aus Buchstaben, Zahlen und Symbolen. Passwort-Manager k\u00f6nnen die <a href=\"https:\/\/www.ninjaone.com\/de\/blog\/vorstellung-des-ninjarmm-credential-exchange\/\">Verwaltung von komplexen Passw\u00f6rtern<\/a>erleichtern.<\/li>\n<li><strong>Multi-Faktor-Authentifizierung (MFA):<\/strong> Mehr-Faktor-Authentifizierung (MFA) bietet eine zus\u00e4tzliche Sicherheitsebene, indem Benutzer:innen aufgefordert werden, ihre Identit\u00e4t durch die Verwendung von zwei oder mehr Mechanismen zu \u00fcberpr\u00fcfen (z. B. etwas, das sie wissen, etwas, das sie haben oder etwas, das sie sind).<\/li>\n<li><strong>Software-Aktualisierungen:<\/strong> Die regelm\u00e4\u00dfige Aktualisierung der Software ist unerl\u00e4sslich. Die Aktualisierungen enthalten h\u00e4ufig <a href=\"https:\/\/www.ninjaone.com\/de\/patch-management\/\">Patches f\u00fcr Sicherheitsl\u00fccken<\/a>, die, wenn sie nicht behoben werden, Cyberangriffen T\u00fcr und Tor \u00f6ffnen k\u00f6nnten.<\/li>\n<li><strong>Mitarbeiterschulung<\/strong>: Die Einf\u00fchrung eines Schulungsprogramms f\u00fcr das Sicherheitsbewusstsein tr\u00e4gt dazu bei, die Mitarbeiter:innen \u00fcber Cyber-Bedrohungen und die Rolle, die sie bei der Aufrechterhaltung der Sicherheit spielen, aufzukl\u00e4ren. Der Faktor Mensch ist oft das schw\u00e4chste Glied in der Cybersicherheit, und gut informierte Mitarbeiter:innen k\u00f6nnen Ihren Schutz erheblich verst\u00e4rken.<\/li>\n<\/ul>\n<h2>Abschlie\u00dfende \u00dcberlegungen<\/h2>\n<p>Eine effektive Erkennung von Brute-Force-Angriffen ist entscheidend in der heutigen digitalen Landschaft, und unser PowerShell-Skript bietet eine leistungsstarke, anpassbare L\u00f6sung. Es ist jedoch wichtig, daran zu denken, dass sie Teil einer umfassenderen Cybersicherheitsstrategie ist. Durch die Kombination von Echtzeit-Erkennung mit sicheren Passw\u00f6rtern, MFA, Software-Updates und Mitarbeiterschulungen k\u00f6nnen Sie ein umfassendes Sicherheitsprotokoll zum Schutz Ihrer digitalen Ressourcen erstellen.<\/p>\n<p>NinjaOne ist ein umfassendes Tool, das Ihre F\u00e4higkeit, Brute-Force-Angriffe zu erkennen und abzuwehren, erheblich verbessert. Mit <a href=\"https:\/\/www.ninjaone.com\/de\/rmm\/endpunktschutz\/\">vollst\u00e4ndiger Kontrolle \u00fcber die Endpunktsicherheit<\/a> k\u00f6nnen Sie Anwendungen verwalten, Registrierungen per Fernzugriff bearbeiten und Skripte zur Verbesserung der Sicherheit bereitstellen. Rollenbasierte Zugriffskontrollen stellen sicher, dass Ihre Techniker:innen nur die erforderlichen Zugriffsrechte erhalten, wodurch potenzielle Sicherheitsl\u00fccken reduziert werden. Die Plattform bietet au\u00dferdem Tools zur Verwaltung der Laufwerksverschl\u00fcsselung und die M\u00f6glichkeit, den Endpunktschutz automatisch zu installieren und zu verwalten, so dass Sie eine genaue Kontrolle \u00fcber die Antivirus-Operationen haben.<\/p>\n<p>Dar\u00fcber hinaus <a href=\"https:\/\/www.ninjaone.com\/de\/rmm\/passwort-manager\/\">sch\u00fctzt die Funktion zum Austausch von Anmeldedaten in NinjaOne die Anmeldedaten<\/a>, eine wichtige Verteidigungslinie gegen Brute-Force-Angriffe. Es erm\u00f6glicht auch die Identifizierung und Entfernung von b\u00f6sartigen Endpunkten, was einen zus\u00e4tzlichen Schutz darstellt. Handeln Sie, bevor es zu einem Sicherheitsversto\u00df kommt. <a href=\"https:\/\/www.ninjaone.com\/de\/kostenlosetestversionformular\">Starten Sie noch heute Ihre Reise zu erh\u00f6hter Sicherheit<\/a>mit NinjaOne.<\/p>\n","protected":false},"author":35,"featured_media":206799,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","_lmt_disableupdate":"no","_lmt_disable":""},"operating_system":[4212],"use_cases":[],"class_list":["post-208565","script_hub","type-script_hub","status-publish","has-post-thumbnail","hentry","script_hub_category-windows"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/script_hub\/208565","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/script_hub"}],"about":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/types\/script_hub"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/comments?post=208565"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/media\/206799"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/media?parent=208565"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/operating_system?post=208565"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/use_cases?post=208565"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}