Leuchtender digitaler Globus mit orange-blauer Weltkarte im Zentrum, umgeben von schwebenden Datenfenstern und Codesymbolen auf dunklem Hintergrund – Darstellung globaler Vernetzung und Digitalisierung.

Clever Daten sammeln wie beim Nachrichtendienst

Einführung in OSINT: Potenzial und Risiken

Von: Andreas Heideck

Open Source Intelligence (OSINT) ist ein Fenster in die Welt der öffentlichen Informationen und wird in vielfältigen Bereichen genutzt – von der Cybersicherheit bis zur Strafverfolgung. Dieser Artikel führt dich in die Grundlagen von OSINT ein und zeigt, wie das Sammeln und Analysieren öffentlich zugänglicher Daten auf spannende und wertvolle Weise eingesetzt wird. In einem weiteren Artikel erkunden wir, wie OSINT zur Bedrohung werden kann und welche Gefahren in der scheinbar harmlosen Welt offener Daten lauern. Tauche ein und entdecke die Kraft der Information!

Was ist OSINT?

Open Source Intelligence (OSINT) bezeichnet das Sammeln und die Analyse öffentlich zugänglicher Informationen mit dem Ziel, Erkenntnisse über eine Person, Organisation oder ein Thema zu gewinnen. Dabei können verschiedene Quellen wie Webseiten, soziale Medien, Nachrichten, Regierungsdatenbanken und vieles mehr herangezogen werden. OSINT ist ein wichtiger Bestandteil vieler Branchen, wie beispielsweise der Cybersicherheit, der Strafverfolgung und des Journalismus.

Der OSINT-Prozess umfasst mehrere Schritte:

  • Informationssuche: Zuerst werden relevante Quellen identifiziert und durchsucht.
  • Datenanalyse: Die gesammelten Daten werden gefiltert, geprüft und bewertet.
  • Interpretation: Abschließend werden die analysierten Informationen interpretiert, um fundierte Entscheidungen zu treffen oder Hypothesen zu bestätigen.

OSINT zeichnet sich dadurch aus, dass auf legal zugängliche Informationen zurückgegriffen wird. Das bedeutet jedoch nicht, dass dies völlig unproblematisch ist – besonders im Hinblick auf den Datenschutz und auch unter ethischen Gesichtspunkten. In den letzten Jahren hat OSINT an Bedeutung gewonnen, da immer mehr Daten im Internet frei verfügbar sind und durch spezialisierte Tools effizient durchsucht und analysiert werden können.

Warum ist OSINT relevant?

OSINT hat in den letzten Jahren erheblich an Bedeutung gewonnen, da es vielen Branchen ermöglicht, Entscheidungen auf Basis frei zugänglicher Informationen zu treffen. Da eine Fülle an Daten über das Internet leicht zugänglich ist, nutzen Ermittler, Sicherheitsbehörden, Unternehmen und Journalisten OSINT, um schnell und effizient Erkenntnisse zu gewinnen.

Relevanz für verschiedene Branchen:

  • Cybersicherheit: OSINT hilft dabei, potenzielle Bedrohungen frühzeitig zu erkennen, indem Informationen über bekannte Angreifer und deren Techniken gesammelt werden.
  • Strafverfolgung: Ermittler verwenden OSINT, um Hintergrundinformationen über Verdächtige zu sammeln oder vermisste Personen zu finden. Soziale Medien und öffentliche Register bieten oft wichtige Hinweise.
  • Journalismus: Journalisten können durch OSINT versteckte Informationen finden und Geschichten vertiefen, indem sie öffentliche Quellen durchforsten, um Verbindungen und Zusammenhänge aufzudecken.
  • Unternehmen: Unternehmen nutzen OSINT zur Wettbewerbsanalyse und um Risiken zu identifizieren, beispielsweise durch die Überwachung von Marken und Produktnennungen im Netz.

OSINT ist eine wertvolle Methode, um Einblicke zu gewinnen und Situationen besser einschätzen zu können – sei es, um Risiken zu minimieren, Sicherheit zu erhöhen oder Informationen für strategische Entscheidungen zu sammeln.

Methoden der Informationsbeschaffung

OSINT nutzt eine Vielzahl von Methoden und Quellen, um relevante Daten zu sammeln. Die Hauptquellen lassen sich in folgende Kategorien unterteilen:

  • Webseiten und Datenbanken: Recherchen in öffentlichen Regierungsdatenbanken, Unternehmensregistern und speziellen Websites. Dies umfasst auch schwer zugängliche Quellen wie das Darknet, wo Informationen über Cyberkriminalität und Sicherheitsbedrohungen zu finden sein können. Der Zugang erfordert jedoch spezielle Tools und Sicherheitsmaßnahmen.
  • Soziale Medien: Informationen aus Plattformen wie Twitter (X), Facebook und Instagram bieten Einblicke in Aktivitäten und Verbindungen.
  • Suchmaschinen: Durch geschickte Nutzung von Suchoperatoren können versteckte Informationen und spezifizierte Ergebnisse ausfindig gemacht werden.
  • Medien und Nachrichtenquellen: Berichte und Pressemitteilungen bieten Hintergrundinformationen und aktuelle Ereignisse.
  • Tools und Techniken: Es gibt zahlreiche spezialisierte OSINT-Tools, die die Suche und Analyse von Daten automatisieren. Einige davon bieten Funktionen wie erweiterte Suchanfragen, Datenvisualisierung und sogar Netzwerk- und Verbindungsanalysen, die für die Verarbeitung großer Datenmengen ideal sind.

Diese Methoden und Werkzeuge ermöglichen eine tiefgehende Recherche und Analyse von Informationen, die ansonsten übersehen würden. Dabei ist die Auswahl der richtigen Werkzeuge und Quellen entscheidend für die Effektivität und Präzision der gewonnenen Daten.

Rechtliche und ethische Überlegungen

Die Nutzung von OSINT wirft wichtige rechtliche und ethische Fragen auf. Während OSINT-Daten öffentlich zugänglich sind, muss dennoch sichergestellt werden, dass die Sammlung und Nutzung der Informationen im Einklang mit geltenden Gesetzen und Datenschutzbestimmungen steht.

