cyberbezpieczeństwo i programowanie

SY0-601: Odmiany złośliwego oprogramowania

S

Niniejszy artykuł powstał na bazie moich notatek, które sporządzam na bieżąco, przygotowując się do egzaminu CompTIA Security+ SY0-601. Notatki są w formie opisu zagadnień obowiązujących na egzaminie, zawartych na oficjalnej liście: CompTIA Security+ Certification Exam Objectives. Główne materiały, z których korzystam przygotowując się do egzaminu:

Proszę mieć na uwadze, że artykuł nie wyczerpuje wszystkich opisanych tutaj tematów, a jedynie zawierają ogólne informacje, które trzeba przyswoić przed egzaminem.


Malicious software (w skrócie malware), czyli złośliwe/szkodliwe oprogramowanie, definiuje ogół programów komputerowych, których celem jest zazwyczaj wyrządzenie szkód w systemie komputerowym oraz działanie na niekorzyść jego użytkowników.

Pamiętajmy jednak, że programista to też człowiek i zdarza się jemu (lub jej) popełniać błędy, więc może dojść do sytuacji, gdzie aplikacja niechcący narozrabia. Oprogramowanie zawierające niezamierzone błędy (ang. bugs), które mogą spowodować nieplanowane szkody, nie podpada pod definicję złośliwego oprogramowania. W takim przypadku mówimy po prostu: software is sh*t ;).

Istnieje wiele odmian złośliwego oprogramowania. Jedne umożliwiają zdalny dostęp do zainfekowanego systemu, inne zbierają wrażliwe dane, a jeszcze inne robią rozpierduchę w systemie plików. W tym rozdziale zostały pokrótce opisane najbardziej popularne rodzaje malware’u. Jak zapewne zauważycie, prawie wszystkie wylistowane niżej kategorie nachodzą na siebie w dużym stopniu. Przykładowo, w większości przypadków ransomware (dosłownie: program szantażujący) jest jednocześnie złośliwym oprogramowaniem szyfrującym – cryptomalware. Wiele wymienionych tutaj rodzajów posiada też cechy wirusa komputerowego. Inny przykład: koń trojański umożliwiający zdalny dostęp do zainfekowanego systemu (RAT) jest jednocześnie traktowany jako backdoor, a jeśli stosuje zaawansowane techniki do ukrycia swojej działalności, nadpisując funkcje systemowe, to jest też klasyfikowany jako rootkit. W zasadzie mógłbym tak wymieniać bez końca.

Prawdopodobne jest również ryzyko, że infekcja jednym rodzajem oprogramowania może skutkować instalacją kolejnych typów. Przykładowo, nasz system może mieć podatność (ang. vulnerability), którą wykorzystuje jakiś robak (worm). Kiedy ten dostanie się do systemu i zainstaluje bez naszej wiedzy tylną furtkę (backdoor), ktoś nam nieprzychylny (dajmy na to twórca robaka) ma od teraz zdalny dostęp do naszej maszyny. W tym momencie możliwe jest zdalne ściągnięcie i uruchomienie kolejnej porcji złośliwego kodu, który na przykład zaszyfruje nasze dane (cryptomalware; ransomware) lub przyłączy nas do sieci botnet.

Poniżej znajduje się lista zagadnień z zakresu złośliwego oprogramowania, które obowiązują na egzaminie. Zgodnie z wytycznymi tego działu, egzaminowany powinien być w stanie wskazać typ ataku (w tym przypadku typ złośliwego oprogramowania) na podstawie przedstawionego w pytaniu scenariusza. Na końcu tego artykułu znajduje się również lista kroków, które należy podjąć jeśli nie chcemy paść ofiarą omawianych tutaj programów.

Viruses

Jestem trochę zaskoczony faktem, że termin wirus (ang. virus) nie pojawił się w oficjalnej rozpisce egzaminacyjnej. Powodem może być fakt, że to określenie jest bardzo ogólne. Istnieje wiele odmian złośliwego oprogramowania, które można podpiąć pod definicję wirusa komputerowego, ale mają jednak pewne cechy charakterystyczne, pozwalające na umieszczenie ich w osobnej kategorii.

Niemniej jednak, pytania związane z wirusami mogą pojawić się na egzaminie i na jego potrzeby należy przyswoić następującą definicję: wirus komputerowy (ang. virus) jest rodzajem złośliwego oprogramowania, które jest w stanie samodzielnie się powielać poprzez infekowanie innych plików, ale do zainicjowania procesu replikacji i wykonania pozostałych wpisanych procedur wymagane jest działanie użytkownika, takie jak np. uruchomienie zainfekowanego pliku. Ręczna interwencja jest elementem odróżniającym wirusy od robaków komputerowych (ang. worms), które potrafią rozprzestrzeniać się bez udziału użytkownika, ale o tym trochę później.

To do czego wirus jest zdolny (oprócz replikacji) zależy od intencji, umiejętności i wyobraźni jego autora. Niektóre wirusy cechują się bardzo małą szkodliwością, ponieważ zostały napisane tylko dla zabawy lub ewentualnie ich celem jest wyświetlanie irytujących reklam (adware). W takim przypadku, jesteśmy narażeni jedynie na zauważalny spadek wydajności systemu.

Inne wirusy mogą się dobrze przed nami ukryć oraz zbierać o nas informacje, wliczając te wrażliwe, bez naszej wiedzy (spyware). Dlatego tak istotne jest korzystanie z dobrego antywirusa z aktualną bazą danych – bez tego możemy przez bardzo długi okres nie zorientować, że nasz system jest zainfekowany, a my jesteśmy pod stałą obserwacją. Oczywiście należy pamiętać o tym, że nawet najlepszy antywirus na rynku może okazać się niewystarczający jeśli złapiemy całkiem nowego wirusa, którego sygnatury jeszcze nie zostały rozpracowane przez specjalistów.

Kolejną grupę stanowią wirusy o bardzo wysokim stopniu złośliwości, które są w stanie spowodować nieodwracalne szkody, takie jak zniszczenie lub zaszyfrowanie naszych danych. Dawniej, niektóre wirusy mogły doprowadzić nawet do problemów ze sprzętem (ang. hardware) – więcej informacji na ten temat można znaleźć w tym artykule: Can a virus damage computer hardware?.

Wiemy już, że wirusy można luźno pogrupować sugerując się rezultatami ich działania, więc teraz spróbujmy je sklasyfikować na podstawie wykorzystywanych przez nie technik:

  • Wirusy plikowe/aplikacji – ich działanie polega na dopisywaniu swojego kodu do istniejących plików wykonywalnych lub całkowitym nadpisywaniu tych plików (w takim przypadku oryginalna zawartość pliku jest raczej nie do odzyskania). Po uruchomieniu zainfekowanego pliku wirus rozpoczyna wykonywanie swoich zaprogramowanych procedur. Same wirusy plikowe można podzielić na podkategorie, określające w jaki sposób kod wirusa jest dopisywany do oryginalnego pliku (np. na jego końcu; w nagłówku etc.), ale jest to temat mocno wykraczający poza podstawy wymagane na egzaminie, więc tylko o tym wspominam. Ciekawostką jest fakt, że modyfikacja infekowanych plików może znacząco zwiększyć ich rozmiar, więc za dobrze napisane wirusy uważa się takie, które wykonują swoje zadania zachowując jednocześnie niewielki rozmiar (przy użyciu mniejszej ilości kodu).
  • Wirusy dyskowe/sektorów rozruchowych – dzisiaj już rzadko spotykane wirusy, które zamiast modyfikować pliki, zapisują się w sektorach rozruchowych (ang. boot sectors) nośników pamięci. Wirus aktywuje się w chwili odczytania zawartości zainfekowanego sektora, np. podczas uruchamiania się systemu operacyjnego komputera.
  • Wirusy skryptowe – ta kategoria obejmuje wirusy napisane w językach skryptowych, takich jak JavaScript (JS), Visual Basic Script (VBS), Visual Basic for Application (VBA) czy nawet Python. Generalnie dużo prościej jest stworzyć takiego wirusa, w porównaniu z opisanymi wcześniej wirusami plikowymi, ponieważ tutaj operujemy językiem wysokiego poziomu, który jest interpretowany, a nie kompilowany. Oznacza to, że do zarażenia innych plików skryptowych nie musimy znać struktury binarnych plików wykonywalnych, ponieważ pliki skryptowe zawierają jawny tekst (kod skryptu). Wystarczy więc dokleić złośliwy kod (również w postaci tekstowej) do zawartości wybranych skryptów.
    • Niektórzy mogą zastanawiać się, w jaki sposób zwykły skrypt JavaScript może nam zaszkodzić – przecież taki kod jest wykonywany tylko w kontekście przeglądarki. Okazuje się, że niekoniecznie. Nawet pomijając fakt, że przeglądarka może mieć pewne podatności, które umożliwią przebicie się do systemu, to w systemie Windows funkcjonuje usługa o nazwie Windows Script Host. Jest to systemowe środowisko do interpretacji i uruchamiania skryptów w określonych językach – domyślnie są to VBS (Visual Basic Script) oraz JScript (odmiana JavaScript opracowana przez Microsoft). Teoretycznie jest to usługa rzadko wykorzystywana i może stanowić poważne zagrożenie bezpieczeństwa, dlatego często zaleca się jej wyłączenie.
    • Na końcu warto wspomnieć o wirusach makr (tzw. makrowirusach), które działają wewnątrz środowiska innego programu. Bardzo często rozbudowane aplikacje umożliwiają swoim użytkownikom rozszerzenie funkcjonalności za pomocą wybranego języka skryptowego. Taki skrypt, rozszerzający funkcjonalność podstawową, nazywamy makrem. Najbardziej popularne są złośliwe makra napisane w języku VBA (Visual Basic for Application), rezydujące w dokumentach pakietu MS Office (dokumenty Word; arkusze kalkulacyjne Excel; prezentacje PowerPoint itp.).

