Del via


Varslingsklassifisering for ondsinnede Exchange-koblinger

Gjelder for:

  • Microsoft Defender XDR

Trusselaktører bruker kompromitterte exchange-koblinger for å sende ut søppelpost og phishing-e-poster i bulk til intetanende mottakere ved å maskere legitime e-postmeldinger. Siden koblingen er kompromittert, vil e-postmeldingene vanligvis være klarert av mottakerne. Disse typene phishing-e-poster er vanlige vektorer for phishing-kampanjer og forretnings-e-postkompromisse (BEC)-scenario. Derfor må slike e-postmeldinger overvåkes tungt på grunn av sannsynligheten for at vellykkede mottakeres kompromisser er høye.

Denne strategiplanen hjelper deg med å undersøke forekomster der skadelige koblinger konfigureres/distribueres av ondsinnede aktører. Følgelig tar de nødvendige skritt for å utbedre angrepet og redusere sikkerhetsrisikoen som oppstår fra det. Strategiplanen bidrar til å klassifisere varslene som enten sanne positive (TP) eller falske positive (FP). Hvis varsler er TP, viser strategiplanen nødvendige anbefalte handlinger for utbedring av angrepet. Denne strategiplanen er tilgjengelig for sikkerhetsteam som ser gjennom, håndterer/administrerer og vurderer varslene.

Følgende er resultatene av å bruke en strategiplan:

  • Bestemmelse av varselet som skadelig (TP) eller godartet (FP).
  • Hvis det er skadelig, kan du utbedre/fjerne den skadelige koblingen fra miljøet.

Exchange-koblinger

Exchange-koblinger er en samling med instruksjoner som tilpasser måten e-post flyter til og fra Microsoft 365- eller Office 365-organisasjonen. Vanligvis trenger de fleste Microsoft 365- og Office 365-organisasjoner ikke koblinger for vanlig e-postflyt.

Koblinger brukes til å rute e-posttrafikk mellom eksterne e-postsystemer og Office 365 (O365) eller O365, og lokale e-postsystemer.

Skadelige Exchange-koblinger

Angripere kan kompromittere en eksisterende Exchange-kobling eller kompromittere en administrator, og konfigurere en ny kobling ved å sende phish- eller søppelpost-/masse-e-postmeldinger.

De typiske indikatorene for en ondsinnet kobling finner du når du ser på e-posttrafikk og overskriftene. Når for eksempel e-posttrafikk observeres fra en koblingsnode med manglende samsvar i avsenderadressene P1 (topptekst) og P2 (konvoluttavsender), sammen med ingen informasjon om avsenderens AccountObjectId.

Dette varselet prøver å identifisere slike forekomster av e-postflyten, der sendingsaktiviteten for e-post virker mistenkelig og legger til relevant informasjon om avsenderen er utilgjengelig.

Arbeidsflyt for strategiplan

Du må følge sekvensen for å identifisere ondsinnede Exchange-koblinger:

  • Identifiser hvilke kontoer som sender e-postmeldinger:
    • Ser kontoer ut til å være kompromittert?
  • Identifiser koblingsreléering på e-postmeldinger som skal kontrolleres:
    • Hvis koblingen skal sende ut e-postmeldinger med høyt volum?
    • Hvis koblingen ble endret eller opprettet nylig?
  • Kommer e-postmeldinger til interne e-postadresser?
    • Kommer e-postmeldinger til eksterne adresser (Spray og be om søppelpost)?
    • Kommer e-postmeldinger til eksterne adresser som tilhører kunder eller leverandører (angrep av forsyningskjedetype)?
  • Kontroller om domenene FRA-topptekst og konvoluttavsender er de samme eller forskjellige.

Undersøke skadelige koblinger

