Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
DFIR-O365RC — Модуль PowerShell для сбора журналов Office 365 и Azure | Kitploit
Инструменты/GitHubGitHub/anssi-fr/dfir-o365rc
ФорензикаЦифровая криминалистикаБезопасность облачных средРеагирование на ИнцидентыАнализ Журналов
GitHubanssi-fr/dfir-o365rc

DFIR-O365RC

Модуль PowerShell для сбора журналов Office 365 и Azure

Репозиторий
28234411 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

DFIR-O365RC

Publish Docker image to Dockerhub Publish module to PowerShell Gallery


Содержание:

  1. Описание модуля

  2. Установка и предварительные требования

    1. Использование Docker
    2. Ручная установка
  3. Управление приложением DFIR-O365RC

    1. Создание приложения
    2. Обновление приложения
    3. Удаление приложения
  4. Требования к разрешениям и лицензиям

  5. Функции, включённые в модуль

  6. Создаваемые файлы

DFIR-O365RC был представлен на SSTIC 2021 (Symposium sur la sécurité des technologies de l'information et des communications). Слайды и запись выступления (на французском языке) доступны здесь.

⚠️ 31 марта 2024 года Microsoft прекратила поддержку метода аутентификации, который мы использовали для DFIR-O365RC. Это привело к выпуску версии 2.0.0 в августе 2024 года с критическими изменениями, касающимися аутентификации и глобального рефакторинга кода. ⚠️

Описание модуля

Модуль PowerShell DFIR-O365RC представляет собой набор функций, позволяющий специалисту по криминалистике собирать журналы, актуальные для расследования инцидентов в Microsoft 365, и проводить расследования в Entra ID.

Журналы генерируются в формате JSON и извлекаются из двух основных источников данных:

  • Единый журнал аудита Microsoft 365;
  • Журналы входа и журналы аудита Microsoft Entra.

Эти два источника данных можно запрашивать из различных конечных точек:

* Office 365 Management API предназначен для анализа данных в реальном времени с помощью SIEM. DFIR-O365RC — это криминалистический инструмент, его цель не в мониторинге среды Microsoft 365 в реальном времени.

DFIR-O365RC будет получать данные:

  • из журналов Microsoft Entra с помощью Microsoft Graph PowerShell, поскольку производительность хорошая и он является обёрткой над Microsoft Graph REST API;
  • по умолчанию из Единого журнала аудита с помощью Exchange Online PowerShell: несмотря на низкую производительность, это пока единственный пригодный для использования вариант;
  • опционально из Единого журнала аудита с помощью Purview. Хранение составляет 180 дней, производительность хорошая, но функция всё ещё находится в бета-версии, и ошибки в бэкенде делают её пока непригодной для использования.

Если вы расследуете вредоносную активность в Microsoft 365, Search-O365 (из Exchange Online PowerShell) также извлечёт журнал аудита почтовых ящиков, хотя командлет Search-MailboxAuditLog объявлен устаревшим.

Если вы расследуете другие ресурсы Azure, с помощью DFIR-O365RC:

  • вы можете получить журнал действий Azure Monitor с помощью модуля PowerShell Az.Monitor, хранение — 90 дней. Этот журнал фокусируется на действиях в Azure Resource Manager (связанных с подпиской Azure);
  • вы можете получить журнал аудита Azure DevOps с помощью REST API Azure DevOps Services, хранение — 90 дней. Этот журнал фокусируется на действиях в Azure DevOps (связанных с организацией Azure DevOps).

Установка и предварительные требования

Использование Docker

Это рекомендуемый способ использования DFIR-O365RC

Просто введите:```bash sudo docker pull anssi/dfir-o365rc:latest sudo docker run --rm -v .:/mnt/host -it anssi/dfir-o365rc:latest

root@kitploit:~
DFIR-O365RC готов к использованию:```bash
PowerShell 7.4.2
DFIR-O365RC: PowerShell module for Microsoft 365 and Entra ID log collection
https://github.com/ANSSI-FR/DFIR-O365RC
PS /mnt/host/output>

Если вы хотите вручную собрать образ Docker, клонируйте репозиторий и используйте docker compose (или устаревший docker-compose) для сборки образа, запуска контейнера и монтирования тома (в папку output/):```bash sudo docker compose build dfir-o365rc sudo docker compose run dfir-o365rc

using legacy Compose V1

sudo docker-compose run dfir-o365rc

root@kitploit:~
### Использование PowerShell

Вы можете установить модуль в *PowerShell Desktop* и *PowerShell Core*.

Обратите внимание, что командлет `Connect-ExchangeOnline` [требует Microsoft .NET Framework 4.7.2 или более позднюю версию](https://learn.microsoft.com/en-us/powershell/exchange/exchange-online-powershell-v2?view=exchange-ps#windows).

Для установки модуля из коллекции PowerShell:```powershell
Install-Module -Name DFIR-O365RC

Вы также можете установить модуль вручную, клонировав репозиторий DFIR-O365RC, установив необходимые зависимости (проверьте DFIR-O365RC.psd1) и добавив каталог DFIR-O365RC в один из путей модулей PowerShell.

Управление приложением DFIR-O365RC

Создание приложения

После импорта модуля вам потребуется создать приложение Entra, которое будет обрабатывать процесс сбора журналов.

Для этого:

  1. Создайте самозаверяющий сертификат и получите его открытую часть в формате base64:

    В Linux, используя PowerShell Core или контейнер Docker: ```bash openssl req -new -x509 -newkey rsa:2048 -sha256 -days 365 -nodes -out exampleDFIRO365RC.crt -keyout exampleDFIRO365RC.key -batch openssl pkcs12 -inkey exampleDFIRO365RC.key -in exampleDFIRO365RC.crt -export -out exampleDFIRO365RC.pfx # Enter a password for the certificate openssl x509 -in exampleDFIRO365RC.crt -outform DER -out - | base64 | tr -d "\n"

    root@kitploit:~

В Windows, используя PowerShell: ```powershell $certificate = New-SelfSignedCertificate -Subject "CN=exampleDFIRO365RC" -KeySpec KeyExchange -NotBefore (Get-Date) -NotAfter (Get-Date).AddDays(365) $certificatePassword = Read-Host -MaskInput "Please enter a password for the certificate" $certificateSecurePassword = ConvertTo-SecureString -String $certificatePassword -AsPlainText -Force Export-PfxCertificate -Cert $certificate -FilePath exampleDFIRO365RC.pfx -Password $certificateSecurePassword Write-Host ([System.Convert]::ToBase64String($certificate.GetRawCertData()))

root@kitploit:~
2) Используйте командлет `New-Application` из модуля DFIR-O365RC:   ```powershell
$certificateb64="<base64-encoded public part from step 1>"
New-Application -certificateb64 $certificateb64

Опционально, если вы хотите иметь возможность собирать логи в подписках тенанта (не нужно, если вы не планируете использовать Get-AzRMActivityLogs): ```powershell New-Application -certificateb64 $certificateb64 -subscriptions

