Veszélyforrások keresése eszközök, e-mailek, alkalmazások és identitások között

Megjegyzés:

Szeretne Microsoft Defender XDR-t használni? További információ arról, hogy hogyan értékelheti ki és próbálhatja ki a Microsoft Defender XDR-t.

Érintett szolgáltatás:

  • Microsoft Defender XDR

A speciális veszélyforrás-keresés a Microsoft Defender XDR lehetővé teszi a fenyegetések proaktív keresését a következő célokra:

  • A Végponthoz készült Microsoft Defender által felügyelt eszközök
  • A Microsoft 365 által feldolgozott e-mailek
  • A Microsoft Defender for Cloud Apps és Microsoft Defender for Identity által nyomon követett felhőalkalmazás-tevékenységek, hitelesítési események és tartományvezérlői tevékenységek

Ezzel a láthatósági szinttel gyorsan megkeresheti a hálózat szakaszait érintő fenyegetéseket, beleértve az e-mailre vagy az internetre érkező kifinomult behatolásokat, emelheti a helyi jogosultságokat, jogosultsági szintű tartományi hitelesítő adatokat szerezhet be, és oldalirányúan válthat az eszközeire.

Az alábbi általános technikák és mintalekérdezések különböző veszélyforrás-keresési forgatókönyveken alapulnak, amelyek segítségével megismerheti, hogyan hozhat létre lekérdezéseket, amikor ilyen kifinomult fenyegetéseket keres.

Entitásadatok lekérése

Ezekkel a lekérdezésekkel megtudhatja, hogyan kérhet le gyorsan információkat a felhasználói fiókokról, eszközökről és fájlokról.

Felhasználói fiókok beszerzése e-mail-címekről

Amikor eszközöket és e-maileket tartalmazó táblákban hoz létre lekérdezéseket, valószínűleg be kell szereznie a felhasználói fiókneveket a feladótól vagy a címzett e-mail-címétől. Ezt általában a címzett vagy a feladó címe esetében teheti meg az e-mail-címből származó helyi gazdagép használatával.

Az alábbi kódrészletben a tostring() Kusto függvénnyel nyerjük ki a helyi gazdagépet közvetlenül az @ oszlopban RecipientEmailAddressszereplő címzett e-mail-címek előtt.

//Query snippet showing how to extract the account name from an email address
AccountName = tostring(split(RecipientEmailAddress, "@")[0])

Az alábbi lekérdezés bemutatja, hogyan használható ez a kódrészlet:

EmailEvents
| where Timestamp > ago(7d)
| project RecipientEmailAddress, AccountName = tostring(split(RecipientEmailAddress, "@")[0]);

Az IdentityInfo tábla egyesítése

A fiókneveket és más fiókadatokat az IdentityInfo táblához való egyesítéssel vagy csatlakozással szerezheti be. Az alábbi lekérdezés lekéri az adathalászat és a kártevők észlelésének listáját az EmailEvents táblából , majd összekapcsolja ezeket az információkat a táblával, IdentityInfo hogy részletes információkat kapjon az egyes címzettekről.

EmailEvents
| where Timestamp > ago(7d)
//Get email processing events where the messages were identified as either phishing or malware
| where ThreatTypes has "Malware" or ThreatTypes has "Phish"
//Merge email events with identity info to get recipient details
| join (IdentityInfo | distinct AccountUpn, AccountDisplayName, JobTitle,
Department, City, Country) on $left.RecipientEmailAddress == $right.AccountUpn
//Show important message and recipient details
| project Timestamp, NetworkMessageId, Subject, ThreatTypes,
SenderFromAddress, RecipientEmailAddress, AccountDisplayName, JobTitle,
Department, City, Country

Ebből a rövid videóból megtudhatja, hogyan csatlakoztathat táblákat Kusto lekérdezésnyelv.

Eszközadatok lekérése

A speciális veszélyforrás-keresési séma kiterjedt eszközinformációkat biztosít különböző táblákban. A DeviceInfo tábla például átfogó eszközinformációkat biztosít a rendszeresen összesített eseményadatok alapján. Ez a lekérdezés a DeviceInfo táblát használja annak ellenőrzésére, hogy egy potenciálisan feltört felhasználó (<account-name>) bejelentkezett-e valamelyik eszközre, majd felsorolja az eszközökön aktivált riasztásokat.

Tipp

Ez a lekérdezés egy belső illesztés megadására használjakind=inner, amely megakadályozza a bal oldali értékek deduplikációját.DeviceId