Niektóre źródła podają również osobną kategorię na wirusy infekujące telefony komórkowe lub inne urządzenia mobilne, jednak taka klasyfikacja jest niezbyt dokładna. Oczywiście, istnieje złośliwe oprogramowanie dedykowane na urządzenia mobilne (np. oprogramowanie szpiegujące), ale nie spełnia ono kryteriów wirusa komputerowego.

Istnieje jeszcze jeden podział, o którym możemy sobie wspomnieć, a który rozróżnia wirusy na podstawie mechanizmu infekowania innych plików. Zrobimy to jednak w formie ciekawostki, ponieważ jest wysoce mało prawdopodobne, żeby te kategorie pojawiły się w pytaniach egzaminacyjnych. Mowa o wirusach nierezydentnych oraz rezydentnych:

  • Wirus nierezydentny (ang. non-resident virus) – po uruchomieniu zainfekowanego pliku, kod wirusa ładuje się do pamięci operacyjnej, uruchamia się i wyszukuje kolejne obiekty do zarażenia, przeszukując drzewo katalogów w naszym systemie. Po wykonaniu swoich czynności, sterowanie jest przekazywane z powrotem do zainfekowanej aplikacji – nosiciela (ang. host application). Wirus wykonuje swoje instrukcje tak długo, jak długo w pamięci działa proces oryginalnej aplikacji. Ponieważ kod wirusa wykonuje się przed startem pierwotnej aplikacji, często możemy zauważyć duże opóźnienia zanim właściwy program się uruchomi. Poza tym, możemy również odnotować wzmożoną aktywności nośników danych, ponieważ wirus infekuje inne pliki znalezione na dysku.
  • Wirus rezydentny (ang. resident virus) – charakteryzuje się bardziej wyrafinowaną techniką działania. W odróżnieniu od wirusa nierezydentnego, ten rezyduje w pamięci RAM jako proces w tle, nawet po zakończeniu działania oryginalnego programu i korzysta z systemu przerwań (podobnie jak programy rezydentne TSR). Dzięki tej technice jest w stanie ukryć swój kod przed programami zarządzającymi pamięcią. Warto jeszcze dodać, nie wchodząc w szczegóły techniczne, że wirusy rezydentne można podzielić na szybkie (ang. fast infectors), których celem jest jak najszybsze zainfekowanie jak największej ilości plików, oraz wolne (ang. slow infectors), którym zależy na jak najdłuższym unikaniu wykrycia kosztem szybkości rozprzestrzeniania się infekcji.

Fileless virus

W dosłownym tłumaczeniu jest to wirus bezplikowy (ang. fileless virus). W odróżnieniu od standardowych wirusów, opisanych powyżej, ten nie zaraża plików zapisanych na fizycznym nośniku danych i jest obecny jedynie w pamięci operacyjnej RAM, przez co jest bardzo trudny do wykrycia, nawet przez oprogramowanie antywirusowe. Na pierwszy rzut oka jest bardzo podobny do wirusów rezydentnych, gdyż one również działają w pamięci operacyjnej, niezależnie od zarażonej aplikacji bazowej (host application). Istotną różnicą jest jednak fakt, że wirusy bezplikowe w ogóle nie infekują fizycznych plików.

Nazwa bezplikowy (ang. fileless) sugeruje, że wirus tego typu nie potrzebuje żadnych plików do swojego działania. To stwierdzenie nie jest do końca prawdziwe (podobnie jak serverless computing nie oznacza braku serwerów :)). O ile sam kod wirusa nie musi być zapisany w żadnym pliku, to jednak coś musi umieścić jego kod w pamięci operacyjnej celem wykonania. Wspomniane coś to zazwyczaj zaufana aplikacja (plik wykonywalny), która została w podstępny sposób wykorzystana do ściągnięcia i uruchomienia złośliwego kodu, bez jego zapisywania. Jest to również przyczyna tego, że ten rodzaj złośliwego oprogramowania jest bardzo trudny do zidentyfikowania – antywirus nie wykryje zainfekowanych plików, bo ich po prostu nie ma, a w systemowym menadżerze zadań będzie widoczny jedynie proces zaufanej aplikacji, bez informacji jakie procedury tak naprawdę wykonuje.

Teoretycznie ten typ wirusa może pojawić się w każdym systemie operacyjnym, jednak znacznie częściej atakowany jest system Microsoft Windows. Pomijając fakt, że jest najpopularniejszym systemem operacyjnym wśród zwykłych użytkowników, posiada on potężne narzędzie w postaci interpretera poleceń PowerShell (PS), który umożliwia niemalże pełną kontrolę nad systemem wyłącznie za pomocą interfejsu tekstowego (pojedyncze polecenia oraz skrypty). To wszystko powoduje, że PowerShell jest idealnym kandydatem do aplikacji będącej nośnikiem złośliwego kodu. Nie dość, że za pomocą poleceń PS można zrobić prawie wszystko, to jeszcze na liście menadżera zadań będzie widoczny tylko niepozorny proces Windows PowerShell, nawet jeśli właśnie wykonuje złośliwy skrypt w pamięci.

Okazuje się, że koncepcja takich wirusów nie jest nowa, ale ich popularność wzrosła stosunkowo niedawno, bo w roku 2017. Stało się to za sprawą rozwoju narzędzi, które znacznie ułatwiły ataki tego typu. Przykładem takiego narzędzia jest framework Empire (wcześniej PowerShell Empire), automatyzujący szereg czynności wykonywanych już po włamaniu (ang. post-exploitation), czy też PowerSploit, który agreguje różne moduły PowerShell przydatne podczas testów penetracyjnych.

Przyjrzyjmy się teraz w jaki sposób można złapać wirusa bezplikowego, na przykładzie systemu operacyjnego Windows z wykorzystaniem możliwości PowerShell:

  1. Zakładając, że jesteśmy na tyle ostrożni, żeby nie uruchamiać od razu skryptów PS (*.ps1) nieznanego pochodzenia, atakujący (bad actor) musi nas najpierw zwabić w pułapkę. Np. za pomocą ataku phishingowego może nas skłonić do odwiedzenia określonej witryny internetowej.
  2. Strona docelowa zawiera złośliwe oprogramowanie, które jest w stanie wykorzystać luki bezpieczeństwa w naszej przeglądarce internetowej bądź we wtyczkach przez nią używanych (szczególnie kiedy z uporem maniaka wciąż używamy przestarzałych technologii, takich jak Adobe Flash Player czy kontrolki ActiveX). W przypadku krytycznej podatności, jaką jest możliwość zdalnego wykonania kodu (RCE = Remote Code Execution), exploit będzie w stanie uruchomić proces PS z zestawem poleceń, które np. ściągną właściwy złośliwy skrypt i od razu wykonają polecenia w nim zawarte. Innymi słowy, wirus rezyduje już w pamięci i realizuje swoje procedury.
  3. Ponieważ kod wirusa znajduje się tylko w pamięci, to po wyłączeniu systemu operacyjnego po prostu zniknie, więc musi sobie jakoś zapewnić przetrwanie. Dlatego zazwyczaj taki wirus modyfikuje rejestr systemu i dopisuje swój kod do autostartu. Jeśli jest stosunkowo krótki to może umieścić swoje procedury w kluczu rejestru, ale w przypadku bardziej rozbudowanego kodu może ukryć się gdzieś na dysku w postaci skryptu uruchamianego podczas startu systemu. Taki skrypt nie jest tym samym co zarażony plik, więc dalej umownie traktujemy to jako fileless malware.
  4. Przy starcie systemu zapisany wcześniej kod wirusa ponownie uruchamia się jako skrypt PowerShell, kontynuując swoją destruktywną działalność.

