
Сценарий PowerShell, который автоматизирует оценку безопасности сред Microsoft 365.

Повысить уровень безопасности Microsoft 365, создав PowerShell-скрипт, автоматизирующий оценку безопасности сред Microsoft 365.
Soteria Inspect родился из проекта 365Inspect и является SaaS-решением компании Soteria для оценки безопасности арендатора Microsoft 365, включающим более 200 точек проверки во всем наборе сервисов Microsoft 365.
Soteria Inspect для Microsoft 365 позволяет клиентам отслеживать изменения затронутых объектов по каждому результату с течением времени, а также усилия по устранению, и теперь включает поддержку мультиарендности для MSP и родительских организаций, чтобы держать руку на пульсе своих дочерних арендаторов.
Soteria Inspect для Microsoft 365 доступен напрямую через Soteria или через Azure Marketplace
Смотрите все наши предложения Soteria Inspect для Microsoft 365

365Inspect Community Edition требует административные модули PowerShell для управления Exchange, Microsoft Graph, Microsoft Teams и модуль администрирования SharePoint.
365Inspect теперь совместим с PowerShell Core (6+) и требует операционной системы Microsoft Windows из-за зависимостей от необходимых модулей.
PowerShell-скрипт 365Inspect.ps1 проверяет установленные модули и минимальные версии модулей, необходимые для работы инспекторов.
Если у вас не установлены эти модули, вам будет предложено установить их, и с вашего согласия скрипт попытается выполнить установку. В противном случае вы можете установить их с помощью следующих команд в командной строке PowerShell с правами администратора или следуя инструкциям по ссылкам ниже:
Install-Module -Name ExchangeOnlineManagement -AllowClobber -Force
Install-Module -Name PnP.PowerShell -AllowClobber -Force
Install-Module -Name Microsoft.Graph -AllowClobber -Force
Install-Module -Name MicrosoftTeams -AllowClobber -Force
Установка Exchange Online PowerShell
Установка модуля SharePoint PnP PowerShell
После установки вышеперечисленного загрузите папку с исходным кодом 365Inspect из Github с помощью браузера или с помощью git clone.
С 9 сентября 2024 года PnP.PowerShell требует, чтобы администраторы арендаторов регистрировали собственное приложение для использования с SharePoint/PnP службой. Смотрите следующую документацию PnP.PowerShell для необходимых шагов. Регистрация приложения Entra ID для использования с PnP PowerShell Определение разрешений Аутентификация
ПРИМЕЧАНИЕ: Если вы используете PowerShell 5.1, PnP PowerShell больше не совместим, и все инспекторы SharePoint будут исключены во время выполнения.
Существует команда, которую можно запустить для автоматизации этого шага.```powershell Register-PnPEntraIDAppForInteractiveLogin -ApplicationName "PnP Rocks" -Tenant [yourtenant].onmicrosoft.com -Interactive
__Запомните название или Application/Client ID созданного приложения. Теперь это требуется для аутентификации, и вам будет предложено ввести AppID!__
# Совместимость модулей
В настоящее время модули Microsoft.Graph и Microsoft.Graph.Beta версий 2.23.0 несовместимы с ExchangeOnlineManagement версии 3.5.1
Следующие версии совместимы:
- Microsoft.Graph version 2.21.1
- Microsoft.Graph.Beta version 2.21.1
- ExchangeOnlineManagement version 3.5.0
Для установки совместимых версий можно использовать следующие команды:```powershell
Install-Module -Name Microsoft.Graph -Scope CurrentUser -RequiredVersion 2.21.1 -AllowClobber -Force
Install-Module -Name Microsoft.Graph.Beta -Scope CurrentUser -RequiredVersion 2.21.1 -AllowClobber -Force
Install-Module -Name ExchangeOnlineManagement -Scope CurrentUser -RequiredVersion 3.5.0 -AllowClobber -Force
Поскольку вы будете запускать 365Inspect с правами администратора, вам следует разместить его в логичном месте и убедиться, что содержимое папки доступно для чтения и записи только административному пользователю. Это особенно важно, если вы планируете установить 365Inspect в место, где он будет часто выполняться или использоваться как часть автоматизированного процесса. ПРИМЕЧАНИЕ: Для работы 365Inspect не требуется запускать его в окне PowerShell с правами администратора.
Чтобы запустить 365Inspect, откройте консоль PowerShell и перейдите в папку, в которую вы загрузили 365Inspect:
cd 365Inspect
Вы будете взаимодействовать с 365Inspect, выполняя главный файл сценария 365Inspect.ps1 из командной строки PowerShell.
Все, что требуется 365Inspect для проверки вашего клиента M365 — это доступ через учетную запись M365 с соответствующими разрешениями, поэтому большинство параметров командной строки относятся к оцениваемой организации и методу аутентификации.
Выполнение 365Inspect выглядит следующим образом:
.\365Inspect.ps1 -OutPath <value> -UserPrincipalName [email protected] -Auth <MFA|DEVICE|ALREADY_AUTHED|APP> -pnpPowerShellApplicationId <Your Pnp PowerShell Application/Client ID>
Например, для входа с вводом учетных данных в браузере с поддержкой MFA:
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth MFA
Для входа в государственное или другое национальное облачное развертывание (Китай, Германия и т.д.) необходимо указать параметр -Environment следующим образом:
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth MFA -Environment USGovGCCHigh
Допустимые аргументы для -Environment:
Аутентификация приложения может быть выполнена при запуске сценария со следующими параметрами:
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth APP
Для входа в государственное или другое национальное облачное развертывание (Китай, Германия и т.д.) необходимо указать параметр -Environment следующим образом:
По мере выполнения 365Inspect будет постоянно выводить обновления состояния, указывающие, какая задача проверки выполняется.
365Inspect может выполняться некоторое время. Это время зависит от размера и сложности тестируемой среды. Например, некоторые задачи проверки включают сканирование конфигурации учетных записей всех пользователей. Это может произойти почти мгновенно для организации с 50 пользователями или может занять целые минуты (!) для организации с 10000 пользователями.
365Inspect создает каталог, указанный в параметре out_path. Этот каталог является результатом всей проверки 365Inspect. Он содержит четыре важных элемента:
Из-за характера некоторых возвращаемых элементов отчет CSV разделяется символом каретки (^). Рекомендуется открывать отчет CSV в текстовом редакторе, а не в Excel, так как Excel по умолчанию использует запятую (,) в качестве разделителя и отобразит отчет неправильно. После открытия в текстовом редакторе данные можно вставить в Excel.
Поддержка аутентификации устройства
Поддержка национальных облачных развертываний
365Inspect теперь поддерживает аутентификацию приложения
Формат HTML-отчета 365Inspect изменился



