Bagikan melalui


Menyelidiki perangkat IoT yang mencurigakan

Defender untuk peringatan layanan IoT memberikan indikasi yang jelas ketika perangkat IoT diduga terlibat dalam kegiatan yang mencurigakan atau ketika indikasi muncul bahwa perangkat telah disusupi.

Dalam panduan ini, gunakan saran investigasi yang diberikan untuk membantu menentukan potensi risiko bagi organisasi Anda, memutuskan cara memulihkan, dan menemukan cara terbaik untuk mencegah serangan yang serupa di masa depan.

  • Menemukan data perangkat Anda
  • Menyelidiki menggunakan kueri KQL

Bagaimana cara mengakses data saya?

Secara default, Defender for IoT menyimpan peringatan dan rekomendasi keamanan Anda di ruang kerja Log Analytics Anda. Anda juga dapat memilih untuk menyimpan data keamanan mentah Anda.

Untuk menemukan ruang kerja Log Analytics untuk penyimpanan data Anda:

  1. Buka IoT hub Anda,
  2. Di bawah Keamanan, pilih Pengaturan, lalu pilih Koleksi Data.
  3. Ubah detail konfigurasi ruang kerja Log Analytics Anda.
  4. Pilih Simpan.

Konfigurasi selanjutnya, lakukan hal berikut untuk mengakses data yang disimpan di ruang kerja Log Analytics Anda:

  1. Pilih dan pilih Defender untuk pemberitahuan IoT di IoT Hub Anda.
  2. Pilih Investigasi lebih lanjut.
  3. Pilih Untuk melihat perangkat mana yang memiliki pemberitahuan ini klik di sini dan melihat kolom DeviceId.

Langkah-langkah investigasi untuk perangkat IoT yang mencurigakan

Untuk melihat insight dan data mentah mengenai perangkat IoT Anda, buka ruang kerja Log Analytics untuk mengakses data Anda.

Lihat contoh kueri KQL di bawah ini untuk mulai menyelidiki peringatan dan aktivitas di perangkat Anda.

Anda dapat mencari tahu apakah peringatan lain dipicu sekitar waktu yang sama melalui kueri KQL berikut:

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

Pengguna dengan akses

Untuk mengetahui pengguna mana yang memiliki akses ke perangkat ini menggunakan kueri KQL berikut:

 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

Gunakan data ini untuk menemukan:

  • Pengguna mana yang memiliki akses ke perangkat?
  • Apakah pengguna dengan akses memiliki tingkat izin yang diharapkan?

Membuka port

Untuk mengetahui port mana pada perangkat yang sedang digunakan atau telah digunakan, gunakan kueri KQL berikut:

 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

Gunakan data ini untuk menemukan:

  • Soket pendengar mana yang sedang aktif pada perangkat?
  • Apakah soket pendengar yang sedang aktif diizinkan?
  • Apakah ada alamat jarak jauh yang mencurigakan yang terhubung ke perangkat?

Login pengguna

Untuk menemukan pengguna yang masuk ke perangkat, gunakan kueri KQL berikut:

 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

Gunakan hasil kueri untuk menemukan:

  • Pengguna mana yang masuk ke perangkat?
  • Apakah pengguna yang masuk, sudah sepantasnya masuk?
  • Apakah pengguna yang masuk terhubung dari alamat IP yang diharapkan atau tidak terduga?

Daftar proses

Untuk mengetahui apakah daftar proses memang seperti yang diharapkan, gunakan kueri KQL berikut:

 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

Gunakan hasil kueri untuk menemukan:

  • Apakah ada proses mencurigakan yang berjalan pada perangkat?
  • Apakah proses dijalankan oleh pengguna yang sesuai?
  • Apakah ada eksekusi baris perintah yang berisi argumen yang benar dan diharapkan?

Langkah berikutnya

Setelah menyelidiki perangkat, dan mendapatkan pemahaman yang lebih baik tentang risiko Anda, Anda mungkin ingin mempertimbangkan Mengonfigurasi peringatan khusus untuk meningkatkan postur keamanan solusi IoT Anda. Jika Anda belum memiliki agen perangkat, pertimbangkan Menerapkan agen keamanan atau mengubah konfigurasi agen perangkat yang ada untuk meningkatkan hasil Anda.