SlideShare ist ein Scribd-Unternehmen logo
1 von 41
Downloaden Sie, um offline zu lesen
Tworzenie, zaciemnianie i
                analiza złośliwego kodu
                JavaScript


                         Krzysztof Kotowicz
                         PHP Developer

                         http://web.eskot.pl
OWASP                    Medycyna Praktyczna
                         krzysztof@kotowicz.net
Czerwiec 2010

                    Copyright © The OWASP Foundation
                    Permission is granted to copy, distribute and/or modify this document
                    under the terms of the OWASP License.




                    The OWASP Foundation
                    http://www.owasp.org
Plan

 Teoria - Zaciemnianie i analiza
  ogólnie
  w JavaScript
 Praktyka - omijanie automatycznych
  analizatorów
  jsunpack
  JavaScript unpacker
  Capture-HPC

                                       OWASP   2
Teoria



         OWASP
Zaciemnianie kodu
          Cel - utrudnić analizę




                                   OWASP   4
Zaciemnianie kodu

 Nie jest możliwe "zaciemnienie absolutne"
    [cs.princeton.edu]
 Analiza jako debugging

Debugging is twice as hard as
writing a program in the first
place. So if you're as clever as
you can be when you write it,
how will you ever debug it?
Brian Kernighan, The Elements of Programming Style
                                                     OWASP   5
Metody zaciemniania

   for      while + if
   Iteracja    rekursja
   Skomplikowane wyrażenia logiczne
   Martwe gałęzie kodu (dummy code)
   Quasitautologie [blog.didierstevens.com]
   Enigmatyczne nazwy




                                               OWASP   6
Metody zaciemniania cd.

JavaScript to język dynamiczny i funkcyjny

     Kod tworzony dynamicznie – eval
     String.fromCharCode, unescape
     Wyrażenia regularne - String.replace
     Packery, np.
     [dean.edwards.name]
     [developer.yahoo.com]
     [malwareguru.org]
     [closure-compiler.appspot.com]

     Inne - np. WhiteSpace Obfuscation   [ktcorpsecurity.com]


                                                      OWASP      7
Aktywna obrona przed analizą

    Function.toString /
     arguments.callee.toString                   [isc.sans.org]

    autoszyfrowanie [isc.sans.org]
    wykrywanie przeglądarki
     DOM
     window, navigator
     timingi
     cookies
     pozycja myszki, rozdzielczość ekranu
    Kod tylko raz dla IP   [research.zscaler.com]

                                                      OWASP       8
Obrona przed analizą – specyfika języka


function is_even(n) {
    var parameter_is_even =
      (n % 2) == 0 ? true : false;

     return
       parameter_is_even;
}

alert(is_even(16));


                                    OWASP   9
Rozwiązanie




              OWASP   10
Jak analizować JavaScript?

 Poznaj JavaScript!
 Obserwuj efekty działania kodu w
  kontrolowanym środowisku
  Przeładuj funkcje
    eval
    String.fromCharCode
 Stopniowo odciemniaj
 Miej cierpliwość, bądź pomysłowy

                                     OWASP   11
Analiza JavaScript ...

   Bardziej heurystyka niż algorytm
   Proces bardziej ręczny niż automatyczny
   Człowiek jest niezbędny
   Narzędzia pomagają, ale zawodzą!




                                       OWASP   12
Praktyka



     OWASP
jsunpack

 Uruchamia JS wewnątrz środowiska
  SpiderMonkey [mozilla.org]
   Na podstawie URL, PCAP, pliku JS/HTML…
 SM jest wzbogacony o:
   emulację DOM
   emulację obiektów przeglądarki
   uruchomienie zdarzeń onload()
 monitoruje m.in. eval(), setTimeout()
 skanuje używając sygnatur

                                             OWASP   14
jsunpack - słabe punkty

 Emuluje środowisko przeglądarki
 Kod, który się nie wykona jest
  sprawdzany wyłącznie sygnaturami




                             OWASP   15
