background image

40

 

HAKIN9

ATAK

7-8/2009

O

programowanie pozwalające tworzyć 
botnety jest obecnie ostatnim krzykiem 
mody, jeśli chodzi o szkodliwy kod. 

Nic zresztą dziwnego – wynika to bowiem 
z popularności podróbek Rolexów, minigier, 
notabene w postaci plików .exe, oraz wszelkich 
możliwych fetyszy. Ponieważ zasady rynku 
mówią, że jeśli istnieje popyt, znajdzie się i 
podaż, spamerzy szybko zorientowali się, że 
dużo korzystniejszym dla nich rozwiązaniem 
jest utrzymywanie stadka wysyłających 
niechcianą pocztę komputerów niż ciągła walka 
z dostawcami Internetu, szybko odcinającymi 
im dostęp. Tak narodziły się botnety.

Teoria

Botnet to sieć współdziałających ze sobą 
komputerów, które wykonują polecenia zadawane 
im przez kontrolera. Różni się on jednak 
tym od np. klastra, że komputery do botnetu 
podłączane są podstępnie, a sami użytkownicy 
są w większości przypadków nieświadomi 
współuczestnictwa w procederze. Do niedawna 
popularna była architektura klient-serwer, w 
której boty łączyły się wszystkie z kontrolerem 
i oczekiwały na polecenia. Najpopularniejszym 
protokołem, ze względu na prostotę 
implementacji, był IRC. Kiedy jednak rozpoczęto 
aktywną walkę z botnetami poprzez zamykanie 
kanałów, na których znajdowały się kontrolery, 
twórcy botnetów zmienili znacznie architekturę. 
Zamiast prostego kanału IRC zabezpieczonego 

PIOTR JASTAK

Z ARTYKUŁU 

DOWIESZ SIĘ

czym są botnety,

jakie istnieją podejścia co do 

architektury botnetów,

jak działa robak Conficker.

CO POWINIENEŚ 

WIEDZIEĆ

jak działają różne typy sieci,

jakie są podstawy zachowań 

złośliwego oprogramowania,

czym są ataki typu przepełnienia 

bufora,

jak działa szyfrowanie i podpisy 

elektroniczne.

hasłem, botnety są dziś kontrolowane z wielu 
serwerów przypominających strukturę Peer-
to-Peer, sam ruch kontrolerzy-boty jest zaś 
szyfrowany, a w niektórych przypadkach 
używanie podpisów cyfrowych pozwala na 
propagację poleceń z bota do bota, eliminując 
całkowicie konieczność istnienia centrów 
dowodzenia.

Obydwie architektury mają swoje wady 

i zalety: botnety scentralizowane są łatwe 
do zniszczenia poprzez odcinanie dostępu 
kontrolerom. Łatwo jednak przejąć nad nimi 
kontrolę w przypadku np. wykradzenia hasła 
do kanału IRC. Botnety zdecentralizowane 
są praktycznie niemożliwe do zniszczenia w 
konwencjonalny sposób, ale opierają się na 
niezawodności botów przekazujących dalej 
polecenia, przez co propagacja komend może 
zajmować więcej czasu i być zawodna. 

Do działania botnetu wymagane jest 

odpowiednie oprogramowanie zainstalowane na 
komputerach ofiar. Zwykle do rozprzestrzeniania 
oprogramowania (będącego niejako rootkitem) 
używane są robaki, w tym tytułowy Conficker. 
Propagacja następuje najczęściej poprzez 
e-maile lub luki w oprogramowaniu. E-maile 
to sposób rozprzestrzeniania wymagający 
od użytkownika otwarcia załącznika z kopią 
downloadera lub samego robaka, lub przejścia 
na stronę, która to umożliwia. Downloader jest 
programem pośredniczącym i umożliwia ukrycie 
szkodliwego kodu poprzez pobieranie go w 

Stopień trudności

Conficker 

o botnetach 

słów kilka

Ataki uniemożliwiające dostęp do stron internetowych, czy kradzieże 

danych kont bankowych na masową skalę to tematy często 

przewijające się w wiadomościach związanych z komputerami. Coraz 

częściej stoją za tym działaniami botnety.

background image

41

 

HAKIN9 

CHARAKTERYSTYKA ZACHOWAŃ BOTNETÓW

7-8/2009

częściach lub w zaszyfrowanej formie, 
a następnie tworzenie właściwego pliku 
wykonywalnego dopiero na miejscu. 
Drugi sposób propagacji to wykorzystanie 
luki w oprogramowaniu. Nie wymaga 
ono jakiejkolwiek interakcji ze strony 
użytkownika, a zatem jest znacznie 
trudniejsze do wykrycia. Żywotność 
tej metody zależna jest jednak tylko 
od ilości komputerów, na których 
działa oprogramowanie posiadające 
daną lukę. Ponieważ z czasem ilość 
niezaktualizowanych wersji maleć będzie 
do zera, rozprzestrzenianie za pomocą tej 
metody przebiega szybko, lecz trwa krótko. 
Aby utrzymać botnet przy życiu, potrzebna 
jest inicjatywa ze strony twórców, którzy 
uaktualniać będą samego robaka, aby ten 
atakował coraz to nowe luki.

