Perburuan Tingkat Lanjut menggunakan Python

Note

Jika Anda adalah pelanggan Pemerintah AS, gunakan URI yang tercantum dalam Microsoft Defender untuk Titik Akhir untuk pelanggan Pemerintah AS.

Tip

Untuk performa yang lebih baik, alih-alih menggunakan api.security.microsoft.com, gunakan server yang lebih dekat dengan geolokasi Anda:

  • 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
  • ina.api.security.microsoft.com
  • aea.api.security.microsoft.com

Jalankan kueri tingkat lanjut menggunakan Python, lihat Advanced Hunting API.

Di bagian ini, kami berbagi sampel Python untuk mengambil token dan menggunakannya untuk menjalankan kueri.

Prasyarat: Anda harus terlebih dahulu membuat aplikasi.

Dapatkan token

  • Jalankan perintah berikut:

Tip

Beberapa API Microsoft Defender untuk Titik Akhir masih memerlukan token akses yang dikeluarkan untuk sumber daya lama https://api.securitycenter.microsoft.com. Jika audiens token tidak cocok dengan sumber daya yang diharapkan oleh API, permintaan gagal dengan 403 Forbidden, bahkan jika titik akhir API menggunakan https://api.security.microsoft.com. Gunakan https://api.securitycenter.microsoft.com sebagai sumber daya atau cakupan saat memperoleh token.

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"]

Where:

  • tenantId: ID penyewa atas nama yang ingin Anda jalankan kuerinya (yaitu, kueri dijalankan pada data penyewa ini)
  • appId: ID aplikasi Microsoft Entra Anda (aplikasi harus memiliki izin 'Jalankan kueri tingkat lanjut' untuk Microsoft Defender untuk Titik Akhir)
  • appSecret: Rahasia aplikasi Microsoft Entra Anda

Jalankan Kueri

Jalankan kueri berikut:

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

url = "https://api.security.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"]
  • skema berisi skema hasil kueri Anda
  • hasil berisi hasil kueri Anda

Kueri kompleks

Jika Anda ingin menjalankan kueri kompleks (atau kueri multibaris), simpan kueri Anda dalam file dan, alih-alih baris pertama dalam contoh sebelumnya, jalankan perintah berikut:

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

Bekerja dengan hasil kueri

Sekarang Anda bisa menggunakan hasil kueri.

Untuk melakukan iterasi atas hasil, gunakan perintah berikut:

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

Untuk menghasilkan hasil kueri dalam format CSV dalam file file1.csv, gunakan perintah berikut:

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

Untuk menghasilkan hasil kueri dalam format JSON dalam file file1.json, gunakan perintah berikut:

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

Tip

Apakah Anda ingin mempelajari lebih lanjut? Libatkan dengan komunitas Microsoft Security di Komunitas Teknologi kami: Microsoft Defender untuk Titik Akhir Tech Community.