Del via


Beskedklassificering for skadelige exchange-connectors

Gælder for:

  • Microsoft Defender XDR

Trusselsaktører bruger kompromitterede exchange-connectors til at sende spam- og phishing-mails samlet til intetanende modtagere ved at maskere legitime mails. Da connectoren er kompromitteret, vil modtagerne normalt have tillid til mailene. Disse typer phishing-mails er almindelige vektorer for phishingkampagner og BEC-scenarie (Business Email Compromise). Derfor skal sådanne mails overvåges stærkt, fordi sandsynligheden for vellykkede modtageres kompromiser er høje.

Denne playbook hjælper med at undersøge tilfælde, hvor skadelige connectors konfigureres/installeres af ondsindede aktører. De tager derfor de nødvendige skridt til at afhjælpe angrebet og afhjælpe de sikkerhedsrisici, der opstår som følge af det. Playbook hjælper med at klassificere beskeder som enten sand positiv (TP) eller falsk positiv (FP). Hvis beskeder er TP, viser playbooken de handlinger, der er nødvendige for at afhjælpe angrebet. Denne playbook er tilgængelig for sikkerhedsteams, der gennemser, håndterer/administrerer og karakterer beskederne.

Følgende er resultaterne af at bruge en playbook:

  • Bestemmelse af beskeden som skadelig (TP) eller godartet (FP).
  • Hvis den er skadelig, skal du afhjælpe/fjerne den skadelige connector fra miljøet.

Exchange-connectors

Exchange-connectors er en samling instruktioner, der tilpasser den måde, dine mailflows til og fra din Microsoft 365 eller Office 365 organisation. Normalt har de fleste Microsoft 365- og Office 365 organisationer ikke brug for connectors til almindeligt mailflow.

Forbindelser bruges til at dirigere mailtrafik mellem fjernmailsystemer og Office 365 (O365) eller O365 og mailsystemer i det lokale miljø.

Skadelige Exchange-connectors

Hackere kan kompromittere en eksisterende exchange-connector eller kompromittere en administrator og konfigurere en ny connector ved at sende phish- eller spam-/massemails.

De typiske indikatorer for en ondsindet connector kan findes, når du ser på mailtrafik og dens overskrifter. Når mailtrafik f.eks. observeres fra en forbindelsesnode med en uoverensstemmelse i P1- (header afsender) og P2-afsenderadresser (afsenderkonvolut) sammen med ingen oplysninger om Afsenderens AccountObjectId.

Denne besked forsøger at identificere sådanne forekomster af mailflowet, hvor afsendelsesaktiviteten for mail virker mistænkelig tilføjelse til de relevante oplysninger om afsenderen ikke er tilgængelig.

Arbejdsproces for playbook

Du skal følge sekvensen for at identificere skadelige exchange-connectors:

  • Identificer, hvilke konti der sender mails:
    • Ser det ud til, at konti er kompromitteret?
  • Identificer connectoren, der videresender via mails, for at kontrollere:
    • Hvis connectoren skal sende mails med høj volumen?
    • Hvis connectoren er blevet ændret eller oprettet for nylig?
  • Skal mails til interne mailadresser?
    • Er e-mails kommer til eksterne adresser (Spray og bede spam)?
    • Går mails til eksterne adresser, der tilhører kunder eller leverandører (angreb af forsyningskædetype)?
  • Kontrollér, om domænerne FROM-header og Envelope Sender er ens eller anderledes.

Undersøgelse af skadelige connectors

I dette afsnit beskrives trinnene til at undersøge en besked og afhjælpe sikkerhedsrisikoen på grund af denne hændelse.

  • Find ud af, om connectoren viser dårlig (skadelig) funktionsmåde.
    • Søg efter hændelser, der angiver usædvanlig posttrafik, og identificer, om der for nylig er tilføjet en ny Exchange-connector.
      • I forbindelse med den observerede posttrafik skal du afgøre, om mailkontiene kompromitteres, ved at undersøge, om kontiene er ansvarlige for usædvanlig posttrafik.
    • Søg efter mailindhold, der indeholder skadelige artefakter (forkerte links/vedhæftede filer).
    • Søg efter domæner, der ikke er en del af dit miljø.
  • Find ud af, at mailkontiene ikke kompromitteres. Identificer den connector, der for nylig blev tilføjet eller ændret i miljøet.
  • Se efter:
    • Feltværdier i P1-afsenderen (afsender af mailheader) og P2-afsender (afsender af konvolut), og kontrollér, om der er en uoverensstemmelse.
    • Tomme værdier i feltet SenderObjectId.
  • Brug telemetridata til at bemærke:
    • NetworkMessageId (Meddelelses-id) for de mails, der blev sendt fra den skadelige connector.
    • Oprettelsesdatoen for connectoren, datoen for seneste ændring og seneste ændring efter dato.
    • IP-adressen på den connector, hvorfra mailtrafikken observeres.

Avancerede jagtforespørgsler

Du kan bruge avancerede jagtforespørgsler til at indsamle oplysninger, der er relateret til en besked, og afgøre, om aktiviteten er mistænkelig.

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

Tabelnavn Beskrivelse
EmailEvents Indeholder oplysninger, der er relateret til mailflow.
CloudAppEvents Indeholder overvågningsloggen over brugeraktiviteter.
IdentityLogonEvents Indeholder logonoplysninger for alle brugere.

Referencer

AHQs-eksempler som reference:

  • Kør denne KQL for at kontrollere oprettelsen af den nye connector.

    //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
    
  • Kør denne KQL for at kontrollere mængden af hændelser fra den advarede connector med tidsvinduet før og efter beskederne.

    //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
    
  • Kør denne KQL for at kontrollere, om mails sendes til eksterne domæner.

    //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 sendt til eksterne domæner, hvem der ellers i miljøet sender lignende mails (kan indikere kompromitteret bruger, hvis modtageren er ukendt domæne).

      //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
      
      • Kontrollér mailindholdet for dårlig funktionsmåde
      • Se URL-adresserne i mailen eller mailen med vedhæftede filer.

AHQ-overvejelser

Følgende er AHQ-overvejelserne for at beskytte modtagerne mod ondsindede angreb.

  • Kontrollér, om der er administratorlogon for dem, der ofte administrerer connectors fra usædvanlige placeringer (opret statistikker, og udelad placeringer, hvor de mest vellykkede logons observeres).

  • Søg efter logonfejl fra usædvanlige placeringer.

    //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ået, at de observerede beskedaktiviteter er en del af TP, skal du klassificere disse beskeder og udføre handlingerne nedenfor:

  • Deaktiver eller fjern den connector, der blev fundet skadelig.
  • Hvis administratorkontoen er blevet kompromitteret, skal du nulstille legitimationsoplysningerne til administratorens konto. Du kan også deaktivere/tilbagekalde tokens for den kompromitterede administratorkonto og aktivere multifaktorgodkendelse for alle administratorkonti.
  • Søg efter mistænkelige aktiviteter, der udføres af administratoren.
  • Kontrollér, om der er andre mistænkelige aktiviteter på tværs af andre connectors i miljøet.

Se også

Tip

Vil du vide mere? Kontakt Microsoft Security-community'et i vores Tech Community: Microsoft Defender XDR Tech Community.