Ominięcie zabezpieczeń


 if (fake_browser) {
   do_no_harm();
 } else {
   redirect_to_malicious_website();
   // or obfuscate an exploit
 }


 Musimy wykryć, że kod działa w jsunpack

                                    OWASP   16
Jak wykryć jsunpack?

Na wiele sposobów:
 Zła implementacja window.location
  window.location.host = ścieżka do pliku
  fake_browser = window.location.host.match('/');

 Dodaje swoje zmienne globalne
  fake_browser = (typeof my_location != "undefined");
  // my_navigator, my_activex, my_element,
  // the_activex, app, ...




                                               OWASP    17
Jak wykryć jsunpack cd.

 Podmienia/dodaje niektóre funkcje
fake_browser = (window.open.toString().match(/print/));
fake_browser = (alert.toString().match(/{s*}/));


 Niepełna emulacja obiektów

 fake_browser = (typeof
     PluginArray.prototype.refresh == "undefined");

 fake_browser = (document.title == 'My Title');




                                                  OWASP   18
Jsunpack - bonus

 jsunpack wykonuje nie tylko JavaScript

<script type="text/dummy">
  // good enough for jsunpack
</script>

 Kod wykona się w jsunpack, ale nie w
  przeglądarkach


                                   OWASP   19
DEMO 1




         OWASP   20
jsunpack - podsumowanie

 Można łatwo wykryć, że JavaScript działa
  w sandboxie jsunpack
 Można to wykorzystać to
  niepodejmowania złośliwych działań
 Jeśli złośliwy kod jest zaciemniony,
  ominie sygnatury
 Automatyczna analiza jsunpack nie
  wykryje niczego

                                   OWASP     21
Dean Edwards' Unpacker

A JavaScript Decompressor [dean.edwards.name]
 Odwraca działanie packera tego samego autora
 Zasada działania packera:
eval(function(p,a,c,k,e,r){/*kod*/}(para,
metry))

var packer = function(p,a,c,k,e,r) {};
var s = packer(para,metry);
eval(s);



                                        OWASP    22
