Tabel Deskripsi Layanan Sistem: Kunci keamanan dan kinerja Windows

Pembaharuan Terakhir: 11/07/2025
penulis: Isaac
  • SSDT bertindak sebagai jembatan antara panggilan pengguna dan layanan inti. Windows.
  • Manipulasinya merupakan teknik mendasar baik dalam perlindungan maupun serangan (rootkit, antivirus).
  • Struktur dan perlindungan SSDT telah dikembangkan untuk mencegah modifikasi berbahaya.

ssdt

Memahami cara kerja internal sistem operasi modern sangat penting bagi setiap profesional TI, terutama dalam hal masalah yang berkaitan dengan keamanan, pengembangan driver atau rekayasa balik. Salah satu konsep kunci dalam bidang ini adalah Tabel Deskripsi Layanan Sistem (SSDT), sebuah struktur fundamental dalam inti sistem Windows yang, meskipun sering tidak disadari oleh pengguna rata-rata, memainkan peran penting dalam interaksi antara perangkat lunak dan perangkat keras, dalam pengelolaan panggilan sistem dan, sayangnya, juga dalam teknik serangan dan pertahanan tertentu di dunia malware dan antivirus.

Artikel ini menawarkan Gambaran lengkap dan terperinci tentang apa itu SSDT, cara kerjanya di berbagai versi dan arsitektur Windows, apa perannya dalam menjalankan panggilan sistem (syscall), bagaimana ia dapat digunakan oleh rootkit dan alat keamanan yang sah, serta teknik apa yang memungkinkannya diperiksa, dimanipulasi, atau dilindungi integritasnya. Jika Anda terlibat dalam pengembangan driver, analisis forensik, cybersecurity atau Anda sekadar bersemangat tentang inti sistem Windows, panduan ini akan menjadi referensi penting.

Apa itu Tabel Deskripsi Layanan Sistem (SSDT)?

La Tabel Deskripsi Layanan Sistem, juga disebutkan sebagai Tabel Pengiriman Layanan Sistem dan dikenal dengan akronimnya SSDT, adalah tabel khusus yang dikelola oleh kernel Windows (ntoskrnl.exe) yang berisi pointer ke fungsi kernel yang bertanggung jawab untuk memproses panggilan sistem yang dibuat dari ruang pengguna. Dengan kata lain, ini adalah semacam "jembatan" yang menghubungkan permintaan yang dibuat oleh aplikasi atau pustaka pengguna (seperti ntdll.dll) dengan layanan internal kernel sistem operasi.

En Sistem 32-bit, SSDT hanyalah sebuah array alamat absolut untuk fungsi kernel. Dalam berkas 64-bitDemi keamanan dan efisiensi, tabel ini menyimpan offset relatif dari basis yang diketahui di dalam kernel. Detail ini penting karena memengaruhi bagaimana jalur ke fungsi internal diselesaikan dan bagaimana jalur tersebut dapat dianalisis atau dimanipulasi oleh debugger atau alat analisis.

Cara kerja SSDT dalam praktik

Alur panggilan sistem dari ruang pengguna ke penanganannya di kernel dapat diringkas sebagai berikut:

  • Program atau proses pengguna meminta, misalnya, pembukaan file menggunakan fungsi API Windows, seperti Buat File.
  • Panggilan ini berakhir dengan memanggil fungsi ntdll.dll sebagai NtCreateFile, yang bertanggung jawab untuk mempersiapkan panggilan sistem terkait (syscall).
  • Fungsi dari ntdll.dll mengeksekusi instruksi panggilan sistem (pada x64) atau int 0x2e (pada x86), di mana indeks dilewatkan sebagai parameter yang secara unik mengidentifikasi layanan sistem mana yang diperlukan.
  • Sudah dalam mode kernel, indeks tersebut digunakan untuk mencari SSDT offset atau alamat fungsi kernel yang sesuai, dan kontrol ditransfer ke fungsi tersebut (misalnya, nt!NtBuatBerkas).
  Apa itu ASR (Attack Surface Reduction) dan bagaimana cara melindungi perangkat Anda?

Dengan cara ini, the SSDT Ia bertindak sebagai tabel lompatan yang memungkinkan ratusan fungsi kernel disediakan secara teratur dan efisien, serta menyediakan pemisahan yang jelas antara ruang pengguna dan ruang kernel yang dilindungi.