Rechtliche Aspekte:

  • Datenschutzgesetze: In vielen Ländern gibt es strenge Vorschriften zum Schutz personenbezogener Daten. Es ist wichtig, dass OSINT-Ermittler die Rechte der betroffenen Personen respektieren.
  • Grenzen der Legalität: Der Zugang zu bestimmten Daten kann trotz öffentlicher Verfügbarkeit illegal sein. Eine klare Abgrenzung ist daher essenziell.

Ethische Überlegungen:

  • Verantwortungsvoller Umgang: Die gesammelten Informationen können großen Einfluss auf das Leben von Menschen haben. Es sollte daher immer überlegt werden, wie und wofür die Daten verwendet werden.
  • Transparenz: Unternehmen und Ermittler sollten transparent und offen mit ihrer Datenverarbeitung umgehen und vermeiden, vertrauliche Informationen ohne Erlaubnis zu veröffentlichen.

Ein verantwortungsvoller Einsatz von OSINT erfordert also nicht nur das technische Know-how, sondern auch ein starkes Bewusstsein für rechtliche und ethische Rahmenbedingungen.

Beispiele für legitime Anwendungen

OSINT wird in vielen Bereichen genutzt, um wertvolle Einblicke zu gewinnen und Prozesse zu unterstützen. Hier sind einige typische Anwendungsfälle:

  • Unternehmenssicherheit: Unternehmen überwachen öffentlich zugängliche Informationen über sich selbst und ihre Marken, um frühzeitig auf Bedrohungen zu reagieren.
  • Hintergrundüberprüfungen: Bei der Einstellung neuer Mitarbeiter können öffentlich zugängliche Daten helfen, Qualifikationen und die Online-Präsenz von Bewerbern zu verifizieren.
  • Ermittlungen: Strafverfolgungsbehörden nutzen OSINT, um Verdächtige und mögliche Netzwerke ausfindig zu machen.
  • Journalistische Recherchen: Journalisten verwenden OSINT, um Informationen zu prüfen und in ihre Geschichten einzubinden.

Legitime Anwendungen zeigen, wie OSINT zur Aufdeckung von Risiken und zur Entscheidungsfindung beiträgt.

Fazit und Ausblick

OSINT bietet eine faszinierende Möglichkeit, öffentlich zugängliche Informationen gezielt zu nutzen. Von der Unternehmenssicherheit bis zu strafrechtlichen Ermittlungen zeigt OSINT, wie wertvoll gut zugängliche Daten sein können – aber auch, welche ethischen und rechtlichen Überlegungen damit verbunden sind. Im nächsten Artikel werden wir tiefer in die Bedrohungspotenziale eintauchen und zeigen, wie Angreifer OSINT für ihre Zwecke missbrauchen. Freu dich auf spannende Einblicke in die dunkle Seite der öffentlichen Informationen und wie du dich davor schützen kannst!

Über den Autor: Andreas Heideck

Andreas Heideck ist Experte für Social Engineering, OSINT und physische Sicherheitsüberprüfungen, mit mehr als 15 Jahren Erfahrung in der Sicherheitsbranche. Er hat namhafte Kunden aus der Finanz-, Energie- und Automobilindustrie dabei unterstützt, unentdeckte Schwachstellen zu identifizieren und ihre Sicherheitsstrategien zu verbessern. Seine Arbeit geht weit über herkömmliche Ansätze hinaus und legt besonderen Wert auf den menschlichen Faktor, um umfassende Sicherheit zu gewährleisten.


Diese Beiträge könnten dich auch interessieren:

In diesem Skript wird die Splatting-Technik verwendet, um die Parameter für die Trigger- und Action-Erstellung in übersichtlichen und pflegbaren Hashtabellen zu organisieren. Dadurch wird der Code lesbarer und einfacher zu warten.

Scheduled Jobs vs. Scheduled Tasks

In der PowerShell-Automatisierung stehen zwei Hauptkonzepte zur Verfügung: Scheduled Jobs und Scheduled Tasks. Obwohl beide Ansätze ähnliche Ziele verfolgen, unterscheiden sie sich in ihrer Funktionsweise und in ihren Einsatzmöglichkeiten.

Scheduled Tasks sind Teil des Windows Task Schedulers und bieten eine tiefe Integration in das Betriebssystem. Sie können nicht nur PowerShell-Skripte, sondern auch andere Programme oder Skripte ausführen. Scheduled Tasks eignen sich besonders gut für komplexe Szenarien, die eine enge Verknüpfung mit Windows-Diensten und -Anwendungen erfordern. Sie bieten erweiterte Planungsoptionen, wie die Ausführung basierend auf spezifischen Ereignissen oder Zuständen des Systems.

Scheduled Jobs hingegen sind eine PowerShell-spezifische Funktion. Sie ermöglichen es, PowerShell-Befehle und -Skripte zu planen und als Hintergrundjobs auszuführen. Diese Jobs sind eng in die PowerShell-Umgebung integriert, was das Ausführen von PowerShell-Cmdlets und das Verarbeiten von PowerShell-Objekten erleichtert. Scheduled Jobs sind ideal für Aufgaben, die regelmäßig und ohne direkte Benutzerinteraktion durchgeführt werden sollen.

Ein Scheduled Job kann wie folgt angelegt werden:

# Register eines PowerShell Scheduled-Jobs
$trigger = New-JobTrigger -At 10pm -Daily
$jobOption = New-ScheduledJobOption -StartIfOnBatteries

Register-ScheduledJob -Name "MeinPowerShellJob" -ScriptBlock { # DeinIhr PowerShell-Code hier, z.B. ein Skript ausführen
. C:\ps\scheduledtask\logger.ps1
} -Trigger $trigger -ScheduledJobOption $jobOption

Bei der Verwendung von Scheduled Jobs ist jedoch Folgendes zu beachten:

  • Geringere Kompatibilität mit externen Tools: Beispielsweise können Scheduled Tasks auch mittels Ansible angelegt werden, welches wiederum keine Unterstützung für Scheduled Jobs bietet.
  • Einschränkungen bei der Auswahl möglicher Trigger: Scheduled Tasks können unter anderem durch Windows Events (EventLog) angestoßen werden. Scheduled Jobs beschränken sich auf die zeitliche Dimension.

Effektive Strategien zur Fehlervermeidung und Optimierung

Die Automatisierung mit PowerShell und Windows Task Scheduler birgt immense Vorteile, jedoch auch potentielle Fallstricke. Im folgenden werden diese Fallstricke, sowie weitere Optimierungspotentiale beschrieben.

