Sdílet prostřednictvím


Prozkoumání podezřelého zařízení IoT

Výstrahy služby Defender for IoT poskytují jasné informace o tom, že zařízení IoT mají podezření na zapojení do podezřelých aktivit nebo když existují informace o ohrožení zařízení.

V této příručce využijte návrhy šetření, které vám pomůžou určit potenciální rizika pro vaši organizaci, rozhodnout se, jak napravit, a zjistit nejlepší způsoby, jak zabránit podobným útokům v budoucnu.

  • Vyhledání dat zařízení
  • Zkoumání pomocí dotazů KQL

Jak můžu získat přístup k datům?

Defender for IoT ve výchozím nastavení ukládá výstrahy zabezpečení a doporučení do pracovního prostoru služby Log Analytics. Můžete se také rozhodnout ukládat nezpracovaná data zabezpečení.

Vyhledání pracovního prostoru služby Log Analytics pro úložiště dat:

  1. Otevřete centrum IoT.
  2. V části Zabezpečení vyberte Nastavení a pak vyberte Shromažďování dat.
  3. Změňte podrobnosti konfigurace pracovního prostoru služby Log Analytics.
  4. Zvolte Uložit.

Pokud chcete získat přístup k datům uloženým v pracovním prostoru služby Log Analytics, postupujte následovně:

  1. Ve službě IoT Hub vyberte a vyberte výstrahu Defenderu pro IoT.
  2. Vyberte Další šetření.
  3. Vyberte , která zařízení mají toto upozornění, klikněte sem a zobrazte sloupec DeviceId.

Postup šetření pro podezřelá zařízení IoT

Pokud chcete zobrazit přehledy a nezpracovaná data o vašich zařízeních IoT, přejděte do pracovního prostoru služby Log Analytics a získejte přístup k datům.

Pokud chcete začít zkoumat výstrahy a aktivity na vašem zařízení, podívejte se na následující ukázkové dotazy KQL.

Další výstrahy se aktivovaly přibližně ve stejnou dobu pomocí následujícího dotazu 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

Uživatelé s přístupem

Pokud chcete zjistit, kteří uživatelé mají k tomuto zařízení přístup, použijte následující dotaz 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

Tato data použijte ke zjištění:

  • Kteří uživatelé mají k zařízení přístup?
  • Mají uživatelé s přístupem očekávané úrovně oprávnění?

Otevřené porty

Pokud chcete zjistit, které porty v zařízení se aktuálně používají nebo byly použity, použijte následující dotaz 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

Tato data použijte ke zjištění:

  • Které naslouchací sokety jsou aktuálně v zařízení aktivní?
  • Mají být povoleny naslouchací sokety, které jsou aktuálně aktivní?
  • Jsou k zařízení připojené nějaké podezřelé vzdálené adresy?

Přihlášení uživatele

Pokud chcete najít uživatele, kteří se k zařízení přihlásili, použijte následující dotaz 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

Pomocí výsledků dotazu můžete zjistit:

  • Kteří uživatelé se přihlásili k zařízení?
  • Mají se přihlásit uživatelé, kteří se přihlásili?
  • Přihlásili se uživatelé, kteří se přihlásili z očekávaných nebo neočekávaných IP adres?

Seznam procesů

Pokud chcete zjistit, jestli je seznam procesů očekávaný, použijte následující dotaz 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

Pomocí výsledků dotazu můžete zjistit:

  • Byly na zařízení spuštěné nějaké podezřelé procesy?
  • Byly procesy spouštěné příslušnými uživateli?
  • Obsahovala některá spuštění příkazového řádku správné a očekávané argumenty?

Další kroky

Po prozkoumání zařízení a získání lepšího porozumění rizikům můžete zvážit konfiguraci vlastních upozornění , abyste zlepšili stav zabezpečení řešení IoT. Pokud ještě agenta zařízení nemáte, zvažte nasazení agenta zabezpečení nebo změnu konfigurace stávajícího agenta zařízení, aby se zlepšily výsledky.