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