Dekompresja - krok 1

 Zastąp eval() przypisaniem do zmiennej
  znakowej
    // spakowany kod w zmiennej input
    var input="eval(function(p,a,c,k....";

    eval("var value=String" +
    input.slice(4)); // obcinamy "eval"

    // w efekcie wykonany kod:
    var value=String(function(p,a,c,k..);

 W value jest zdekompresowany kod
                                       OWASP   23
Dekompresja - krok 1

 Zastąp eval() przypisaniem do zmiennej
  znakowej
    // spakowany kod w zmiennej input
    var input="eval(function(p,a,c,k....";

    eval("var value=String" +
    input.slice(4)); // obcinamy "eval"

    // w efekcie wykonany kod:
    var value=String(function(p,a,c,k..);

 W value jest zdekompresowany kod
 Wykonanie sklejonego kodu!           OWASP   24
Dekompresja - krok 2

 Użyj Function.toString(), żeby wyświetlić
  kod
    eval(
    "var unpacked = function() {"
    + value + "}"
    );
    alert(unpacked.toString());



 Rozpakowany kod NIE WYKONUJE SIĘ
   Disclaimer - rzeczywisty kod jest trochę inny, tutaj upraszczam

                                                          OWASP       25
Dean Edwards Unpacker - słabe punkty

 Sklejanie zmiennych znakowych i wykonywanie
  sklejonego kodu (injection, anyone?)
 Użycie stałej - obcinamy na ślepo 4 pierwsze
  znaki
 eval() bez walidacji parametru
 Polega na Function.toString()




                                      OWASP      26
Dean Edwards Unpacker - rozbrajanie

 eval() używa jednego parametru
 String() używa jednego parametru
 ...ale możemy podać więcej :)
 eval("code");
 eval("code", "ignored");
 eval("code", malicious());
 String("code", malicious());

 Arbitrary code execution bez zmieniania funkcji
  p,a,c,k,e,r!

                                         OWASP      27
Dean Edwards Unpacker - rozbrajanie cd.

 eval(function(p,a,c,k,e,r){...}(para,metr
 y),malicious());

 var
 value=String(function(p,a,c,k,e,r){...}(p
 ara,metry),malicious());

 malicious() wykona się w spakowanym
  kodzie, jak i w dekompresorze




                                    OWASP    28
Dean Edwards Unpacker - rozbrajanie cd.

Jak to wykorzystać?
 Unpacker wykorzystuje
    Function.toString()
 Podmieńmy ją!
 malicious() to np. zaciemniony:
Function.prototype.toString = function()
{
  return 'harmless code';
}


                                    OWASP   29
DEMO 2




         OWASP   30
Dean Edwards Unpacker - point of concept




                                   OWASP   31
Honeypoty wysoko interaktywne

Na przykładzie Capture-HPC         [projects.honeynet.org]

    Kod wykonuje się w rzeczywistej przeglądarce na
     maszynie wirtualnej
    Serwer dostarcza listę adresów URL
    Klient uruchamia przeglądarki i czeka…
    Monitorowane są efekty działania kodu
     System plików
     Rejestr
     Procesy
    Jeśli dzieje się coś podejrzanego, URL klasyfikowany
     jako złośliwy
                                                     OWASP   32
Honeypoty wysoko interaktywne cd.

 Środowisko uruchomieniowe jest
  takie samo
 Nie ma żadnej emulacji

 Czy da się wykryć, że jesteśmy śledzeni?




                                    OWASP   33
Słaby punkt




              OWASP   34
Honeypoty wysoko interaktywne - automat

                      Nie rusza myszką
                      Nie klika
                      Nie przeciąga
                      Nie nawiguje po
                       stronie
                      Jest „głupi”



                                  OWASP   35
Honeypoty wysoko interaktywne - internauta

                       Rusza myszką
                       Klika
                       Przeciąga
                       Nawiguje po
                        stronie
                       Jest głupi



                                  OWASP      36
Honeypoty wysoko inter. – social engineering




                                    OWASP      37
Honeypoty wysoko inter. – social engineering




                                    OWASP      38
Honeypoty wysoko inter. - podsumowanie

 Nie ma warstwy emulacji – nie można
  wykryć różnic
 Kod wykonuje się w rzeczywistym
  środowisku
 Najsłabszym punktem brak „czynnika
  ludzkiego”
 Uruchomienie złośliwego kodu po
  interakcji ze stroną

                                  OWASP   39
Podsumowanie

    Zaciemnianie tylko spowalnia analizę
    Kod może aktywnie "bronić się"
    Do kompletnej analizy niezbędny jest człowiek
    Analiza wymaga dużych umiejętności
    Narzędzia automatyczne można oszukać
     niedoskonałość emulacji
     błędy
     niepełna interakcja ze stroną


                                          OWASP      40
Linki
Narzędzia
     jsunpack.blogspot.com
     dean.edwards.name/unpacker/
     projects.honeynet.org/capture-hpc
     malzilla.sourceforge.net
Zaciemnianie i analiza
     isc.sans.org/diary.html
     www.malwareguru.org
     delicious.com/koto/obfuscation
     closure-compiler.appspot.com
     tinyurl.com/bootcamp20
JavaScript
     www.slideshare.net/ferrantes/just-advanced-javascript
     jsninja.com


krzysztof@kotowicz.net           http://blog.kotowicz.net     OWASP   41

Weitere ähnliche Inhalte

Ähnlich wie Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScript

“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...krakspot
 
Jak ocalić swoje dane przed SQL injection?
Jak ocalić swoje dane przed SQL injection?Jak ocalić swoje dane przed SQL injection?
Jak ocalić swoje dane przed SQL injection?Krzysztof Kotowicz
 
Reactive programming
Reactive programmingReactive programming
Reactive programmingSunscrapers
 
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)Krzysztof Kotowicz
 