Botnet w przykładzie: Storm

Chociaż botnety istniały już wcześniej (np. 
SpamThru w 2006 roku), to prawdziwą 
sławę zyskał sobie robak o nazwie 
Storm. 15 stycznia 2007 roku Europę 
nawiedziła burza o nazwie Kyrill. Wiejąc 
z siłą huraganu, zabiła 44 osoby i 
spowodowała straty sięgające ponad 
miliard euro. 19 stycznia 2007 roku do 
skrzynek mailowych tysięcy osób trafił e-
mail z tytułem 230 rannych po uderzeniu 
burzy w Europie
 (230 dead as storm 
batters Europe
) i załącznikiem będącym 
plikiem wykonywalnym, który uruchomiony 
instalował się jako usługa wincom32 i 
rozpoczynał dalsze rozsyłanie pakietów 
na przedziały adresów zakodowane 
w samym malware, umożliwiając też 
zdalną kontrolę komputera. Oprócz tego 
pobierał też pliki wykonywalne służące do 
wysyłania poczty, kradzieży kont e-mail 
czy organizowania ataków DDoS. Storm 
korzystał z dynamicznego systemu DNS, 
regularnie przenosząc pliki z serwera 
na serwer, rejestrując i derejestrując 
maszyny przypisane do swoich domen. 
Ponadto serwery co paręnaście minut 
generowały nową kopię plików, czyniąc 
ze Storma robaka polimorficznego. Ruch 
wewnątrz samego botnetu odbywa się za 
pomocą protokołów eDonkey i Overnet 
i jest szyfrowany z podziałem na strefy; 
dostęp do każdej z nich wymaga innego 
klucza. Jakby tego było mało, próby 
wielorazowego łączenia się z serwerami 
udostępniającymi kopię robaka kończą 

Rysunek 1. 

Scentralizowany botnet – kontrolerzy za pomocą jednego serwera komunikują 

się z botami

Rysunek 2. 

Zdecentralizowany botnet – kontrolerzy komunikują się z niektórymi botami, 

które przesyłają polecenia dalej dzięki utrzymywanej liście botów działającej na zasadzie 

architektury podobnej do P2P

background image

ATAK

42

 

HAKIN9 7-8/2009

CHARAKTERYSTYKA ZACHOWAŃ BOTNETÓW

43

 

HAKIN9 

7-8/2009

się atakiem DDoS na komputer osoby 
próbującej rozpracować zachowanie 
Storma. Wg Joshuy Cormana, pracownika 
firmy SecureWorks, wykryte próby 
debuggowania plików wykonywalnych 
robaka kończą się atakiem DDoS ze 
strony reszty botnetu. 

Dla Storma znalazło się wiele 

zastosowań, w tym oczywiście użyczanie 
go spamerom, ataków na serwery czy 
próby oszustw giełdowych. Ostatnio 
jednak jego aktywność zmalała, przyczyny 
czego należałoby szukać we fragmentacji 
botnetu oraz stopniowo łatanych lukach w 
komputerach potencjalnych ofiar.

Bohater tytułowy

Na sukces Confickera, znanego też 
jako Downadup, czy Kido, składa się 
kilka czynników. W przeciwieństwie 
do robaka Storm, nie rozprzestrzenia 
się on przy pomocy poczty e-mail, 
ale korzystając z luki MS08-067 w 
systemach Microsoft Windows. Głównym 
powodem niebywałego sukcesu jest 
jednak fakt, że 30% systemów z Redmond 
działających na całym świecie nie 
ma zainstalowanej łatki wydanej 15 
października przez Microsoft, która 
przed skutkami wykorzystania tej właśnie 
luki broniła. Dodatkowo wystawiony 
na niebezpieczeństwo jest nie tylko 
Windows XP, gdyż luka w usłudze serwer 
występuje także w systemach Windows 
2000, 2003 i Vista. Po wykorzystaniu tejże 
luki wykonywany jest kod pobierający 
bibliotekę DLL wykonywaną jako część 
usługi svchost.exe. Biblioteka ta będzie 
ładowana przy każdym starcie komputera. 
Po zainstalowaniu się, biblioteka 
Confickera sprawdza, czy w sieci działa 
firewall, a jeśli tak, to wysyła prośbę 
UPNP o udostępnienie portu o wysokim 
numerze, po czym otwiera port o tym 
samym numerze na lokalnej maszynie. 
Zależnie od wersji, Conficker korzysta z 

