Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Оповещения службы Defender для Интернета вещей предоставляют четкие сведения о том, что устройства Интернета вещей подозреваются в участии в подозрительных действиях или при наличии признаков компрометации устройства.
В этом руководстве используйте предложения по расследованию, которые помогут определить потенциальные риски для вашей организации, решить, как исправить и найти лучшие способы предотвращения подобных атак в будущем.
- Поиск данных устройства
- Изучение запросов KQL
Как получить доступ к данным?
По умолчанию Defender для Интернета вещей хранит оповещения системы безопасности и рекомендации в рабочей области Log Analytics. Вы также можете сохранить необработанные данные безопасности.
Чтобы найти рабочую область Log Analytics для хранилища данных, выполните следующие действия.
- Откройте Центр Интернета вещей,
- В разделе "Безопасность" выберите "Параметры" и выберите " Сбор данных".
- Измените сведения о конфигурации рабочей области Log Analytics.
- Выберите Сохранить.
Чтобы получить доступ к данным, хранящимся в рабочей области Log Analytics, сделайте следующее:
- Выберите оповещение Defender в вашем Центре интеграции Интернета вещей.
- Выберите "Дополнительное исследование".
- Выберите "Чтобы просмотреть, какие устройства имеют это оповещение", щелкните здесь и просмотрите столбец DeviceId.
Действия по расследованию подозрительных устройств Интернета вещей
Чтобы просмотреть аналитические сведения и необработанные данные о устройствах Интернета вещей, перейдите в рабочую область Log Analytics для доступа к данным.
Ознакомьтесь с примерами запросов KQL ниже, чтобы приступить к изучению оповещений и действий на устройстве.
Связанные оповещения
Вы можете узнать, активируются ли другие оповещения примерно в то же время с помощью следующего запроса KQL:
let device = "YOUR_DEVICE_ID";
let hub = "YOUR_HUB_NAME";
SecurityAlert
| where ExtendedProperties contains device and ResourceId contains tolower(hub)
| project TimeGenerated, AlertName, AlertSeverity, Description, ExtendedProperties
Пользователи с доступом
Чтобы узнать, какие пользователи имеют доступ к этому устройству, используйте следующий запрос KQL:
let device = "YOUR_DEVICE_ID";
let hub = "YOUR_HUB_NAME";
SecurityIoTRawEvent
| where
DeviceId == device and AssociatedResourceId contains tolower(hub)
and RawEventName == "LocalUsers"
| project
TimestampLocal=extractjson("$.TimestampLocal", EventDetails, typeof(datetime)),
GroupNames=extractjson("$.GroupNames", EventDetails, typeof(string)),
UserName=extractjson("$.UserName", EventDetails, typeof(string))
| summarize FirstObserved=min(TimestampLocal) by GroupNames, UserName
Используйте эти данные для обнаружения:
- Какие пользователи имеют доступ к устройству?
- Имеют ли пользователи с доступом ожидаемые уровни разрешений?
Открытие портов
Чтобы узнать, какие порты в настоящее время используются или использовались, используйте следующий запрос KQL:
let device = "YOUR_DEVICE_ID";
let hub = "YOUR_HUB_NAME";
SecurityIoTRawEvent
| where
DeviceId == device and AssociatedResourceId contains tolower(hub)
and RawEventName == "ListeningPorts"
and extractjson("$.LocalPort", EventDetails, typeof(int)) <= 1024 // avoid short-lived TCP ports (Ephemeral)
| project
TimestampLocal=extractjson("$.TimestampLocal", EventDetails, typeof(datetime)),
Protocol=extractjson("$.Protocol", EventDetails, typeof(string)),
LocalAddress=extractjson("$.LocalAddress", EventDetails, typeof(string)),
LocalPort=extractjson("$.LocalPort", EventDetails, typeof(int)),
RemoteAddress=extractjson("$.RemoteAddress", EventDetails, typeof(string)),
RemotePort=extractjson("$.RemotePort", EventDetails, typeof(string))
| summarize MinObservedTime=min(TimestampLocal), MaxObservedTime=max(TimestampLocal), AllowedRemoteIPAddress=makeset(RemoteAddress), AllowedRemotePort=makeset(RemotePort) by Protocol, LocalPort
Используйте эти данные для обнаружения:
- Какие сокеты прослушивания сейчас активны на устройстве?
- Следует ли разрешить прослушивающие сокеты, которые в настоящее время активны?
- Есть ли подозрительные удаленные адреса, подключенные к устройству?
Входы пользователей
Чтобы найти пользователей, вошедшего в устройство, используйте следующий запрос KQL:
let device = "YOUR_DEVICE_ID";
let hub = "YOUR_HUB_NAME";
SecurityIoTRawEvent
| where
DeviceId == device and AssociatedResourceId contains tolower(hub)
and RawEventName == "Login"
// filter out local, invalid and failed logins
and EventDetails contains "RemoteAddress"
and EventDetails !contains '"RemoteAddress":"127.0.0.1"'
and EventDetails !contains '"UserName":"(invalid user)"'
and EventDetails !contains '"UserName":"(unknown user)"'
//and EventDetails !contains '"Result":"Fail"'
| project
TimestampLocal=extractjson("$.TimestampLocal", EventDetails, typeof(datetime)),
UserName=extractjson("$.UserName", EventDetails, typeof(string)),
LoginHandler=extractjson("$.Executable", EventDetails, typeof(string)),
RemoteAddress=extractjson("$.RemoteAddress", EventDetails, typeof(string)),
Result=extractjson("$.Result", EventDetails, typeof(string))
| summarize CntLoginAttempts=count(), MinObservedTime=min(TimestampLocal), MaxObservedTime=max(TimestampLocal), CntIPAddress=dcount(RemoteAddress), IPAddress=makeset(RemoteAddress) by UserName, Result, LoginHandler
Используйте результаты запроса для обнаружения:
- Какие пользователи вошли на устройство?
- Должны ли пользователи, которые уже вошли в систему, снова войти?
- Выполнили ли пользователи вход с ожидаемых или неожиданных IP-адресов?
Список процессов
Чтобы проверить, соответствует ли список процессов ожиданиям, используйте следующий запрос KQL:
let device = "YOUR_DEVICE_ID";
let hub = "YOUR_HUB_NAME";
SecurityIoTRawEvent
| where
DeviceId == device and AssociatedResourceId contains tolower(hub)
and RawEventName == "ProcessCreate"
| project
TimestampLocal=extractjson("$.TimestampLocal", EventDetails, typeof(datetime)),
Executable=extractjson("$.Executable", EventDetails, typeof(string)),
UserId=extractjson("$.UserId", EventDetails, typeof(string)),
CommandLine=extractjson("$.CommandLine", EventDetails, typeof(string))
| join kind=leftouter (
// user UserId details
SecurityIoTRawEvent
| where
DeviceId == device and AssociatedResourceId contains tolower(hub)
and RawEventName == "LocalUsers"
| project
UserId=extractjson("$.UserId", EventDetails, typeof(string)),
UserName=extractjson("$.UserName", EventDetails, typeof(string))
| distinct UserId, UserName
) on UserId
| extend UserIdName = strcat("Id:", UserId, ", Name:", UserName)
| summarize CntExecutions=count(), MinObservedTime=min(TimestampLocal), MaxObservedTime=max(TimestampLocal), ExecutingUsers=makeset(UserIdName), ExecutionCommandLines=makeset(CommandLine) by Executable
Используйте результаты запроса для обнаружения:
- Были ли подозрительные процессы, запущенные на устройстве?
- Выполнялись ли процессы соответствующими пользователями?
- Содержат ли какие-либо выполнения командной строки правильные и ожидаемые аргументы?
Дальнейшие шаги
После изучения устройства и получения лучшего понимания ваших рисков может потребоваться настроить пользовательские оповещения для улучшения состояния безопасности решения Интернета вещей. Если у вас еще нет агента устройства, рассмотрите возможность развертывания агента безопасности или изменения конфигурации существующего агента устройства для улучшения результатов.