Ponieważ ataki tego typu stały się charakterystyczne dla systemu Windows, Microsoft specjalnie dostosował swojego wbudowanego w system antywirusa Windows Defender, żeby ten był w stanie wykrywać podejrzane czynności w skryptach PowerShell oraz w usłudze WMI (Windows Management Instrumentation), oferującej zdalne zarządzanie systemem. Dodatkowo, dla interpretera PowerShell można skonfigurować tzw. polityki wykonania (ang. Execution Policies), czyli mechanizmy bezpieczeństwa, które są w stanie kontrolować warunki w jakich PS ładuje pliki konfiguracyjne i uruchamia skrypty (np. w przypadku osobistych wersji systemu Windows, domyślna polityka to Restricted, która zezwala jedynie na uruchamianie pojedynczych poleceń, ale blokuje wykonanie jakiegokolwiek skryptu).

O bardzo silnym powiązaniu wirusa fileless z systemami Microsoftu może jeszcze świadczyć przykładowe pytanie z książki CompTIA Security+ Practice Tests:

Rick believes that Windows systems in his organization are being targeted by fileless viruses. If he wants to capture artifacts of their infection process, which of the following options is most likely to provide him with a view into what they are doing?

A. Reviewing full-disk images of infected machines.
[X] B. Turning on PowerShell logging.
C. Disabling the administrative user account.
D. Analyzing Windows crash dump files.

Przyznam szczerze, że kiedy pierwszy raz przeczytałem powyższe pytanie, moim wyborem była odpowiedź D, czyli przeanalizowanie zrzutu pamięci (ang. memory dump), co wydawało mi się logiczne. Jednakże diabeł tkwi w szczegółach (oraz pytaniach egzaminacyjnych) i nie zwróciłem uwagi na to, że w mojej odpowiedzi mowa o zrzucie pamięci zrobionym w chwili poważnej awarii systemu (ang. crash). O ile system nagle nie padnie w momencie kiedy wirus rezydował w pamięci to nie będziemy mieli takiego zrzutu – musielibyśmy ręcznie go utworzyć. W związku z tym małym drobiazgiem najlepszą opcją do wyboru jest odpowiedź B, czyli włączenie logowania wszystkich poleceń wykonywanych przez interpreter PS. Kolejny dowód na to, że na egzaminie trzeba bardzo dokładnie czytać pytania.

Na zakończenie, odnośnik do artykułu, w którym można znaleźć rzeczywiste przykłady złośliwego oprogramowania wykorzystującego technikę opisaną w tej sekcji: Fileless malware attacks explained (with examples).

Worms

W odróżnieniu od wspomnianych wcześniej wirusów, robak (ang. worm) jest w stanie sam się replikować, bez ingerencji użytkownika. Innymi słowy, może pojawić się w naszym systemie, nawet jeśli nie wykonamy żadnego ruchu (otwarcie zakażonego pliku czy odwiedzenie zainfekowanej witryny). Jest to możliwe, ponieważ robaki wykorzystują różne niezałatane luki bezpieczeństwa w systemach operacyjnych, usługach sieciowych lub aplikacjach. Dzięki temu są w stanie samodzielnie rozprzestrzeniać przez sieć, od komputera do komputera. Wystarczy, że znajdzie maszynę z odpowiednią podatnością, do wykorzystania której został zaprogramowany. Brak konieczności udziału użytkownika do dalszej ekspansji powoduje, że tego typu szkodniki rozprzestrzeniają się dużo szybciej niż standardowe wirusy.

Jako że robaki rozprzestrzeniają się głównie przez sieć, mogą być w pewnych przypadkach powstrzymane, oprócz oprogramowania antywirusowego, przez zapory sieciowe (ang. firewalls) oraz przez systemy wykrywania/prewencji włamań IDS/IPS. Więcej informacji na temat zapór sieciowych i systemach IDS/IPS można znaleźć poniżej, w sekcji Jak się bronić.

Gdyby ktoś zapytał mnie dzisiaj jakie znam robaki komputerowe, wymieniłbym te cztery:

Ransomware

W dobie powszechnej cyfryzacji dane, które posiadamy mogą być dla nas bardzo cenne. Ważne dokumenty zapisane na dysku, nagrania z dorastającym dzieckiem czy nawet zdjęcia z wakacji są dla nas często wartościowym zasobem, którego utrata może bardzo mocno zaboleć. Nie wspominając o danych firm i innych organizacji, których utrata może doprowadzić nawet do wielomilionowych strat finansowych. Mowa tutaj o tajnych informacjach dotyczących strategii, danych osobowych klientów i pracowników (PII = Personally Identifiable Information) czy też danych finansowych.

Niestety, cyberprzestępcy zorientowali się, że niektórzy są w stanie słono zapłacić, żeby tylko nie utracić swoich wartościowych danych. Tak właśnie narodziło się ransomware, czyli złośliwe oprogramowanie blokujące użytkownikowi dostęp do jego danych i żądające zapłaty w zamian za odblokowanie tych danych. Innymi słowy, jest to żądanie okupu (ang. ransom) w zamian za odzyskanie dostępu do swoich zasobów. W dosłownym tłumaczeniu jest to oprogramowanie szantażujące lub oprogramowanie wymuszające okup.

Sposób działania takiego oprogramowania może być bardzo różny. Zazwyczaj jest to trojan lub robak (ang. worm), który dostaje się do systemu operacyjnego przez naszą nieuwagę lub niezałataną lukę bezpieczeństwa, a następnie próbuje zablokować dostęp do systemu i danych. Jednocześnie informuje nas, że trzeba będzie, kolokwialnie mówiąc, wyskoczyć z kasy.

Oprócz odpowiedniej techniki uniemożliwienia dostępu do danych, bardzo istotnym elementem (jeśli nie najważniejszym) jest bezpieczny dla atakującego oraz trudny do namierzenia system płatności. W związku z tym często wykorzystuje się wiadomości SMS o podwyższonej opłacie; rozwiązania typu pre-paid (np. paysafecard) czy też popularną ostatnio kryptowalutę Bitcoin (podobno niektóre firmy nawet gromadzą środki w postaci Bitcoinów w ramach planu awaryjnego).

To w jaki sposób użytkownik zostaje odcięty od swoich plików zależy od rodzaju ransomware’u. Najprostszą formą jest założenie prostej blokady na system i wyświetlenie użytkownikowi odpowiedniej informacji o konieczności zapłaty (np. organy ścigania Policji wykryły na tym komputerze nielegalne oprogramowanie i w związku z tym komputer został zablokowany – prosimy o uiszczenie grzywny w wysokości 1000 zł celem odblokowania systemu).

Zazwyczaj blokada systemu polegała na podmianie ścieżki do powłoki systemu Windows (ang. Windows shell), czyli bazowym programie uruchamianym tuż po zalogowaniu się użytkownika i odpowiadającym za graficzny interfejs systemu (m.in. pulpit, pasek zadań). Jeśli uruchomimy edytor rejestru systemowego (regedit.exe) w jednym z nowszych systemów Windows i przejdziemy do klucza HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell, zobaczymy, że ten ma wartość explorer.exe. Oznacza to, że aktualną powłoką systemową jest program Windows File Explorer, ale można go podmienić na inny, na przykład taki co blokuje pełne uruchomienie systemu i żąda okupu.

W skrajnych przypadkach, oprogramowanie typu ransomware może przyjąć formę wspomnianego wcześniej wirusa dyskowego i zmodyfikować główny sektor rozruchowy na dysku. W takim przypadku system operacyjny w ogóle nie będzie w stanie prawidłowo wystartować.

Stosunkowo często zdarzało się, że blokady opisane powyżej można było zdjąć, bez utraty danych, jeśli posiadało się odpowiednią wiedzę techniczną. Nawet jeśli trzeba było sformatować cały dysk celem usunięcia zainstalowanego szkodnika, to mieliśmy dostęp do naszych danych choćby za pośrednictwem systemów typu Live CD (system operacyjny na zewnętrznym nośniku danych, posiadający swój własny program rozruchowy). Kiedy jednak przestępcy zorientowali się, że zwykłe oszustwa (hoax) oraz względnie proste metody blokowania dostępu do systemu stały się niewystarczające, sięgnęli po broń cięższego kalibru. Zaczęli szyfrować dane, żądając zapłaty za ich odszyfrowanie – tak powstała kolejna forma złośliwego oprogramowania, czyli cryptomalware.

Cryptomalware