Denne delen beskriver trinnene for å undersøke et varsel og utbedre sikkerhetsrisikoen på grunn av denne hendelsen.

  • Finn ut om koblingen demonstrerer dårlig (skadelig) virkemåte.
    • Se etter hendelser som angir uvanlig e-posttrafikk og identifiser, om en ny Exchange-kobling nylig ble lagt til.
      • For e-posttrafikk observert, må du avgjøre om e-postkontoene er kompromittert ved å undersøke om kontoene er ansvarlige for uvanlig e-posttrafikk.
    • Se etter e-postinnhold som inneholder skadelige artefakter (ugyldige koblinger/vedlegg).
    • Se etter domener som ikke er en del av miljøet.
  • Fastslå at e-postkontoene ikke er kompromittert. Identifiser koblingen som nylig ble lagt til eller endret i miljøet.
  • Se etter:
    • Feltverdier i avsenderen av P1 (avsender av e-posthode) og P2-avsender (konvoluttavsender), og kontroller om det ikke er samsvar.
    • Tomme verdier i SenderObjectId-feltet.
  • Bruk telemetridata til å merke seg:
    • NetworkMessageId (meldings-ID) for e-postmeldingene som ble sendt fra den skadelige koblingen.
    • Opprettelsesdatoen for koblingen, dato for siste endring og sist endret etter dato.
    • IP-adressen til koblingen der e-posttrafikken observeres.

Avanserte jaktspørringer

Du kan bruke avanserte jaktspørringer til å samle inn informasjon relatert til et varsel og avgjøre om aktiviteten er mistenkelig.

Sørg for at du har tilgang til følgende tabeller:

Tabellnavn Beskrivelse
EmailEvents Inneholder informasjon relatert til e-postflyt.
CloudAppEvents Inneholder overvåkingslogg for brukeraktiviteter.
IdentityLogonEvents Inneholder påloggingsinformasjon for alle brukere.

Referanser

AHQs-eksempler for referanse:

  • Kjør denne KQL-en for å kontrollere oppretting av ny kobling.

    //modify timeWindow to modify the lookback.
    let timeWindow = now(-7d); let timeNow = now();
    CloudAppEvents
    | where Timestamp between (timeWindow .. timeNow)
    | where isnotempty(AccountObjectId)
    | where ActionType == "New-InboundConnector"
    | mvexpand property = RawEventData.Parameters
    | extend ConnectorName = iff(property.Name == "Name", property.Value, ""), 
    IsEnabled = iff((property.Name == "Enabled" and property.Value == "True"), 
    true, false)
    | where isnotempty( ConnectorName) or IsEnabled
    | project-reorder ConnectorName, IsEnabled
    
  • Kjør denne KQL-en for å kontrollere volumet av hendelser fra den varslede koblingen med tidsvinduet før og etter varslene.

    //modify timeWindow to modify the lookback.
    let timeWindow = now(-7d); let timeNow = now();
    let connectorOperations = pack_array("Set-OutboundConnector", 
    "New-OutboundConnector", "Set-InboundConnector", "New-InboundConnector");
    let mailThreshold = 100; //define threshold for inspection and filtering
    let myConnector= //use this code block to specify relevant connector(s)
    CloudAppEvents
    | where Timestamp between (timeWindow .. timeNow)
    | where ActionType has_any (connectorOperations)
    | mv-expand property = RawEventData.Parameters
    | where property.Name == "Name"
    | summarize by ConnectorName=tostring(property.Value)
    ;
    EmailEvents
    | where isnotempty( toscalar (myConnector))
    | where Timestamp between (timeWindow .. timeNow)
    | where isnotempty( SenderObjectId) and isnotempty( Connectors)
    | where Connectors in (toscalar (myConnector))
    | summarize MailCount = dcount(NetworkMessageId) by Connectors, 
    SenderObjectId, bin(Timestamp, 1h)
    | where MailCount >= mailThreshold
    
  • Kjør denne KQL-en for å kontrollere om e-postmeldinger sendes til eksterne domener.

    //modify timeWindow to modify the lookback.
    let timeWindow = now(-7d); let timeNow = now();
    EmailEvents
    | where Timestamp between (timeWindow .. timeNow)
    | where isnotempty( SenderObjectId)
    | extend RecipientDomain= split(RecipientEmailAddress, "@")[1]
    | where (SenderFromDomain != RecipientDomain) or (SenderMailFromDomain 
    != RecipientDomain)
    | where EmailDirection !in ("Intra-org" , "Inbound") //comment this line to 
    look across all mailflow directions
    
    • Hvis det sendes til eksterne domener, sender hvem andre i miljøet lignende e-postmeldinger (kan indikere kompromittert bruker hvis mottakeren er ukjent domene).

      //modify timeWindow to modify the lookback.
      let timeWindow = now(-7d); let timeNow = now();
      let countThreshold= 100; //modify count threshold accordingly 
      EmailEvents
      | where Timestamp between (timeWindow .. timeNow)
      | where isnotempty( SenderObjectId)
      | extend RecipientDomain= split(RecipientEmailAddress, "@")[1]
      | where (SenderFromDomain != RecipientDomain) or (SenderMailFromDomain 
      != RecipientDomain)
      | where EmailDirection !in ("Intra-org" , "Inbound")
      | summarize MailCount= dcount(NetworkMessageId) by SenderObjectId, 
      SenderFromAddress, SenderMailFromAddress , bin(Timestamp, 1h)
      | where MailCount > countThreshold
      
      • Kontrollere e-postinnholdet for dårlig virkemåte
      • Se på nettadresser i e-postmeldingen eller e-postmeldingen som har vedlegg.

