Dahulu kala, ketika rumput lebih hijau dan Internet lebih aman, inisiatif Manajemen Perusahaan Berbasis Web (WBEM) lahir di TI. Awalnya disponsori pada tahun 1996 oleh perusahaan seperti Cisco Systems, Intel dan Microsoft, ini telah diadopsi secara luas dan diterapkan di berbagai platform mulai dari MAC OS hingga Redhat. WBEM didokumentasikan dengan jelas, berdasarkan standar Internet, dan memberikan pendekatan yang berbeda untuk manajemen sistem daripada SNMP, misalnya.
Adaptasi WBEM untuk Windows disebut WMI (antarmuka manajemen Windows) dan pertama kali diperkenalkan di Windows XP. Kami tahu bahwa sistem diperbarui lebih cepat daripada komponennya, dan banyak kerentanan yang sebelumnya merupakan alat manajemen yang nyaman bermigrasi dari versi ke versi. Pada artikel ini, saya ingin menjelaskan bagaimana tugas WMI dilakukan dan bagaimana menghindari risiko potensial.
Karena kekuatannya, WMI memungkinkan penggunaan utilitas atau skrip khusus untuk melakukan berbagai tindakan yang berpotensi berbahaya pada PC, termasuk menghentikan layanan penting dan bahkan mematikan komputer. Misalnya, seperti ini:
(Get-WmiObject Win32_OperatingSystem -EnableAllPrivileges) .Win32Shutdown (5)
(GWMI -Class Win32_Service -Filter "name = 'WinRM'" -ComputerName Server) .StopService ()
Selain itu, lakukan tindakan ini pada mesin jarak jauh dengan cara yang sama seperti di mesin lokal - cukup tulis nama mesin yang diperlukan di jalur ke objek WMI.
Namespace WMI adalah bagian dari penyimpanan WMI yang dirancang untuk mengelompokkan kelas dan objek WMI dengan tujuan, ditambah menentukan atribut keamanan saat mengakses kelas dan objek di setiap wadah tersebut. Semua ruang nama dimulai dengan root, yang dilambangkan dengan kata kunci root di WMI. Namespace diikuti dengan garis miring setelah nama root. Namespaces bisa disarangkan. Sebagian besar kelas dan objek yang menarik terletak di namespace root / CIMv2.
Salah satu ruang nama WMI Windows yang ada dapat dipilih sebagai default. Ini berarti bahwa jika Anda mencoba menyambung ke host ini tanpa menentukan namespace, maka Anda secara otomatis akan tersambung ke yang dipilih secara default. Dalam instalasi Windows standar, ruang default adalah root \ cimv2.
Teknologi WMI dirancang untuk administrator Windows, dan seluruh sistem keamanan di WMI dirancang sehingga dengan menggunakan skrip WMI, pengguna pada PC tertentu hanya dapat melakukan tindakan yang telah diberikan izin / hak istimewa. Inilah yang disebut hak istimewa default. Ini adalah bagaimana keamanan WMI diimplementasikan di tingkat sistem operasi: jika pengguna di tingkat sistem operasi tidak diberi hak istimewa untuk memulai ulang komputer, maka dia tidak akan dapat melakukan ini menggunakan WMI.
Kebijakan keamanan tambahan di WMI diterapkan di tingkat ruang nama protokol Distributed COM (DCOM), model objek komponen terdistribusi. Untuk melihat lebih dekat jenis keamanan WMI ini, saya akan mengingat secara singkat konsep umum dasar yang terkait dengan keamanan di Windows. Dan keamanan ini didasarkan pada nama pengguna dan kata sandinya.
Tentang izin WMI
Saat pengguna dibuat di Windows, akun sistem mereka diberi pengenal keamanan unik (Pengenal Keamanan, atau SID). Berdasarkan SID, Token Akses dibuat untuk pengguna, di mana daftar grup di mana pengguna menjadi anggotanya dan daftar hak istimewa yang dia miliki (misalnya, menghentikan layanan atau mematikan komputer) juga ditambahkan. Token akses ini juga ditetapkan ke semua proses yang dimulai pengguna. Saat ini, setiap objek sistem operasi, akses yang ditentukan oleh sistem keamanan - file, atau proses, atau layanan atau yang lainnya - memiliki Penjelas Keamanan (SD). Deskriptor ini, pada gilirannya, menyimpan Daftar Kontrol Akses (ACL) untuk objek ini.
Jadi, ketika pengguna atau proses yang diluncurkan olehnya mengakses suatu objek, token akses pengguna ini dibandingkan dengan daftar kontrol akses. Bergantung pada hasil, izin / hak istimewa dikeluarkan atau ditolak untuk melakukan tindakan yang diminta pada objek.
Di tingkat namespace, mekanisme keamanan WMI mengikuti model keamanan Windows umum. Setiap namespace dapat memiliki deskriptor keamanannya sendiri yang menyimpan daftar kontrol akses (ACL).
Setiap entri Access Control Entry (ACE) berisi informasi tentang izin apa yang dimiliki pengguna tertentu saat melakukan berbagai operasi di namespace tersebut.
Dan berikut adalah daftar izin saat bekerja dengan namespace:
Execute Methods. Mengizinkan metode panggilan kelas dari namespace tertentu. Berhasil atau tidaknya metode bergantung pada apakah pengguna memiliki izin untuk melakukan operasi pada sistem.
Tulis Penuh. Mengizinkan pembuatan dan modifikasi subnamespaces, kelas sistem, dan instance kelas.
Penulisan Parsial. Membuka kemampuan untuk membuat dan memodifikasi kelas statis dan instance kelas non-sistem.
Penulis Penyedia.Memungkinkan Anda memeriksa class penyedia WMI dan instance dari class tersebut ke repositori CIM.
Aktifkan Akun. Memberikan akses baca ke namespace WMI. Pengguna dengan izin ini dapat menjalankan skrip di komputer lokal yang membaca data WMI.
Aktifkan dari jarak jauh (Remote Enable). Memungkinkan pengguna untuk mengakses namespace WMI di komputer jarak jauh. Secara default, hanya administrator yang memiliki izin ini; pengguna standar tidak dapat mengambil data WMI dari mesin jarak jauh.
Baca Keamanan. Memberi hak untuk membaca keterangan keamanan untuk namespace WMI tanpa modifikasi.
Ubah aturan keamanan (Edit Keamanan). Memungkinkan Anda mengubah deskriptor keamanan untuk namespace WMI.
Semua entri ACL ini disimpan di gudang WMI. Izin WMI untuk namespace tertentu berlaku untuk semua subnamespaces dan kelas yang ditentukan di namespace itu (diwarisi dari). Anda tidak dapat menentukan izin keamanan Anda sendiri untuk kelas WMI individu.
Tentang pengaturan default
Di Windows, grup Administrator memiliki semua izin dari tabel di atas, dan untuk pengguna lain akun diaktifkan ( Aktifkan Akun ), diizinkan untuk memanggil metode ( Jalankan Metode s) dan untuk menulis contoh kelas penyedia ke CIM ( Penyedia Tulis ).
Administrator dapat mengubah izin untuk pengguna tertentu dengan menggunakan utilitas Pengaturan WMI (snap-in MMC Management Console wmimgmt.msc).
Tangkapan layar 1.
Protokol DCOM di atas digunakan untuk mengakses infrastruktur WMI di komputer jarak jauh. Pengguna menjalankan skrip atau menyambung ke WMI menggunakan utilitas khusus dan bertindak sebagai klien, dan objek WMI yang sedang diakses adalah server. Tingkat peniruan DCOM standar digunakan untuk menentukan token akses mana yang akan digunakan saat bekerja dengan WMI di komputer jarak jauh.
Tentang Tingkat Peniruan Identitas atau Peniruan Identitas
Dalam bahasa Rusia, ini terdengar agak kikuk. Apa itu peniruan identitas dan mengapa itu diperlukan? Ini adalah teknik di mana proses atau sistem harus menggunakan kredensial prinsip keamanan lain, bukan konteks keamanannya sendiri, untuk menyambung ke sumber daya.
Bayangkan - layanan tertentu yang diluncurkan dalam konteks keamanan Sistem Lokal harus melakukan tindakan atas nama akun lain (misalnya, atas nama pengguna saat ini yang masuk ke komputer). Dalam hal ini, layanan perlu membuat Token Akses khusus yang menjelaskan konteks keamanan akun tempat kami ingin melakukan tindakan yang ditentukan.
Untuk membuat token akses seperti itu, layanan perlu mengetahui kredensial pengguna ini, dan jika proses ini terjadi di mesin lokal, dapatkan salinan token akses dari pengguna lokal yang sebelumnya terdaftar.
Untuk melakukan ini, konteks keamanan layanan harus memiliki hak istimewa untuk membuat token akses.
Ada versi peniruan yang lebih kompleks - pendelegasian. Opsi ini diperlukan ketika koneksi ke sumber daya target tidak dilakukan oleh prinsip keamanan itu sendiri (dalam contoh di atas, oleh layanan atas nama pengguna), tetapi melalui perantara (misalnya, server perantara).
Bayangkan: seorang pengguna tidak langsung terhubung ke database, tetapi melalui aplikasi web di server ketiga. Untuk membuat koneksi seperti itu, aplikasi web harus menerima token akses delegasi dari prinsip keamanan (layanan kami) - ini akan memungkinkan aplikasi web menggunakan token akses prinsip keamanan ketika terhubung ke database.
Dalam kasus WMI, delegasi mungkin terlihat seperti ini: kami, yang bekerja di stasiun administrator, terhubung melalui WMI ke server tertentu dan memulai proses di atasnya menggunakan metode Jalankan kelas Win32_Process. Proses ini tidak lebih dari skrip WMI lain yang terhubung ke host lain di jaringan untuk melakukan beberapa tindakan. Jika kita tidak menggunakan delegasi, maka pada mesin target skrip akan diluncurkan dalam konteks keamanan akun server perantara, yang jauh dari selalu diinginkan. Di sisi lain, situasi serupa dengan pendelegasian dalam kehidupan nyata jarang terjadi.
Tentang Tingkat Peniruan Identitas
Akses anonim (Anonim). Objek server tidak memiliki hak untuk mendapatkan informasi tentang pengguna atau proses yang mengakses objek ini (dengan kata lain, objek tidak dapat meniru klien). Tingkat peniruan identitas ini tidak digunakan di WMI.
Identifikasi. Objek server dapat meminta token akses yang terkait dengan klien, tetapi tidak dapat meniru.
Tingkat peniruan identitas ini jarang digunakan dalam skrip WMI, dalam hal ini Anda tidak dapat menjalankan skrip WMI pada mesin jarak jauh.
Menirukan.Objek server dapat menggunakan semua hak dan hak istimewa yang dimiliki klien. Direkomendasikan agar Anda menggunakan tingkat peniruan ini dalam skrip WMI, karena skrip WMI pada mesin jauh akan dapat melakukan semua tindakan yang diizinkan untuk dilakukan oleh pengguna yang menjalankan skrip.
MelimpahkanObjek di server yang diakses klien dapat mengakses objek lain di server yang berbeda atas nama klien. Delegasi memungkinkan skrip untuk menggunakan token akses pengguna yang menjalankannya di mesin jarak jauh. Token yang sama digunakan untuk mengakses objek WMI di workstation lain. Ada potensi risiko dengan tingkat peniruan identitas ini; delegasi dalam skrip WMI sebaiknya hanya digunakan jika benar-benar diperlukan.
Tingkat peniruan default tergantung pada versi WMI di komputer target. Dalam versi WMI di bawah 1.5, tingkat default adalah Mengidentifikasi, di versi WMI 1.5 dan di atasnya - Meniru identitas. Jika perlu, Anda dapat mengubah tingkat peniruan default dengan menulis nama tingkat yang diperlukan (misalnya, meniru atau Mendelegasikan) di kunci registri
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Wbem \ Scripting \ Default Impersonation Level .
Screenshot 2.
Protokol DCOM juga menyediakan kemampuan untuk meminta tingkat otentikasi (otentikasi) dan privasi tertentu untuk koneksi WMI:
Tidak ada. Tidak ada otentikasi.
Secara default (Default). Pengaturan keamanan standar digunakan untuk memilih tingkat otentikasi. Ini adalah tingkat yang disarankan, karena klien akan diberi tingkat otentikasi yang ditentukan server.
Koneksi (Hubungkan). Klien hanya diautentikasi ketika terhubung ke server. Setelah koneksi dibuat, tidak ada pemeriksaan tambahan yang dilakukan.
Panggilan. Klien diautentikasi di awal setiap panggilan, sedangkan server menerima permintaan. Dalam hal ini, header paket ditandatangani, tetapi data itu sendiri (konten paket) yang dikirimkan antara klien dan server tidak ditandatangani atau dienkripsi.
Paket (Pkt).Semua paket data yang datang dari klien ke server diautentikasi. Seperti halnya otentikasi tingkat panggilan, header paket ditandatangani tetapi tidak dienkripsi. Paket itu sendiri tidak ditandatangani atau dienkripsi.
Integritas paket (Pktlntegrity). Semua paket data diperiksa keaslian dan integritasnya. Dicek bahwa isi paket tidak berubah selama transfer dari klien ke server. Dalam hal ini, data ditandatangani, tetapi tidak dienkripsi.
Hak Istimewa (PktPrivacy). Semua paket data diperiksa keaslian dan integritasnya, dan datanya ditandatangani dan dienkripsi untuk memastikan kerahasiaan data yang dikirimkan.
Administrator Windows sangat mengetahui pengaturan keamanan sistem yang tersedia di Konsol Keamanan Sistem dan Kebijakan Grup Domain dan Penugasan Hak Pengguna. Sejumlah tindakan dengan sistem operasi hanya dapat dilakukan jika pengguna atau grup, yang dia miliki, memiliki satu atau beberapa hak istimewa. Tindakan tersebut, misalnya, termasuk: me-reboot sistem (mematikan pekerjaannya), memulihkan status sistem dari cadangan, atau mengubah waktu sistem.
Karena WMI dapat melakukan semua tindakan ini, pengembang WMI telah menyediakan mekanisme keamanan tambahan: meskipun akun pengguna memiliki hak istimewa yang diperlukan untuk mengoperasikan sistem, ia masih tidak dapat melakukan tindakan ini hingga secara eksplisit mengaktifkan hak istimewa sebelum melakukan tindakan. Secara khusus, jika administrator menjalankan skrip WMI yang meminta boot ulang sistem, ini masih tidak akan terjadi hingga hak istimewa ini secara eksplisit diaktifkan di skrip.
Ringkasan
Apa yang disarankan untuk dilakukan untuk memastikan keamanan koneksi WMI:
- Ubah tingkat peniruan untuk layanan kritis (Screenshot 2).
- Konfigurasikan izin wmimgmt.msc (Screenshot 1).
- Ubah repositori default. Ini dapat mematahkan skenario serangan pola.
4. Ubah grup orang dengan kemampuan peluncuran jarak jauh dan aktivasi WMI melalui utilitas DCOMCNFG
5. Untuk meluncurkan WMI, pengguna harus menjadi anggota administrator atau grup pengguna DCOM. Layanan registri jarak jauh juga harus tersedia.
6. Konfigurasi firewall - koneksi masuk ke DCOM melalui port TCP 135 dan rentang dinamis (punya?) RPC.
Sebagai kesimpulan, saya ingin mengatakan hal berikut: WMI memberikan kecepatan, kekuatan, dan kemudahan menjalankan perintah pada host jarak jauh, dan semantik perintah berbasis SQL membuatnya mudah dipelajari.
Ada banyak informasi di Internet tentang peretasan dan serangan WMI, karena mereka cocok dengan tren serangan saat ini - penggunaan alat peretasan sistem asli - bersama dengan telnet NTP dan DNS. Tugas kita adalah menangkap tren ini dan menemukan metode penangkal yang sudah tertanam dalam sistem.
Penulis: Galiulin Timur GTRch