Cryptomalware, czyli złośliwe oprogramowanie szyfrujące, które korzysta z osiągnięć nowoczesnej kryptografii do zaszyfrowania istotnych danych użytkownika, celem wyrządzenia szkody. W zależności od użytej techniki szyfrowania, odzyskanie danych bez odpowiedniego klucza może być niemożliwe, więc poszkodowany użytkownik jest zmuszony do zapłacenia określonej kwoty atakującemu, w zamian za odszyfrowanie danych. Oczywiście nie mamy stuprocentowej pewności, że otrzymamy taki klucz, nawet po zapłacie okupu. Ten rodzaj złośliwego oprogramowania możemy traktować jako szczególną odmianę ransomware i jest to doskonały przykład tego, jak instrument służący do obrony może stać się narzędziem do ataku.

Ten rodzaj oprogramowania rzadko kiedy korzysta ze słabych algorytmów szyfrujących, więc nawet gdybyśmy dysponowali superkomputerem o ogromnej mocy obliczeniowej, szanse na odzyskanie danych bez odpowiedniego klucza są niewielkie. Może się jednak zdarzyć, że atakujący użyje algorytmu symetrycznego (identyczny klucz jest używany do zaszyfrowania i odszyfrowania wiadomości). W takim przypadku, za pomocą inżynierii wstecznej, można teoretycznie wyciągnąć taki klucz ze złośliwego programu i tym samym odszyfrować dane. W gorszej sytuacji znajduje się ofiara, której pliki zostały zaszyfrowane algorytmem asymetrycznym (klucz publiczny jest używany do zaszyfrowania danych, ale do odszyfrowania potrzebny jest drugi, zwany kluczem prywatnym).

Interesującym przykładem WannaCry, który łączy cechy robaka komputerowego (ang. worm), oprogramowania szantażującego (ang. ransomware) oraz szyfrującego (ang. cryptomalware). Ponieważ jest to robak, jest w stanie sam się rozprzestrzeniać, wykorzystując podatność w opracowanym przez Microsoft protokole SMB (Server Message Block), który służy do udostępniania zasobów (plików i drukarek) pomiędzy komputerami znajdującymi się w sieci. Ciekawostką jest fakt, że robak do wykorzystania podatności i dalszego rozprzestrzeniania się, używa gotowców w postaci eksploita EternalBlue oraz backdoora DoublePulsar, które zostały opracowane przez NSA (National Security Agency), a następnie opublikowane przez grupę hackerską o nazwie The Shadow Brokers. Po dostaniu się do systemu, robak szyfruje dane i żąda zapłaty w Bitcoinach w zamian za odblokowanie.

Jeśli chodzi o obronę przed cryptomalware, to oprócz standardowych procedur obrony przed złośliwym oprogramowaniem, powinniśmy zawsze mieć aktualną kopię zapasową (ang. backup) naszych najważniejszych danych i to najlepiej w zupełnie innym miejscu, niepodłączonym do naszej głównej stacji roboczej, a nawet odizolowanym od sieci (offline). Zaawansowane formy cryptomalware mogą wyszukać wszystkie nośniki danych podłączone aktualnie do systemu i je również zaszyfrować.

Na koniec warto wspomnieć, że w dobie popularności kryptowalut, za złośliwe oprogramowanie można też uznać koparki (ang. cryptominig), które wykorzystują moc obliczeniową naszego sprzętu do wydobywania kryptowaluty, bez naszej wiedzy. Niektórzy mogą klasyfikować takie koparki również jako crypto-malware, ale pamiętajmy, że w kontekście egzaminu jest to zupełnie co innego.

Dodatkowo, jeśli na egzaminie pojawi się pytanie jasno wskazujące na cryptomalware, ale w dostępnych odpowiedziach będzie tylko termin ransomware, to jak najbardziej można to uznać za poprawną odpowiedź.

Trojans

Timeo Danaos et dona ferentes, czyli po łacińsku: obawiam się Greków, nawet gdy przynoszą dary. Tak napisał rzymski poeta Wergiliusz w swoim poemacie Eneida, nawiązując do fortelu przygotowanego przez Greków podczas wojny trojańskiej. Chodzi oczywiście o słynnego konia trojańskiego, czyli drewnianą konstrukcję w kształcie konia, w której ukryli się greccy wojownicy, zaraz po pozornym wycofaniu się z oblężenia Troi. Obrońcy miasta, nie spodziewając się podstępu, wciągnęli konia za mury co ostatecznie doprowadziło do ich klęski. Ukryci w drewnianym koniu żołnierze otworzyli nocą bramy, tym samym umożliwiając Grekom zdobycie miasta.

Niezależnie od tego czy koń trojański istniał naprawdę, czy jest to tylko fikcja literacka, stał się tak popularny, że dzisiaj jest synonimem podarunku skrywającego zgubę i podstęp. W świecie IT określenie koń trojański (lub w skrócie trojan), ma identyczne znaczenie. Jest to złośliwe oprogramowanie, które podszywa się pod użyteczne bądź ciekawe aplikacje, ukrywając przed użytkownikiem swoje szkodliwe funkcje. Krótko mówiąc, kiedy wydaje nam się, że właśnie instalujemy fajną grę komputerową, być może właśnie autoryzowaliśmy bezwiednie instalację złośliwego oprogramowania w naszym systemie. Co więcej, gra rzeczywiście może się uruchomić, ale równocześnie został wykonany złośliwy kod, który jest w stanie jakoś nam zaszkodzić.

Typowe zagrożenia związane z działalnością trojanów są następujące:

  • Ukrywanie się przed oprogramowaniem antywirusowym bądź jego całkowita neutralizacja. To samo tyczy się pozostałych programów zabezpieczających (np. firewall).
  • Instalacja tylnej furtki (ang. backdoor) w systemie, w celu umożliwienia bezpośredniego dostępu do zainfekowanej maszyny nieuprawnionej osobie bądź aplikacji. Dzięki takiej furtce atakujący jest w stanie uzyskać dostęp do systemu bez procesu uwierzytelnienia, co z kolei umożliwia przyłączenie zaatakowanej stacji roboczej do sieci botnet, która rozsyła spam lub przeprowadza ataki DDoS (ang. Distributed Denial of Service).
  • Wyświetlanie niechcianych reklam, np. poprzez podmianę strony startowej w przeglądarkach internetowych lub instalację oprogramowania typu adware.
  • Instalacja oprogramowania szpiegującego (ang. spyware) oraz wykradanie poufnych danych użytkownika.
  • Działania destrukcyjne, takie jak usuwanie plików czy szyfrowanie danych (ransomware/cryptomalware).
  • Instalacja innych typów złośliwego oprogramowania.

Jeśli chodzi o obronę przez trojanami to stosujemy identyczne działania jak w przypadku innych, opisanych tutaj rodzajów malware.

Na koniec przykładowe pytanie egzaminacyjne z książki CompTIA Security+ Practice Tests: A sales manager at your company is complaining about slow performance on his computer. When you thoroughly investigate the issue, you find spyware on his computer. He insists that the only thing he has downloaded recently was a freeware stock trading application. What would best explain this situation?

A. Logic bomb.
[X] B. Trojan horse.
C. Rootkit.
D. Macro virus
.

Backdoor

Kiedy włamywacz bądź jakiś rodzaj złośliwego oprogramowania znajdą w końcu sposób na dostanie się do systemu ofiary, kolejnym krokiem jest z reguły utrzymanie uzyskanego dostępu jak najdłużej. Ponieważ pierwszy udany atak jest często procesem trudnym do powtórzenia, bardzo istotne jest zapewnienie sobie prostej metody połączenia z zaatakowanym system, z ominięciem wszystkich zabezpieczeń, które trzeba było wcześniej pokonać.

Backdoor, czyli tylna furtka lub tylne drzwi, to metoda obchodzenia (ang. circumvent) standardowego procesu uwierzytelnienia (ang. authentication) lub szyfrowania w systemie komputerowym, oprogramowaniu bądź sprzęcie i zazwyczaj jest używana w sposób niejawny. Tylne furtki są na ogół wykorzystywane do zabezpieczenia zdalnego dostępu do komputera lub uzyskania dostępu do jawnego tekstu w systemach kryptograficznych (czyli dostępu do oryginalnej wiadomości bez konieczności posiadania klucza deszyfrującego). Backdoor może być samodzielnym programem lub utajonym fragmentem innej aplikacji. Może kryć się zarówno w oprogramowaniu sprzętowym (ang. firmware) jak i w kodzie samego systemu operacyjnego.

Fragment serialu The Simpsons (1989) obrazujący jak działa backdoor :).

W przypadku backdoorów instalowanych przez złośliwe oprogramowanie, warto wspomnieć o tym, że furtki zostawione przez jeden typ malware’u mogą być wykorzystywane przez inne typy. Przykładowo, trojan może umieścić w systemie tylną furtkę, która otworzy drogę czemuś znacznie gorszemu, jak chociażby ransomware. Może się też zdarzyć, że trojan sam w sobie jest tylną furtką – mam tutaj na myśli Remote Access Trojan (RAT), do którego jeszcze wrócimy.