root@kitploit:~
Опционально, если вы хотите иметь возможность собирать журналы в организациях Azure DevOps вашего арендатора (это может занять много времени и не требуется, если вы не планируете использовать `Get-AzDevOpsActivityLogs`):   ```powershell
New-Application -certificateb64 $certificateb64 -organizations

Чтобы создать приложение, вам потребуется несколько раз войти в Azure, используя учетную запись с высокими привилегиями.

Как только приложение будет создано, вы получите вывод, похожий на: ```powershell Done creating the application with the required permissions Please use the following identifiers: WARNING: AppID: xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx WARNING: Tenant: example.onmicrosoft.com

root@kitploit:~
### Обновление приложения

После создания приложения вы всё ещё можете, используя командлет `Update-Application` из модуля, обновить его учётные данные и разрешения:

- Вы можете добавить новый сертификат в приложение:

`Update-Application -certificateb64 <base64-encoded public part>`

- Вы можете указать новые подписки, в которых вы хотели бы собирать журналы:

`Update-Application -subscriptions`

- Вы можете указать новые организации Azure DevOps, в которых вы хотели бы собирать журналы:

`Update-Application -organizations`

- Вы можете обновить разрешения приложения, что особенно полезно, если у вас есть старое приложение, а разрешения были обновлены с момента его создания:

