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:
- Buka IoT hub Anda,
- Di bawah Keamanan, pilih Pengaturan, lalu pilih Koleksi Data.
- Ubah detail konfigurasi ruang kerja Log Analytics Anda.
- Pilih Simpan.
Konfigurasi selanjutnya, lakukan hal berikut untuk mengakses data yang disimpan di ruang kerja Log Analytics Anda:
- Pilih dan pilih Defender untuk pemberitahuan IoT di IoT Hub Anda.
- Pilih Investigasi lebih lanjut.
- 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.
Peringatan yang terkait
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.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk