Ostatnio zdarzyło się coś. Tym czymś był komunikat antywirusa o wykryciu malware na jednym z zaprzyjaźnionych komputerów. Teoretycznie wszystko jest w porządku, malware jakoś wlazł, antywirus go znalazł i usunął. Po sprawie. No dobrze, tylko jak wlazł i czy aby na pewno nic po sobie nie zostawił?
Historia pewnej infekcji
Ponieważ komputer miał trochę "mojej" konfiguracji, mogłem za pomocą dziennika zdarzeń (Security) sprawdzić kiedy podejrzany proces był uruchamiany. Mogłem również sprawdzić, czy uruchamiał on inne procesy. Było to o tyle istotne, że malware należał do kategorii trojan dropper, a więc można oczekiwać było z jego strony aktywności polegającej na pobraniu właściwego kodu i uruchomieniu go. W logach jednak nic takiego nie udało się znaleźć. Brak oczekiwanych wpisów w logach jeszcze o niczym nie świadczy. Swój kod w Windows można uruchomić na wiele sposobów, wiele z tych sposobów nie spowoduje odłożenia się w logach informacji o uruchomieniu procesu. Same logi zresztą również mogą być zmodyfikowane. Umówmy się jednak, że tym razem paranoja zostanie ograniczona do średniego pułapu i przyjmiemy robocze założenie, że prawdopodobnie żadne obce procesy nie były uruchamiane przez podejrzany program.
Kolejnym krokiem było sprawdzenie, jakie procesy były uruchamiane w czasie od pierwszego uruchomienia malware do czasu jego usunięcia. Tu również bez sukcesów, nie rzucił się w oczy żaden proces, który:
- wyglądałby podejrzanie,
- nie był związany z procesem instalacji oprogramowania,
Dlaczego piszę o instalacji oprogramowania? Bo w trakcie tego procesu często tworzone są pliki tymczasowe o różnych dziwnych nazwach, często są one uruchamiane. Zwykle jednak taki plik (a więc i program o podejrzanej nazwie) uruchamiany jest tylko raz w procesie instalacji. Malware chce przeżyć kolejne restarty systemu, więc proces związany z malware prawdopodobnie uruchamiany byłby częściej niż raz (ilość zależna od ilości rebootów systemu).
Jeśli do tego dodamy to, że:
- antywirus po pełnym skanowaniu systemu nie znalazł żadnych innych podejrzanych plików,
- nie pojawiły się żadne podejrzane procesy/usługi/sterowniki/(...) startujące razem z systemem,
- brak było oznak typowych dla rootkitów i bootkitów,
- nie pojawiał się podejrzany ruch sieciowy,
założenie, że większych szkód w systemie intruz nie spowodował, opierało się na coraz mocniejszych podstawach. Na zakończenie tego aspektu śledztwa postanowiłem skorzystać jeszcze z Memoryze i AuditViewer w celu analizy pamięci systemu. Przy okazji postanowiłem rzucić okiem też na Redline. Rezultat? Null, Nil, None, (...) Swoją drogą muszę przyznać, że Redline mi się spodobał, choć niestety działa dość ociężale...
Skoro stwierdziłem, że system jest czysty (konkretnie: nie ma obecnie żadnych przesłanek, które wskazywałyby na istnienie/działanie jakiegokolwiek wrogiego kodu w systemie), do ustalenia pozostała druga kwestia: jak TO wlazło. By odpowiedzieć na to pytanie musiałem najpierw ustalić kiedy to się stało. Pierwsza informacja z logów na temat uruchomienia podejrzanego procesu pochodziła z końca czerwca (dobry przykład na nieskuteczność oprogramowania antywirusowego w odniesieniu do jeszcze nieznanych przykładów malware), ale czy była to data, kiedy malware pojawił się w systemie?
Z ustaleniem daty infekcji miałem trochę problemów. Antywirus usunął plik i niestety nie udało się go odzyskać, choć nie szukałem go jakoś strasznie intensywnie. Na szczęście plik ten został zainstalowany w oddzielnym katalogu, którego już antywirus nie usunął. W związku z tym po dacie utworzenia katalogu mogłem określić prawdopodobną datę utworzenia pliku. Prawdopodobną, bo przecież timestampy mogły zostać zmodyfikowane.
Data utworzenia katalogu była o kilka dni wcześniejsza od daty pierwszego zapisanego w logach uruchomienia malware. Skąd ta różnica? Prawdopodobnie wynikała ona z wybranego przez malware "sposobu przetrwania". Malware zainstalował się jako usługa, nie została ona jednak uruchomiona. A przynajmniej zakładam, że była to usługa, tak wynika ze sposobu, w jaki proces był uruchamiany (uruchamiającym był autentyczny proces services.exe, którego rola w systemie jest dość jasna). Niestety, ewentualne ślady z rejestru również zniknęły (nie zachował się również żaden restore point), aczkolwiek potwierdzenie tego, że rzeczywiście była to usługa, znalazłem w logach antywirusa.
Pozostało ostatnie, najważniejsze chyba pytanie: jak TO się dostało. Dysponując prawdopodobną datą infekcji sprawdziłem jakie procesy były uruchamiane w tym czasie. Szczęście mi dopisało, w tym czasie instalowany był jakiś program. Szybkie sprawdzenie historii przeglądarki internetowej pokazało, że chwilę wcześniej plik ten był pobrany z sieci. Ale był jeden mały problem. To nie był ten plik, który miał być pobrany. Po bliższym sprawdzeniu adresu źródłowego okazało się, że w rzeczywistości pobrana została jego "poprawiona" wersja, z dodatkową wkładką.
Nie wnikałem już tak bardzo w to, dlaczego akurat ta wersja została pobrana, choć w historii bezpośrednio sprzed pobrania tego pliku widziałem korzystanie z Google. Prawdopodobnie ktoś włożył trochę pracy w to, by strona ze zmodyfikowaną wersją oprogramowania pojawiła się nieco wcześniej w wynikach wyszukiwania.
Tu mała dygresja - chyba coraz więcej użytkowników nie widzi różnicy między wpisaniem adresu, a wyszukaniem. Na przykład na moją stronę wciąż trafiają osoby, które chcą znaleźć pewne radio z miasta słynącego niegdyś z pierników (skutek uboczny wpisu: Podszyjmy się pod Radio Maryja). Sądząc po słowach kluczowych, osoby te mylą pasek adresu z paskiem (okienkiem?) wyszukiwania.
Podsumowując:
- infekcja okazała się niegroźna (trojan nie zaciągnął żadnego "towarzystwa"),
- malware trafił na stację w wyniku akcji użytkownika (sam go sobie zainstalował),
- antywirus przez prawie trzy tygodnie nie był wstanie zidentyfikować malware,
- warto mieć logi,
Cóż, trzeba zwracać coraz większą uwagę na autentyczność oraz integralność instalowanego oprogramowania. Czy na pewno oprogramowanie pochodzi stąd, skąd powinno pochodzić? Czy na pewno nie zostało zmodyfikowane? Skoro w Android Market mogą się pojawiać "ulepszone" wersje popularnych aplikacji (o tym się słyszy, choćby tu: Android Market Apps Hit With Malware, czy tu: 21 popularnych aplikacji na Androida z trojanem w prezencie), dlaczego w innych "obszarach" ma być inaczej?
Temat jak sprawdzić, czy oprogramowanie jest autentyczne i jego integralność nie została naruszona, jest sam w sobie ciekawy i obszerny. Może do niego wrócę. Ale zastanówcie się przez chwilę, która z tych metod może być najefektywniejsza:
- publikacja sum kontrolnych,
- podpis PGP/GPG,
- podpis cyfrowy (code signing),
Drugie pytanie - dlaczego nie jest?
1. Brak ogólnosystemowego systemu zarządzania oprogramowaniem na Windows. Co program, to inny wydawca, źródło (masa nieautoryzowanych mirrorów), często instalator. Ciekawym projektem był win-get (http://windows-get.sourceforge.net/), dziwi mnie, czemu MS nie pociągnął tego (w wersji graficznej, oczywiście). Tym bardziej, że od razu byłby jeden, centralny system do sprawdzania aktualności softu, a nie każdy soft robi to po swojemu...
2. Przyzwyczajenie użytkowników do odpalania softu niekoniecznie z do legalnych źródeł. Nawet, jeśli crack będzie podpisany, to przez kogo?
3. Przyzwyczajenie użytkowników do odpalania czego popadnie, aby działało. Myślę, że nawet jeśli cudowny sposób polecany na forum będzie wiązał się z akceptacją ostrzeżenia o niepewnym źródle, to i tak zapewne zaakceptują.
egrep -v "^#|deb\-src|debian.org" /etc/apt/sources.list | grep deb | wc -l
6
Tylko 6 "nieoficjalnych" repozytoriów na działającym desktopie, w tym Opera, Skype, Virtualbox, Mozilla, Wine, czyli tak naprawdę repozytoria autorów (pytanie, na ile wierzymy autorom i oczywiście jest możliwość przechwycenia ich kluczy). W stosunku do pełnego chaosu pod Windows jest to IMO spory postęp. Pilnowanie aktualizacji (w tym bezpieczeństwa) - gratis.
Jasne, niekoniecznie jest to ideał (patrz problemy z wersjonowaniem, choć wygląda, że debianowy devteam Mozilli sobie z tym radzi: http://mozilla.debian.net/ (apt-pinning odrzucam jako zbyt trudny dla typowego użytkownika), kosztem wielu repo.
IMVHO taki system dla (darmowego, choć komercyjne też da się zrobić) oprogramowania znacznie ograniczyłby możliwości infekcji.