Czy naprawdę wiesz co robi twoja przeglądarka?
Czy naprawdę wiesz co robi twoja przeglądarka?Czy naprawdę wiesz co robi twoja przeglądarka?
Czy naprawdę wiesz co robi twoja przeglądarka?OWASP
 
Django od developerki po produkcję (linux)
Django od developerki po produkcję (linux)Django od developerki po produkcję (linux)
Django od developerki po produkcję (linux)Marcin Grzybowski
 
CONFidence 2018: "Small money, a lot of bugs" - Large scale bughunting dla ty...
CONFidence 2018: "Small money, a lot of bugs" - Large scale bughunting dla ty...CONFidence 2018: "Small money, a lot of bugs" - Large scale bughunting dla ty...
CONFidence 2018: "Small money, a lot of bugs" - Large scale bughunting dla ty...PROIDEA
 
Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.Semihalf
 
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychGanymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychSKN Shader
 
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...Future Processing
 
Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL versionMaciej Lasyk
 
Bezpieczeństwo aplikacji czy musi być aż tak źle
Bezpieczeństwo aplikacji   czy musi być aż tak źleBezpieczeństwo aplikacji   czy musi być aż tak źle
Bezpieczeństwo aplikacji czy musi być aż tak źleSecuRing
 
JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...
JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...
JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...PROIDEA
 
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaModsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaLeszek Mi?
 
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł GrajewskiPROIDEA
 
infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...
infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...
infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...Infoshare
 
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof Ślusarski
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof ŚlusarskiWJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof Ślusarski
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof ŚlusarskiKrzysztof Ślusarski
 

Ähnlich wie Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScript (20)

“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
 
Jak ocalić swoje dane przed SQL injection?
Jak ocalić swoje dane przed SQL injection?Jak ocalić swoje dane przed SQL injection?
Jak ocalić swoje dane przed SQL injection?
 
Reactive programming
Reactive programmingReactive programming
Reactive programming
 
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
 
Czy naprawdę wiesz co robi twoja przeglądarka?
Czy naprawdę wiesz co robi twoja przeglądarka?Czy naprawdę wiesz co robi twoja przeglądarka?
Czy naprawdę wiesz co robi twoja przeglądarka?
 
Django od developerki po produkcję (linux)
Django od developerki po produkcję (linux)Django od developerki po produkcję (linux)
Django od developerki po produkcję (linux)
 
CONFidence 2018: "Small money, a lot of bugs" - Large scale bughunting dla ty...
CONFidence 2018: "Small money, a lot of bugs" - Large scale bughunting dla ty...CONFidence 2018: "Small money, a lot of bugs" - Large scale bughunting dla ty...
CONFidence 2018: "Small money, a lot of bugs" - Large scale bughunting dla ty...
 
Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.
 
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychGanymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
 
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
 
Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL version
 
Iron Python I Dlr
Iron Python I DlrIron Python I Dlr
Iron Python I Dlr
 
Bezpieczeństwo aplikacji czy musi być aż tak źle
Bezpieczeństwo aplikacji   czy musi być aż tak źleBezpieczeństwo aplikacji   czy musi być aż tak źle
Bezpieczeństwo aplikacji czy musi być aż tak źle
 
Scala
ScalaScala
Scala
 
JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...
JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...
JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...
 
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaModsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
 
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
 
Eclipse
EclipseEclipse
Eclipse
 
infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...
infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...
infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...
 
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof Ślusarski
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof ŚlusarskiWJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof Ślusarski
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof Ślusarski
 

Mehr von Krzysztof Kotowicz

Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)
Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)
Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)Krzysztof Kotowicz
 
Trusted Types and the end of DOM XSS
Trusted Types and the end of DOM XSSTrusted Types and the end of DOM XSS
Trusted Types and the end of DOM XSSKrzysztof Kotowicz
 
Biting into the forbidden fruit. Lessons from trusting Javascript crypto.
Biting into the forbidden fruit. Lessons from trusting Javascript crypto.Biting into the forbidden fruit. Lessons from trusting Javascript crypto.
Biting into the forbidden fruit. Lessons from trusting Javascript crypto.Krzysztof Kotowicz
 