DeviceInfo
//Query for devices that the potentially compromised account has logged onto
| where LoggedOnUsers contains '<account-name>'
| distinct DeviceId
//Crosscheck devices against alert records in AlertEvidence and AlertInfo tables
| join kind=inner AlertEvidence on DeviceId
| project AlertId
//List all alerts on devices that user has logged on to
| join AlertInfo on AlertId
| project AlertId, Timestamp, Title, Severity, Category

Fájlesemény adatainak lekérése

Az alábbi lekérdezéssel információkat kérhet le a fájlokkal kapcsolatos eseményekről.

DeviceInfo
| where Timestamp > ago(1d)
| where ClientVersion startswith "20.1"
| summarize by DeviceId
| join kind=inner (
    DeviceFileEvents
    | where Timestamp > ago(1d)
) on DeviceId
| take 10

Hálózati esemény adatainak lekérése

Az alábbi lekérdezéssel információkat kérhet le a hálózattal kapcsolatos eseményekről.

DeviceInfo
| where Timestamp > ago(1d)
| where ClientVersion startswith "20.1"
| summarize by DeviceId
| join kind=inner (
    DeviceNetworkEvents
    | where Timestamp > ago(1d)
) on DeviceId
| take 10

Eszközügynök verzióinformációinak lekérése

Az alábbi lekérdezéssel lekérheti az eszközön futó ügynök verzióját.

DeviceInfo
| where Timestamp > ago(1d)
| where ClientVersion startswith "20.1"
| summarize by DeviceId
| join kind=inner (
    DeviceNetworkEvents
    | where Timestamp > ago(1d)
) on DeviceId
| take 10

Példa lekérdezés macOS-eszközökhöz

Az alábbi példa lekérdezéssel megtekintheti a Catalina-nál régebbi verziójú macOS rendszerű összes eszközt.

DeviceInfo
| where Timestamp > ago(1d)
| where OSPlatform == "macOS" and  OSVersion !contains "10.15" and OSVersion !contains "11."
| summarize by DeviceId
| join kind=inner (
    DeviceInfo
    | where Timestamp > ago(1d)
) on DeviceId
| take 10

Eszközállapot adatainak lekérése

Az eszköz állapotának lekéréséhez használja az alábbi lekérdezést. A következő példában a lekérdezés ellenőrzi, hogy az eszköz regisztrálva van-e.

DeviceInfo
| where Timestamp > ago(1d)
| where OnboardingStatus != "Onboarded"
| summarize by DeviceId
| join kind=inner (
    DeviceInfo
    | where Timestamp > ago(1d)
) on DeviceId
| take 10

Veszélyforrás-keresési forgatókönyvek

Azon felhasználók bejelentkezési tevékenységeinek listázása, amelyek nem sikerült megfeleltetésű e-maileket kaptak

A 0 órás automatikus végleges törlés (ZAP) a beérkezésük után kezeli a kártékony e-maileket. Ha a ZAP meghibásodik, előfordulhat, hogy a rosszindulatú kód végül az eszközön fut, és a fiókok biztonsága sérül. Ez a lekérdezés ellenőrzi, hogy a ZAP által nem sikeresen megcímzett e-mailek címzettjei bejelentkezési tevékenységet végeznek-e.

EmailPostDeliveryEvents
| where Timestamp > ago(7d)
//List malicious emails that were not zapped successfully
| where ActionType has "ZAP" and ActionResult == "Error"
| project ZapTime = Timestamp, ActionType, NetworkMessageId , RecipientEmailAddress
//Get logon activity of recipients using RecipientEmailAddress and AccountUpn
| join kind=inner IdentityLogonEvents on $left.RecipientEmailAddress == $right.AccountUpn
| where Timestamp between ((ZapTime-24h) .. (ZapTime+24h))
//Show only pertinent info, such as account name, the app or service, protocol, the target device, and type of logon
| project ZapTime, ActionType, NetworkMessageId , RecipientEmailAddress, AccountUpn,
LogonTime = Timestamp, AccountDisplayName, Application, Protocol, DeviceName, LogonType

Bejelentkezési kísérletek lekérése hitelesítő adatok ellopása által megcélzott tartományi fiókok alapján

Ez a lekérdezés először azonosítja a táblában található összes hitelesítőadat-hozzáférési riasztást AlertInfo . Ezután egyesíti vagy összekapcsolja a AlertEvidence táblát, amelyet csak a tartományhoz csatlakoztatott fiókok neveihez és szűrőihez elemez. Végül ellenőrzi a táblát IdentityLogonEvents , hogy lekérje a tartományhoz csatlakoztatott célfiókok összes bejelentkezési tevékenységét.