Raczej wiadome jest, że powinniśmy za wszelką cenę unikać instalowania aplikacji niewiadomego pochodzenia, które są dostępne tylko w postaci plików wykonywalnych. Jednak miejmy na uwadze też fakt, że nawet w popularnym oprogramowaniu o otwartym kodzie źródłowym (ang. open source) również możemy natknąć się na backdoora. Przykładem niech będzie próba umieszczenia tylnej furtki w kodzie źródłowym jądra systemu Linux, w 2003 roku.

No dobrze, ale czy backdoory są instalowane tylko przez złośliwe oprogramowanie lub cyberprzestępców? Okazuje się, że niekoniecznie i zdarzają się przypadki, że tylna furtka została zostawiona przez “zaufanych” twórców oprogramowania lub sprzętu. Powód może być bardzo banalny, czyli jakiś programista zapomniał usunąć tymczasowy kod roboczy, który dla ułatwienia omijał proces uwierzytelnienia, a który później przez pomyłkę trafił na produkcję (choć zastanawiające jest dlaczego taki kod nie został odrzucony podczas inspekcji kodu). Sprawa wygląda gorzej kiedy jest to celowe działanie i producent potajemnie oraz umyślnie umieszcza furtki w końcowym produkcie. Motywy takiego postępowania mogą być bardzo różne:

  • Chęć zbierania danych diagnostycznych podczas użytkowania oprogramowania lub sprzętu, bez informowania o tym użytkownika.
  • Ułatwienie sobie prac utrzymaniowych po wydaniu produktu (np. konto serwisowe z ustawionym na sztywno hasłem).
  • Władze państwowe, które z reguły lubują się we wtykaniu nosa w nieswoje sprawy, mogą namówić producenta na umieszczenie backdoora w swoim produkcie lub ewentualnie same wydać taki produkt, tłumacząc to dbaniem o “bezpieczeństwo narodowe“. Doskonałym przykładem jest niesławny chipset Clipper, opracowany przez NSA (National Security Agency). Był to układ kryptograficzny odpowiedzialny za szyfrowanie wiadomości tekstowych i głosowych, ale miał też wbudowanego backdoora, który umożliwiał służbom państwowym dostęp do informacji w postaci jawnej.

Remote Access Trojan (RAT)

Specjalnym typem tylnej furtki, o którym już wspomnieliśmy powyżej, jest tzw. Remote Access Trojan (RAT), czyli trojan umożliwiający zdalny dostęp do skompromitowanego systemu. Skrót RAT może również oznaczać Remote Administration Tool, czyli narzędzie do zdalnej administracji systemem. Jedno i drugie daje osobom trzecim zdalny dostęp do systemu, na którym jest zainstalowany oraz zapewnia prawie pełną kontrolę nad tym systemem. Obydwa narzędzia są zbudowane z użyciem architektury klient-serwer (zdalny klient łączy się z serwerem zainstalowanym na docelowej maszynie) i oferują niemalże identyczną funkcjonalność, ale różnią się sposobem instalacji i przeznaczeniem. Ponieważ Remote Administration Tool jest z założenia narzędziem do zdalnego zarządzania komputerem za zgodą jego właściciela, więc nie będzie próbował się specjalnie maskować, w odróżnieniu do Remote Access Trojan, który za wszelką cenę będzie chciał pozostać niewidoczny (stąd trojan w nazwie). Oczywiście nic nie stoi na przeszkodzie, żeby legalne narzędzie wykorzystać do niecnych celów. Za przykład niech posłużą ataki phishingowe, których celem jest nakłonienie ofiary do zainstalowania oprogramowania umożliwiającego zdalny dostęp do jej komputera (np. AnyDesk).

Jeśli chodzi o możliwości takich aplikacji to są one naprawdę szerokie: pełna kontrola systemu, czyli dostęp do wszystkich naszych plików; śledzenie naciskanych klawiszy; dostęp do kamerki internetowej; nagrywanie tego co dzieje się aktualnie na ekranie, a w dawnych czasach nawet otwieranie i zamykanie napędu CD/DVD. Większość takich narzędzi posiada graficzny interfejs użytkownika, więc ich użytkowanie jest dziecinnie proste. Jak widać, mogą również posłużyć jako baza do kolejnych ataków.

Przykłady narzędzi, które są uznawane za konie trojańskie: NetBus oraz DarkComet. Można na upartego stwierdzić, że są to narzędzia do zdalnej administracji, ale w przeciwieństwie do legalnych i uznawanych aplikacji tego typu, te mają wbudowane funkcje, które wyglądają na zaprojektowane do niecnych celów (np. “ciche” śledzenie naciskanych klawiszy czy ukrywanie przed użytkownikiem swojej obecności).

Potentially Unwanted Programs (PUPs)

Potentially Unwanted Program (PUP) to w dosłownym tłumaczeniu potencjalnie niechciany program. Jest to klasa aplikacji, które mogą być uważane za niepożądane pomimo tego, że użytkownik prawdopodobnie zaakceptował ich instalację w sposób mniej lub bardziej świadomy (choć w większości przypadków w ogóle nie był świadomy). Tego typu oprogramowanie nie musi być szkodliwe, ale jest zazwyczaj kłopotliwe, trudne do usunięcia i może negatywnie wpływać na wydajność systemu.

Programy PUP mogą trafić do naszego komputera bez naszej wiedzy za pośrednictwem innych rodzajów złośliwego oprogramowania (np. ściągnięte przez trojana, który zadomowił się w systemie), choć bardzo często są one ściągane i instalowane podczas procesu instalacji innej aplikacji, która jest nam potrzebna. Niestety, w tego typu przypadkach informacja o instalacji nadmiarowego oprogramowania jest mocno zaciemniona i ukryta w gąszczu okienek instalatora (np. checkbox ze zgodą na instalację jest domyślnie zaznaczony, a my nie przeczytaliśmy uważnie co jest napisane w bieżącym oknie przed kliknięciem przycisku Dalej).

Cechą charakterystyczną niechcianych programów jest pożeranie zasobów systemowych ze względu na specyfikę swojej działalności, powodując tym samym zauważalne spowolnienie systemu, oraz bardzo utrudniony proces deinstalacji. W wielu przypadkach dużo prościej jest usunąć taki program za pomocą antywirusa bądź specjalistycznego narzędzia, niż robiąc to samodzielnie . Kiedy próbujemy ręcznie odinstalować niechciany program, ten może nam wyświetlać jakieś dodatkowe warunki użytkowania, przez co niechcący ściągniemy kolejne PUP-y albo pozostawimy jego resztki w systemie. Oczywiście najlepiej w ogóle nie dopuścić do instalacji wspomnianych aplikacji, ale w tym celu musimy ostrożnie przechodzić przez proces instalacji różnych programów, uważnie czytając co akceptujemy.

Próby odinstalowania potencjalnie niepożądanych aplikacji (PUP).

Jak zostało już wcześniej wspomniane PUP-y są mocno irytujące i mamy szczęście jeśli tylko na tym się kończy, ale mogą też stanowić bardzo poważne zagrożenie dla bezpieczeństwa systemu. Przyjrzyjmy się najpopularniejszym odmianom niepożądanych aplikacji.

Adware

Wspomniane już wcześniej w tym artykule oprogramowanie wyświetlające reklamy, czyli adware. W gruncie rzeczy, nie ma niczego złego w zarabianiu na reklamach w Internecie, jednakże wykorzystanie podstępu do natarczywego wyświetlania reklam użytkownikowi to zupełnie inna bajka. Dlatego też adware jest często klasyfikowany jako złośliwe oprogramowanie (odmiana PUP) i kiedy już zagnieździ się w systemie, zauważalne są następujące symptomy:

  • Bombardowanie użytkownika irytującymi okienkami pop-up z różnego rodzaju reklamami.
  • Zmiana strony startowej w przeglądarce; podmiana lub dodawanie reklam na przeglądanych witrynach internetowych; przekierowanie na wyniki wyszukiwania zwracane przez inną wyszukiwarkę niż domyślna; instalacja dodatkowych pasków narzędzi (ang. toolbar) w przeglądarce. To wszystko jest możliwe, kiedy złośliwe oprogramowanie przejmie przeglądarkę użytkownika – taki proceder ma nawet swoją nazwę: browser hijacking.

Spyware

Spyware, czyli programy szpiegujące zbierające dane użytkownika bez jego wiedzy. Może to być zwyczajne śledzenie poczynań (np. poprzez rejestrowanie naciśniętych klawiszy) celem zbudowania profilu, który później zostanie sprzedany nieuczciwym reklamodawcom, a w ekstremalnych przypadkach kradzież poufnych informacji, takich jak dane logowania. Do szpiegowania również można wykorzystać wspomniany wcześniej browser hijacking.

Dialer