Hacking HTML5 offensive course (Zeronights edition)
Hacking HTML5 offensive course (Zeronights edition)Hacking HTML5 offensive course (Zeronights edition)
Hacking HTML5 offensive course (Zeronights edition)Krzysztof Kotowicz
 
I'm in ur browser, pwning your stuff - Attacking (with) Google Chrome Extensions
I'm in ur browser, pwning your stuff - Attacking (with) Google Chrome ExtensionsI'm in ur browser, pwning your stuff - Attacking (with) Google Chrome Extensions
I'm in ur browser, pwning your stuff - Attacking (with) Google Chrome ExtensionsKrzysztof Kotowicz
 
I'm in your browser, pwning your stuff
I'm in your browser, pwning your stuffI'm in your browser, pwning your stuff
I'm in your browser, pwning your stuffKrzysztof Kotowicz
 
Advanced Chrome extension exploitation
Advanced Chrome extension exploitationAdvanced Chrome extension exploitation
Advanced Chrome extension exploitationKrzysztof Kotowicz
 
Html5: Something wicked this way comes (Hack in Paris)
Html5: Something wicked this way comes (Hack in Paris)Html5: Something wicked this way comes (Hack in Paris)
Html5: Something wicked this way comes (Hack in Paris)Krzysztof Kotowicz
 
Something wicked this way comes - CONFidence
Something wicked this way comes - CONFidenceSomething wicked this way comes - CONFidence
Something wicked this way comes - CONFidenceKrzysztof Kotowicz
 
Html5: something wicked this way comes - HackPra
Html5: something wicked this way comes - HackPraHtml5: something wicked this way comes - HackPra
Html5: something wicked this way comes - HackPraKrzysztof Kotowicz
 
Html5: something wicked this way comes
Html5: something wicked this way comesHtml5: something wicked this way comes
Html5: something wicked this way comesKrzysztof Kotowicz
 
Creating, obfuscating and analyzing malware JavaScript
Creating, obfuscating and analyzing malware JavaScriptCreating, obfuscating and analyzing malware JavaScript
Creating, obfuscating and analyzing malware JavaScriptKrzysztof Kotowicz
 
SQL Injection: complete walkthrough (not only) for PHP developers
SQL Injection: complete walkthrough (not only) for PHP developersSQL Injection: complete walkthrough (not only) for PHP developers
SQL Injection: complete walkthrough (not only) for PHP developersKrzysztof Kotowicz
 

Mehr von Krzysztof Kotowicz (15)

Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)
Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)
Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)
 
Trusted Types @ W3C TPAC 2018
Trusted Types @ W3C TPAC 2018Trusted Types @ W3C TPAC 2018
Trusted Types @ W3C TPAC 2018
 
Trusted Types and the end of DOM XSS
Trusted Types and the end of DOM XSSTrusted Types and the end of DOM XSS
Trusted Types and the end of DOM XSS
 
Biting into the forbidden fruit. Lessons from trusting Javascript crypto.
Biting into the forbidden fruit. Lessons from trusting Javascript crypto.Biting into the forbidden fruit. Lessons from trusting Javascript crypto.
Biting into the forbidden fruit. Lessons from trusting Javascript crypto.
 
Hacking HTML5 offensive course (Zeronights edition)
Hacking HTML5 offensive course (Zeronights edition)Hacking HTML5 offensive course (Zeronights edition)
Hacking HTML5 offensive course (Zeronights edition)
 
I'm in ur browser, pwning your stuff - Attacking (with) Google Chrome Extensions
I'm in ur browser, pwning your stuff - Attacking (with) Google Chrome ExtensionsI'm in ur browser, pwning your stuff - Attacking (with) Google Chrome Extensions
I'm in ur browser, pwning your stuff - Attacking (with) Google Chrome Extensions
 