AHQ vurderinger

Følgende er AHQ vurderinger for å beskytte mottakerne mot ondsinnet angrep.

  • Se etter administratorpålogginger for de som ofte administrerer koblinger fra uvanlige plasseringer (generer statistikk og utelat plasseringer der de mest vellykkede påloggingene blir observert).

  • Se etter påloggingsfeil fra uvanlige steder.

    //modify timeWindow to modify the lookback.
    let timeWindow = now(-7d); let timeNow = now();
    let logonFail= materialize (
    IdentityLogonEvents
    | where Timestamp between (timeWindow .. timeNow)
    | where isnotempty(AccountObjectId)
    | where Application != "Active Directory"
    | where ActionType == "LogonFailed"
    | where ISP != "Microsoft Azure"
    | summarize failedLogonCount=count(), LatestTime = max(Timestamp), 
    EarliestTime = min(Timestamp) by AccountObjectId, Application, ISP, 
    CountryCode, bin(Timestamp, 60s)
    | where failedLogonCount > 100);
    // let hasLogonFails = isnotempty(toscalar (logonFail));
    let logonFailUsers = materialize ( logonFail | distinct AccountObjectId | 
    take 100);
    let hasLogonFails = isnotempty(toscalar (logonFailUsers));
    let logonSuccess=
    IdentityLogonEvents
    | where hasLogonFails
    | where Timestamp between (timeWindow .. timeNow)
    | where AccountObjectId in (logonFailUsers)
    | where Application != "Active Directory"
    | where ISP != "Microsoft Azure"
    | where ActionType == "LogonSuccess"
    | project SuccessTime= Timestamp, ReportId, AccountUpn, AccountObjectId, 
    ISP, CountryCode, Application;
    logonFail
    | join kind = innerunique logonSuccess on AccountObjectId, ISP, Application
    | where SuccessTime between (LatestTime .. (LatestTime + 10s))
    | summarize arg_min(SuccessTime, ReportId), EarliestFailedTime=min
    (EarliestTime), LatestFailedTime=max(LatestTime), failedLogonCount=
    take_any(failedLogonCount), SuccessLogonCount=count(), ISPSet=
    make_set(ISP), CountrySet=make_set(CountryCode), AppSet=make_set
    (Application) by AccountObjectId, AccountUpn
    | project-rename Timestamp=SuccessTime
    

Når det er fastslått at de observerte varselaktivitetene er en del av TP, klassifiserer du disse varslene og utfører handlingene nedenfor:

  • Deaktiver eller fjern koblingen som ble funnet å være skadelig.
  • Hvis administratorkontoen ble kompromittert, tilbakestiller du administratorens kontolegitimasjon. Deaktiver/opphev tokener for den kompromitterte administratorkontoen, og aktiver godkjenning med flere faktorer for alle administratorkontoer.
  • Se etter mistenkelige aktiviteter utført av administratoren.
  • Se etter andre mistenkelige aktiviteter på tvers av andre koblinger i miljøet.

Se også

Tips

Vil du lære mer? Kommuniser med Microsoft Sikkerhet-fellesskapet i det tekniske fellesskapet vårt: Microsoft Defender XDR Tech Community.