• Startseite
  • Blog
  • Verwendung von System Center Orchestrator zur Automatisierung von Sicherheitsaufgaben

Verwendung von System Center Orchestrator zur Automatisierung von Sicherheitsaufgaben

Mit System Center Configuration Manager 2012 haben Kunden die Möglichkeit, Endpoint Protection-Funktionen zu nutzen, um Anti-Malware-Dienste und Sicherheit für Server und Clients bereitzustellen. Um jedoch die Anzahl der Berührungspunkte und Fehler der Administratoren zu reduzieren, können wir die Flexibilität von System Center Orchestrator nutzen, um die Standardsicherheitsprozesse zu erweitern und zu automatisieren. In diesem Beitrag zeige ich, wie ein Runbook erstellt wird, um die Auslösung eines vollständigen Endpoint Protection-Malwarescans als Reaktion auf eine Malware-Erkennungsmeldung im Configuration Manager zu automatisieren.

In einem normalen Betriebsszenario würde ein Administrator oder Sicherheitsspezialist eine E-Mail-Warnung von Configuration Manager erhalten, die eine Warnung von einem Client anzeigt, und dann die Configuration Manager-Konsole starten und eine vollständige Überprüfung einleiten, wie unten dargestellt:

Dies hängt natürlich davon ab, dass die zugewiesene(n) Person(en) ihre E-Mails überwachen, Zugang zur Konsole haben und sich überhaupt darum kümmern, ganz zu schweigen von den verlorenen Produktivitätszyklen. Und wäre es nicht wirklich besser, den gesamten Prozess zu automatisieren und nur dann zu alarmieren, wenn etwas nicht funktioniert?

Konfigurieren des Arbeitsablaufs

Als erstes müssen wir den Arbeitsablauf abbilden (der gesamte Code und die zugehörigen Elemente werden weiter unten eingefügt).

  1. Als Erstes muss festgelegt werden, wie die Clients identifiziert werden können, bei denen kürzlich ein Malware-Ereignis aufgetreten ist. Für unsere Diskussion nehmen wir an, dass dies stündlich geschieht, und wir prüfen, was in der letzten Stunde passiert ist. Am einfachsten ist es, die ConfigMgr-Datenbankansicht namens v_EP_LastMalware zu nutzen. Hier ist eine vollständige Abfrage:

[sourcecode language="sql"]
SELECT [MachineID], [LastMessageTime], [DetectionTime], [ActionTime], [DetectionSource], [PendingActions], [CleaningAction],[ExecutionStatus], [ActionSuccess], [ErrorCode]

FROM [CM_XXX].[dbo].[vEP_LastMalware]

Where DetectionTime > DATEADD(hour, -1, getutcdate())
[/sourcecode]

Sie werden auch feststellen, dass die Abfrage die Funktion getutcdate nutzt. Der Grund dafür ist, dass die Nachrichten in UTC-Zeit für ConfigMgr mit einem Zeitstempel versehen sind. Zu unserem Vorteil verwenden wir die folgende Abfrage, um nur die MachineID zurückzugeben:

[sourcecode language="sql"]
SELECT [MachineID]
FROM [CM_CS1].[dbo].[vEP_LastMalware]
Where DetectionTime > DATEADD(hour, -1, getutcdate())

[/Quellcode]

Die zurückgegebene MachineID ist die ConfigMgr-Client-ID, die wir zum Festlegen der Richtlinie verwenden werden.

  1. Der nächste Schritt ist die Zuordnung der MachineID zu einem Computernamen. Sie können die beiden Abfragen kombinieren, aber ich habe mich entschieden, sie aus Gründen der Protokollierung und der Einfachheit zu trennen, da wir sowohl die MachineID als auch den Computernamen benötigen. Hier ist die Abfrage für die Zuordnung der ID zum Namen:

[sourcecode language=”sql”]
SELECT [Netbios_Name0]
FROM [CM_CS1].[dbo].[vSMS_R_System]
Where ItemKey = <em>InsertKeyHere.</em>
[/sourcecode]

  1. Die dritte Aktivität besteht darin, den Computernamen anzupingen und auf der Grundlage der Ergebnisse dieses Pings entweder eine Verbindung zum Computer herzustellen, um manuell einen vollständigen Scan zu initiieren (mit MPCMDRUN.exe) oder eine Client-Richtlinie festzulegen.
  2. Bei MPCMDRUN starten wir einfach einen Prozess auf dem Zielcomputer. Bei nicht erreichbaren Systemen stellen wir eine Verbindung zu WMI her und rufen eine Methode auf. Ich habe eine benutzerdefinierte vb.net-Konsolenanwendung erstellt, um auch dies für mich zu tun.
  3. Und dann werden wir je nach Bedarf E-Mail-Benachrichtigungen, SCOM-Warnungen, Textdateiprotokollierung usw. einrichten.