Rysunek 3. 

Zmienność Confickera przejawia się nie tylko w zmianie kodu w przeciągu 

minut, ale także zmianie serwerów hostujących jego kod, wybieranych z dynamicznej puli 

w przeciągu godzin.

��

��

���

���

��

��

MS08-067

MS08-067 to nazwa łatki opublikowanej przez Microsoft, i luki, którą łata. Jest to typowy błąd przepełnienia bufora w jednej z funkcji biblioteki netapi32.dll, 
w usłudze Remote Procedure Call, w funkcji odpowiedzialnej za przetwarzanie adresu katalogu. W tym celu funkcja wyszukuje od tyłu ciągu znaków 
ciągu \.., po czym szuka wstecz następnego ukośnika, a następnie od pozycji tego ukośnika kopiuje ciąg do następnego ukośnika. A zatem ciąg 

aaa\bbb\.. zostanie zamieniony na aaa, ale już ciąg aaa\.. spowoduje wyszukiwanie aż do napotkania w pamięci kolejnego ukośnika. Jeśli uda 

nam się umieścić ukośnik gdzieś w pamięci przed aaa\.., to funkcja skopiuje dane następujące po nim, powodując przepełnienie bufora. Wystarczy w 

odpowiednim miejscu w przepełniającym ciągu umieścić np. adres funkcji skoku do ESP, który będzie wskazywał na resztę naszego shellkodu. Przykład 
typu Proof-of-Concept jest dostępny na: http://www.milw0rm.com/exploits/6824

Tabela 1. 

Największe botnety na świecie

Nazwy

Ilość botów

Conficker, Downup, Downadup, Kido

10 000 000

Kraken

495 000

Srizbi, Cbeplay, Exchanger

450 000

Bobax, Bobic, Oderoor, Cotmonger

180 000

Rustock, RKRustok, Costrat 

150 000

Cutwail, Pandex

125 000

Storm, Nuwar, Peacomm, Zhelatin 

85 000

background image

ATAK

42

 

HAKIN9 7-8/2009

CHARAKTERYSTYKA ZACHOWAŃ BOTNETÓW

43

 

HAKIN9 

7-8/2009

różnych usług dynamicznego DNS, co 
3 godziny generując listę 250 nowych 
domen o losowych nazwach, po czym 
próbuje łączyć się z tymi adresami URL. 
Jeśli udaje mu się, następuje pobranie 
właściwego pliku binarnego robaka z 
portu TCP 80 za pomocą zapytania 
HTTP w formie 

http://domenazlisty/

search?q=n\&aq=7

 (wariant A), lub 

http:

//domenazlisty/search?q=n

 (wariant 

B). Plik ten jest zaszyfrowany kluczem 
asymetrycznym, a jego autentyczność 
potwierdzana jest zwykle 4096-bitowym 
podpisem elektronicznym RSA. Do 
szyfrowania stosowany jest szyfr RC4, 
a klucze zakodowane są w samych 
funkcjach pobierających pliki binarne. Na 
początku funkcja deszyfrująca sprawdza, 
czy pobrany plik ma ponad 128 lub 512 
bajtów, odpowiednio dla wariantu A i B, 
następnie weryfikuje podpis elektroniczny. 
Jeśli ten się zgadza, plik binarny jest 
deszyfrowany, a następnie uruchamiany 
jest właściwy kod robaka, który przejmuje 
kontrolę.

Po przejęciu kontroli, Conficker 

tworzy bibliotekę DLL o losowej nazwie 
i umieszcza ją w katalogu system32
maskując ją przez zmienienie czasu 
ostatniej edycji na taki sam jak w 
kernel32.dll. Następnie biblioteka 
Confickera jest używana jako usługa 
systemu Windows, uruchamiana przy 
każdym starcie. W tym celu Conficker 
tworzy klucz o losowej nazwie w 
SOFTWARE\Microsoft Windows NT\
CurrentVersion\SvcHost
. Aby uchronić 
się przed prostym wykryciem, nazwa 
usługi jest pustym ciągiem, a jej typ to 
niewidzialny. Ponadto funkcja ładująca 

bibliotekę Confickera nigdy nie kończy 
wykonywania, co powoduje, że nie jest 
wymieniona na liście procesów DLL. 
Sam kod robaka jest dobrze chroniony 
przed debugowaniem i uruchamianiem w 
środowiskach wirtualnych, jednak stosując 
triki, takie jak wywoływanie biblioteki z 
własnego programu, można odkryć jego 
część. [1]

Podczas działania Conficker 