Struktur internal SSDT dan representasinya dalam memori

Tabel Deskripsi Layanan Sistem (SSDT)

Di kernel Windows, SSDT dapat diakses melalui struktur yang disebut KeServiceDescriptorTable, diekspor sendiri ntoskrnl.exeStruktur ini berisi informasi penting tentang tabel, termasuk dasar tabel (Tabel Layanan Ki), jumlah layanan dan metadata lainnya.

Cara mengakses SSDT dan menginterpretasikan inputnya bervariasi antara arsitektur:

  • En x86 (32-bit), Tabel Layanan Ki Ini adalah suatu array yang tiap elemennya menunjuk langsung ke alamat absolut suatu fungsi kernel.
  • En x64 (64-bit), elemen-elemennya adalah perpindahan relatif (offset) terhadap basis, jadi untuk mendapatkan alamat sebenarnya perlu menerapkan rumus dengan mengambil basis tersebut dan menambahkan perpindahan yang sesuai, biasanya setelah sedikit penyesuaian ke kanan (mengimbangi >> 4).

Mari kita lihat contoh nyata menggunakan debugger WinDBG untuk mengilustrasikan bagaimana tabel dibentuk dalam memori:

0: kd> dps nt!KeServiceDescriptorTable L4
fffff801`9210b880 fffff801`9203b470 nt!KiServiceTable
fffff801`9210b888 00000000`00000000
fffff801`9210b890 00000000`000001ce
fffff801`9210b898 fffff801`9203bbac nt!KiArgumentTable

Elemen pertama menunjuk ke Tabel Layanan Ki, yaitu SSDT itu sendiri. Elemen ketiga biasanya menunjukkan jumlah layanan yang tersedia. Saat memeriksa Tabel Layanan Ki, kita akan melihat serangkaian nilai yang masing-masing merupakan perpindahan atau alamat menuju setiap fungsi kernel yang diekspor oleh SSDT.

Variasi pada tabel: SSDT dan SSDT Shadow

En versi Windows modern Selain tabel utama, ada tabel "bayangan" yang disebut KeServiceDescriptorTableShadowTabel kedua ini biasanya digunakan untuk layanan yang lebih spesifik, seperti yang terkait dengan antarmuka grafis sistem (misalnya, panggilan ke win32k). Sistem menentukan secara real-time, melalui parameter dari proses pemanggilan, tabel mana dari kedua tabel tersebut yang harus digunakan untuk menyelesaikan syscall tertentu.

  Cara mengganti foto profil Facebook tanpa diketahui siapa pun

Contoh: Menyelesaikan panggilan dan fungsi kernel menggunakan SSDT

Misalkan seorang pengembang atau analis ingin mengetahui fungsi kernel mana yang sesuai dengan nomor syscall tertentu, misalnya, yang terkait dengan NtCreateFileProsesnya adalah sebagai berikut:

  • Kami mengidentifikasi indeks syscall dengan melihat kode di ntdll.dllMisalnya, bisa jadi 0x55.
  • Setiap entri dari Tabel Layanan Ki (SSDT) menempati 4 byte, jadi untuk syscall 0x55 kita mengakses posisi Tabel Layanan Ki + 4*0x55.
  • Kami mengekstrak perpindahan dan, menerapkan rumus yang sesuai, kami memecahkan arah absolut fungsi tersebut.
  • Kita dapat membongkar fungsi dalam debugger untuk memeriksa apakah offset ini benar-benar menunjuk ke kode yang dimaksud. nt!NtBuatBerkas.

Sistem ini memastikan bahwa setiap syscall yang dibuat oleh pengguna dirutekan secara efisien dan aman ke fungsi internal yang sesuai, menjaga integritas sistem dan mengoptimalkan kinerja.

Teknik analisis dan manipulasi SSDT

Akses dan analisis SSDT Hal ini penting untuk pengembangan driver yang sah dan pendeteksian rootkit dan malware. Misalnya, dalam angin Semua alamat absolut fungsi dalam tabel dapat diekstraksi oleh skrip yang melintasi SSDT dan menyelesaikan nama API yang terkait dengan setiap alamat. Contoh cuplikan naskah:

