API di Microsoft Defender per endpoint con PowerShellMicrosoft Defender for Endpoint APIs using PowerShell

Si applica a: Microsoft Defender for EndpointApplies to: Microsoft Defender for Endpoint

Vuoi provare Microsoft Defender per Endpoint?Want to experience Microsoft Defender for Endpoint? Iscriversi per una versione di valutazione gratuita.Sign up for a free trial.

Nota

Se sei un cliente us government, usa gli URI elencati in Microsoft Defender for Endpoint per i clienti del governo statunitense.If you are a US Government customer, please use the URIs listed in Microsoft Defender for Endpoint for US Government customers.

Suggerimento

Per ottenere prestazioni migliori, è possibile utilizzare il server più vicino alla posizione geografica:For better performance, you can use server closer to your geo location:

  • api-us.securitycenter.microsoft.comapi-us.securitycenter.microsoft.com
  • api-eu.securitycenter.microsoft.comapi-eu.securitycenter.microsoft.com
  • api-uk.securitycenter.microsoft.comapi-uk.securitycenter.microsoft.com

Vuoi provare Microsoft Defender per Endpoint?Want to experience Microsoft Defender for Endpoint? Iscriversi per una versione di valutazione gratuita.Sign up for a free trial.

Scenario completo con più API di Microsoft Defender per Endpoint.Full scenario using multiple APIs from Microsoft Defender for Endpoint.

In questa sezione condividiamo gli esempi di PowerShell perIn this section, we share PowerShell samples to

  • Recuperare un tokenRetrieve a token
  • Usare il token per recuperare gli avvisi più recenti in Microsoft Defender for EndpointUse token to retrieve the latest alerts in Microsoft Defender for Endpoint
  • Per ogni avviso, se l'avviso ha priorità media o alta ed è ancora in corso, controlla quante volte il dispositivo si è connesso a UN URL sospetto.For each alert, if the alert has medium or high priority and is still in progress, check how many times the device has connected to suspicious URL.

Prerequisito: devi prima creare un'app.Prerequisite: You first need to create an app.

Istruzioni per la preparazionePreparation instructions

  • Aprire una finestra di PowerShell.Open a PowerShell window.
  • Se i criteri non consentono di eseguire i comandi di PowerShell, è possibile eseguire il comando seguente:If your policy does not allow you to run the PowerShell commands, you can run the below command:
    Set-ExecutionPolicy -ExecutionPolicy Bypass
    

Per altre informazioni, vedi la documentazione di PowerShellFor more information, see PowerShell documentation

Get tokenGet token

Eseguire il comando seguente:Run the below:

  • $tenantId: ID del tenant per conto del quale si desidera eseguire la query (ad esempio, la query verrà eseguita sui dati di questo tenant)$tenantId: ID of the tenant on behalf of which you want to run the query (i.e., the query will be run on the data of this tenant)

  • $appId: ID della tua app AAD (l'app deve disporre dell'autorizzazione "Esegui query avanzate" per Defender per Endpoint)$appId: ID of your AAD app (the app must have 'Run advanced queries' permission to Defender for Endpoint)

  • $appSecret: Segreto dell'app Azure AD$appSecret: Secret of your Azure AD app

  • $suspiciousUrl: l'URL$suspiciousUrl: The URL

$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
$suspiciousUrl = 'www.suspiciousUrl.com' # Paste your own URL here

$resourceAppIdUri = 'https://securitycenter.onmicrosoft.com/windowsatpservice'
$oAuthUri = "https://login.microsoftonline.com/$TenantId/oauth2/token"
$authBody = [Ordered] @{
    resource = "$resourceAppIdUri"
    client_id = "$appId"
    client_secret = "$appSecret"
    grant_type = 'client_credentials'
}
$authResponse = Invoke-RestMethod -Method Post -Uri $oAuthUri -Body $authBody -ErrorAction Stop
$aadToken = $authResponse.access_token


#Get latest alert
$alertUrl = "https://api.securitycenter.microsoft.com/api/alerts?`$top=10"
$headers = @{ 
    'Content-Type' = 'application/json'
    Accept = 'application/json'
    Authorization = "Bearer $aadToken" 
}
$alertResponse = Invoke-WebRequest -Method Get -Uri $alertUrl -Headers $headers -ErrorAction Stop
$alerts =  ($alertResponse | ConvertFrom-Json).value

$machinesToInvestigate = New-Object System.Collections.ArrayList

Foreach($alert in $alerts)
{
    #echo $alert.id $alert.machineId    $alert.severity $alert.status

    $isSevereAlert = $alert.severity -in 'Medium', 'High'
    $isOpenAlert = $alert.status -in 'InProgress', 'New'
    if($isOpenAlert -and $isSevereAlert)
    {
        if (-not $machinesToInvestigate.Contains($alert.machineId))
        {
            $machinesToInvestigate.Add($alert.machineId) > $null
        }
    }
}

$commaSeparatedMachines = '"{0}"' -f ($machinesToInvestigate -join '","')

$query = "NetworkCommunicationEvents
| where MachineId in ($commaSeparatedMachines)
| where RemoteUrl  == `"$suspiciousUrl`"
| summarize ConnectionsCount = count() by MachineId"

$queryUrl = "https://api.securitycenter.microsoft.com/api/advancedqueries/run"

$queryBody = ConvertTo-Json -InputObject @{ 'Query' = $query }
$queryResponse = Invoke-WebRequest -Method Post -Uri $queryUrl -Headers $headers -Body $queryBody -ErrorAction Stop
$response =  ($queryResponse | ConvertFrom-Json).Results
$response

Vedere ancheSee also