Und weiter zu System Center Orchestrator!

Nachdem der Arbeitsablauf geklärt ist, folgen nun die Einzelheiten:

  1. Datenbank nach EP-Datensätzen abfragen: An dieser Stelle beginnt der Arbeitsablauf. Fügen Sie die Aktivität "Datenbank abfragen" hinzu, und verwenden Sie die folgende Abfrage, um die Maschinen zu ermitteln, auf denen kürzlich ein Ereignis stattgefunden hat:

[sourcecode language="sql"]
SELECT [MachineID]

FROM [CM_CS1].[dbo].[vEP_LastMalware]

Where DetectionTime > DATEADD(hour, -1, getutcdate())
[/sourcecode]

Sie müssen die Aktivität Query Database mit dem Namen des ConfigMgr-SQL-Servers, der Datenbank und optional mit einem Ausführungskonto konfigurieren. Für meine Zwecke habe ich das Orchestrator-Ausführungskonto zur lokalen Gruppe ConfigMgr_DViewAccess auf dem SQL-Server hinzugefügt.

  1. Fügen Sie eine weitere Datenbankabfrageaktivität hinzu, um die ConfigMGR-Client-ID für zukünftige Verwendungen in einen Computernamen zu konvertieren. Wenn Sie dies tun, müssen wir die veröffentlichten Daten aus der ersten Abfrage verwenden, wie folgt:

[sourcecode language="sql"]
SELECT [Netbios_Name0]
FROM [CM_CS1].[dbo].[vSMS_R_System]
WHERE ItemKey =
[/sourcecode]

Nach dem "=" müssen wir die veröffentlichten Daten aus der ersten Abfrage verwenden. Verwenden Sie die veröffentlichten Daten wie unten gezeigt:

Konfigurieren Sie schließlich eine Schleife für die Aktivität und legen Sie eine Verzögerung von 1 Sekunde zwischen den Versuchen fest. Dies dient dazu, alle zurückgegebenen Zeilen zu durchlaufen.

  1. Dann fügen wir die Funktion "Computer/IP-Status abfragen" hinzu, um festzustellen, ob das System erreichbar ist. Wenn ja, sollten wir einfach das lokal verfügbare command -Zeilendienstprogramm namens MPCMDRUN ausführen. Ist dies nicht der Fall, stellen wir mit unserer benutzerdefinierten Anwendung eine Verbindung zur ConfigMgr-Site her und verwenden die native WMI-API-Methode zum Festlegen der Richtlinie.

Konfigurieren Sie die Funktion "Computer/IP-Status abfragen" mit dem Feld "Computername" mit den veröffentlichten Daten aus der zweiten Datenbankabfrageaktivität - Vollständige Zeile als Zeichenfolge mit durch ':' getrennten Feldern

  1. Fügen Sie zwei Aktivitäten für "Programm ausführen" hinzu. Nennen Sie eine "Run MPCMDRUN" und die andere "Run SCCM_ClientOperation". Verknüpfen Sie die Aktivitäten mit dem Status "Get Computer/IP", und konfigurieren Sie bei den Verknüpfungen die Verknüpfung zu MPCMDRUN als erfolgreich, und die Verknüpfung zu SCCM_ConsoleOperation als fehlgeschlagen. Dies wird für unsere Verzweigungslogik verwendet.
  1. Konfigurieren Sie den "Run MPCMDRUN" wie folgt"

Modus: Programm-Ausführung

Computer: Vollständige Zeile als Zeichenkette mit durch ':' getrennten Feldern, aus der zweiten Datenbankabfrage.

Programmpfad: C:\Programme\Microsoft Security Client\Antimalware\MpCmdRun.exe

Programmparameter: -Scan 3

Ausführen als: Verwenden Sie bei Bedarf ein eigenes Konto für administrative Rechte.

  1. Konfigurieren Sie die Aktivität Run SCCM_ConsoleOperation wie folgt:

Modus: Programm-Ausführung

Computer: localhost (oder der Ort, an dem sich die Anwendung befindet)

Programmpfad: C:\temp\SCCM_ClientOperations.exe

Parameter:

/sitecode:SiteCode

/siteserver:SiteServerName