Na zakończenie, jako ciekawostkę, wspomnę o jeszcze jednej grupie programów, które można sklasyfikować jako PUP. Mowa o niektórych dialerach, które w zamierzchłych czasach modemów telefonicznych, łączyły się z siecią poprzez numer dostępowy o kosztach wielokrotnie przekraczających standardowe koszty połączenia z Internetem.

Rootkit

Przyznam szczerze, że w tym przypadku mam mały dylemat. Wspominana już wiele razy książka CompTIA Security+ Practice Tests przedstawia rootkit jako zestaw narzędzi (ang. kit) umożliwiający uzyskanie i utrzymanie dostępu do systemu, z pełnymi prawami administracyjnymi (ang. root). Widać to w przykładowym pytaniu z wspomnianej publikacji:

Jared has discovered malware on the workstations of several users. This particular malware provides administrative privileges for the workstation to an external hacker. What best describes this malware?

A. Trojan horse.
B. Logic bomb.
C. Multipartite virus.
[X] D. Rootkit
.

Ok, ale skąd ten dylemat? Kiedy zdecydujemy się poszukać w Internecie trochę informacji na temat rootkitów, najczęściej natkniemy się na następującą definicję: narzędzie programistyczne (bądź zestaw narzędzi), które umożliwia skuteczne ukrycie obecności złośliwego oprogramowania w systemie wraz z jego działalnością. W tym celu stosuje wyrafinowane techniki nadpisywania niskopoziomowych funkcji systemowych, dzięki czemu zainstalowany malware staje się fundamentalnie niewidzialny dla aplikacji, które polegają na tych funkcjach. Prosty przykład: nadpisując odpowiednią funkcję systemową Windows API, odpowiedzialną za wylistowanie aktualnie działających procesów w Menadżerze zadań, będziemy w stanie kontrolować listę zwróconych procesów. Oczywiście brzmi to prosto tylko w teorii, ponieważ w rzeczywistości jest to zabieg ekstremalnie trudny do wdrożenia.

Która definicja jest w takim razie prawidłowa? Tak się składa, że obie i wynika to z procesu ewolucji rootkitów na przestrzeni ostatnich 20 lat. Pierwsze rootkity były mocno związane z systemem Unix (stąd też etymologia tego określenia: root – nazwa konta administracyjnego w systemach uniksowych; kit – zestaw) i oznaczały narzędzia systemowe, które dawały dostęp do konta administratora (ang. root), a które zostały zmodyfikowane w złośliwy sposób, nadając tym samym przywileje administratora nieuprawnionym użytkownikom (jednocześnie ukrywając ich działania przed prawdziwymi administratorami). Z biegiem lat powstawały kolejne odmiany, szczególnie na system Windows, których zadaniem było już nie tyle uzyskanie pełnych uprawnień, co skuteczne ukrywanie się w systemie. Tutaj można znaleźć ciekawy artykuł opisujący ewolucję tych złośliwych programów: Rootkits: evolution and detection methods.

Z tego co się orientuję to na egzaminie obowiązuje raczej pierwotna definicja, czyli zestaw aplikacji, który daje włamywaczowi uprawnienia administracyjne w systemie, ale być może ktoś kto już uzyskał certyfikat będzie mógł się do tego odnieść w komentarzu.

Generalnie rootkity można podzielić na dwie kategorie: na działające w trybie użytkownika (ang. user mode) i działające w trybie jądra (ang. kernel mode). Większość dzisiejszych publikacji wyróżnia jeszcze pewne podkategorie, takie jak rootkity rezydujące w głównym sektorze rozruchowym (tzw. bootkits) czy też nadpisujące oprogramowanie sprzętowe firmware, ale są to zagadnienia znacząco wybiegające poza zakres materiału egzaminacyjnego i nie będziemy ich tutaj omawiać. Dociekliwych czytelników zachęcam jednak do poszukiwania informacji na własną rękę.

Wracając do głównego podziału, zagadnienia takie jak tryb jądra (ang. kernel mode) oraz tryb użytkownika (ang. user mode) są powiązane z szeroko rozumianym programowaniem oraz tym, w jaki sposób działają dzisiejsze systemy operacyjne. Opisując to prostymi słowami, chodzi o to, żeby dowolna aplikacja nie była w stanie położyć całego systemu przez jakiś nieprzewidziany albo zamierzony błąd w kodzie, więc domyślnie działa ona w trybie użytkownika, czyli z przywilejami użytkownika, który ją uruchomił. W tym trybie proces aplikacji ma nałożone pewne ograniczenia, przez co nie ma bezpośredniego dostępu do niskopoziomowych zasobów systemowych (np. urządzeń I/O) czy też ma dostęp tylko do swojej przestrzeni adresowej w pamięci (tj. nie może odwoływać się do pamięci zarezerwowanej przez inne procesy). Oznacza to, że jeśli coś się wykrzaczy, to straty ograniczą się tylko do uruchomionej aplikacji.

Tryb jądra natomiast oznacza, że wykonywany kod ma dostęp do niskopoziomowych mechanizmów systemowych, takich jak np. planowanie procesów; bezpośredni dostęp do sprzętu czy dostęp do całej pamięci. Innymi słowy, jest to tryb uprzywilejowany (hulaj dusza, piekła nie ma) i jeśli coś tutaj walnie, to razem z całym systemem. Czasami zdarza się, że zwyczajna aplikacja jest zmuszona wykonać jakąś operację niskopoziomową (np. zapisać dane na fizycznym dysku). W takim przypadku, aplikacja wywołuje odpowiednią funkcję API systemowego i dzięki temu kod aplikacji nie musi działać w trybie jądra przez cały czas – jedynie na czas wywołania niskopoziomowej operacji zapisu, CPU wykonujący kod przeskakuje na chwilę na tryb bardziej uprzywilejowany, żeby zaraz wrócić do standardowego trybu użytkownika.

Omówiliśmy sobie podstawy działania procesów w systemach operacyjnych, więc zobaczmy jak to się przekłada na wspomniany wcześniej podział rootkitów. User-mode rootkits działają na trochę wyższym poziomie i zazwyczaj próbują wciąć się między aplikacje a wysokopoziomowe funkcje systemowe, np. w systemie Windows można to zrobić poprzez wstrzykiwanie fałszywych systemowych bibliotek DLL do działających procesów. Kernel-mode rootkits to już wyższa szkoła jazdy. Bardzo trudno jest zainstalować rootkita, który zmodyfikuje niskopoziomowy kod systemu (jądro bądź sterowniki), ale kiedy to się uda to pozbycie się takiego intruza jest ekstremalnie trudne, bo staje się on niewidoczny dla wszystkich wysokopoziomowych aplikacji, łącznie z antywirusami.

Przy okazji omawiania tematu rootkitów, małe przypomnienie, że nie tylko cyberprzestępcy stanowią zagrożenie dla naszej prywatności: Sony BMG copy protection rootkit scandal.

Bots

Bot jest skrótem od wyrazu robot i w kontekście złośliwego oprogramowania oznacza zainfekowany komputer, który bez zgody i wiedzy użytkownika stał się częścią sieci podobnych botów (ang. botnet), żeby niepostrzeżenie wykonywać polecenia wydawane przez kontrolującego daną sieć botnet. Infekcja systemu przebiega zazwyczaj podobnie jak w przypadku pozostałych odmian złośliwego oprogramowania – na przykład za sprawą konia trojańskiego, który zamienia zainfekowaną maszynę w bota lub przez robaka, który wykorzystał niezałataną lukę bezpieczeństwa w naszym systemie.

Warto wspomnieć o tym, że w dzisiejszych czasach nie tylko komputery osobiste bądź serwery mogą stać się częścią sieci botnet. W dobie smartfonów ze stosunkowo dużą mocą obliczeniową i innych inteligentnych urządzeń, które często są podłączone do sieci (IoT = Internet of Things) one również mogą zostać zamienione w boty.

Z racji na szerokie zastosowania sieci botnet w nielegalnej działalności, bywają one chodliwym towarem na czarnym rynku i w tzw. darknecie można prawdopodobnie znaleźć niejedną ofertę kupna lub wynajęcia takiej sieci. Botnety są wykorzystywane głównie do celów przedstawionych poniżej:

  • Przeprowadzanie zmasowanych ataków DDoS czyli rozproszonych ataków odmowy usługi (ang. Distributed Denial of Service). Dzięki armii komputerów zombie (tak czasami określa się komputery będące częścią botnetów), kontrolujący sieć może znacząco obciążyć atakowany serwer, poprzez zmuszenie botów do nieustannego wysyłania dużej liczby pakietów na ten serwer. Źródłem ataku jest wiele komputerów, stąd określenie rozproszony (ang. distributed).
  • Rozsyłanie dużych ilości spamu.
  • Sztuczne generowanie ruchu sieciowego, np. żeby sztucznie podnieść koszty firmie, która korzysta z usług chmurowych i wysokość opłat zależy od wielkości obsługiwanego ruchu.
  • Korzystanie z mocy obliczeniowej zainfekowanych urządzeń, np. do kopania kryptowalut bądź do łamania haseł metodą brute force.