Ausführungskontext und Verzeichnisstruktur

Ein häufiges Missverständnis ist die Annahme, dass PowerShell-Skripte automatisch im Speicherort des Skripts ausgeführt werden. Es ist wichtig zu wissen, dass Skripte standardmäßig im Kontext des Systemverzeichnisses, wie z.B. C:\Windows\system32, gestartet werden. Um Probleme mit relativen Pfadangaben zu vermeiden, sollte der Skriptkontext zu Beginn der Ausführung zum Speicherort des Skripts gewechselt werden. Dies lässt sich mit der PowerShell-Umgebungsvariable $PSScriptRoot realisieren:


Set-Location $PSScriptRoot

Nutzung von Scheduled Tasks im Clusterbetrieb

Für eine erhöhte Verfügbarkeit und Ausfallsicherheit können Scheduled Tasks clustergesteuert eingesetzt werden. Dies bietet Vorteile wie Hochverfügbarkeit durch Failover-Fähigkeiten, zentralisiertes Management und verbesserte Skalierbarkeit. Der Einsatz im Cluster-Modus erfordert ein bestehendes Windows-Cluster-Setup.

$taskName = "ClusteredTask"
$taskType = "ClusterWide"
$clusterName = "MeinCluster"

# ... Konfiguration von Trigger, Principal und Action ...

Register-ClusteredScheduledTask -TaskName $taskName -TaskType $taskType -Cluster $clusterName -Trigger $trigger -Principal $principal -Action

Sicherheitsaspekte und Benutzerberechtigungen

Sicherheit ist ein kritischer Aspekt bei der Automatisierung. PowerShell-Skripte werden im Kontext des angegebenen Benutzers ausgeführt, was bedeutet, dass die Sicherheitsberechtigungen dieses Benutzers berücksichtigt werden müssen. Es ist ratsam, spezielle Benutzerkonten mit minimal notwendigen Berechtigungen zu verwenden, um das Risiko einer übermäßigen Rechtevergabe zu vermeiden.

Monitoring und Protokollierung

Standardmäßiges Logging des Task Schedulers reicht oft nicht aus, um eine detaillierte Übersicht über die Ausführung von Automatisierungsaufgaben zu erhalten. Erweitere das Logging durch PowerShell-spezifische Funktionen wie das Transcript- Feature oder nutze fortgeschrittene Tools wie das PSFramework-Modul für ein umfassendes Monitoring.

Parametermanagement

Die Verwaltung von Übergabeparametern ist ein wesentlicher Bestandteil der Skriptautomatisierung. Anstatt feste Werte direkt im Skript zu definieren, sollten externe Parameterquellen wie Konfigurationsdateien genutzt werden. Dies erhöht die Flexibilität und Wartbarkeit der Skripte. Standardmäßig unterstützt die PowerShell JSON und XML als Datenformate.

Fazit

Gerade im Windows-Umfeld stellt die Kombination von PowerShell und Task Scheduler eine sehr starke und kostenfreie Option dar. Der Feature-Umfang ist natürlich bei weitem nicht so umfassend wie bei kommerziellen Tools zur Job-Steuerung. Für Anwendungsszenarien wie einfachem Reporting oder Aufräumarbeiten (Log-Dateien, etc.) erfüllt der Task Scheduler seinen Zweck. Wichtig ist hierbei lediglich, dass die genannten Best Practices angewendet werden und fehlende Features wie die Verwendung eines Credential- und Key-Stores ergänzt werden.

Über den Autor: Philip Lorenz

Philip Lorenz ist erfahrener DevOps- und Cloud-Engineer mit Schwerpunkt auf Prozessautomatisierung. Mit Begeisterung teilt er sein Wissen in Form von Dienstleistungen und Schulungen und erstellt praxisnahe Lerninhalte rund um die Themen Automatisierung, Cloud-Computing und die Umsetzung moderner KI-Lösungen. Seine Trainings, inspiriert von realen IT-Szenarien, vermitteln anwendbares Wissen, das Teilnehmende direkt in ihre tägliche Arbeit integrieren können.


Diese Beiträge könnten dich auch interessieren:

Loading posts…

Der Beitrag Das starke Duo für alle Fälle erschien zuerst auf heise academy Blog.

]]> Alerts mit PowerShell und Teams-WebHooks (2) https://blog.heise-academy.de/alerts-mit-powershell-und-teams-webhooks-2/ Wed, 17 Jan 2024 16:33:47 +0000 https://blog.heise-academy.de/?p=6252 Adaptive Cards und Zertifikats-Monitoring: Im zweiten Teil der Serie geht es um die Verwendung individueller Schaltflächen über den reinen Informationsgrad hinaus. Erfahre mehr über eine interessante Methode, dich über das Auslaufen der Zertifikate informieren zu lassen.

Der Beitrag Alerts mit PowerShell und Teams-WebHooks (2) erschien zuerst auf heise academy Blog.

]]>

Alerts mit PowerShell und Teams-WebHooks (2)

Teil zwei: Adaptive Cards und Zertifikats-Monitoring

Von: Philip Lorenz

Im ersten Teil dieser Reihe demonstrierte ich ich die grundsätzliche Verwendung von Teams-WebHooks mithilfe der PowerShell. Dabei habe ich mich jedoch auf die Informationsebene beschränkt, also die reine Übermittlung von textbasierten Alerts ohne zusätzliche Funktionalität. In diesem Teil gehen wir unter der Verwendung individueller Schaltflächen über den reinen Informationsgrad hinaus.

Teams Adaptive Cards: Am Beispiel von Zertifikats-Monitoring mit PowerShell

Falls du zu den Admins gehörst, die noch nie mit Problemen oder Ausfallzeiten aufgrund eines abgelaufenen Zertifikats zu kämpfen hatten, dann hattest du entweder außergewöhnliches Glück, oder du hast dein Zertifikatsmanagement hervorragend im Griff. In vielen Firmen treten gelegentlich Probleme mit abgelaufenen Zertifikaten auf, deren Gültigkeit oft erst überprüft wird, wenn sie bereits abgelaufen sind und der Service nicht mehr verfügbar ist.

