Krypta.cz - Magazín o informační bezpečnosti
V minulém díle jsme si nastínili základní filozofii dnešního počítačového viru a metody, které tyto programy nejčastěji používají.
Skrytí spustitelnosti
Zamaskování spustitelného programu je jeden z klíčových pasivních prostředků, kterým se virus snaží donutit příjemce pošty ke kliknutí na přílohu. O nejklasičtějším způsobu - tzv. dvojité příponě ála photo.jpg.exe - jsme mluvili již minule. Vedle tohoto způsobu je popsána chyba systému Windows, která umožňuje skrýt příponu za tzv. CLSID identifikátor. Zavirovaný soubor tak může mít název například viewthis.jpg.{093FF999-1EA0-4079-9525-9614C3504B74}, který je ve skutečnosti ZIP archivem. Odhalení skutečné přípony je i pro zkušeného uživatele víceméně nemožné a jedinou radou pro všechny je přílohu nespouštět. Většina programů ale naštěstí při dlouhém názvu zkracuje zprava jméno, proto jsou tyto techniky pouze podpůrné.
Windows Scripting Host
Zato WSH je skutečně nástrojem, který tvůrcům virů chyběl. Jedná se o implementaci VBScriptu a JScriptu (JavaScript od Microsoftu), který umožňuje programovat na klasické aplikační úrovni, tedy nejen jako součást WWW stránek. To by samo o sobě nebylo na závadu, problém je ale v ActiveX komponentách systému, které těmto dvoum jazykům dávají neskutečnou sílu.
Jak je to možné? Jednoduše. Velká většina Microsoftích aplikací (například z balíku Office) je možné používat jako ActiveX objekty a tak jednoduše využívat jejich kódu v těle viru, aniž by programátor musel nějak detailněji rozumět funkci objektu. Umožňují tak psaní relativně pokročilých červů i naprostým laikům.
Největší síla je v objektech Scripting.FileSystemObject, WScript.Shell a Outlook.Application. Scripting.FileSystemObject je základní prostředek pro práci se systémem souborů - pomocí jeho metod virus čte ze souboru, prohledává disk apod. U objektu WScript.Shell se využívá především metod RegRead a RegWrite pro zápis do registru a čtení hodnot z něj. A nakonec Outlook.Application slouží k pohodlnému odesílání mailů.
Jak je vidět, každý průměrně znalý člověk může ve Windows Scripting Hostu využívat téměř všechny pro virus potřebné funkce systému. O tak jednoduchém a univerzálním použití, jaké WSH nabízí, se před pár lety ostříleným virařům v assembleru ani nezdálo.
WSH z webu?
Jedno z největších bezpečnostních rizik je možnost použití popisovaných ActiveX objektů z kontextu HTML stránky. Díra v MS Virtual Machine kdysi umožňovala jak objekt pomocí jeho CLSID připojit ke stránce
<object id='wsh' classid='clsid:F935DC22-1CF0-11D0-ADB9-00C04FD58A0B'></object>
tak ho prostě vytvořit JScriptem.
<SCRIPT language = JScript>
fs=new ActiveXObject('Scripting.FileSystemObject');
...
Takto je možné virus přenést pouhým zobrazením HTML stránky nebo mailu.
Kódování virů
Jelikož je psaní virů v těchto skriptovacích jazycích velmi jednoduché, je také na světě několik virových generátorů. Tyto programy na základě zadaných parametrů vytvoří VBscriptový program - virus. Asi nejznámějším Případem je červ AnnaKournikova, antivirové programy ho často znají pod názvem VB/Vbswg. Proč? Prostě proto, že všechny viry generované Visual Basic Worm Generátorem (Wbswg) obsahují charakteristickou sekvenci znaků, podle které je antivirus do jednoho pozná.
Ve snaze zabránit takovémuto prozrazení používají viry několik technik - od prostých náhodných názvů proměnných a funkcí po kompletní polymorfismus, tedy měnění kódu svého těla v průběhu infekce, resp. kopírování.
Pokud se chce virus více zamaskovat, použije nějakou vhodnou kódovací funkci na převod z nesmyslných znaků na smysluplný text, naopak inverzní proces použije programátor či virový generátor při tvorbě kódu. Vše si ukážeme na příkladě z již popisované třídy virů VB/Vbswg.
Function SG6452A8(M18066BL,SBVHM2AL)
 For NRCD1VD8 = 1 To Len(M18066BL)
  EVA188II = Mid(M18066BL, NRCD1VD8, 1)
  If EVA188II = Chr(2) Then
  EVA188II = Chr(34 + SBVHM2AL)
  ElseIf EVA188II = Chr(3) Then
  EVA188II = Chr(10 + SBVHM2AL)
  ElseIf EVA188II = Chr(4) Then
  EVA188II = Chr(13 + SBVHM2AL)
  Else
  EVA188II = Chr(Asc(EVA188II) + SBVHM2AL)
  End If
  SG6452A8 = SG6452A8 & EVA188II
 Next
End Function
Kód jsme záměrně nechali v původním tvaru. Jak je patrně jasné, slova M18066BL, EVA188II, SBVHM2AL a NRCD1VD8 jsou náhodné názvy proměnných, čímž se generátor snaží každý virus co nejvíce odlišit, SG6452A8 je náhodný název dekódovací funkce. Pracuje velmi jednoduše : vezme dva parametry, kterým bychom mohli říkat "Text" a "Shift" v tomto pořadí a ve for cyklu posune každý znak Textu o -Shift (mínus Shift - jedná se o dekódování). Méně podstatné jsou podmínky, které zamezují nesprávnému vložení řídících znaků (v tomto případě apostrofů). Jak postupovat, pokud chceme zakódovat například vytvoření objektu Scripting.FileSystemObject? Příklad volání v JScriptu je uveden výše, ve VBS je situace téměř stejná. Vezmeme náhodný posunovací index "i" a každý znak v konkrétním slově posuneme jedním směrem o "i". Nyní nezbývá nic než do funkce CreateObject dosatit Decode(Text_enc, i). Tedy například takto :
Set DCBIRK7R = createobject(SG6452A8("|l{ry}rwp7orun|‚|}nvxksnl}",-9))
Všiměte si volání výše uvedené funkce SG6452A8. Pokud zavoláme SG6452A8("|l{ry}rwp7orun|‚|}nvxksnl}",-9) obdržíme hodnotu "Scripting.FileSystemObject".
Obrana proti WSH virům?
Nejjednodušší cestou jak zabránit infekci Windows Scripting Hostového viru je buď změna asociací ke všem potencionálně nebezpečným souborům nebo přímo změna jména interpretu WSH - souboru wscript.exe, který najdete v kořenovém adresáři Windows. Pokud tento typ skriptování používáte, bude asi nejlepší vytvořit nové přípony, řekněme .vbscript + .jscript a pouze ty asociovat se zmíněným interpretem (ostatní nejlépe s notepadem apod.)
Zbývá snad jen dodat "nebezpečné" přípony. Jsou to .js, .jse, .vb, .vbs, .vbe, .wsh, .wsf, .hta a případně i .html a .htm.
V příštím díle budeme mluvit o možnosti rezidentních virů, které se brání odstranění, o kódování celého těla a dalších technikách.
  1. Programátorské techniky dnešních virů
  2. Červ Badtrans přichází s vylepšeními a ožívá...
  3. HTML viry realitou i pro antivirové programy
  4. Cache může sloužit k přenesení útočného kódu
  5. Zabezpečení domácího počítače II. - Windows