Zapewne większość z Was słyszała o możliwości udostępnienia mocy obliczeniowej swojego komputera biorąc udział w jakimś dużym projekcie naukowym, takim jak poznanie ludzkiego genomu czy szukanie cywilizacji pozaziemskich. Miejmy jednak na uwadze fakt, że obliczenia rozproszone (ang. distributed computing) to jest zupełnie co innego niż sieci botnet, które są uznawane za złośliwe z definicji. W pierwszym przypadku to przede wszystkim użytkownik sam decyduje czy chce udostępnić moc obliczeniową swojego urządzenia w określonym celu, a dodatkowo nie ma później żadnych problemów z usunięciem wymaganego do tego celu oprogramowania. Listę popularnych projektów polegających na obliczeniach rozproszonych można znaleźć tutaj.

Jeśli chodzi o obronę przed tego typu złośliwym oprogramowaniem to procedury są podobne jak w przypadku innych odmian malware’u. Oprócz antywirusów tutaj mogą okazać się pomocne zapory sieciowe oraz systemy IDS/IPS ze względu na charakterystykę działania botnetów, czyli konieczność komunikowania się przez sieć. Więcej informacji na ten temat można znaleźć w sekcji Jak się bronić. Jeżeli chcemy podejrzeć aktywne sieci botnet w czasie rzeczywistym, możemy zajrzeć na map.lookingglasscyber.com.

Command and Control

Wiemy już czym są botnety, więc teraz przyjrzyjmy się w jaki sposób funkcjonują. Kiedy zainfekowany system staje się częścią botnetu jest gotowy do wykonywania otrzymanych poleceń. Widzimy więc, że ktoś lub coś musi mieć jakiś mechanizm zarządzania armią botów. Taki mechanizm, abstrahując od jego implementacji, określamy mianem Command and Control (w skrócie: C&C lub C2), co w dosłownym tłumaczeniu oznacza dowodzenie i kontrolę.

To w jaki sposób funkcjonuje mechanizm C&C zależy od architektury sieci botnet i aktualnie wyróżniamy dwa podejścia:

  • Architektura klient-serwer, charakteryzuje się tym, że centralny serwer C&C rozsyła polecenia do podłączonych klientów (botów). Jednak rzadko jest to bezpośrednie połączenie. Przeważnie odbywa się to za pośrednictwem innych serwerów popularnych usług sieciowych takich jak IRC; witryn internetowych czy nawet serwisów społecznościowych. Przykładowo, serwer C&C ustawia odpowiedni temat dla określonego kanału IRC, a boty ten temat odczytują (parsują) i wykonują zawarte w nim polecenie.
  • Architektura peer-to-peer (P2P) jest bardziej nowoczesnym podejściem, stosowanym w celu utrudnienia wykrycia sieci botnet. W tym przypadku nie ma głównej jednostki dowodzącej w postaci scentralizowanego serwera C&C, bo w tym modelu każdy bot staje się po części serwerem dla pozostałych botów. Boty komunikują się ze sobą bezpośrednio, propagując dalej odpowiednie polecenia.

Logic bombs

Bomba logiczna (ang. logic bomb) to kawałek złośliwego kodu, który wykonuje się jeśli zostanie spełniony warunek określony przez jego twórcę. Najczęściej spotyka się bomby z zapalnikiem czasowym, tj. kod wykonuje się po określonym czasie lub danego dnia (np. w Prima Aprilis), ale nie jest to regułą. Tak naprawdę warunek oraz działanie kodu mogą być dowolne. Przykładowo, niezadowolony pracownik organizacji umieszcza w kodzie produkcyjnym polecenie usunięcia krytycznych danych z bazy, które zostanie wykonane jak tylko ten pracownik zostanie zwolniony.

Bomba logiczna może być częścią znanego wirusa lub robaka, ale wcale nie musi, jak widać na powyższym przykładzie. W tym drugim przypadku bomba logiczna jest bardzo trudna do wykrycia, ponieważ oprogramowanie zwalczające malware nie będzie posiadało odpowiednich sygnatur. Dodatkowo, złośliwy kod może sam się usunąć zaraz po wykonaniu, co praktycznie uniemożliwia analizę post mortem. Mimo wszystko są pewne czynności, które warto wdrożyć w naszej organizacji, żeby ograniczyć ryzyko wybuchu:

  • Przemyślane procedury przeglądu i kontroli poszczególnych elementów systemu, zarówno automatyczne jak i ręczne.
  • Sumienne wykonywanie przeglądu kodu przez doświadczonych programistów podczas procesu wytwarzania oprogramowania.
  • Stosowanie zasady najmniejszego uprzywilejowania (ang. principle of least privilege), polegającą na przyznawaniu tylko takich uprawnień, jakich rzeczywiście potrzebuje użytkownik i nic ponad to. Co prawda raczej nie zapobiegnie to utworzeniu bomby logicznej przez wkurzonego pracownika, ale może znacząco ograniczyć skutki jej działania.

Na koniec zachęcam do zapoznania się z przykładem wziętym z życia: Siemens contractor pleads guilty to planting logic bomb in company spreadsheets. Pewien pracownik kontraktowy Siemensa stworzył bombę logiczną, która po pewnym czasie powodowała problemy z ważnym arkuszem kalkulacyjnym. Kiedy to nastąpiło, wspomniany pracownik był wzywany do pozbycia się problemu (oczywiście odpłatnie). Proceder trwał 2 lata zanim został zauważony :).

Keyloggers

Tutaj bardzo krótko: keylogger jest oprogramowaniem lub urządzeniem, które przechwytuje i zapisuje klawisze naciśnięte przez użytkownika. W przypadku programowego keyloggera jest on najczęściej zaimplementowany jako część innego złośliwego oprogramowania, takiego jak trojan, RAT czy spyware.

Keyloggery sprzętowe przyjmują postać niewielkiego urządzenia USB w formie przejściówki, którą wpina się między klawiaturę i port USB. Takie urządzenie zapisuje później wciskane klawisze w swojej pamięci i/lub wysyła zapisane informacje drogą radiową.

Przykładowe pytanie z książki CompTIA Security+ Practice Tests:

Scott discovers that malware has been installed on one of the systems he is responsible for. Shortly afterward passwords used by the user that the system is assigned to are discovered to be in use by attackers. What type of malicious program should Scott look for on the compromised system?

A. A rootkit.
[X] B. A keylogger.
C. A worm.
D. None of the above
.

Kod polimorficzny

Na sam koniec, kiedy omówiliśmy już sobie zagadnienia związane ze złośliwym oprogramowaniem obowiązujące na egzaminie, warto wspomnieć o jeszcze jednej technice stosowanej przez twórców złośliwego oprogramowania, mianowicie o stosowaniu kodu polimorficznego celem zmiany własnej sygnatury. Kod polimorficzny to taki, który zmienia się w czasie, ale nie modyfikuje swojego algorytmu (kod się zmieni, ale wynik działania programu będzie zawsze identyczny).

Oprogramowanie zwalczające malware bardzo często rozpoznaje złośliwy kod na podstawie określonych sygnatur, czyli ciągu bajtów charakterystycznych dla danej aplikacji. Jeśli złośliwa aplikacja będzie w stanie zmienić ten ciąg bajtów na taki, którego antywirus nie ma w swojej bazie, zachowując jednocześnie pełną funkcjonalność, teoretycznie nie zostanie sklasyfikowana jako złośliwa.

Przykładowo, autor wirusa przed puszczeniem go w obieg może wykorzystać specjalne serwisy internetowe skanujące pliki. Tego typu serwisy skanują przesłany plik za pomocą wielu popularnych silników antywirusowych (np. VirusTotal). Jeśli przesłany plik zostanie uznany za szkodliwy, autor może ręcznie próbować zmodyfikować odpowiednie bajty w swoim programie, zmieniając jednocześnie jego sygnaturę. Musi tylko pamiętać o tym, że podobne serwisy mogą dzielić się sygnaturami skanowanych plików z twórcami programów antywirusowych.

Kiedy jednak mówimy o kodzie polimorficznym to proces modyfikacji powinien być automatyczny i następować np. po każdej replikacji wirusa. Poniżej interesujące i nie do końca jednoznaczne pytanie egzaminacyjne ze wspomnianej wielokrotnie książki:

What type of technique is commonly used by malware creators to change the signature of malware to avoid detection by antivirus tools?

[X] A. Refactoring.
B. Cloning.
C. Manual source code editing.
D. Changing programming languages
.

Jak się bronić?