Um zu verhindern, dass dir das (wieder) passiert, stelle ich dir ein PowerShell-Skript zur Verfügung, das Server auf ablaufende Zertifikate überprüft. Zugegeben: Das Skript zum Auslesen der Zertifikate ist eher unspektakulär, fast schon nebensächlich. Viel interessanter und relevanter ist die Methode, wie du über das Auslaufen der Zertifikate informiert wirst. In diesem Artikel möchte ich dir zeigen, wie du sogenannte Adaptive Cards versenden kannst. Diese bieten den Vorteil, dass du beispielsweise Buttons in die Nachrichten einfügen kannst, was ganz neue Möglichkeiten zur Reaktion auf Alarme eröffnet, zum Beispiel:

  • Du möchtest Alerts automatisch in Tickets umwandeln? Füge dem WebHook-Alert einen Button hinzu, über den die Informationen an den Ticket-Dienst gesendet werden. Du kannst dies sogar von deinem Smartphone aus tun, während du im Fitnessstudio bist oder den Hund ausführst.
  • Ein Dienst auf deinem Server hat unerwartet gestoppt? Lass dich darüber informieren und starte ihn mit einem Klick in Teams neu.

Wie du erkennen kannst, gibt es verschiedene Anwendungsfälle, bei denen eine unmittelbare Reaktion direkt aus der Nachricht heraus nützlich sein kann. In diesem Artikel erstellen wir ein Skript, das die Zertifikate auf verschiedenen Servern ausliest, überprüft, ob diese in den nächsten 100 Tagen ablaufen, und dabei eine Nachricht an Teams sendet. Diese Nachricht enthält einen Button, mit dem wir direkt zu den Zertifikatseinstellungen des jeweiligen Servers im Windows-Admin-Center gelangen können, um dort notwendige Änderungen vorzunehmen.

Die Nachricht, die wir gestalten werden, sieht folgendermaßen aus:

Die Vorbereitung

Natürlich brauchen wir wieder einen Teams-Kanal, der WebHooks empfangen kann. Wie du das einrichtest, habe ich dir im ersten Artikel dieser Serie erklärt. Da unsere Anforderungen hier recht einfach sind, können wir uns das Leben erleichtern: Das Modul PSTeams ermöglicht es dir, die Card mit einfachen PowerShell-Cmdlets zu gestalten, so dass du dich nicht mit JSON herumschlagen musst. In unserem Fall benötigen wir natürlich auch eine Installation des Windows-Admin-Centers. Du hast aber die Freiheit, selbst zu entscheiden, wie du auf den Alert über den Button reagieren möchtest, falls du das WAC nicht nutzt. Der Befehl, um alle Zertifikate auf einem Server anzeigen zu lassen, die in den nächsten 100 Tagen auslaufen, lautet:

Get-Childitem Cert: -Recurse -ExpiringInDays 100 | Select-Object FriendlyName, Issuer, Thumbprint, NotBefore, NotAfter, PSParentPath

Gefiltert habe ich den Befehl übrigens nach den Attributen, die mir wichtig erscheinen. Wir haben nun also alle Informationen, um mit der Gestaltung der Adaptive Card zu beginnen. Der Code am Beginn des Scripts sieht folgendermaßen aus:

# Array with Computers, that should be monitored
$TargetComputers = @("Server01")
# TeamsID - URL generated by Teams
$TeamsID = ""
# URL of Windows Admin Center
$WACURL = "https://localhost:6516/"

# ModuleCheck: Installs PSTeams if not available
if(-not (Get-Module -ListAvailable PSTeams)) {
    Install-Module -Name PSTeams -Force
}
else {
    Write-Verbose "PSTeams is already installed."
}

Zuerst werden sämtliche Ziel-Computer (welche später bezüglich der Zertifikate abgefragt werden) definiert. Anschließend musst du noch deine Teams-D für den WebHook angeben. Die WACURL entspricht der URL deines Windows-Admin-Centers. Anschließend prüfen wir noch, ob PSTeams installiert ist – wenn dieses noch nicht vorhanden ist, wird es installiert.

Gestaltung der Teams-Card mit PSTeams

Drei Elemente aus PSTeams sind für uns von Bedeutung: Facts, Sections und Buttons. Facts enthalten alle Informationen, die wir über Teams darstellen möchten. Diese Facts sind verschiedenen Sections zugeordnet. Diese Sections dienen der logischen und visuellen Trennung. Buttons sind ebenfalls einer Section zugeordnet und öffnen eine Webseite oder setzen andere HTTP-Anfragen ab.

In unserem Fall sind die Zertifikatsattribute jeweils Facts. Der Friendlyname eines Zertifikats, ebenso wie der Thumbprint usw., wird als Fact dargestellt und einer Section zugeordnet. Eine Section enthält dabei immer genau ein Zertifikat. Eine Teams-Nachricht bezieht sich immer nur auf einen Server, daher benötigen wir auch nur einen Button in der gesamten Card, der uns zum Servereintrag im Windows Admin Center führt. Dieser Button hat seine eigene Section.

Nun müssen wir alle Server aus dem Array $TargetComputers abfragen – dies tun wir mit einer Foreach-Schleife, sodass wir direkt danach die entsprechenden Zertifikatsdaten vom jeweiligen Server erhalten können:

foreach ($computer in $TargetComputers) {
	# Getting all certificates of specified computer, that will expire in the next 100 days
    [array]$ExpiringCerts = Invoke-Command -ComputerName $computer -Credential $cred -ScriptBlock {
        Get-ChildItem Cert:\LocalMachine -Recurse -ExpiringInDays 100 |
	        Select-Object FriendlyName, Issuer, Thumbprint, NotBefore, NotAfter, PSParentPath
    }
 }

Die Variable $ExpiringCertificates beinhaltet nun alle Zertifikate, die in den nächsten 100 Tagen ablaufen. Nun müssen wir diese Informationen, wie zuvor beschrieben, auf die verschiedenen Sections verteilen. Dazu erstellen wir ein leeres Array, das wir nach und nach mit Sections befüllen. Innerhalb der bereits beschriebenen ForEach-Schleife erstellen wir eine weitere ForEach-Schleife, die über alle Zertifikate iteriert. Für jedes Zertifikat wird eine neue Section erstellt, diese Section mit den Facts (den Attributen des aktuellen Zertifikats) gefüllt und die neu erstellte Section dem Section-Array hinzugefügt. Am Ende haben wir also ein Array mit allen Informationen (in Sections unterteilt) und könnten dieses direkt an Teams senden. Bevor wir das tun, erstellen wir jedoch noch eine letzte Section, die den Button für das Windows-Admin-Center enthält. Den Link, den der Button aufruft, passen wir für jeden Server an, da in der URL festgelegt werden kann, welcher Computer/Server im Admin Center geöffnet werden soll. Unser Code sieht nun also folgendermaßen aus:

