SSDTInfo

aneb co vše se skrývá v tabulkách systémových volání

Pod pojmem SSDT (System Service Descriptor/Dispatch Table) si většina z lidí znalých jádra Windows představí datové struktury, které zajišťují správné fungování mechanismu systémových volání. Jejich modifikací lze monitorovat a ovlivňovat nejen chování aplikací.

Protože mě obsah těchto tabulek odjakživa zajímal a různé bezpečnostní aplikace jej nezobrazovaly příliš podrobně, rozhodl jsem se napsat utilitu SSDTInfo, která najde a zobrazí všechny dostupné informace.

SSDTInfo dokáže zobrazit obecné informace o tabulkách systémových volání, mezi které patří obsah jejich podtabulek a vlastnosti jednotlivých systémových služeb z toho plynoucí. Pomocí menu Tabulka lze určit, jakou z obou struktur má program prozkoumat.

Pomocí položky Tabulka | Zkontrolovat se spustí kontrola konzistence. Program zobrazí všechny informace z oblasti tabulek systémových volání, které mu připadají podezřelé. Zde je nutné uvést, že aktuální verze aplikace nedokáže zjistit pravé adresy KeServiceDescriptorTable a KeServiceDescriptorTable, ale zobrazí ty informace, které bude systém s největší pravděpodobností používat, když nějaké obyčejné vlákno provede systémové volání.

Doplňkové služby spočívají v možnosti uložit nasbírané informace do textových souborů (položka Soubor | Uložit) a nastavit jazyk. Zatím je podporována čeština a angličtina, ale podporu dalšího jazyka lze snadno doplnit, stačí se držet následujícího návodu:

  • Vytvořit soubor s příponou .lng, vyplnit její příslušnými hláškami (viz soubory czech.lng a english.lng)
  • Nový soubor s hláškami by měl mít stejně řádků jako ostatní jazykové soubory. Na každém řádku musí být přítomna právě jedna hláška
  • Po nakopírování nového souboru do adresáře s programem by se po spuštění programu měla v menu Jazyk objevit nová položka.

Podporované systémy

SSDTInfo podporuje 32bitové verze operačních systémů Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows 7 a Windows Server 2008.

Na 64bitových Windows se tabulky systémových volání liší polem adres systémových služeb, které místo adres systémových služeb obsahuje jejich offsety vzhledem k jeho začátku. Dolní čtyři bity offsetu navíc mohou být využity k uchování informace o počtu parametrů, protože začátky rutin jsou zarovnány na 16 bajtů. Díky této optimalizaci není třeba při každém systémovém volání sahat do tabulky argumentů (ArgumentTable), což vede k určitému zrychlení.

Větším problémem je nalezení adres tabulek systémových volání, protože na této platformě ani jedna z nich není exportována a struktury ETHREAD postrádají položku ServiceTable. Ačkoliv způsob, jak potřebné informace získat, znám, zatím jsem nenašel čas na jeho implementaci.

Download

Binárky aplikace si můžete stáhnout níže. Součástí je i ovladač ssdtinfo.sys, z čehož vyplývá, že program pro svůj běh vyžaduje administrátorská práva. Na Windows podporujících Kontrolu uživatelských účtů (User Account Control) by si o něm měl sám pomocí známého dialogu požádat.

Zatím si můžete stáhnout pouze binárky, ale uvolnění zdrojových kódů je též plánováno.

Stáhnout SSDTInfo v1.0

"A elektrody uděláme ze dřeva, protože to stejně nikdo nečte..." (z nejmenované diplomové práce)