korzysta z 3 portów: 53/UDP (DNS), 
80/TCP (HTTP) i 445/TCP(SMB). Co 3 
lub 2 godziny (wersja A lub B) następuje 
wyraźny wzrost aktywności na porcie 
DNS, co potwierdza, że robak próbuje 
znów połączyć się z którymś z 250 
losowo wybranych adresów HTTP. Tak 
jak Storm, implementuje on architekturę 
podobną do Peer-to-Peer. Same serwery 
z którymi łączą się poszczególne boty 
są regularnie zmieniane. Polega to na 
odrejestrowaniu z usług DNS obecnych 
adresów serwerów i rejestracji nowych. 
Jak dotąd nie wykryto żadnego wzoru 
wg którego wybierane byłyby nowe 
serwery, a sam proces wydaje się 
być realizowany automatycznie, co 
jest nie lada osiągnięciem i nowością, 
jeśli chodzi o zabezpieczenia przed 
unieszkodliwieniem. Jak dotąd botnet 
ten jest wykorzystywany przeważnie 
do rozsyłania spamu, lecz biorąc pod 
uwagę jego rozmiar, ma on olbrzymie 
możliwości - nic więc dziwnego, że jego 
twórcy tak dobrze zabezpieczyli się przed 
jego przechwyceniem. Rozpoczęcie 
usuwania robaka wymagałoby usunięcia 
klucza rejestru, zrestartowanie systemu 
i usunięcie pliku DLL. Wszystkie te kroki 
mogą być jednak utrudnione przez 

najnowszą wersję Confickera, która 
umożliwia pobieranie i wykonywanie 
dowolnych plików binarnych. Metodą 
ochrony przed ewentualnymi atakami 
może być tylko wyspecjalizowany 
sprzęt sieciowy zdolny do wykrywania i 
szybkiego reagowania na zalewy ruchu.

Podsumowanie

Conficker nie jest niezwykły, jeśli chodzi 
o mechanizm rozprzestrzeniania się. 
Jego gigantyczny rozrost wynika głównie 
nie z zaawansowanych technik, lecz 
z beztroski, z jaką podchodzimy do 
aplikowania łatek bezpieczeństwa. 
Obecnie rozmiar Confickera szacuje 
się na 10 000 000 maszyn (F-Secure), 
czyli ponad 100 razy więcej niż 
Storm. Zakładając optymistycznie, że 
każda z tych maszyn dysponuje tylko 
modemem 56k, dochodzimy do wniosku, 
że Conficker byłby prawdopodobnie 
w stanie odciąć kompletnie dostęp 
do Internetu w Kanadzie i Francji 
jednocześnie! Gdyby stosować się 
do zasad profilaktyki, cały problem 
prawdopodobnie nigdy by się nie 
pojawił, lecz teraz jest już za późno. 
Microsoft zaoferował 250 tysięcy 
dolarów za informację, która doprowadzi 
do ujęcia kontrolerów i/lub twórców 
botnetu. Tymczasem sam Conficker 
zaczął stabilizować swój rozmiar, a 
jego twórcy najprawdopodobniej są 
gotowi pławić się w dużo większych 
pieniądzach otrzymanych po użyczaniu 
swojego tworu. Tym samym zapowiada 
się nadejście ery botnetów, w której 
przestępcy dysponują większą 
mocą obliczeniowo-przesyłową niż 
naukowcy. Jedyna dobra nowina to 
ta, że każdy botnet z czasem osiąga 
swój maksymalny rozmiar, a więc i dni 
Confickera są policzone, prędzej czy 
później każdy przesiada się bowiem na 
nowy sprzęt, lub też instaluje system 
na nowo. Pozostaje tylko aplikować 
narzędzia usuwające [2] i liczyć na to, 
że kontrolerzy nie zdecydują się nigdy 
skorzystać z pełnych możliwości swojego 
tworu.

Źródła

• 

http://www.secureworks.com/research/threats/topbotnets/?threat=topbotnets,

• 

http://www.theregister.co.uk/2009/01/26/conficker_botnet/.

W Sieci

•   [1] http://vrt-sourcefire.blogspot.com/2009/02/making-conficker-cough-up-goods.html – udany 

częściowy wgląd w kod robaka,

•   http://mtc.sri.com/Conficker/ – bardzo dokładna analiza Confickera,
•   http://www.cyber-ta.org/pubs/StormWorm/report/ – bardzo dokładna analiza Storma,
•   http://www.honeynet.org/papers/bots/ – projekt Honeynet zajmujący się śledzeniem 

aktywności botnetów,

•   http://www.microsoft.com/technet/security/Bulletin/MS08-067.mspx – biuletyn informacyjny 

Microsoftu z informacjami odnośnie luki pozwalającej rozprzestrzeniać się Confickerowi.

Piotr Jastak

Autor jest entuzjastą tematyki komputerowej. Interesuje 

się bezpieczeństwem, administrowaniem systemami i 

sieciami.

Kontakt z autorem: adh0c@gazeta.pl