Jak widać powyżej, istnieje wiele sposobów na to, żeby złośliwe oprogramowanie znalazło się w naszym systemie, szczególnie jeśli postępujemy nierozważnie. Kiedy już coś złapiemy, istnieje szansa na pozbycie się intruza za pomocą programów antywirusowych bądź specjalistycznych aplikacji nastawionych na usunięcie konkretnego typu złośliwego oprogramowania. Niestety, niektórych szkód praktycznie nie da się naprawić (np. permanentnej utraty danych), dlatego najważniejsza jest profilaktyka. Na szczęście jest wiele technik obrony, których stosowanie bardzo mocno minimalizuje ryzyko infekcji:

  • Nigdy nie klikajmy w podejrzane linki czy okienka pop-up ani nie otwierajmy załączników w wiadomościach email niewiadomego pochodzenia. Oczywiście to samo tyczy się ściągania i uruchamiania plików z podejrzanych stron internetowych oraz otwierania plików MS Office nieznanego pochodzenia (ze względu na potencjalnie szkodliwe makra VBA).
  • Unikajmy odwiedzania podejrzanych stron internetowych – może się okazać, że nawet bez ściągania czy otwierania podejrzanych plików zostaniemy zainfekowani, bo nasza przeglądarka ma akurat niezałataną lukę bezpieczeństwa.
  • Dbajmy o to, żeby oprogramowanie, z którego korzystamy (system operacyjny i aplikacje) było na bieżąco aktualizowane. Luki w oprogramowaniu są znajdowane niemalże codziennie i dlatego twórcy tegoż oprogramowania (no, przynajmniej ci porządni) dbają o to, żeby te luki jak najszybciej załatać. W zależności od stopnia zagrożenia płynącego z określonej podatności, poprawki mogą pojawić się przy okazji wypuszczenia kolejnej wersji (ang. release) bądź, jeśli luka jest krytyczna, w postaci łatek (ang. patch) do bieżącej wersji.
  • Zawsze zwracajmy uwagę na to, co jest instalowane podczas procesu instalacji jakiegokolwiek oprogramowania. Wiem, że i tak prawie nikt nie czyta treści licencji (EULA), ale powinniśmy przynajmniej zapoznać się z podstawowymi informacjami pojawiającymi się w oknach instalacyjnych, zanim klikniemy Dalej lub Zgadzam się :). Poza tym, instalujmy oprogramowanie tylko z zaufanych źródeł.
  • Nawet jeśli otrzymaliśmy pliki z zaufanego źródła, miejmy na uwadze, że to zaufane źródło mogło zostać wcześniej skompromitowane. Na przykład, możemy otrzymać wiadomość z plikiem od naszego znajomego, który nawet nie wie, że sam padł ofiarą ataku (wiadomość mogła zostać wysłana bez jego wiedzy). Jeśli treść takiej wiadomości wzbudza nasze podejrzenia, powinniśmy niezwłocznie skontaktować się bezpośrednio z nadawcą i potwierdzić czy rzeczywiście wiadomość została wysłana przez tegoż nadawcę. Pamiętajmy również, że możemy paść ofiarą techniki zatrutego wodopoju (ang. watering hole attack). Kiedy jakieś pliki, pomimo znanego pochodzenia, wzbudzają u nas podejrzenia możemy je zweryfikować za pomocą następujących narzędzi:
    • Sandboxie – oprogramowanie dla systemu Windows, które tworzy wyizolowane środowisko uruchomieniowe (ang. sandbox), dzięki czemu uruchomione aplikacje nie wpływają na nasz bazowy system operacyjny.
    • VirusTotal – serwis internetowy, który umożliwia przeskanowanie określonych plików pod kątem obecności złośliwego oprogramowania.
  • Zainstalujmy sprawdzone oprogramowanie antywirusowe i upewnijmy się, że baza sygnatur (na podstawie sygnatur antywirus jest w stanie zidentyfikować znane złośliwe oprogramowanie) jest na bieżąco aktualizowana. Nowoczesne antywirusy są w stanie automatycznie skanować pojedyncze pliki i dzięki temu mogą zablokować złośliwy kod, zanim jeszcze ten zostanie uruchomiony. Dobrze jest też co jakiś czas uruchomić pełne skanowanie systemu.
    • Klasyczne oprogramowanie antywirusowe oprócz bazy sygnatur posiada jeszcze bazę zachowań i cech charakterystycznych złośliwego oprogramowania. Innymi słowy, oprócz identyfikowania malware’u na podstawie ciągu bajtów, który można de facto łatwo zmodyfikować nadając mu zupełnie nową sygnaturę, antywirusy testują podejrzaną aplikację pod kątem różnych aktywności uważanych za szkodliwe. Takie podejście nazywamy heurystyką, czyli łączeniem pewnych faktów, żeby dojść do określonych wniosków.
  • Używajmy zapory sieciowej (firewall) do filtrowania ruchu sieciowego. O ile administratorom sieci raczej nie trzeba o tym przypominać, to część użytkowników desktopowych systemów operacyjnych może nawet nie wiedzieć o istnieniu takiego narzędzia.
    • W skrócie: firewall jest systemem ochrony, sprzętowym bądź w formie oprogramowania, który monitoruje oraz kontroluje ruch sieciowy (zarówno przychodzący jak i wychodzący) pomiędzy określonymi węzłami sieci. Na przykład między siecią lokalną LAN a siecią publiczną, taką jak Internet. Z kolei prywatne zapory sieciowe, instalowane na pojedynczych stacjach roboczych, nadzorują wszystkie połączenia wychodzące i przychodzące do danej stacji roboczej.
    • Jeśli chodzi o zasadę działania zapory sieciowej to pamiętajmy, że jej głównym zadaniem nie jest wykrywanie i eliminowanie złośliwego oprogramowania (od tego są antywirusy). Firewall kontroluje jedynie ruch sieciowy na podstawie zdefiniowanych reguł, które albo zezwalają na połączenie, albo je blokują. Każde połączenie (wychodzące bądź przychodzące) jest przepuszczane przez listę reguł, które określają z jakimi adresami IP można nawiązać połączenie; jakie porty sieciowe są otwarte na połączenia z zewnątrz; czy dana aplikacja jest w ogóle uprawniona do nawiązywania połączeń zewnętrznych etc. No dobrze, ale jak to ma nas ochronić przed złośliwym oprogramowaniem? Faktem jest, że firewall raczej nie uchroni nas przed zainstalowaniem malware’u, ale może nas powiadomić kiedy szkodliwy kod będzie próbował nawiązać jakieś nieautoryzowane połączenie z siecią i je zablokować. Dzięki temu będziemy w stanie zapobiec wielu nieprzyjemnym skutkom działania szkodliwego oprogramowania.
    • Wracając do prywatnych narzędzi, to od dłuższego czasu systemy operacyjne Windows mają wbudowaną zaporę sieciową (Windows Firewall), która jest domyślnie włączona. W systemie Linux mamy do wyboru m.in. iptables. System spod znaku nadgryzionego jabłka (Mac OS X) też nie jest gorszy: About the application firewall.
  • Bardziej wysublimowaną metodą jest stosowanie systemów prewencyjnych, takich jak IDS (Intrusion Detection System) oraz IPS (Intrusion Prevention System). Podobnie jak w przypadku zapory sieciowej, ich podstawową funkcją nie jest wykrywanie i eliminacja złośliwego oprogramowania, ale jak najbardziej mogą pomóc w jego zwalczaniu. W teorii, zarówno firewall jak i tego typu systemy, są w stanie zabezpieczyć nas przed złośliwym oprogramowaniem, nawet jeśli bazy aplikacji antywirusowych nie posiadają jeszcze aktualnych sygnatur (np. w przypadku całkowicie nowego wirusa). Zaletą tych systemów jest fakt, że analizują one to co dzieje się w sieci, a nie to jak zbudowane jest oprogramowanie. Więcej informacji o wspomnianych systemach można znaleźć tutaj:
  • Pamiętajmy o regularnym wykonywaniu kopii zapasowych (ang. backup) naszych najważniejszych danych. Kiedy wszystkie powyższe metody zawiodą, przynajmniej będziemy w stanie odzyskać cenne dla nas informacje. W myśl zasady: nie trzymaj wszystkich jaj w jednym koszyku, powinniśmy również przechowywać nasze backupy w różnych, niezależnych od siebie miejscach (np. zewnętrzny dysk SSD, który zazwyczaj nie jest podłączony do żadnej z naszych stacji roboczych).

O autorze

Łukasz Mieczkowski

Programista, który zainteresował się cyberbezpieczeństwem.

2 komentarze

cyberbezpieczeństwo i programowanie

Łukasz Mieczkowski

Programista, który zainteresował się cyberbezpieczeństwem.

Kontakt

Zapraszam do kontaktu za pośrednictwem mediów społecznościowych.