`Update-Application -permissions`

### Удаление приложения

После завершения сбора журналов вы можете удалить приложение с помощью командлета `Remove-Application` из модуля.

Чтобы удалить приложение, вам потребуется несколько раз войти в Azure, используя **привилегированную** учётную запись.

Если приложение собирало журналы подписок или организаций Azure DevOps, вам нужно добавить переключатели `-organizations` и/или `-subscriptions`.



## Требования к разрешениям и лицензиям

⚠️

Начиная с версии 2.0.0, инструмент работает в контексте субъекта-службы с [доступом только для приложений / разрешениями приложения](https://learn.microsoft.com/en-us/entra/identity-platform/permissions-consent-overview#app-only-access-access-without-a-user). 

Для использования версии 2.0.0 и выше вам потребуется [создать приложение](#creating-the-application).

После создания приложения скрипт будет запускаться с использованием учётных данных и разрешений приложения.

⚠️

Приложение будет создано с минимально возможным набором требуемых разрешений:

- `Exchange.ManageAsApp` для API `Office 365 Exchange Online` (необходимо для выполнения командлетов Exchange Online PowerShell)
- `AuditLog.Read.All` для API `Microsoft Graph` (необходимо для сбора журналов Microsoft Entra)
- `AuditLogsQuery.Read.All` для API `Microsoft Graph` (необходимо для сбора единого журнала аудита с помощью Purview)
- `Application.Read.All` и `DelegatedPermissionGrant.Read.All` для API `Microsoft Graph` (необходимо для обогащения журналов Microsoft Entra, связанных с приложениями и субъектами-службами)
- `Device.Read.All` для API `Microsoft Graph` (необходимо для обогащения журналов Microsoft Entra, связанных с устройствами)
- `User.Read.All` для API `Microsoft Graph` (необходимо для получения информации о пользователях)
- `UserAuthenticationMethod.Read.All` для API `Microsoft Graph` (необходимо для получения информации о методах аутентификации пользователей)
- `Organization.Read.All` для API `Microsoft Graph` (необходимо для получения общей информации о клиенте)
- `View-only audit logs` в `Exchange Online` (необходимо для использования командлета `Search-UnifiedAuditLog`)

Опционально (при использовании переключателя `-subscriptions`):

- Для выбранного набора подписок: роль `Reader` на `Microsoft.Insights/eventtypes/*` (необходимо для получения журнала действий Azure Monitor)

Опционально (при использовании переключателя `-organizations`):

- Для выбранного набора подписок Azure DevOps: `View audit log` (необходимо для получения журнала аудита Azure DevOps)



Для получения журналов Microsoft Entra с помощью API Microsoft Graph требуется хотя бы один пользователь с лицензией [Microsoft Entra ID P1](https://www.microsoft.com/en-us/security/business/microsoft-entra-pricing). Эта лицензия может быть приобретена для одного пользователя или может входить в некоторые планы лицензирования, такие как *Microsoft 365 Business Premium*.



## Функции, включенные в модуль

Модуль содержит 10 функций:

| **Функция**  | **Источник данных**  | Хранение | **Производительность**  |  **Полнота** | **Подробности** |
|---|---|---|---|---|---|
| `Get-O365Full` | Единый журнал аудита | 90 дней / 180 дней* |  Низкая | Весь единый журнал аудита | По умолчанию извлекает весь единый журнал аудита. Следует использовать только для небольшого клиента или за короткий период времени.<br />Вы также можете использовать этот командлет для сбора событий по определённым [типам записей](https://learn.microsoft.com/en-us/office/office-365-management-api/office-365-management-activity-api-schema#enum-auditlogrecordtype---type-edmint32). |
| `Get-O365Light` | Единый журнал аудита | 90 дней / 180 дней* |  Хорошая | Только подмножество единого журнала аудита | Извлекаются только те *операции*, которые считаются интересными. |
| `Get-O365Defender` | Единый журнал аудита | 90 дней / 180 дней* |  Хорошая | Только подмножество единого журнала аудита | Извлекает события, связанные с Microsoft Defender для Microsoft 365. Требуется хотя бы одна лицензия [Office 365 E5](https://www.microsoft.com/en-us/microsoft-365/enterprise/office-365-e5?activetab=pivot:overviewtab) или план лицензирования, включающий Microsoft Defender для Office 365. |
| `Get-AADLogs` | Журналы Microsoft Entra | 30 дней |  Хорошая | Все журналы Microsoft Entra | Получение информации о клиенте и всех журналов Microsoft Entra: журналы входа и аудита. |
| `Get-AADApps` | Н/Д | Н/Д |  Хорошая | Полная | Субъекты-службы Microsoft Entra ID и их приложения, oauth2PermissionGrants и appRoleAssignments |
| `Get-AADDevices` | Н/Д | Н/Д |  Хорошая | Полная | Устройства Microsoft Entra ID и их владельцы/пользователи |
| `Get-AADUsers` | Н/Д | Н/Д |  Хорошая | Полная | Пользователи Microsoft Entra ID и их методы аутентификации |
| `Search-O365` | Единый журнал аудита / Журнал аудита почтовых ящиков** | 90 дней / 180 дней* | Низкая | Только подмножество единого журнала аудита | Поиск активности, связанной с определёнными пользователями, IP-адресами или произвольным текстом. |
| `Get-AzRMActivityLogs` | Журнал действий Azure Monitor | 90 дней |  Хорошая | Весь журнал действий Azure Monitor | Получение всего журнала действий Azure Monitor для выбранного набора подписок. |
| `Get-AzDevOpsActivityLogs` | Журнал аудита Azure DevOps | 90 дней |  Хорошая | Весь журнал аудита Azure DevOps | Получение всего журнала аудита Azure DevOps для выбранного набора организаций Azure DevOps. |

\* Вы можете получить 180 дней хранения с помощью Purview, по сравнению с 90 днями по умолчанию при использовании Exchange Online.

** При поиске пользователей командлет `Search-O365` также будет искать в журнале аудита почтовых ящиков.



Каждая функция имеет справку на основе комментариев, которую можно вызвать с помощью командлета *Get-Help*.```powershell
# Display comment-based help
PS> Get-Help Get-O365Full
# Display comment-based help with examples
PS> Get-Help Get-O365Full -Examples

Каждая функция принимает в качестве параметра:

  • дату начала (-startDate);
  • дату окончания (-endDate);
  • идентификатор приложения (-appId), который получается при создании приложения;
  • имя арендатора (-tenant);
  • путь к сертификату в формате PFX (-certificatePath), который получается при создании приложения.

Примеры:

Для удобства чтения предположим, что:```powershell $appId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" $tenant = "example.onmicrosoft.com" $certificatePath = "./example.pfx"

root@kitploit:~
В реальном случае эти параметры собираются при [создании приложения](#creating-the-application).



Чтобы получить журналы Microsoft Entra за последние 30 дней, а также общую информацию о клиенте:```powershell
$endDate = Get-Date
$startDate = $endDate.AddDays(-30)
Get-AADLogs -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath

Получить субъекты-службы Microsoft Entra и их приложение, oauth2PermissionGrant и appRoleAssignment:```powershell $endDate = Get-Date $startDate = $endDate.AddDays(-30) Get-AADApps --appId $appId -tenant $tenant -certificatePath $certificatePath

root@kitploit:~
Получить устройства Microsoft Entra и их владельцев и пользователей:```powershell
$endDate = Get-Date
$startDate = $endDate.AddDays(-30)
Get-AADDevices -appId $appId -tenant $tenant -certificatePath $certificatePath

Получить пользователей Microsoft Entra и настройки их методов аутентификации:```powershell Get-AADUsers -appId $appId -tenant $tenant -certificatePath $certificatePath -authenticationMethods

root@kitploit:~
Извлеките события журнала Unified Audit, считающиеся интересными, за последние 30 дней, за исключением тех, что связаны с Entra ID, которые уже были получены первой командой:```powershell
$endDate = Get-Date
$startDate = $endDate.AddDays(-30)
Get-O365Light -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -operationsSet "allButAzureAD"

Извлечь Unified Audit log events, считающиеся интересными, в временном окне от -90 дней до -30 дней от текущего момента:```powershell $endDate = (Get-Date).AddDays(-30) $startDate = (Get-Date).AddDays(-90) Get-O365Light -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath

root@kitploit:~
Если аудит почтового ящика включен, вы также можете получить операции `MailboxLogin`, используя соответствующий параметр:

_Остерегайтесь глобального лимита в 50.000 событий на один поиск_```powershell
Get-O365Light -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -mailboxLogin

Если в клиенте есть пользователи с лицензией Office 365 E5 или план Microsoft Defender для Office 365, вы можете получить журналы, связанные с Microsoft Defender, за последние 90 дней:```powershell $endDate = Get-Date $startDate = $endDate.AddDays(-90) Get-O365Defender -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath

root@kitploit:~
Чтобы получить все события Unified Audit Log между кануном Рождества 2020 и Днём подарков 2020: 

_Имейте в виду, что производительность при использовании этого cmdlet низкая_```powershell
$endDate = Get-Date "12/26/2020"
$startdate = Get-Date "12/24/2020"
Get-O365Full -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath

Вы можете использовать функцию поиска для поиска IP-адресов, действий, связанных с конкретными пользователями, или выполнить поиск по произвольному тексту в Unified Audit Log:```powershell $endDate = Get-Date $startDate = $endDate.AddDays(-90)

Retrieve events which contains the "Python" or "Python3" free text

Search-O365 -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -freeTexts "Python","Python3"

Retrieve events related to the IP adresses 8.8.8.8 and 4.4.4.4.

Search-O365 -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -IPAddresses "8.8.8.8","4.4.4.4"

Retrieve events related to users [email protected] and [email protected]

Search-O365 -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -userIds "[email protected]","[email protected]"

root@kitploit:~
При поиске конкретных **пользователей**, `Search-O365` также будет искать в журнале аудита почтовых ящиков. Это связано с тем, что в зависимости от уровня лицензии и настроек пользователя некоторые журналы почтовых ящиков могут отсутствовать в едином журнале аудита.




Чтобы получить все журналы активности Azure Resource Manager из подписок, к которым у приложения есть доступ:```powershell
$endDate = Get-Date
$startDate = $endDate.AddDays(-90)
Get-AzRMActivityLogs -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath

Чтобы получить все журналы активности Azure DevOps из организаций, к которым у приложения есть доступ:```powershell $endDate = Get-Date $startDate = $endDate.AddDays(-90) Get-AzDevOpsActivityLogs -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath

root@kitploit:~
## Сгенерированные файлы

Все сгенерированные файлы имеют формат JSON.

_Запуск нескольких командлетов, использующих Purview и записывающих в один и тот же выходной файл, может привести к некорректному JSON из-за «наивной» конкатенации_

- `Get-AADApps` создаст в папке `azure_ad_apps`:
  - JSON-файл, содержащий существующие и удаленные приложения: `AADApps_example.onmicrosoft.com_applications_raw.json`;
  - JSON-файл, содержащий существующие и удаленные субъекты-службы: `AADApps_example.onmicrosoft.com_service_principals_raw.json`;
  - JSON-файл, содержащий обогащенные субъекты-службы: `AADApps_example.onmicrosoft.com.json`.

- `Get-AADDevices` создаст в папке `azure_ad_devices`:
  - JSON-файл, содержащий существующие и удаленные устройства: `AADDevices_example.onmicrosoft.com_devices_raw.json`;
  - JSON-файл, содержащий обогащенные устройства: `AADDevices_example.onmicrosoft.com.json`.

- `Get-AADUsers` создаст в папке `azure_ad_users`:
  - JSON-файл, содержащий существующих и удаленных пользователей: `AADUsers_example.onmicrosoft.com_users_raw.json`;
  - JSON-файл, содержащий настройки аутентификации пользователей: `AADUsers_example.onmicrosoft.com_users_settings_raw.json`;
  - JSON-файл, содержащий обогащенных пользователей: `AADUsers_example.onmicrosoft.com.json`.

- `Get-AADLogs` создаст:
  - в папке `azure_ad_tenant`:
    - JSON-файл, содержащий общую информацию о клиенте: `AADTenant_example.onmicrosoft.com.json`.

  - в папке `azure_ad_audit`:
    - JSON-файлы, содержащие журналы аудита Microsoft Entra: `AADAuditLog_example.onmicrosoft.com_YYYY-MM-DD.json`.

  - в папке `azure_ad_signin`:
    - JSON-файлы, содержащие журналы входа Microsoft Entra: `YYYY-MM-DD/AADSigninLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json`.

- `Get-AzRMActivityLogs` создаст:
  - в папке `azure_rm_subscriptions`:
    - JSON-файл, содержащий общую информацию о подписках: `AzRMsubscriptions_example.onmicrosoft.com.json`.

  - в папке `azure_rm_activity`:
    - JSON-файлы, содержащие журналы действий Azure Monitor: `YYYY-MM-DD/AzRM_example.onmicrosoft.com_%SubscriptionID%_YYYY-MM-DD_HH-00-00.json`.

- `Get-AzDevOpsActivityLogs` создаст:
  - в папке `azure_DevOps_orgs`:
    - JSON-файл, содержащий общую информацию об организациях Azure DevOps: `AzdevopsOrgs_example.onmicrosoft.com.json`.

  - в папке `azure_DevOps_activity`:
    - JSON-файлы, содержащие журналы аудита Azure DevOps: `YYYY-MM-DD/AzDevOps_example.onmicrosoft.com_%AzureDevOpsOrg%_YYYY-MM-DD_HH-00-00.json`.

- `Get-O365Full` создаст в папке `O365_unified_audit_logs` (соответственно `O365_unified_audit_logs_purview` при использовании Purview):
  - JSON-файлы, содержащие журналы унифицированного аудита: `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json` (соответственно `*/UnifiedAuditLogPurview_*` при использовании Purview);
  - JSON-файлы, содержащие журналы унифицированного аудита для указанных [типов записей](https://learn.microsoft.com/en-us/office/office-365-management-api/office-365-management-activity-api-schema#enum-auditlogrecordtype---type-edmint32): `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_%RecordType%.json` (соответственно `*/UnifiedAuditLogPurview_*` при использовании Purview).

- `Get-O365Light` создаст в папке `O365_unified_audit_logs` (соответственно `O365_unified_audit_logs_purview` при использовании Purview):
  - JSON-файлы, содержащие журналы унифицированного аудита для подмножества *операций*, представляющих интерес: `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json` (соответственно `*/UnifiedAuditLogPurview_*` при использовании Purview).
- `Get-O365Defender` создаст в папке `O365_unified_audit_logs` (соответственно `O365_unified_audit_logs_purview` при использовании Purview):
  - JSON-файлы, содержащие журналы унифицированного аудита для [типов записей](https://learn.microsoft.com/en-us/office/office-365-management-api/office-365-management-activity-api-schema#enum-auditlogrecordtype---type-edmint32), связанных с Defender: `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_%RecordType%.json` (соответственно `*/UnifiedAuditLogPurview_*` при использовании Purview).
- `Search-O365` создаст:
  - в папке `O365_unified_audit_logs` (соответственно `O365_unified_audit_logs_purview` при использовании Purview):
    - JSON-файлы, содержащие журналы унифицированного аудита для указанного `RequestType` (`FreeText`, `IPAddresses` или `UserIds`): `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_%RequestType%_YYYY-MM-DD-HH-MM-SS.json` (соответственно `*/UnifiedAuditLogPurview_*` при использовании Purview). `YYYY-MM-DD-HH-MM-SS` представляет время, когда был выполнен сбор. При поиске по `FreeText` в конце добавляется дополнительный `_%i`, который указывает, что это результат поиска по `%i`-му свободному тексту.

  - в папке `Exchange_mailbox_audit_logs`:
    - JSON-файлы, содержащие журналы аудита почтовых ящиков (только при поиске по UserIDs): `YYYY-MM-DD/MailboxAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_UserIds_YYYY-MM-DD-HH-MM-SS_%UserID%.json`. `YYYY-MM-DD-HH-MM-SS` представляет время, когда был выполнен сбор. `%UserID%` указывает, что это результат поиска по этому UserID.




Запуск различных функций приведет к созданию структуры каталогов, подобной этой:```
output
│   Get-AADApps.log
│   Get-AADDevices.log
│   Get-AADLogs.log
│   Get-AzDevOpsActivityLogs.log
│   Get-AzRMActivityLogs.log
│   Get-O365Defender.log
│   Get-O365Full.log
│   Get-O365Light.log
│   Search-O365.log
│
├───azure_ad_apps
│       AADApps_example.onmicrosoft.com.json
│       AADApps_example.onmicrosoft.com_applications_raw.json
│       AADApps_example.onmicrosoft.com_service_principals_raw.json
│
├───azure_ad_audit
│       AADAuditLog_example.onmicrosoft.com_YYYY-MM-DD.json
│       [...]
│
├───azure_ad_devices
│       AADDevices_example.onmicrosoft.com.json
│       AADDevices_example.onmicrosoft.com_devices_raw.json
│
├───azure_ad_signin
│   ├───YYYY-MM-DD
│   │       AADSigninLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json
│   │       [...]
│   │
│   ├───[...]
│
├───azure_ad_tenant
│       AADTenant_example.onmicrosoft.com.json
│
├───azure_ad_users
│       AADUsers_divreponse.onmicrosoft.com.json
│       AADUsers_divreponse.onmicrosoft.com_users_raw.json
│       AADUsers_divreponse.onmicrosoft.com_users_settings_raw.json
|
├───azure_DevOps_activity
│   ├───YYYY-MM-DD
│   │       AzDevOps_example.onmicrosoft.com_%AzureDevOpsOrg%_YYYY-MM-DD_HH-00-00.json
│   │       [...]
│   │
│   ├───[...]
│
├───azure_DevOps_orgs
│       AzdevopsOrgs_example.onmicrosoft.com.json
├───azure_rm_activity
│   ├───YYYY-MM-DD
│   │       AzRM_example.onmicrosoft.com_%SubscriptionID%_YYYY-MM-DD_HH-00-00.json
│   │       [...]
│   │
│   ├───[...]
│
├───azure_rm_subscriptions
│       AzRMsubscriptions_example.onmicrosoft.com.json
│
├───Exchange_mailbox_audit_logs
│   └───YYYY-MM-DD
│   │       MailboxAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_UserIds_YYYY-MM-DD-HH-MM-SS_%UserID%.json
│   │       [...]
│   │
│   ├───[...]
│
├───O365_unified_audit_logs
│   ├───YYYY-MM-DD
│   │       UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json
│   │       UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_%RecordType%.json
│   │       UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_UserIds_YYYY-MM-DD-HH-MM-SS.json
│   │       UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_IPAddresses_YYYY-MM-DD-HH-MM-SS.json
│   │       UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_FreeText_YYYY-MM-DD-HH-MM-SS_%i.json
│   │       [...]
│   │
│   ├───[...]
│
└───O365_unified_audit_logs_purview
│   ├───YYYY-MM-DD
│   │       UnifiedAuditLogPurview_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json
│   │       UnifiedAuditLogPurview_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_%RecordType%.json
│   │       UnifiedAuditLogPurview_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_UserIds_YYYY-MM-DD-HH-MM-SS.json
│   │       UnifiedAuditLogPurview_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_IPAddresses_YYYY-MM-DD-HH-MM-SS.json
│   │       UnifiedAuditLogPurview_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_FreeText_YYYY-MM-DD-HH-MM-SS_%i.json
│   │       [...]
│   │
│   ├───[...]
Скачать инструмент
Источник данных / Конечная точкаХранениеПроизводительностьОхват
Единый журнал аудита / Exchange Online PowerShell90 днейНизкаяВсе журналы Microsoft 365 (включая Entra)
Единый журнал аудита / Purview180 днейХорошаяВсе журналы Microsoft 365 (включая Entra)
Единый журнал аудита / Office 365 Management API *7 днейХорошаяВсе журналы Microsoft 365 (включая Entra)
Журналы Microsoft Entra / Microsoft Graph PowerShell30 днейХорошаяТолько журналы входа и аудита Entra
Журналы Microsoft Entra / Microsoft Graph REST API30 днейХорошаяТолько журналы входа и аудита Entra