Share via


Erweiterte Bedrohungssuche mit Python

Gilt für:

Möchten Sie Microsoft Defender für Endpunkt ausprobieren? Registrieren Sie sich für eine kostenlose Testversion.

Hinweis

Wenn Sie ein US Government-Kunde sind, verwenden Sie bitte die URIs, die in Microsoft Defender for Endpoint für US Government-Kunden aufgeführt sind.

Tipp

Um die Leistung zu verbessern, können Sie den Server näher an Ihrem geografischen Standort verwenden:

  • us.api.security.microsoft.com
  • eu.api.security.microsoft.com
  • uk.api.security.microsoft.com
  • au.api.security.microsoft.com
  • swa.api.security.microsoft.com

Ausführen erweiterter Abfragen mit Python finden Sie unter Erweiterte Hunting-API.

In diesem Abschnitt werden Python-Beispiele zum Abrufen eines Tokens und zum Ausführen einer Abfrage freigegeben.

Voraussetzung: Sie müssen zuerst eine App erstellen.

Token abrufen

  • Führen Sie die folgenden Befehle aus:
import json
import urllib.request
import urllib.parse

tenantId = '00000000-0000-0000-0000-000000000000' # Paste your own tenant ID here
appId = '11111111-1111-1111-1111-111111111111' # Paste your own app ID here
appSecret = '22222222-2222-2222-2222-222222222222' # Paste your own app secret here

url = "https://login.microsoftonline.com/%s/oauth2/token" % (tenantId)

resourceAppIdUri = 'https://api.securitycenter.microsoft.com'

body = {
    'resource' : resourceAppIdUri,
    'client_id' : appId,
    'client_secret' : appSecret,
    'grant_type' : 'client_credentials'
}

data = urllib.parse.urlencode(body).encode("utf-8")

req = urllib.request.Request(url, data)
response = urllib.request.urlopen(req)
jsonResponse = json.loads(response.read())
aadToken = jsonResponse["access_token"]

Dabei gilt:

  • tenantId: ID des Mandanten, für den Sie die Abfrage ausführen möchten (d. a. die Abfrage wird für die Daten dieses Mandanten ausgeführt).
  • appId: ID Ihrer Microsoft Entra-App (die App muss über die Berechtigung "Erweiterte Abfragen ausführen" verfügen, um Microsoft Defender for Endpoint.
  • appSecret: Geheimnis Ihrer Microsoft Entra-App

Abfrage ausführen

Führen Sie die folgende Abfrage aus:

query = 'DeviceRegistryEvents | limit 10' # Paste your own query here

url = "https://api.securitycenter.microsoft.com/api/advancedqueries/run"
headers = { 
    'Content-Type' : 'application/json',
    'Accept' : 'application/json',
    'Authorization' : "Bearer " + aadToken
}

data = json.dumps({ 'Query' : query }).encode("utf-8")

req = urllib.request.Request(url, data, headers)
response = urllib.request.urlopen(req)
jsonResponse = json.loads(response.read())
schema = jsonResponse["Schema"]
results = jsonResponse["Results"]
  • schema enthält das Schema der Ergebnisse Ihrer Abfrage.
  • Ergebnisse enthalten die Ergebnisse Ihrer Abfrage

Komplexe Abfragen

Wenn Sie komplexe Abfragen (oder mehrzeilige Abfragen) ausführen möchten, speichern Sie ihre Abfrage in einer Datei, und führen Sie anstelle der ersten Zeile im obigen Beispiel den folgenden Befehl aus:

queryFile = open("D:\\Temp\\myQuery.txt", 'r') # Replace with the path to your file
query = queryFile.read()
queryFile.close()

Arbeiten mit Abfrageergebnissen

Sie können jetzt die Abfrageergebnisse verwenden.

Verwenden Sie den folgenden Befehl, um die Ergebnisse zu durchlaufen:

for result in results:
    print(result) # Prints the whole result
    print(result["EventTime"]) # Prints only the property 'EventTime' from the result

Verwenden Sie den folgenden Befehl, um die Ergebnisse der Abfrage im CSV-Format in datei file1.csv auszugeben:

import csv

outputFile = open("D:\\Temp\\file1.csv", 'w')
output = csv.writer(outputFile)
output.writerow(results[0].keys())
for result in results:
    output.writerow(result.values())

outputFile.close()

Verwenden Sie den folgenden Befehl, um die Ergebnisse der Abfrage im JSON-Format in datei file1.json auszugeben:

outputFile = open("D:\\Temp\\file1.json", 'w')
json.dump(results, outputFile)
outputFile.close()

Tipp

Möchten Sie mehr erfahren? Engage mit der Microsoft-Sicherheitscommunity in unserer Tech Community: Microsoft Defender for Endpoint Tech Community.