.foreach /ps 1 /pS 1 ( offset {dd /c 1 nt!KiServiceTable L poi(nt!KeServiceDescriptorTable+10)}){ r $t0 = ( offset >>> 4) + nt!KiServiceTable; .printf "%p - %y\n", $t0, $t0 }

Teknik ini memungkinkan Anda untuk membuat daftar dan menganalisis kemungkinan modifikasi, mengidentifikasi apakah fungsi telah dikaitkan, dan mendeteksi kemungkinan infeksi.

Pengait SSDT: Penggunaan yang Sah dan Penyalahgunaan Malware

Memodifikasi SSDT, sebuah teknik yang dikenal sebagai Pengait SSDT, terdiri dari penggantian entri tabel untuk mengalihkan panggilan sistem tertentu ke fungsi sendiri, biasanya dari driver pihak ketiga. Hal ini memungkinkan operasi tertentu untuk dicegat, dimodifikasi, atau diblokir, sesuatu yang telah digunakan oleh antivirus y firewall untuk melindungi sistem secara real time.

Namun, teknik yang sama ini telah banyak dieksploitasi oleh rootkit dan malware canggih untuk menyamarkan keberadaannya, menyembunyikan proses, berkas, atau koneksi, atau bahkan memfasilitasi eksekusi kode arbitrer di kernel. Pengait SSDT bisa sangat berbahaya karena memberikan kendali penuh atas peristiwa sistem penting, dan setelah diubah, sulit untuk mendeteksi modifikasi tanpa alat yang tepat atau referensi sistem yang bersih.

  Pelajari cara Mengatur Pengingat di iPhone

Contoh yang jelas dapat dilihat saat membandingkan status SSDT sebelum dan sesudah pemasangan rootkit:

Dengan rootkit Tidak ada rootkit
… f7c38486 … … 8056f074 …

Rootkit telah mengganti alamat yang sah dengan alamatnya sendiri. Menggunakan perintah dalam Di WinDbg, dimungkinkan untuk mengidentifikasi fungsi sah mana yang telah dipalsukan (misalnya, File Direktori NtQuery), dan apa yang malware coba sembunyikan (seperti file atau direktori berbahaya).

Karena kedua alasan tersebut, pengaitan SSDT merupakan pedang bermata dua: ia memungkinkan penerapan solusi keamanan tingkat lanjut, tetapi ia juga menyediakan mekanisme yang sangat efektif untuk penghindaran dan pengendalian sistem secara diam-diam.

Keterbatasan, perlindungan dan evolusi SSDT

Selama bertahun-tahun, Microsoft telah memperkuat keamanan tabel untuk mencegah driver pihak ketiga atau malware mengubah entri secara bebas. Misalnya, dengan hadirnya Penjaga Patch (Kernel Patch Protection) pada sistem x64, pemantauan otomatis integritas SSDT diterapkan, dan setiap upaya untuk mengubahnya di luar mekanisme yang diizinkan pasti berakhir dengan tabrakan sistem (layar biru).

Lebih lanjut, versi terbaru Windows mendorong pengembang untuk menggunakan API dan teknik yang terdokumentasi alih-alih mengakses atau memodifikasi SSDT secara langsung, sehingga mengurangi potensi serangan dan menghindari ketidakcocokan di masa mendatang. Namun, masih ada skenario (analisis forensik, investigasi malware, kompatibilitas driver) yang mengharuskan pemahaman tentang cara kerjanya dan cara mengamankan atau memeriksanya.

Perbedaan antara SSDT dan tabel sistem lainnya

Meskipun SSDT sering disalahartikan dengan struktur deskriptor layanan atau interupsi lainnya, penting untuk membedakannya dari, misalnya, Tabel Deskriptor Interupsi (IDT). Sementara SSDT menangani panggilan sistem (layanan kernel) dari ruang pengguna, IDT Ia bertanggung jawab untuk menyelesaikan interupsi perangkat keras dan perangkat lunak yang mencapai CPU, dan mengarahkannya ke rutin layanan interupsi (ISR) yang sesuai. Masing-masing memiliki struktur, fungsi, dan mekanisme perlindungannya sendiri, tetapi keduanya penting untuk stabilitas dan keamanan sistem operasi.

Pencadangan Registri Windows 11
Artikel terkait:
Cara Mencadangkan Registri di Windows 11