# Array with Computers, that should be monitored
$TargetComputers = @("Server01")
# TeamsID - URL generated by Teams
$TeamsID = ""
# URL of Windows Admin Center
$WACURL = "https://localhost:6516/"


# ModuleCheck: Installs PSTeams if not available
if(-not (Get-Module -ListAvailable PSTeams)) {
    Install-Module -Name PSTeams -Force
}
else {
    Write-Verbose "PSTeams is already installed."
}

# Iterating through every computer in $TargetComputers
foreach ($computer in $TargetComputers) {
	# Getting all certificates of specified computer, that will expire in the next 100 days
    [array]$ExpiringCerts = Invoke-Command -ComputerName $computer -Credential $cred -ScriptBlock {
        Get-ChildItem Cert:\LocalMachine -Recurse -ExpiringInDays 100 |
	        Select-Object FriendlyName, Issuer, Thumbprint, NotBefore, NotAfter, PSParentPath
    }

    # Checking, whether there are any certificates expiring in the specified timespan before proceeding
    if ($ExpiringCerts.Count -gt 0){

        # Creating Sections with embedded Facts (Certificate Information) for Teams
        $Sections = @()
        foreach ($cert in $ExpiringCerts) {
            $facts = @()
	        $cert |
                Get-Member |
                Where-Object MemberType -eq NoteProperty |
                ForEach-Object {
                    $facts += New-TeamsFact -Name $_.Name -Value "**$($cert.($_.Name))**"
                }
            $Sections += New-TeamsSection -ActivityDetails $facts
        }


        # Gets server-URL within Windows Admin Center and Teams-Button to access it
        $WACURLServer = $WACURL + "servermanager/connections/server/" + $computer + "/tools/certificates"
        $Button = New-TeamsButton -Name 'Edit Certificates' -Link $WACURLServer -Type 'ViewAction'
        $Section = New-TeamsSection -Buttons $Button

        # Send Card
        $Sections += $Section
        $Count = $ExpiringCerts.count
        Send-TeamsMessage -URI $TeamsID -Color Red -Sections $Sections `
        -MessageTitle "Alert: $count Certificates on $computer expire within the next 100 days!" `
    }

}

Wenn wir nun also diesen Code ausführen und sich auslaufende Zertifikate auf den Maschinen befinden, erhalten wir die oben gezeigte Teams-Card. Du hast nun in wenigen Minuten ein eigenes Alerting für deine Zertifikate erstellt!

Hinweis: Wenn in deiner Organisation alle Zertifikate von einer zentralen Zertifizierungsstelle (CA) ausgestellt wurden, ist es effizienter, eine zentrale Abfrage an die CA zu senden, anstatt jeden einzelnen Server auf seine Zertifikate zu überprüfen. Die genannten 100 Tage sind keine persönliche Empfehlung, da ich diesen Zeitraum für zu lang halte. Ich habe die 100 Tage nur zu Demonstrationszwecken gewählt, um sicherzustellen, dass wir einige Treffer erzielen. Meiner Meinung nach ist ein Zeitraum von 15 bis 30 Tagen für die Überwachung angemessen, obwohl dies natürlich je nach Umgebung variieren kann.

Über den Autor: Philip Lorenz

Philip Lorenz ist erfahrener DevOps- und Cloud-Engineer mit Schwerpunkt auf Prozessautomatisierung. Mit Begeisterung teilt er sein Wissen in Form von Dienstleistungen und Schulungen und erstellt praxisnahe Lerninhalte rund um die Themen Automatisierung, Cloud-Computing und die Umsetzung moderner KI-Lösungen. Seine Trainings, inspiriert von realen IT-Szenarien, vermitteln anwendbares Wissen, das Teilnehmende direkt in ihre tägliche Arbeit integrieren können.


Diese Beiträge könnten dich auch interessieren:

Loading posts…

Der Beitrag Alerts mit PowerShell und Teams-WebHooks (2) erschien zuerst auf heise academy Blog.

]]> Alerts mit PowerShell und Teams-WebHooks (1) https://blog.heise-academy.de/alerts-mit-powershell-und-teams-webhooks-1/ Tue, 09 Jan 2024 16:33:08 +0000 https://blog.heise-academy.de/?p=6031 Aus der Historie der IT-Infrastruktur sind das Monitoring und das dazugehörige Alerting stetig gewachsen. Gerade beim Alerting haben diese Tools aber oft eines gemeinsam: Die Alarme werden per Mail versendet – gut, dass es deutlich bessere Alternativen gibt.

Der Beitrag Alerts mit PowerShell und Teams-WebHooks (1) erschien zuerst auf heise academy Blog.

]]>

Alerts mit PowerShell und Teams-WebHooks (1)

Teil eins: Ein Leitfaden zur Optimierung deiner Alarmierungs-Strategie

Von: Philip Lorenz

Vielleicht ist dir diese Situation bekannt: Aus der Historie der IT-Infrastruktur ist das Monitoring und das zugehörige Alerting stetig gewachsen, wobei verschiedene Tools für unterschiedliche Bereiche eingesetzt werden. Gerade beim Alerting haben diese Tools aber oft eines gemeinsam: Die Alarme werden per Mail versendet. Das führt nicht selten dazu, dass sich neben Einladungen zu Terminen, Abstimmungen und Fotos von der letzten Teamveranstaltung eine Menge Alert-Nachrichten aus verschiedenen Monitoring-Systemen und Skripten ansammeln.

Da die Infrastruktur stetig verändert wird und der manuelle Wartungsaufwand für diese Alerts in den Monitoring-Systemen gleichzeitig steigt, werden Anpassungen oftmals vernachlässigt. Schnell stellt sich ein Credo nach dem Motto “Oh, dieser Alert ist nicht so wichtig, er kommt jeden zweiten Sonntag – einfach ignorieren” ein. Es liegt nahe, einen separaten Ordner im eigenen Postfach zu erstellen, in den alle Alerts automatisch per Outlook-Regel verschoben werden und somit in Vergessenheit geraten.