HTML5: Atak i obrona
HTML5: Atak i obronaHTML5: Atak i obrona
HTML5: Atak i obrona
 
I'm in your browser, pwning your stuff
I'm in your browser, pwning your stuffI'm in your browser, pwning your stuff
I'm in your browser, pwning your stuff
 
Advanced Chrome extension exploitation
Advanced Chrome extension exploitationAdvanced Chrome extension exploitation
Advanced Chrome extension exploitation
 
Html5: Something wicked this way comes (Hack in Paris)
Html5: Something wicked this way comes (Hack in Paris)Html5: Something wicked this way comes (Hack in Paris)
Html5: Something wicked this way comes (Hack in Paris)
 
Something wicked this way comes - CONFidence
Something wicked this way comes - CONFidenceSomething wicked this way comes - CONFidence
Something wicked this way comes - CONFidence
 
Html5: something wicked this way comes - HackPra
Html5: something wicked this way comes - HackPraHtml5: something wicked this way comes - HackPra
Html5: something wicked this way comes - HackPra
 
Html5: something wicked this way comes
Html5: something wicked this way comesHtml5: something wicked this way comes
Html5: something wicked this way comes
 
Creating, obfuscating and analyzing malware JavaScript
Creating, obfuscating and analyzing malware JavaScriptCreating, obfuscating and analyzing malware JavaScript
Creating, obfuscating and analyzing malware JavaScript
 
