W czwartej części cyklu rozwiniemy temat zaczęty w częściach pierwszej i trzeciej, czyli ukrywanie swoich aktywności do czasu zakończenia działań – a więc do momentu, gdy program ukończy szyfrowanie wszystkich możliwych danych i będzie gotów zaprezentować użytkownikowi stosowny komunikat.
Po co w ogóle unikać wykrycia? Jeśli chcesz atakować pojedyncze komputery i zarazem przypadkowe komputery, wówczas tak naprawdę nie musisz się o to martwić. Przy dzisiejszej mocy obliczeniowej, zaszyfrowanie typowych ilości danych użytkownika może trwać od kilkunastu minut do maksymalnie paru godzin. Więc jeśli nawet założymy, że aż połowa użytkowników zorientuje się zbyt szybko, że coś się dzieje i przerwie szyfrowanie, to druga połowa tego nie zrobi. A nawet ta pierwsza połowa poniesie mniejsze lub większe straty.
Sytuacja wygląda zgoła inaczej, gdy:
- chcesz zaatakować komputer konkretnej osoby lub firmy
- chcesz zaatakować większą liczbę komputerów – np. całą korporację
- chcesz najpierw wykraść dane i potrzebujesz czasu
- chcesz przy okazji zinfiltrować infrastrukturę firmy i przeprowadzić większe włamanie, a szyfrowanie danych wykonać przy okazji, dla odciągnięcia uwagi wroga
W takich sytuacjach musisz pomyśleć o mechanizmach ograniczających zostawiane ślady i zapobiegających wykryciu Twojego programu.
Przykładowe techniki zapobiegające wykryciu
Ukrywanie działającego programu w systemie
- Unikanie debuggerów, sandboxów i wirtualizacji, udawanie pożytecznego programu w przypadku wykrycia tego typu mechanizmów, używanie pakerów i krypterów do programów wykonywalnych. Tutaj znajdziesz świetny artykuł na ten temat w języku polskim, napisany przez autora programu PELock, służącego do zabezpieczania programów wykonywalnych przed analizą wsteczną.
- Używanie mechanizmów pośredniczących typu svchost.exe, rundll32.exe i innych do uruchamiania kodu w taki sposób, aby nie był widoczny w Menedżerze zadań, czy innych mechanizmach śledzących procesy.
- Tam gdzie to możliwe, stosowanie technik infekcji bezplikowej (fileless), albo ukrywanie swojego kodu w nietrywialnych miejscach (zobacz ten świetny przykład).
- Szyfrowanie danych na każdym poziomie – zobacz ten projekt również od autora PELock.
Podział działań na wiele etapów
- Używanie obecnych w obiegu exploitów pozwalających na elewację uprawnień.
- Infekcja wielowarstwowa – używanie kilku lub kilkunastu warstw dropperów, tj. programów, których głównym zadaniem jest ukryte ściągnięcie i uruchomienie kolejnej warstwy. Rozbijanie logiki wykrywania poszczególnych zabezpieczeń na różne warstwy.
Automatyzacja kompilacji kodu
- Automatyzacja budowy plików binarnych i skanowania przez narzędzia typu VirusTotal (przy czym samego VirusTotal używać nie należy, gdyż wysyła on próbki producentom antywirusów).
- Dynamiczna kompilacja – za każdym razem modyfikując kod źródłowy „zaufanych” bibliotek.
Walka z programami antywirusowymi, DLP i innymi
- Wykrywanie oprogramowania DLP, SIEM lub innego szpiegującego, różnicowanie zachowania programu w przypadku działania w takim środowisku.
- Wykrywanie oprogramowania antywirusowego, w tym oprogramowania typu „Internet Security”, próby obchodzenia lub wyłączania go w zależności od posiadanych uprawnień, próby możliwie najbardziej efektywnego działania w środowisku z takim programem (np. maksymalizacja strat dla ofiary, zanim dojdzie do zablokowania działania przez taki program).
- Wykrywanie „wrapperów” implementujących niestandardowe zabezpieczenia, podstawionych zamiast właściwych plików binarnych (np. Windows Killed Process Canary zamiast prawdziwego programu sqlserver.exe, który jest dużo większy).
- Blokowanie możliwości ściągnięcia nowych baz wirusów programom antywirusowym (np. przez nadpisywanie konkretnych nazw hostów lub preparowanie wpisów w tablicy routingu).
Ukrywanie komunikacji sieciowej
- Unikanie wykrycia podejrzanego ruchu przez korporacyjne systemy analizy ruchu sieciowego, podszywanie się pod programy antywirusowe i ich próby aktualizacji baz z „nowego serwera” (tj. celem jest połączenie prób komunikacji do serwera sterującego z uruchomionym procesem programu antywirusowego, aby systemy analizy ruchu „nauczyły się” tego połączenia jako dopuszczalnego).
- Przerzucanie różnych „szkodliwych” działań programu na programy systemowe, które da się oskryptować (np. dodanie reguł do Windows Firewalla, dodanie certyfikatu własnego CA przez certutil.exe itp.).
- Ukrywanie komunikacji z serwerem C&C w nietrywialny sposób, np. w formie komentarzy do zdjęć na Instagramie (lub Twitterze – zobacz ten gotowy projekt).
W kolejnej części – skalowanie kampanii.
A już za tydzień pod tym adresem opiszemy ciekawe narzędzie, które może znacząco przyspieszyć pracę osób, które opanowały już opisane wyżej techniki i pracują nad kolejnym w swojej karierze projektem.
Aktualizacja 2020-11-04
Dodaliśmy link do projektu Kernel Level Keylogger with Twitter as Covert Channel, zawierającego aż dwa warte uwagi mechanizmy.
Intencją autorów ani wydawcy treści prezentowanych w magazynie PAYLOAD nie jest namawianie bądź zachęcanie do łamania prawa. Jeśli popełniłeś lub masz zamiar popełnić przestępstwo, bądź masz wątpliwości, czy Twoje działania nie będą łamać prawa, powinieneś skonsultować się z najbliższą jednostką Policji lub Prokuratury, a jeśli są one związane z pieniędzmi, dla pewności również z Urzędem Skarbowym.
Nie zezwala się na użycie treści prezentowanych w magazynie PAYLOAD, ani produktów dostępnych w sklepie PAYLOAD, do celów popełniania przestępstw lub przestępstw skarbowych.