Zugegeben, das hier dargestellte Szenario ist fast das schlimmstmögliche Beispiel für eine Alerting-Implementierung. Trotzdem ist es eine Situation, die in vielen Unternehmen vorkommt. Die aktuelle Art des Alertings ist angesichts der wachsenden Anforderungen an die Reaktionsgeschwindigkeit einer Operationsabteilung und der schnelllebigen Natur der Infrastruktur nicht mehr angemessen. Allein die Tatsache, dass die Kommunikation über Alerts zwischen den Administratoren normalerweise nicht mehr per E-Mail, sondern meistens über Teams (oder einen anderen Messenger) erfolgt, lässt Zweifel aufkommen, ob E-Mails das passende Medium für Benachrichtigungen sind. WebHooks bieten die Möglichkeit, Alerts oder andere Benachrichtigungen an einen Teams-Kanal zu senden. Hier kann jeder Abteilungsbereich seinen eigenen Teams-Kanal für das Monitoring einrichten. Der Abteilungsleiter hat alle Meldungen im Blick, ohne dass sein Postfach überquillt. Jeder kann selbst entscheiden, welche Bereiche für ihn relevant sind und diese so einstellen, dass er bei einem Vorfall benachrichtigt wird. Alerts und Benachrichtigungen können direkt kommentiert werden, wodurch die Notwendigkeit eines Medienwechsels bei der Absprache zwischen den Administratoren entfällt. In diesem Artikel lernst du, wie du mit wenig PowerShell-Code solche Teams-Alerts erstellen kannst – folgende Abbildung zeigt, wie eine solche Alerting-Nachricht aussehen kann.

Hinweis: WebHooks werden natürlich auch außerhalb von Teams verwendet. Sämtliche Messenger unterstützen mittlerweile WebHooks und können (womöglich mit kleinen Abweichungen in der Konfiguration) ähnlich bedient werden.

WebHooks

Bevor wir uns mit der Einrichtung eines WebHooks beschäftigen, eine kurze Erläuterung zu Webhooks selbst: Eine Anwendung kann sogenannte eingehende (oder auch ausgehende) WebHooks bereitstellen. Dazu bietet sie eine eindeutige URL an, die darauf wartet, Webanfragen in einem bestimmten Format zu erhalten – ähnlich wie eine API. Anwendungen und Server können so mit minimalem Konfigurationsaufwand Nachrichten austauschen. In diesem Artikel konzentrieren wir uns auf die Möglichkeit, WebHooks für Monitoring-Alerts zu nutzen.

Um den Unterschied zwischen einer REST API und einem WebHook zu verdeutlichen, stell dir vor, dass du in einem Restaurant bist. Eine REST API ist wie ein Kellner, den du rufen kannst, wenn du etwas brauchst – sei es eine neue Bestellung aufgeben oder die Rechnung anfordern. Du initiierst die Interaktion und der Kellner reagiert entsprechend. Ein WebHook hingegen ist wie ein Kellner, der dir automatisch ein neues Glas Wasser bringt, sobald er sieht, dass dein Glas leer ist. Du musst ihn nicht rufen oder ihm sagen, was zu tun ist. Er hat eine vordefinierte Aufgabe (dein Glas auffüllen, wenn es leer ist) und führt diese aus, sobald das definierte Ereignis (leeres Glas) eintritt. In diesem Sinne wartet der WebHook (der Kellner) auf ein bestimmtes Ereignis und reagiert automatisch darauf.

Teams-WebHooks mit PowerShell

Wir wollen uns nun also ein konkretes Beispiel für PowerShell-initiierte WebHooks ansehen. Mögliche Anwendungsszenarien wären dabei unter anderem:

  • Volllaufende Festplatte
  • Benachrichtigung zum Ablauf eines SSL-Zertifikats
  • Sperrung eines AD-Nutzers

In diesem Blog zeige ich dir praxisnah, wie Teams-WebHooks zum Senden von Benachrichtigungen genutzt werden können, wenn ein Benutzer-Account im ActiveDirectory gesperrt wird. Auf diese Weise kann man proaktiv handeln und die Sperrung des Benutzers bemerken, bevor die Anwendungen des Benutzers eine erneute Anmeldung verlangen und dieser ein Ticket erstellt bzw. die Support-Hotline anruft. Das Konzept ist in zwei Teile unterteilt:

  • die Teams-Konfiguration
  • das PowerShell-Skript

In den meisten Fällen fungiert PowerShell als “Klebstoff”, der die verschiedenen Anwendungen miteinander verbindet. Zur Klarstellung: Das ActiveDirectory bietet keine eingebaute Möglichkeit, WebHooks zu versenden, wenn ein Benutzer gesperrt wird – diese Aufgabe wird von PowerShell übernommen. Natürlich gibt es auch anderweitige Tools, um diesen Anwendungsfall abzubilden. Der Vorteil bei Verwendung der PowerShell liegt meiner Meinung nach in der größtmöglichen Flexibilität bei der Gestaltung des Alertings (und möglichen Folgeoperationen) und der kostenfreien Nutzung. Dennoch sollten gerade bei großen Infrastrukturen ebenfalls dedizierte Monitoring-Lösungen evaluiert werden.

Konfiguration von Teams

Zur Einrichtung von WebHooks muss ein Kanal/Channel festgelegt werden, an den die Alerts gesendet werden sollen. Anschließend kann man die Connectors des Kanals über einen Rechtsklick auf diesen öffnen. Anschließend lässt sich über „Konfigurieren“ bei „incoming WebHook“ die Einrichtung der Schnittstelle starten.

Nachdem man einen aussagekräftigen Namen vergeben und evtl. ein Icon hochgeladen hat, klickt man „Erstellen“ und erhält im Anschluss die URL, über welche wir die WebRequests im PowerShell-Script senden können. Diese URL sollte vertraulich behandelt werden, da diese public angesprochen werden kann. Ein Angreifer könnte mit dieser URL Nachrichten in deinen Teams-Channel senden (beispielsweise mit Links zu Phishing-Scripts, etc.) – und das solltest du logischerweise vermeiden.

PowerShell

Für das Senden von WebHooks an Teams wird das sogenannte JSON-Format verwendet. In unserem PowerShell-Code nutzen wird ein sogenanntes PSCustomObject, das weiter unten zu JSON konvertiert wird – PowerShell macht uns dies recht einfach. Grundsätzlich kannst du folgenden Code aber einfach kopieren und deine individuellen Werte eintragen. Wichtig ist natürlich, dass du die WebHook-URI von Teams in Zeile 1 hinterlegst.