365Inspect не сможет работать должным образом, если учетная запись M365, с которой вы проходите аутентификацию, не имеет соответствующих привилегий. 365Inspect требует, как минимум, следующего:
Мы понимаем, что это чрезвычайно разрешительные роли, но, к сожалению, из-за использования Microsoft Graph, Microsoft ограничивает нас в использовании менее привилегированных ролей. Роли администратора приложений и облачных приложений (используемые для предоставления делегированных разрешений и разрешений приложений) не могут предоставлять разрешения для модулей PowerShell Microsoft Graph или Azure AD. Microsoft Docs — Администратор приложений
Если 365Inspect выполняется с использованием параметра аутентификации приложения, необходимо предоставить дополнительные роли, чтобы приложение могло выполнять все выполняемые задачи. См. Требования к аутентификации приложения
Перед использованием 365Inspect должны быть выполнены все прочие необходимые компоненты.
Для наиболее эффективного использования времени рекомендуется выполнять необходимые функции в следующем порядке:
Смотрите следующие ссылки:
365Inspect спроектирован так, чтобы его было легко расширять, в надежде, что это позволит отдельным лицам и организациям использовать свои собственные модули 365Inspect внутри компании или публиковать эти модули для сообщества M365.
Все модули инспекторов 365Inspect хранятся в папке .\inspectors.
Создать модуль инспектора просто. Инспекторы имеют два файла:
Шаблоны включены в папку Templates. Просто добавьте свой код и значения в соответствующие места. Имена файлов PowerShell и JSON должны быть идентичны, чтобы 365Inspect распознал, что они принадлежат друг другу. Встроенный набор модулей 365Inspect содержит множество примеров, но мы приведем и здесь.
# If some of the parsed M365 objects were found to have the security flaw this module is inspecting for,
# return a list of strings representing those objects. This is what will end up as the "Affected Objects"
# field in the report.
If ($safe_attachment_bypass_rules.Count -ne 0) {
return $safe_attachment_bypass_rules
}
# If none of the parsed M365 objects were found to have the security flaw this module is inspecting for,
# returning $null indicates to 365Inspect that there were no findings for this module.
return $null
}
return Inspect-BypassingSafeAttachments
</details>
<details>
<summary>Пример .json файла, BypassingSafeAttachments.json:</summary>```json
{
"FindingName": "Do Not Bypass the Safe Attachments Filter",
"Description": "In Exchange, it is possible to create mail transport rules that bypass the Safe Attachments detection capability. The rules listed above bypass the Safe Attachments capability. Consider reviewing these rules, as bypassing the Safe Attachments capability even for a subset of senders could be considered insecure depending on the context or may be an indicator of compromise.",
"Remediation": "Navigate to the Mail Flow → Rules screen in the Exchange Admin Center. Look for the offending rules and begin the process of assessing who created them and whether they are necessary to the continued function of the organization. If they are not, remove the rules.",
"DefaultValue": "None",
"ExpectedValue": "None",
"Impact": "Critical",
"AffectedObjects": "",
"Service": "Exchange", // Valid values are Exchange, SharePoint, Teams, Intune, AzureAD, SecurityandCompliance, Tenant //
"PowerShell": "", // Any PowerShell remediation command examples should be placed here //
"References": [
{
"Url": "https://docs.microsoft.com/en-us/exchange/security-and-compliance/mail-flow-rules/manage-mail-flow-rules",
"Text": "Manage Mail Flow Rules in Exchange Online"
},
{
"Url": "https://www.undocumented-features.com/2018/05/10/atp-safe-attachments-safe-links-and-anti-phishing-policies-or-all-the-policies-you-can-shake-a-stick-at/#Bypass_Safe_Attachments_Processing",
"Text": "Undocumented Features: Safe Attachments, Safe Links, and Anti-Phishing Policies"
}
]
}
Как только вы поместите эти два файла в папку .\inspectors, они будут считаться частью модульного реестра 365Inspect и запустятся при следующем выполнении 365Inspect.
Вы только что создали модуль Inspector BypassingSafeAttachments. Вот и всё!
365Inspect выдаст довольно громкую и уродливую ошибку, если что-то в вашем модуле не работает или не соответствует соглашениям 365Inspect, поэтому следите за выводом командной строки.
Мы приветствуем участие сообщества и вклад! Пожалуйста, ознакомьтесь с нашими Рекомендациями по участию
365Inspect — это сценарий-оболочка, который запускает другие модули-инспекторы, хранящиеся в папке .\inspectors. Как и в случае с любым другим сценарием, выполняемым с повышенными привилегиями, следует соблюдать определенные правила гигиены безопасности:
Soteria предлагает широкий спектр решений в области безопасности и консалтинга, включая реагирование на инциденты, управляемое обнаружение и реагирование, оценку безопасности, тестирование на проникновение и многое другое. Свяжитесь с нами для решения всех ваших потребностей!
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth APP -Environment USGovGCCHigh
Допустимые аргументы для -Environment:
ПРИМЕЧАНИЕ: Для выполнения 365Inspect с аутентификацией приложения есть предварительные требования. Перейти к требованиям аутентификации приложения
365Inspect теперь поддерживает вывод отчетов в форматах HTML (по умолчанию), CSV и XML.
Например, отчеты CSV можно создать, вызвав параметр -ReportType:
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth MFA -ReportType CSV
365Inspect можно запускать только с указанными модулями Inspector или, наоборот, исключая указанные модули.
Например, для входа с вводом учетных данных в браузере с поддержкой MFA:
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth MFA -SelectedInspectors inspector1, inspector2
или
.\365Inspect.ps1 -OutPath ..\365_report -Auth MFA -ExcludedInspectors inspector1, inspector2, inspector3
Чтобы более подробно разобрать параметры:
OutPath — путь к папке, в которой будет размещен отчет, созданный 365Inspect.
Auth — это селектор, который должен быть одним из буквальных значений «MFA» или «ALREADY_AUTHED».
SelectedInspectors — имя или имена инспекторов, которые вы хотите запустить с 365Inspect. Если выбрано несколько инспекторов, они должны быть разделены запятыми. Будут запущены только указанные инспекторы.
ExcludedInspectors — имя или имена инспекторов, которые вы хотите исключить из запуска с 365Inspect. Если выбрано несколько инспекторов, они должны быть разделены запятыми. Будут запущены все модули, кроме включенных.
UserPrincipalName — UserPrincipalName оценщика, это включено для уменьшения количества раз, когда вам нужно вводить учетные данные в поддерживаемых модулях.
ReportType — формат вывода создаваемого отчета. Поддерживаемые значения: HTML (по умолчанию), CSV и XML.
Environment — укажите экземпляр Azure Cloud для подключения к нестандартным/потребительским клиентам Microsoft 365.
При выполнении 365Inspect с параметром -Auth MFA могут появиться несколько графических запросов на вход, в которые необходимо последовательно войти. Это нормальное поведение, поскольку Exchange, SharePoint и т.д. имеют отдельные административные модули, и для каждого требуется отдельный сеанс входа. Если вы просто войдете в систему необходимое количество раз, 365Inspect должен начать выполнение. Это не весело, и мы ищем обходной путь, но, тем не менее, мы считаем, что результаты стоят минуты, потраченной на просмотр кодов MFA.