Rilevazione avanzata con Python

Si applica a:

Se si desidera provare Microsoft Defender per endpoint, iscriversi a una versione di valutazione gratuita.

Nota

Se si è un cliente del governo degli Stati Uniti, usare gli URI elencati in Microsoft Defender per endpoint per i clienti del governo degli Stati Uniti.

Consiglio

Per ottenere prestazioni migliori, è possibile usare il server più vicino alla posizione geografica:

  • 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

Eseguire query avanzate con Python, vedere API di ricerca avanzata.

In questa sezione vengono condivisi esempi di Python per recuperare un token e usarlo per eseguire una query.

Prerequisito: è prima di tutto necessario creare un'app.

Ottenere il token

  • Eseguire i comandi seguenti:
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"]

Dove:

  • tenantId: ID del tenant per conto del quale si vuole eseguire la query, ovvero la query viene eseguita sui dati di questo tenant
  • appId: ID dell'app Microsoft Entra (l'app deve disporre dell'autorizzazione "Esegui query avanzate" per Microsoft Defender per endpoint)
  • appSecret: segreto dell'app Microsoft Entra

Esegui query

Eseguire la query seguente:

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 contiene lo schema dei risultati della query
  • i risultati contengono i risultati della query

Query complesse

Se si desidera eseguire query complesse (o query multiriga), salvare la query in un file e, anziché la prima riga nell'esempio precedente, eseguire il comando seguente:

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

Usare i risultati delle query

È ora possibile usare i risultati della query.

Per eseguire l'iterazione dei risultati, usare il comando seguente:

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

Per restituire i risultati della query in formato CSV nel file file1.csv usare il comando seguente:

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()

Per restituire i risultati della query in formato JSON nel file file1.json usare il comando seguente:

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

Consiglio

Per saperne di più, Engage con la community Microsoft Security nella community tech: Microsoft Defender per endpoint Tech Community.