/resid: Vollständige Zeile als String mit durch ':' getrennten Feldern (aus der ersten Datenbankabfrage)

Ausführen als: Verwenden Sie ein Konto, das über Administratorrechte für Configuration Manger verfügt.

Einpacken

Natürlich können Sie Operations Manager-Warnungen, E-Mail-Benachrichtigungen, Variablen usw. hinzufügen, um die Protokollierung bei Bedarf zu verfeinern und bereitzustellen. Dies sollte Ihnen jedoch ein einfaches Anwendungsszenario für Orchestrator liefern, dessen Entwicklung nur wenige Minuten in Anspruch nimmt. Dies ist nur ein Beispiel für eine Aufgabe, die sogar um Active Directory-Aufgaben erweitert werden kann, z. B. um den Hauptbenutzer des Computers zu zwingen, sein Kennwort zu ändern.

Kodex und andere Punkte

Der gesamte Code ist meine eigene Arbeit, für die ich allein verantwortlich bin und für die ich keine Garantie übernehme.

SQL-Abfrage zum Auffinden von Malware-Ereignissen:

[sourcecode language="sql"]
SELECT [MachineID]
,[LastMessageTime]
,[DetectionTime]
,[ActionTime]
,[DetectionSource]
,[PendingActions]
,[CleaningAction]
,[ExecutionStatus]
,[ActionSuccess]
,[ErrorCode]
FROM [CM_CS1].[dbo].[vEP_LastMalware]
WHERE DetectionTime > DATEADD(hour, -1, getutcdate())
[/sourcecode]

SQL-Abfrage zur Zuordnung der Ressourcen-ID zum Computernamen:

[sourcecode language="sql"]
SELECT [Netbios_Name0]
FROM [CM_CS1].[dbo].[vSMS_R_System]
Where ItemKey =
[/sourcecode]

SQL-Abfrage zur Ermittlung der eingeleiteten Client-Operationen:

[sourcecode language="sql"]
SELECT TOP [ID]
,[UniqueID]
,[Typ]
,[RequestedTime]
,[SourceSite]
,[rowversion]
FROM [CM_CS1].[dbo].[ClientOperation]
[/sourcecode]

VB.Net Code für SCCM_ClientOperation.exe

Ich habe Visual Basic 2010 verwendet und eine vb.net-Konsolenanwendung erstellt

--------------------

[sourcecode language="vb"]

Importe System
Importe System.Management
Modul Modul1
Sub Main(ByVal args() As String)
Dim strSiteCode As String = Nothing
Dim strSiteServer As String = Nichts
Dim strResID As Integer = Nothing

'gültige command Zeilen:
'/sitecode
'/siteserver
'/resid = Ressourcen-ID (jeweils eine)

Dim s As String
For Each s In args
s.ToLower()

If s.Contains("/sitecode:") Then
Dim arrTemp() As String
arrTemp = s.Split(":")
strSiteCode = arrTemp(1)
arrTemp = Nichts
ElseIf s.Contains("/siteserver:") Then
Dim arrTemp() As String
arrTemp = s.Split(":")
strSiteServer = arrTemp(1)
arrTemp = Nichts
ElseIf s.Contains("/resid:") Then
Dim arrTemp() As String
arrTemp = s.Split(":")
strResID = arrTemp(1)
arrTemp = Nichts
End If
Nächste

Console.WriteLine(strSiteCode)
Console.WriteLine(strSiteServer)
Console.WriteLine(strResID)

Versuchen Sie

Console.WriteLine("Start:")

Dim classInstance As New ManagementClass("\\" & strSiteServer & "\root\SMS\site_" & strSiteCode, "SMS_ClientOperation", Nothing)

Console.WriteLine("Deklaration von inparams:")

' Parameter für die Methode [in] abrufen
Dim inParams As ManagementBaseObject = classInstance.GetMethodParameters("InitiateClientOperation")

' Fügen Sie die Eingabeparameter hinzu.
' inParams("TargetCollectionID") = ""
Dim arrResID() As Integer = {strResID}
inParams("TargetResourceIDs") = arrResID
inParams("Typ") = 1

' Führen Sie die Methode aus und erhalten Sie die Rückgabewerte.

Dim outParams As ManagementBaseObject = classInstance.InvokeMethod("InitiateClientOperation", inParams, Nothing)
Catch err As ManagementException
Console.WriteLine("Beim Versuch, die WMI-Methode auszuführen, ist ein Fehler aufgetreten: ")
End Try

Ende Sub
Ende Modul

[/Quellcode]