AlertInfo
| where Timestamp > ago(30d)
//Get all credential access alerts
| where Category == "CredentialAccess"
//Get more info from AlertEvidence table to get the SID of the target accounts
| join AlertEvidence on AlertId
| extend IsJoined=(parse_json(AdditionalFields).Account.IsDomainJoined)
| extend TargetAccountSid=tostring(parse_json(AdditionalFields).Account.Sid)
//Filter for domain-joined accounts only
| where IsJoined has "true"
//Merge with IdentityLogonEvents to get all logon attempts by the potentially compromised target accounts
| join kind=inner IdentityLogonEvents on $left.TargetAccountSid == $right.AccountSid
//Show only pertinent info, such as account name, the app or service, protocol, the accessed device, and type of logon
| project AccountDisplayName, TargetAccountSid, Application, Protocol, DeviceName, LogonType

Ellenőrizze, hogy egy ismert kártékony feladó fájljai találhatók-e az eszközein

Feltételezve, hogy tud egy kártékony fájlokat küldő e-mail-címről (MaliciousSender@example.com), futtathatja ezt a lekérdezést annak megállapításához, hogy a feladótól származó fájlok léteznek-e az eszközein. Ezzel a lekérdezéssel például azonosíthatja a kártevőterjesztési kampány által érintett eszközöket.

EmailAttachmentInfo
| where SenderFromAddress =~ "MaliciousSender@example.com"
//Get emails with attachments identified by a SHA-256
| where isnotempty(SHA256)
| join (
//Check devices for any activity involving the attachments
DeviceFileEvents
| project FileName, SHA256, DeviceName, DeviceId
) on SHA256
| project Timestamp, FileName , SHA256, DeviceName, DeviceId,  NetworkMessageId, SenderFromAddress, RecipientEmailAddress

A rosszindulatú e-mailek fogadása után ellenőrizze a bejelentkezési kísérleteket

Ez a lekérdezés az ismert rosszindulatú e-mailek beérkezése után 30 percen belül megkeresi az e-mail címzettjei által legutóbb végrehajtott 10 bejelentkezést. Ezzel a lekérdezésrel ellenőrizheti, hogy az e-mail címzettjeinek fiókjai sérültek-e.

//Define new table for malicious emails
let MaliciousEmails=EmailEvents
//List emails detected as malware, getting only pertinent columns
| where ThreatTypes has "Malware"
| project TimeEmail = Timestamp, Subject, SenderFromAddress, AccountName = tostring(split(RecipientEmailAddress, "@")[0]);
MaliciousEmails
| join (
//Merge malicious emails with logon events to find logons by recipients
IdentityLogonEvents
| project LogonTime = Timestamp, AccountName, DeviceName
) on AccountName
//Check only logons within 30 minutes of receipt of an email
| where (LogonTime - TimeEmail) between (0min.. 30min)
| take 10

A PowerShell-tevékenységek áttekintése az ismert rosszindulatú feladótól érkező e-mailek fogadása után

A rosszindulatú e-mailek gyakran tartalmaznak olyan dokumentumokat és más speciálisan kialakított mellékleteket, amelyek PowerShell-parancsokat futtatnak további hasznos adatok továbbításához. Ha tud egy ismert rosszindulatú feladótól () érkező e-mailekről,MaliciousSender@example.com ezzel a lekérdezéssel listázhatja és áttekintheti azokat a PowerShell-tevékenységeket, amelyek az e-mail feladótól való beérkezése után 30 percen belül történtek.

//Define new table for emails from specific sender
let EmailsFromBadSender=EmailEvents
| where SenderFromAddress =~ "MaliciousSender@example.com"
| project TimeEmail = Timestamp, Subject, SenderFromAddress, AccountName = tostring(split(RecipientEmailAddress, "@")[0]);
//Merge emails from sender with process-related events on devices
EmailsFromBadSender
| join (
DeviceProcessEvents
//Look for PowerShell activity
| where FileName =~ "powershell.exe"
//Add line below to check only events initiated by Outlook
//| where InitiatingProcessParentFileName =~ "outlook.exe"
| project TimeProc = Timestamp, AccountName, DeviceName, InitiatingProcessParentFileName, InitiatingProcessFileName, FileName, ProcessCommandLine
) on AccountName
//Check only PowerShell activities within 30 minutes of receipt of an email
| where (TimeProc - TimeEmail) between (0min.. 30min)

Tipp

Szeretne többet megtudni? Lépjen kapcsolatba a Microsoft biztonsági közösségével a technikai közösségünkben: Microsoft Defender XDR Tech Community.