[String]$uri = "Hier die Webhook Uri eintragen"
[String]$var = "Text, welcher im Nachrichteninhalt erscheint"
$JSONBody = [PSCustomObject][Ordered]@{
    "@type"      = "MessageCard"
    "@context"   = "http://schema.org/extensions"
    "summary"    = "Meine erste Alert-Summary!"
    "themeColor" = '0078D7'
    "title"      = "Mein erster Alert."
    "text"       = "Hier steht die genaue Alertbeschreibung!
                    Variablen kann man natuerlich auch anfuegen: $var"
}
 
$TeamMessageBody = ConvertTo-Json $JSONBody -Depth 100
 
$parameters = @{
    "URI"         = $uri
    "Method"      = 'POST'
    "Body"        = $TeamMessageBody
    "ContentType" = 'application/json'
}
 
Invoke-RestMethod @parameters

Anschließend können wir durch Ausführen des Scripts direkt testen, ob die Kommunikation zum WebHook-Endpunkt funktioniert. Bei erfolgreicher Durchführung erhalten wir seitens der PowerShell eine „1“ als Rückgabe zurück und die Nachricht erscheint in unserem Teams:

Super, du hast erfolgreich deinen ersten WebHook an Teams gesendet! Wie versprochen, stelle ich dir nun ein Skript zur Verfügung, das dich über Teams benachrichtigt, sobald ein Benutzer im Active Directory gesperrt wird. Dafür benötigen wir natürlich einen Mechanismus, der erkennt, wenn ein Benutzer gesperrt wurde. Glücklicherweise erzeugt das Windows EventLog einen Eintrag mit der EventID 4740, sobald ein Benutzer gesperrt wird. Dieses Ereignis können wir als Auslöser verwenden, um unser Skript zu starten. Dies kann beispielsweise über den Windows Task Scheduler erfolgen. Das Script zum Auslesen des gesperrten AD-Accounts kann wie folgt aussehen:

# Gets locked AD user, that was locked latest
$LockedUser = Search-ADAccount -LockedOut  `
        | Get-ADUser -Properties badpwdcount, lockoutTime, lockedout, emailaddress  `
        | Select-Object badpwdcount, lockedout, Name, EmailAddress, SamAccountName, @{ Name = "LockoutTime"; Expression = { ([datetime]::FromFileTime($_.lockoutTime).ToLocalTime()) } } `
        | Sort-Object LockoutTime -Descending `
        | Select-Object -first 1

Setzen wir dieses nun mit dem Script zum Versenden des WebHooks zusammen und passen die Werte an, erhalten wir folgenden Code:

# Gets locked AD user, that was locked latest
$LockedUser = Search-ADAccount -LockedOut  `
        | Get-ADUser -Properties badpwdcount, lockoutTime, lockedout, emailaddress  `
        | Select-Object badpwdcount, lockedout, Name, EmailAddress, SamAccountName, @{ Name = "LockoutTime"; Expression = { ([datetime]::FromFileTime($_.lockoutTime).ToLocalTime()) } } `
        | Sort-Object LockoutTime -Descending `
        | Select-Object -first 1

[String]$uri = "Hier die Webhook Uri eintragen"
$JSONBody = [PSCustomObject][Ordered]@{
    "@type"      = "MessageCard"
    "@context"   = "http://schema.org/extensions"
    "summary"    = "Locked: $($LockedUser.SamAccountName)"
    "themeColor" = '0078D7'
    "title"      = "User locked"
    "text"       = "`n 
    SamAccountName:     $($LockedUser.SamAccountName)
    Name:               $($LockedUser.Name)
    Mail:               $($LockedUser.EmailAddress)
    Bad Password Count: $($LockedUser.badpwdcount)
    Timestamp:          $($LockedUser.LockoutTime.ToString()) 
    "
}
 
$TeamMessageBody = ConvertTo-Json $JSONBody -Depth 100
 
$parameters = @{
    "URI"         = $uri
    "Method"      = 'POST'
    "Body"        = $TeamMessageBody
    "ContentType" = 'application/json'
}
 
Invoke-RestMethod @parameters

Wir erhalten damit nun folgende Nachricht in Teams, sofern ein Benutzer gesperrt wurde:

Fazit

WebHooks stellen einen modernen Ansatz für das Alert-Management dar. Sie bieten klare Vorteile gegenüber Mail-Alerts, obwohl auch diese ihre Stärken haben können (beispielsweise hinsichtlich der Dokumentation, etc.). Die PowerShell eignet sich hierbei hervorragend als Vermittler für Anwendungen, die keine eingebaute Funktion zur Versendung von WebHooks besitzen. Im nächsten Teil dieser Reihe zeige ich dir, wie du die Teams-Alert mithilfe von AdaptiveCards noch weiter gestalten kannst, indem du beispielsweise Buttons hinzufügst, mit denen du direkt per Knopfdruck auf ausgelöste Alerts reagieren kannst – das Ganze natürlich wieder an einem Praxisbeispiel demonstriert.

Teil zwei: Adaptive Cards und Zertifikats-Monitoring

Über den Autor: Philip Lorenz

Philip Lorenz ist erfahrener DevOps- und Cloud-Engineer mit Schwerpunkt auf Prozessautomatisierung. Mit Begeisterung teilt er sein Wissen in Form von Dienstleistungen und Schulungen und erstellt praxisnahe Lerninhalte rund um die Themen Automatisierung, Cloud-Computing und die Umsetzung moderner KI-Lösungen. Seine Trainings, inspiriert von realen IT-Szenarien, vermitteln anwendbares Wissen, das Teilnehmende direkt in ihre tägliche Arbeit integrieren können.


Diese Beiträge könnten dich auch interessieren:

Loading posts…