SQL Injection: complete walkthrough (not only) for PHP developers
SQL Injection: complete walkthrough (not only) for PHP developersSQL Injection: complete walkthrough (not only) for PHP developers
SQL Injection: complete walkthrough (not only) for PHP developers
 

Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScript

  • 1. Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScript Krzysztof Kotowicz PHP Developer http://web.eskot.pl OWASP Medycyna Praktyczna krzysztof@kotowicz.net Czerwiec 2010 Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP Foundation http://www.owasp.org
  • 2. Plan  Teoria - Zaciemnianie i analiza  ogólnie  w JavaScript  Praktyka - omijanie automatycznych analizatorów  jsunpack  JavaScript unpacker  Capture-HPC OWASP 2
  • 3. Teoria OWASP
  • 4. Zaciemnianie kodu Cel - utrudnić analizę OWASP 4
  • 5. Zaciemnianie kodu  Nie jest możliwe "zaciemnienie absolutne" [cs.princeton.edu]  Analiza jako debugging Debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? Brian Kernighan, The Elements of Programming Style OWASP 5
  • 6. Metody zaciemniania  for while + if  Iteracja rekursja  Skomplikowane wyrażenia logiczne  Martwe gałęzie kodu (dummy code)  Quasitautologie [blog.didierstevens.com]  Enigmatyczne nazwy OWASP 6
  • 7. Metody zaciemniania cd. JavaScript to język dynamiczny i funkcyjny  Kod tworzony dynamicznie – eval  String.fromCharCode, unescape  Wyrażenia regularne - String.replace  Packery, np.  [dean.edwards.name]  [developer.yahoo.com]  [malwareguru.org]  [closure-compiler.appspot.com]  Inne - np. WhiteSpace Obfuscation [ktcorpsecurity.com] OWASP 7
  • 8. Aktywna obrona przed analizą  Function.toString / arguments.callee.toString [isc.sans.org]  autoszyfrowanie [isc.sans.org]  wykrywanie przeglądarki  DOM  window, navigator  timingi  cookies  pozycja myszki, rozdzielczość ekranu  Kod tylko raz dla IP [research.zscaler.com] OWASP 8
  • 9. Obrona przed analizą – specyfika języka function is_even(n) { var parameter_is_even = (n % 2) == 0 ? true : false; return parameter_is_even; } alert(is_even(16)); OWASP 9
  • 10. Rozwiązanie OWASP 10
  • 11. Jak analizować JavaScript?  Poznaj JavaScript!  Obserwuj efekty działania kodu w kontrolowanym środowisku  Przeładuj funkcje  eval  String.fromCharCode  Stopniowo odciemniaj  Miej cierpliwość, bądź pomysłowy OWASP 11
  • 12. Analiza JavaScript ...  Bardziej heurystyka niż algorytm  Proces bardziej ręczny niż automatyczny  Człowiek jest niezbędny  Narzędzia pomagają, ale zawodzą! OWASP 12
  • 13. Praktyka OWASP
  • 14. jsunpack  Uruchamia JS wewnątrz środowiska SpiderMonkey [mozilla.org]  Na podstawie URL, PCAP, pliku JS/HTML…  SM jest wzbogacony o:  emulację DOM  emulację obiektów przeglądarki  uruchomienie zdarzeń onload()  monitoruje m.in. eval(), setTimeout()  skanuje używając sygnatur OWASP 14
  • 15. jsunpack - słabe punkty  Emuluje środowisko przeglądarki  Kod, który się nie wykona jest sprawdzany wyłącznie sygnaturami OWASP 15
  • 16. Ominięcie zabezpieczeń if (fake_browser) { do_no_harm(); } else { redirect_to_malicious_website(); // or obfuscate an exploit }  Musimy wykryć, że kod działa w jsunpack OWASP 16
  • 17. Jak wykryć jsunpack? Na wiele sposobów:  Zła implementacja window.location window.location.host = ścieżka do pliku fake_browser = window.location.host.match('/');  Dodaje swoje zmienne globalne fake_browser = (typeof my_location != "undefined"); // my_navigator, my_activex, my_element, // the_activex, app, ... OWASP 17
  • 18. Jak wykryć jsunpack cd.  Podmienia/dodaje niektóre funkcje fake_browser = (window.open.toString().match(/print/)); fake_browser = (alert.toString().match(/{s*}/));  Niepełna emulacja obiektów fake_browser = (typeof PluginArray.prototype.refresh == "undefined"); fake_browser = (document.title == 'My Title'); OWASP 18
  • 19. Jsunpack - bonus  jsunpack wykonuje nie tylko JavaScript <script type="text/dummy"> // good enough for jsunpack </script>  Kod wykona się w jsunpack, ale nie w przeglądarkach OWASP 19
  • 20. DEMO 1 OWASP 20
  • 21. jsunpack - podsumowanie  Można łatwo wykryć, że JavaScript działa w sandboxie jsunpack  Można to wykorzystać to niepodejmowania złośliwych działań  Jeśli złośliwy kod jest zaciemniony, ominie sygnatury  Automatyczna analiza jsunpack nie wykryje niczego OWASP 21
  • 22. Dean Edwards' Unpacker A JavaScript Decompressor [dean.edwards.name]  Odwraca działanie packera tego samego autora  Zasada działania packera: eval(function(p,a,c,k,e,r){/*kod*/}(para, metry)) var packer = function(p,a,c,k,e,r) {}; var s = packer(para,metry); eval(s); OWASP 22
  • 23. Dekompresja - krok 1  Zastąp eval() przypisaniem do zmiennej znakowej // spakowany kod w zmiennej input var input="eval(function(p,a,c,k...."; eval("var value=String" + input.slice(4)); // obcinamy "eval" // w efekcie wykonany kod: var value=String(function(p,a,c,k..);  W value jest zdekompresowany kod OWASP 23
  • 24. Dekompresja - krok 1  Zastąp eval() przypisaniem do zmiennej znakowej // spakowany kod w zmiennej input var input="eval(function(p,a,c,k...."; eval("var value=String" + input.slice(4)); // obcinamy "eval" // w efekcie wykonany kod: var value=String(function(p,a,c,k..);  W value jest zdekompresowany kod  Wykonanie sklejonego kodu! OWASP 24
  • 25. Dekompresja - krok 2  Użyj Function.toString(), żeby wyświetlić kod eval( "var unpacked = function() {" + value + "}" ); alert(unpacked.toString());  Rozpakowany kod NIE WYKONUJE SIĘ  Disclaimer - rzeczywisty kod jest trochę inny, tutaj upraszczam OWASP 25
  • 26. Dean Edwards Unpacker - słabe punkty  Sklejanie zmiennych znakowych i wykonywanie sklejonego kodu (injection, anyone?)  Użycie stałej - obcinamy na ślepo 4 pierwsze znaki  eval() bez walidacji parametru  Polega na Function.toString() OWASP 26
  • 27. Dean Edwards Unpacker - rozbrajanie  eval() używa jednego parametru  String() używa jednego parametru  ...ale możemy podać więcej :) eval("code"); eval("code", "ignored"); eval("code", malicious()); String("code", malicious());  Arbitrary code execution bez zmieniania funkcji p,a,c,k,e,r! OWASP 27
  • 28. Dean Edwards Unpacker - rozbrajanie cd. eval(function(p,a,c,k,e,r){...}(para,metr y),malicious()); var value=String(function(p,a,c,k,e,r){...}(p ara,metry),malicious());  malicious() wykona się w spakowanym kodzie, jak i w dekompresorze OWASP 28
  • 29. Dean Edwards Unpacker - rozbrajanie cd. Jak to wykorzystać?  Unpacker wykorzystuje Function.toString()  Podmieńmy ją!  malicious() to np. zaciemniony: Function.prototype.toString = function() { return 'harmless code'; } OWASP 29
  • 30. DEMO 2 OWASP 30
  • 31. Dean Edwards Unpacker - point of concept OWASP 31
  • 32. Honeypoty wysoko interaktywne Na przykładzie Capture-HPC [projects.honeynet.org]  Kod wykonuje się w rzeczywistej przeglądarce na maszynie wirtualnej  Serwer dostarcza listę adresów URL  Klient uruchamia przeglądarki i czeka…  Monitorowane są efekty działania kodu  System plików  Rejestr  Procesy  Jeśli dzieje się coś podejrzanego, URL klasyfikowany jako złośliwy OWASP 32
  • 33. Honeypoty wysoko interaktywne cd.  Środowisko uruchomieniowe jest takie samo  Nie ma żadnej emulacji Czy da się wykryć, że jesteśmy śledzeni? OWASP 33
  • 34. Słaby punkt OWASP 34
  • 35. Honeypoty wysoko interaktywne - automat  Nie rusza myszką  Nie klika  Nie przeciąga  Nie nawiguje po stronie  Jest „głupi” OWASP 35
  • 36. Honeypoty wysoko interaktywne - internauta  Rusza myszką  Klika  Przeciąga  Nawiguje po stronie  Jest głupi OWASP 36
  • 37. Honeypoty wysoko inter. – social engineering OWASP 37
  • 38. Honeypoty wysoko inter. – social engineering OWASP 38
  • 39. Honeypoty wysoko inter. - podsumowanie  Nie ma warstwy emulacji – nie można wykryć różnic  Kod wykonuje się w rzeczywistym środowisku  Najsłabszym punktem brak „czynnika ludzkiego”  Uruchomienie złośliwego kodu po interakcji ze stroną OWASP 39
  • 40. Podsumowanie  Zaciemnianie tylko spowalnia analizę  Kod może aktywnie "bronić się"  Do kompletnej analizy niezbędny jest człowiek  Analiza wymaga dużych umiejętności  Narzędzia automatyczne można oszukać  niedoskonałość emulacji  błędy  niepełna interakcja ze stroną OWASP 40
  • 41. Linki Narzędzia  jsunpack.blogspot.com  dean.edwards.name/unpacker/  projects.honeynet.org/capture-hpc  malzilla.sourceforge.net Zaciemnianie i analiza  isc.sans.org/diary.html  www.malwareguru.org  delicious.com/koto/obfuscation  closure-compiler.appspot.com  tinyurl.com/bootcamp20 JavaScript  www.slideshare.net/ferrantes/just-advanced-javascript  jsninja.com krzysztof@kotowicz.net http://blog.kotowicz.net OWASP 41