Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wichtig
Microsoft Sentinel verfügt jetzt über einen integrierten Connector. Weitere Informationen finden Sie unter Verbinden Office 365 Logs mit Microsoft Sentinel. Dies ist der empfohlene Weg zur Sammlung dieser Protokolle und ersetzt die nachfolgend beschriebenen Sammlungsmethoden.
Microsoft Teams spielt eine zentrale Rolle bei der Kommunikation und der Datenfreigabe in der Microsoft 365 Cloud. Da der Microsoft Teams-Dienst Berührungspunkte mit so vielen Technologien in der Cloud hat, kann er sowohl von menschlicher als auch automatisierter Analyse profitieren. Dies gilt sowohl für die Suche in Protokollen als auch für die Echtzeit-Überwachung von Besprechungen. Microsoft Sentinel bietet Administratoren diese Lösungen.
Hinweis
Benötigen Sie eine Auffrischung für Microsoft Sentinel? Genau so etwas finden Sie in diesem Artikel.
Sentinel und Microsoft Teams-Aktivitätsprotokolle
Dieser Artikel konzentriert sich auf das Sammeln von Teams-Aktivitätsprotokollen in Microsoft Sentinel.
Sentinel ermöglicht Administratoren die Sicherheitsverwaltung an einem zentralen Ort. Dies schließt die Verwaltung von Folgendem ein:
- Geräte von Drittanbietern
- Microsoft Threat Protection
- Microsoft 365-Workloads
Sentinel-Arbeitsmappen und Runbooks ermöglichen eine systematische Sicherheitsüberwachung. Ein guter erster Schritt in diesem Prozess ist das Sammeln der zu analysierenden Protokolle.
Hinweis
Im gleichen instance von Microsoft Sentinel können mehrere Microsoft 365-Abonnements angezeigt werden. Dies gestattet Echtzeitüberwachung und die Suche nach Bedrohungen in historischen Protokolldateien. Administratoren können mithilfe von ressourcenübergreifenden Abfragen Suchen durchführen, d.h. innerhalb einer einzelnen Ressourcengruppe, über Ressourcengruppen hinweg oder in einem anderen Abonnement.
Schritt 1: Sammeln von Microsoft Teams-Protokollen: Aktivieren von Überwachungsprotokollen in Microsoft 365
Da Microsoft Teams Aktivitäten über Microsoft 365 protokolliert, werden Überwachungsprotokolle nicht standardmäßig gesammelt. Aktivieren Sie diese Funktion mithilfe dieser Schritte. Microsoft Teams-Daten werden in der Microsoft 365-Überwachung unter Audit.General erfasst.
Schritt 2: Verbinden von Office 365 Protokollen mit Microsoft Sentinel
Microsoft Sentinel bietet einen integrierten Connector für Office 365 Protokolle, mit dem Sie Teams-Daten zusammen mit anderen Office 365 Daten in Microsoft Sentinel erfassen können.
Aktivieren Sie in Microsoft Sentinel den Office 365-Datenconnector. Weitere Informationen finden Sie in der Microsoft Sentinel-Dokumentation.
Hilfreiche KQL-Suchabfragen
Verwenden Sie diese Abfragen, um sich mit Ihren Teams-Daten und der Teams-Umgebung vertraut zu machen. Die Kenntnis, wie die Umgebung aussehen und sich verhalten sollte, ist ein guter erster Schritt, um verdächtige Aktivitäten zu erkennen. Von hier aus können Sie weiter zur Bedrohungssuche verzweigen.
Abfrage für externe Verbundbenutzer
Rufen Sie die Liste der Teams-Sites ab, auf denen es externe Verbundbenutzer gibt. Diese Benutzer weisen einen Domänennamen und/oder ein UPN-Suffix auf, der/das nicht im Besitz Ihrer Organisation ist.
In dieser Beispielabfrage besitzt die Organisation „contoso.com“.
OfficeActivity
| where TimeGenerated > ago(7d)
| where Operation =~ "MemberAdded"
| where parse_json(Members)[0].Role == 3
| project TeamName, Operation, UserId, Members
| mv-expand bagexpansion=array Members
| evaluate bag_unpack(Members)
Tipp
Informationen zu den Zugriffstypen „Extern“ und „Gast“ in Microsoft Teams finden Sie unter Kommunizieren mit Benutzern aus anderen Organisationen oder im Abschnitt Teilnehmertypen des Sicherheitshandbuchs für Microsoft Teams.
Jüngste Beitritte/Jüngste Rollenänderungen
Führen Sie eine Abfrage zu einem bestimmten Benutzer durch, um zu überprüfen, ob er einem Microsoft Teams-Kanal in den letzten sieben Tagen oder innerhalb einer Woche hinzugefügt wurde:
OfficeActivity
| where TimeGenerated > ago(7d)
| where Operation =~ "MemberAdded"
| where Members has "<DisplayName>" or Members has "<UserPrincipalName>"
| project TeamName, Operation, UserId, Members
Führen Sie eine Abfrage dazu durch, ob die Rolle eines Benutzers in den letzten sieben Tagen für ein Team geändert wurde:
OfficeActivity
| where TimeGenerated > ago(7d)
| where Operation =~ "MemberRoleChanged"
| project TeamName, Operation, UserId, Members
| mv-expand bagexpansion=array Members
| evaluate bag_unpack(Members)
| where Role == '1'
Externe Benutzer aus unbekannten oder neuen Organisationen
In Teams können Sie Ihrer Umgebung oder Ihren Kanälen externe Benutzer hinzufügen. Organisationen verfügen häufig über eine begrenzte Anzahl wichtiger Partnerschaften und fügen Benutzer aus dem Kreis dieser Partner hinzu. Diese KQL-Abfrage sucht nach externen Benutzern, die Teams hinzugefügt wurden, die aus Organisationen stammen, die zuvor noch nicht gesehen oder hinzugefügt wurden.
Weitere Informationen finden Sie in der Abfrage im Git-Hub der Microsoft Sentinel-Community.
Externe Benutzer, die hinzugefügt und dann entfernt wurden
Angreifer, die bereits über den Zugriff auf einer bestimmten Ebene verfügen, können in Teams ein neues externes Konto hinzufügen, um auf Daten zuzugreifen und diese zu exfiltrieren. Sie können diesen Benutzer auch schnell wieder entfernen, um zu verbergen, dass dieser Zugriff stattgefunden hat. Diese Abfrage sucht nach externen Konten, die Teams hinzugefügt und schnell wieder entfernt wurden, um bei der Identifizierung verdächtigen Verhaltens zu helfen.
Weitere Informationen finden Sie in der Abfrage im Git-Hub der Microsoft Sentinel-Community.
Neuer Bot oder neue Anwendung hinzugefügt
Microsoft Teams kann Apps oder Bots in einem Team enthalten, um die Featuresammlung zu erweitern (einschließlich benutzerdefinierter Apps und Bots). In manchen Fällen kann eine App oder ein Bot dazu verwendet werden, Persistenz in Microsoft Teams herzustellen, ohne ein Benutzerkonto zu benötigen, und sie können auf Dateien und andere Daten zugreifen. Diese Abfrage sucht nach Apps oder Bots, die neu in Microsoft Teams sind.
Weitere Informationen finden Sie in der Abfrage im Git-Hub der Microsoft Sentinel-Community.
Benutzerkonten, die Besitzer einer großen Anzahl von Teams sind
Angreifer, die ihre Zugriffsrechte erweitern möchten, könnten sich selbst Besitzerrechte für eine große Anzahl verschiedener Teams zuweisen. Normalerweise erstellen und besitzen Benutzer ein paar Teams zu bestimmten Themen. Diese KQL-Abfrage sucht nach verdächtigem Verhalten.
Weitere Informationen finden Sie in der Abfrage im Git-Hub der Microsoft Sentinel-Community.
Viele Löschungen von Teams durch einen einzelnen Benutzer
Angreifer können Unterbrechungen auslösen und Projekte und Daten gefährden, indem sie mehrere Teams löschen. Da Teams in der Regel von einzelnen Besitzern gelöscht werden, kann das zentrale Löschen vieler Teams ein Anzeichen für Schwierigkeiten sein. Diese KQL-Abfrage sucht nach einzelnen Benutzern, die mehrere Teams löschen.
Weitere Informationen finden Sie in der Abfrage im Git-Hub der Microsoft Sentinel-Community.
Erweitern Ihrer Möglichkeiten für die Bedrohungssuche
Das Kombinieren von Abfragen aus Ressourcen wie Microsoft Entra-ID oder anderen Office 365 Workloads kann mit Teams-Abfragen verwendet werden. Kombinieren Sie beispielsweise die Erkennung verdächtiger Muster in Microsoft Entra SigninLogs, und verwenden Sie diese Ausgabe bei der Suche nach Teambesitzern.
let timeRange = 1d;
let lookBack = 7d;
let threshold_Failed = 5;
let threshold_FailedwithSingleIP = 20;
let threshold_IPAddressCount = 2;
let isGUID = "[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12}";
let azPortalSignins = SigninLogs
| where TimeGenerated >= ago(timeRange)
// Azure Portal only and exclude non-failure Result Types
| where AppDisplayName has "Azure Portal" and ResultType !in ("0", "50125", "50140")
// Tagging identities not resolved to friendly names
| extend Unresolved = iff(Identity matches regex isGUID, true, false);
// Lookup up resolved identities from last 7 days
let identityLookup = SigninLogs
| where TimeGenerated >= ago(lookBack)
| where not(Identity matches regex isGUID)
| summarize by UserId, lu_UserDisplayName = UserDisplayName, lu_UserPrincipalName = UserPrincipalName;
// Join resolved names to unresolved list from portal signins
let unresolvedNames = azPortalSignins | where Unresolved == true | join kind= inner (
identityLookup ) on UserId
| extend UserDisplayName = lu_UserDisplayName, UserPrincipalName = lu_UserPrincipalName
| project-away lu_UserDisplayName, lu_UserPrincipalName;
// Join Signins that had resolved names with list of unresolved that now have a resolved name
let u_azPortalSignins = azPortalSignins | where Unresolved == false | union unresolvedNames;
let failed_signins = (u_azPortalSignins
| extend Status = strcat(ResultType, ": ", ResultDescription), OS = tostring(DeviceDetail.operatingSystem), Browser = tostring(DeviceDetail.browser)
| extend FullLocation = strcat(Location,'|', LocationDetails.state, '|', LocationDetails.city)
| summarize TimeGenerated = makelist(TimeGenerated), Status = makelist(Status), IPAddresses = makelist(IPAddress), IPAddressCount = dcount(IPAddress), FailedLogonCount = count()
by UserPrincipalName, UserId, UserDisplayName, AppDisplayName, Browser, OS, FullLocation
| mvexpand TimeGenerated, IPAddresses, Status
| extend TimeGenerated = todatetime(tostring(TimeGenerated)), IPAddress = tostring(IPAddresses), Status = tostring(Status)
| project-away IPAddresses
| summarize StartTime = min(TimeGenerated), EndTime = max(TimeGenerated) by UserPrincipalName, UserId, UserDisplayName, Status, FailedLogonCount, IPAddress, IPAddressCount, AppDisplayName, Browser, OS, FullLocation
| where (IPAddressCount >= threshold_IPAddressCount and FailedLogonCount >= threshold_Failed) or FailedLogonCount >= threshold_FailedwithSingleIP
| project UserPrincipalName);
OfficeActivity
| where TimeGenerated > ago(time_window)
| where Operation =~ "MemberRoleChanged"
| mv-expand bagexpansion=array Members
| evaluate bag_unpack(Members)
| where Role == '2'
| where Members in (failed_signins)
Sie können die SigninLogs-Erkennungen auch auf Microsoft Teams zuschneiden, indem Sie einen Filter für nur Microsoft Teams-basierte Anmeldungen hinzufügen. Verwenden Sie hierfür Folgendes:
| where AppDisplayName has 'Teams'
Um die Verwendung von wo besitzt AppDisplayName Teams noch besser zu erläutern, veranschaulicht die KQL-Abfrage hier unten eine erfolgreiche Anmeldung von einer IP-Adresse und eine mit einem Fehler von einer anderen IP-Adresse, jedoch nur auf Microsoft Teams-Anmeldungen eingegrenzt:
let timeFrame = 1d;
let logonDiff = 10m;
SigninLogs
| where TimeGenerated >= ago(timeFrame)
| where ResultType == "0"
| where AppDisplayName has "Teams"
| project SuccessLogonTime = TimeGenerated, UserPrincipalName, SuccessIPAddress = IPAddress, AppDisplayName, SuccessIPBlock = strcat(split(IPAddress, ".")[0], ".", split(IPAddress, ".")[1])
| join kind= inner (
SigninLogs
| where TimeGenerated >= ago(timeFrame)
| where ResultType !in ("0", "50140")
| where ResultDescription !~ "Other"
| where AppDisplayName startswith "Microsoft Teams"
| project FailedLogonTime = TimeGenerated, UserPrincipalName, FailedIPAddress = IPAddress, AppDisplayName, ResultType, ResultDescription
) on UserPrincipalName, AppDisplayName
| where SuccessLogonTime < FailedLogonTime and FailedLogonTime - SuccessLogonTime <= logonDiff and FailedIPAddress !startswith SuccessIPBlock
| summarize FailedLogonTime = max(FailedLogonTime), SuccessLogonTime = max(SuccessLogonTime) by UserPrincipalName, SuccessIPAddress, AppDisplayName, FailedIPAddress, ResultType, ResultDescription
| extend timestamp = SuccessLogonTime, AccountCustomEntity = UserPrincipalName, IPCustomEntity = SuccessIPAddress
Wichtige Informationen und Updates
Vielen Dank für die inhaltliche Zusammenarbeit an Pete Bryan, Nicholas DiCola und Matthew Lowe. Pete Bryan und die Personen, mit denen er zusammenarbeitet, werden weiterhin Erkennungs- und Suchabfragen für Microsoft Teams entwickeln.
Halten Sie sich über Updates über dieses Git Hub-Repository auf dem Laufenden.
Halten Sie regelmäßig Ausschau nach Updates für den in diesem Artikel verwendeten Parser bzw. für die verwendete Logik-App.
Sie sollten auch der Azure Sentinel-Community beitreten (und daran mitwirken). Wir sind sehr an Feedback zu diesem Artikel interessiert. Nutzen Sie also bitte die Feedbackoption weiter unten. Vielen Dank und erfolgreiche Suche!
Registrieren Ihrer Anwendung in Microsoft Entra ID