Der Beitrag Alerts mit PowerShell und Teams-WebHooks (1) erschien zuerst auf heise academy Blog.

]]> "' data-attributes='{"layout":"grid","selectedCategories":[16],"postsPerPage":3,"postsExclude":[7505],"contentBG":{"color":"var(u002du002dbase)","styles":"background-color: #f4f2fc;"},"titleColor":"var(u002du002dcontrast)","isMetaAuthorLink":false,"metaCategoryIn":"image","metaLinkColor":"rgba(0, 0, 0, 1)","metaIconColor":"var(--contrast)","metaColorsOnImage":{"color":"#fff","bg":"var(--heise-blau)"},"excerptLength":52,"readMoreLabel":"Weiterlesen","readMoreColors":{"color":"#fff","bg":"var(--academy-red)"},"readMoreHovColors":{"color":"#fff","bg":"var(--heise-blau)"},"readMorePadding":{"vertical":"12px","horizontal":"35px","side":2,"top":"12px","right":"35px","bottom":"12px","left":"35px"},"align":"wide","subLayout":"default","columns":{"desktop":3,"tablet":2,"mobile":1},"columnGap":15,"rowGap":15,"isContentEqualHight":true,"sliderHeight":"350px","content":{"height":"auto"},"postType":"post","queryPreset":"","taxonomyRelation":"AND","selectedTaxonomies":[],"selectedTags":[],"isPostsPerPageAll":false,"postsAuthors":[],"postsOrderBy":"date","postsOrder":"desc","postsSearch":"","postsOffset":0,"postsInclude":[],"isExcludeCurrent":false,"isExcludeSticky":false,"isPagination":false,"paginationPrevLabel":"Prev","paginationNextLabel":"Next","paginationColors":{"color":"#fff","bg":"#146EF5"},"paginationHovColors":{"color":"#fff","bg":"#070127"},"paginationPadding":{"vertical":"8px","horizontal":"15px"},"paginationSpacing":"15px","loadMore":{"type":"","alignment":"center","scrollTop":{"enabled":false,"offset":50},"infinityScroll":{"offset":-100,"spinner":true,"label":"Loading..."},"button":{"label":"Load More"}},"contentAlign":"left","hoverContentBG":{"color":""},"contentPadding":{"vertical":"20px","horizontal":"25px"},"border":{"width":"1px","color":"#0c0d3c1a","radius":"5px"},"hoverBorder":{"width":"1px","color":"#0c0d3c1a","radius":"5px"},"shadow":[],"hoverShadow":[],"sliderIsLoop":true,"sliderIsTouchMove":false,"sliderIsAutoplay":true,"sliderAutoplayOptions":{"delay":1.5},"sliderSpeed":1.5,"sliderEffect":"slide","sliderIsPage":true,"sliderIsPageClickable":true,"sliderIsPageDynamic":true,"sliderPageColor":"#146EF5","sliderPageWidth":"15px","sliderPageHeight":"15px","sliderPageBorder":{"radius":"50%"},"sliderIsPrevNext":true,"sliderPrevNextColor":"#146EF5","tickerDirection":"up","tickerSpeed":"slow","tickerInterval":2000,"tickerHeight":"0px","tickerVisible":3,"tickerIsMousePause":true,"newsTicker":{"label":"Trending Now","theme":"theme1","type":"vertical","direction":"up","speed":3000,"animation":"slide","pauseOnHover":true},"magazine":{"subLayout":"left-image","minHeight":{"desktop":"450px","tablet":"400px","mobile":"350px"}},"elementsSort":["title","meta","excerpt"],"isFImg":true,"fImgSize":"full","fImgFitting":"cover","isFImgLink":false,"isTitle":true,"isTitleLink":true,"titleTypo":{"fontFamily":"Roboto","fontSize":{"desktop":"25px","tablet":"22px","mobile":"20px"},"googleFontLink":"https:\/\/fonts.googleapis.com\/css2?family=Roboto&display=swap"},"titleMargin":{"side":4,"bottom":"15px"},"isMeta":true,"isMetaAuthor":true,"metaAuthorIcon":"","isMetaDate":true,"metaDateFormat":"M j, Y","metaDateIcon":"","isMetaCategory":true,"metaCategoryIcon":"","metaTaxonomies":{"selected":[]},"isMetaReadTime":false,"metaReadTimeIcon":"","isMetaReadTimeSec":false,"metaReadTimeLabel":"Min read","isMetaComment":false,"metaCommentIcon":"","metaTypo":{"fontSize":{"desktop":"13px"},"textTransform":"uppercase"},"metaTextColor":"","metaMargin":{"side":4,"bottom":"15px"},"isExcerpt":true,"isExcerptFromContent":false,"isEllipsisOnExcerpt":false,"excerptAlign":"justify","excerptTypo":{"fontSize":{"desktop":"15px"}},"excerptColor":"","excerptMargin":{"side":4,"bottom":"10px"},"isReadMore":true,"readMorePosition":"auto","isLinkNewTab":false,"readMoreAlign":"left","readMoreTypo":{"fontSize":{"desktop":"14px"},"textTransform":"uppercase","fontWeight":600},"readMoreBorder":{"radius":"3px"},"image":{"width":"100%","height":"60%","lazyLoad":false,"defaultImage":"","styles":{"grayScale":false,"hoverGrayScale":false,"border":{"width":"0px","style":"none"},"radius":{"top":"0px","right":"0px","bottom":"0px","left":"0px"},"hoverRadius":{"top":"0px","right":"0px","bottom":"0px","left":"0px"},"shadow":[],"hoverShadow":[],"margin":{"top":"","right":"","bottom":"","left":""},"hoverAnimation":"none"}},"title":{"tag":"h3","limit":{"type":"word","value":10,"ellipsis":false},"styles":{"textAlign":"","hoverColor":""}},"meta":{"gap":"10px","separator":"","sorting":["author","date","category","readTime","comment","viewCount","taxonomy"],"date":{"timeAgo":false},"viewCount":{"isVisible":false,"icon":""},"styles":{"alignment":"","hoverColor":"","linkHoverColor":"","iconHoverColor":"","separatorColor":""}},"excerpt":{"from":"excerpt","styles":{"hoverColor":""}},"readMore":{"icon":"","iconGap":"10px","iconPosition":"right","styles":{"hoverBorder":{"radius":"3px"},"hoverAnimation":"none","shadow":[],"hoverShadow":[]}},"categoryOnImage":{"styles":{"position":"bottomLeft","padding":{"top":"3px","right":"8px","bottom":"3px","left":"8px"},"radius":{"top":"3px","right":"3px","bottom":"3px","left":"3px"},"margin":{"top":"0px","right":"0px","bottom":"10px","left":"10px"}}},"gbBlockCondition":"","gbBlockConditionInvert":false,"currentPostId":7505}' >
Loading posts…