Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScript. OWASP Czerwiec 2010. The OWASP Foundation http://www.owasp.org



Podobne dokumenty
Wykrywanie i analiza złośliwych stron WWW. Łukasz Juszczyk CERT Polska/NASK lukasz.juszczyk@cert.pl

OWASP OWASP. The OWASP Foundation Cross-Site Scripting. Ryzyko do zaakceptowania? Warszawa, 27 stycznia 2011 Michał Kurek

Jak efektywnie wykrywać podatności bezpieczeństwa w aplikacjach? OWASP The OWASP Foundation

OWASP OWASP. The OWASP Foundation Mariusz Burdach Prevenity

Obsługa incydentów bezpieczeństwa: część I, z punktu widzenia menadżera. OWASP The OWASP Foundation

Narzędzia OWASP dla developerów OWASP ESAPI & AppSensor OWASP The OWASP Foundation

XML extensible Markup Language. część 5

Funkcje i instrukcje języka JavaScript

Fuzzing OWASP The OWASP Foundation Piotr Łaskawiec J2EE Developer/Pentester

Bezpieczeństwo aplikacji Czy musi być aż tak źle? OWASP The OWASP Foundation

Rys.2.1. Trzy warstwy stanowiące podstawę popularnego podejścia w zakresie budowy stron internetowych [2]

Tworzenie Stron Internetowych. odcinek 10

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

CZYM JEST JAVASCRIPT?

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Redis, skrypty w języku Lua

JavaScript funkcyjność

Wybrane działy Informatyki Stosowanej

Wykład 03 JavaScript. Michał Drabik

Aplikacje WWW - laboratorium

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Należy ściągnąć oprogramowanie Apache na platformę

Aplikacje WWW - laboratorium

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Bazy Danych i Usługi Sieciowe

Algorytmy i struktury danych

Szkolenie wycofane z oferty. Programowanie w JavaScript (zawiera jquery)

Cw.12 JAVAScript w dokumentach HTML

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

JavaScript - korzenie

Rys.2.1. Drzewo modelu DOM [1]

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Personal Home Page PHP: Hypertext Preprocessor

Zapewnienie bezpieczeństwa w całym cyklu życia aplikacji (czyli dlaczego lepiej zapobiegać chorobom, niż leczyć je w zaawansowanym stadium)

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Programowanie w języku Python. Grażyna Koba

Robert Barański, AGH, KMIW MathScript and Formula Nodes v1.0

Michał Bielecki, KNI 'BIOS'

Wstęp. Ale po co? Implementacja

Wybrane działy Informatyki Stosowanej

Testowanie II. Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage).

Zdarzenia Zdarzenia onload i onunload

JQuery. $('#pierwszy').css('color','red').hide('slow').show(3000); $(document).ready(function() { //... tutaj nasze skrypty jquery //...

Grafika PHP dla początkujących

JAVASCRIPT PODSTAWY. opracowanie: by Arkadiusz Gawełek, Łódź

Python wstęp do programowania dla użytkowników WCSS

Instrukcja obsługi User s manual

Lekcja 1. Składnia języka zmienne i podstawowe instrukcje PHP. Do wyświetlania tekstu służy instrukcja echo echo Hello world ;

Wprowadzenie do języka Java

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Bezpieczeństwo systemów komputerowych. Java i JavaScript. Java i JavaScript. Java - historia

1 Podstawy c++ w pigułce.

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

OWASP Day - Spring of Code 2k7 OWASP The OWASP Foundation

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Instrukcje cykliczne (pętle) WHILE...END WHILE

Test przykładowy 2 PAI WSB Wrocław /06/2018

Podstawy JavaScript ćwiczenia

Języki skryptowe w programie Plans

Być może jesteś doświadczonym programistą, biegle programujesz w Javie,

Optimizing Programs with Intended Semantics

Scenariusz Web Design DHTML na 10 sesji. - Strony statyczne I dynamiczne. - Dodawanie kodu VBScript do strony HTML. Rysunek nie jest potrzebny

SSK - Techniki Internetowe

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Visual Basic Debugging and Error Handling

Zajęcia 4 - Wprowadzenie do Javascript

Programowanie obiektowe

Interfejs do potwierdzania produkcji w SAP ze skanerem ELZAB

Laboratorium - Konfiguracja ustawień przeglądarki w Windows 7

Wstęp do programowania

Programowanie Systemów Czasu Rzeczywistego

1 Podstawy c++ w pigułce.

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Krótki kurs JavaScript

Zagrożenia związane z udostępnianiem aplikacji w sieci Internet

for (inicjacja_warunkow_poczatkowych; wyrazenie_warunkowe; wyrazenie_zwiekszajace) { blok instrukcji; }

Podstawy programowania w języku C i C++

Przegląd języka Python. Łukasz Anwajler

Podstawy programowania

JAVAScript w dokumentach HTML - przypomnienie

PHP: bloki kodu, tablice, obiekty i formularze

Szkoła programisty PLC : sterowniki przemysłowe / Gilewski Tomasz. Gliwice, cop Spis treści

Przygotowanie do nowoczesnego programowania po stronie przeglądarki. (HTML5, CSS3, JS, wzorce, architektura, narzędzia)

Umieszczanie kodu. kod skryptu

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

I.Wojnicki, PHP. Smarty. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie. 28 marca 2014

Laboratorium - Konfiguracja ustawień przeglądarki w Windows XP

Laboratorium - Konfiguracja ustawień przeglądarki w Windows Vista

Podstawy Programowania Podstawowa składnia języka C++

Jak okiełznać frontend w Django? Piotr Maliński

Pobieranie argumentów wiersza polecenia

Wstęp do programowania. Różne różności

JAVAScript w dokumentach HTML (1)

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Adam Wójs <adam[shift+2]wojs.pl> git --wprowadzenie

Paradygmaty programowania

Transkrypt:

Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScript Krzysztof Kotowicz PHP Developer OWASP Czerwiec 2010 http://web.eskot.pl Medycyna Praktyczna krzysztof@kotowicz.net 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