Na naszym portalu lubimy chwalić sukcesy naszych rodaków, o czym przekonaliście się niejednokrotnie. Dzisiaj zaczynamy serię artykułów o projektach polskich ekspertów cyberbezpieczeństwa, które zyskały popularność na całym świecie. Sporo z nich jest już używanych od lat, więc warto o nich przypomnieć i zapytać autorów, co słychać w projekcie. Zaczynamy od programu PE-bear autorstwa Hasherezade, który używany jest choćby w amerykańskiej CIA do analizy wstecznej oprogramowania.
Co to jest PE-bear?
W skrócie, Pe-bear jest jednym z wielu edytorów plików wykonywalnych używanych przez system Windows, czyli w formacie PE. Został stworzony z naciskiem na przyjazny interfejs i na walory edukacyjne. Można więc nie tylko oglądać i edytować wszystkie nagłówki wykorzystywane przez format, ale też zobaczyć, jak te same wartości prezentują się w kontekście całego pliku. Do dyspozycji mamy wizualizację sekcji, możliwość szybkiego dodawania nowych oraz zrzucania istniejących. Znajdziemy też szybką porównywarkę różnych plików PE, która może się przydać np. do porównywania plików, które zostały spatchowane.
Pe-bear jest udostępniany dla systemów Windows, Linux oraz MacOS w ramach licencji GPL-2.0. Został napisany w całości przez Hasherezade, z wyjątkiem biblioteki Capstone, która jest użyta do deasemblacji kodu, oraz oczywiście Qt (biblioteki GUI). Zawiera też drobne poprawki od innych użytkowników Githuba: listę wszystkich można znaleźć w repozytorium na Githubie.
Kto jest autorem?
Autorką jest znana w branży bezpieczeństwa Hasherezade, ekspert w dziedzinie analizy złośliwego oprogramowania. Zasłynęła przygotowaniem narzędzi deszyfrujących dla ransomware’u Petya, a także polskiego DMALockera. Prelegentka na wielu branżowych konferencjach w Polsce i za granicą, a także twórczyni projektów cieszących sporą popularnością pośród analityków złośliwego oprogramowania. Wyróżniona przez magazyn Forbes w rankingu “30 Under 30 Europe”.
Jak można użyć PE-beara w praktyce?
PE-beara można używać we wszystkich zastosowaniach, które wymagają odczytywania lub edycji formatu PE. Po pierwsze, służy do wstępnych oględzin pliku. Naszą pracę możemy zacząć od załadowania złośliwego pliku do PE-beara. Pozwoli to sprawdzić, czy plik jest poprawny, jakie funkcje importuje/eksportuje, jakie ma stringi i czy możemy w nich znaleźć jakieś ciągi charakterystyczne dla znanych nam próbek. Zobaczymy wszystkie interesujące pola, również Rich Header oraz znaczniki czasu, które mogą pomagać we wstępnym rozeznaniu materiału.
PE-bear sprawdza się w przypadku, kiedy musimy naprawić jakąś próbkę zrzuconą z pamięci, edytując pola, które tego wymagają. Możemy też modyfikować istniejące pliki PE, dodawać nowe sekcje i przekierowywać do nich wykonanie.
Jedną z ostatnio dodanych funkcji jest wyszukiwarka sygnatur. Możemy za jej pomocą sprawdzić, czy wybrany plik zawiera dane ciągi bajtów, ale w przeciwieństwie do zwykłego wyszukiwania możemy stosować maski na dowolnej części bajtu. Może się to przydać do testowania sygnatur, które tworzymy do wykrywania konkretnego złośliwego oprogramowania.
Co słychać w projekcie?
W ramach tej serii postanowiliśmy zadawać autorom pytania związane z powstaniem i rozwojem projektu. Jeśli macie jakieś dodatkowe pytania, zapraszam do zadawania ich w komentarzach!
Z3S: Jak powstał pomysł na stworzenie PE-beara?
Hasherezade: Szczerze mówiąc, rozwój PE-beara nie przebiegał liniowo. Kilkukrotnie porzucałam ten pomysł, ale potem powracałam do niego. Pierwszy zarys PE-beara powstał dawno temu, kiedy nie mogłam znaleźć dobrego, darmowego edytora, który obsługiwałby zarówno 32-, jak i 64-bitowe pliki PE. Wtedy jednak było to tylko narzędzie do moich własnych eksperymentów i nie myślałam o jego publikacji. Projekt spełnił swoje podstawowe zadania, a potem poszedł do szuflady. Kilka lat później przysiadłam nad nim ponownie, ale też było to raczej dla zabawy i relaksu po stresującej pracy, jaką wtedy miałam. To był trochę taki mój Minecraft i sposób na oderwanie się od rzeczywistości ;)
Tak czy inaczej, z czasem projekt się rozrósł. W pewnym momencie zaczęłam intensywnie szukać pracy związanej z analizą malware i pomyślałam że publikacja takiego programu może przydać się w CV. Była to pierwsza moja publikacja tego typu, więc nie wiedziałam, czego się spodziewać. Sądziłam, że nie wzbudzi większego zainteresowania, miałam jednak całkiem sporo pobrań. Oczywiście zmotywowało mnie to do dalszego inwestowania czasu w niego. Znowu jednak nowa praca i inne projekty sprawiły, że miałam dłuższą przerwę w jego rozwoju. Po wydaniu 0.3.7 w kwietniu 2014 zawiesiłam rozwój PE-beara. Musiałam wybrać, co robię ze swoim wolnym czasem, i sądziłam że rozwój jednego w wielu edytorów PE nie jest priorytetem, podczas gdy istnieją inne narzędzia tego typu.
Okazało się jednak że PE-bear doczekał się swojego grona wiernych użytkowników, którzy co jakiś czas pytali o aktualizacje. Początkowo postanowiłam tylko poprawić nadesłane bugi. W kwietniu 2018, równo 4 lata po zawieszeniu projektu, wypuściłam nową wersję. Jak się okazało, została ona ciepło przyjęta i pobrana przez kilkanaście tysięcy użytkowników. To był finalny argument, który mnie przekonał, żeby potraktować ten projekt na serio. Zaczęłam wypuszczać regularne aktualizacje, nie tylko poprawki, ale też z nowymi pomysłami. Po pewnym czasie otworzyłam kod źródłowy. Tak więc trudno powiedzieć, co było tak naprawdę początkiem tego projektu – było kilka początków.
Jak oceniasz dotychczasowy rozwój PE-bear? Czy projekt spełnia Twoje pierwotne założenia, czy jednak poszedł zupełnie inną ścieżką, niż planowałaś?
Projekt zaczął żyć własnym życiem i rozwija się w oparciu o potrzeby użytkowników. Dalej jednak spełnia moje pierwotne założenie, którym był nacisk na przyjazny interfejs.
Czy PE-bear to narzędzie, które może być przydatne już dla osób początkujących w tematyce analizy złośliwego oprogramowania?
Tak, jak najbardziej. Może być wykorzystywany do nauki na temat formatu PE ze względu na to, że pozwala nie tylko zobaczyć poszczególne pola nagłówków, ale też zlokalizować je w kontekście całego pliku. Wizualizacje sekcji pomagają lepiej zrozumieć, w jaki sposób plik jest mapowany w pamięci. Wszystkie adresy są oznaczane kolorami, dlatego łatwo jest zapamiętać, z jakim formatem mamy do czynienia: RAW (surowym), RVA (wirtualnym, relatywnym do bazy modułu), czy VA (wirtualnym wraz z bazą modułu). Bardzo łatwo możemy dodawać inne elementy do struktur, np. nowe sekcje, nowe importy.
Czy projekt posiada społeczność skupioną wokół jego rozwoju?
Nie nazwałabym tego społecznością, bo użytkownicy PE-beara nie są w żaden sposób zrzeszeni. Jest to raczej nieregularne, doraźne wsparcie.
Czy oprócz Ciebie ktoś jeszcze jest zaangażowany w rozwój projektu?
Jestem głównym i właściwie jedynym developerem tego projektu, ale zdarzają się jakieś mniejsze kontrybucje, zwykle drobne poprawki od innych użytkowników Githuba.
Czy każdy może dołączyć do wsparcia rozwoju projektu lub wspomóc go finansowo?
Tak, PE-bear jest open source, dostępny na Githubie. Przyjmuję pull requesty (o ile coś wnoszą do projektu). Ale nie trzeba być programistą, żeby wspierać. Każdy, kto zgłosi buga albo podzieli się pomysłem na ulepszenie, tak naprawdę wspiera projekt. Można też wspomagać go finansowo poprzez link Paypal.
Na swojej stronie wspominasz, że PE-bear znalazł się w oficjalnych materiałach CIA, które wyciekły na Wikileaks. Jak odebrałaś informację, że CIA korzysta z Twojego rozwiązania?
Odebrałam to pozytywnie i przytoczyłam ten fakt na stronie jako zabawną ciekawostkę. Oczywiście cieszy mnie, że PE-bear ma użytkowników na całym świecie, nawet pośród tak słynnych instytucji ;)
Czy i jak często spotykasz się z feedbackiem o zastosowaniach Pe-beara? Co najmniej na Twitterze można spotkać się z jego bardzo pozytywnym odbiorem.
Regularnie widuję screenshoty z PE-bearem w różnych prezentacjach i artykułach, zawsze bardzo mnie to cieszy. Zdarzało mi się też oglądać zastosowanie PE-beara w kilku książkach.
Czy otrzymałaś jakieś oferty od firm, którym spodobał się Pe-bear i chciały wesprzeć rozwój Twojego projektu?
Kilka lat temu, zanim jeszcze otworzyłam kod źródłowy, pewna firma chciała go ode mnie kupić, ale nie byłam tym zainteresowana. Ofert wsparcia nie dostałam.
Jakie są dalsze plany rozwoju PE-beara?
Projekt jest używany, a więc będzie rozwijany. Co do tempa rozwoju, wszystko zależy od mojego wolnego czasu. Pomysłów mi nie brakuje, a także feedback ze strony użytkowników bardzo pomaga. Jest kilka funkcjonalności, które chciałabym dodać niedługo, ale nie powiem, kiedy dokładnie.
Poza PE-bearem, patrząc po Twoim repozytorium na Githubie, również PE-sieve spotkał się z dużym, pozytywnym odbiorem. Opowiesz coś o tym projekcie?
PE-sieve to jeden z moich ulubionych projektów, więc mogę mówić o nim długo ;) Ale jednak postaram się krótko. PE-sieve to nie tylko osobny program, ale też biblioteka. Jest silnikiem używanym przez kilka moich projektów. Służy do skanowania pamięci procesów i wykrywania w nich anomalii, które mogą świadczyć o tym, że w procesie działa jakiś implant, np. wstrzyknięty przez malware.
Posiada zestaw wielu różnych filtrów skanujących, które wykrywają podejrzane artefakty: mogą to być patche zainstalowane w kodzie programu, shellcode lub całe wstrzyknięte moduły. Cały skan odbywa się w trybie pasywnym – czyli bez jakiejkolwiek ingerencji w skanowany proces. Można używać go post-factum, po tym jak wstrzyknięcie już się dokonało. Metoda wstrzyknięcia i użyte API są właściwie bez znaczenia – PE-sieve nie polega na tych informacjach, może więc wykryć nawet wstrzyknięcia wykonane z użyciem niestandardowych metod.
Zebrany materiał jest zrzucany z pamięci do dalszej analizy. Funkcja ta przydaje się bardzo przy rozpakowywaniu próbek złośliwego oprogramowania. Najczęściej bowiem jest ono opakowane w zewnętrzną, niegroźnie wyglądającą warstwę, natomiast prawdziwy, złośliwy ładunek ukazuje się dopiero w trakcie działania i może być wstrzykiwany do innych procesów. W przypadku kiedy mamy do czynienia ze wstrzykniętym plikiem PE, PE-sieve może również zrekonstruować uszkodzone nagłówki. Zarówno w przypadku modułów PE, jak i shellcode’u, możemy zrzucić z pamięci listę wszystkich załadowanych do modułu importów, co również pomaga w analizie. PE-sieve działa więc dosłownie jako sitko, którym “odcedzamy sobie” z pamięci procesu interesujące fragmenty.
Muszę podkreślić, że PE-sieve jest przeznaczony dla analityków malware’u i pracowników zajmujących się tematyką incident response. Raczej nie przyda się osobom niezaznajomionym z niskopoziomowym działaniem programów. Nie jest to odpowiednik antywirusa. Sam fakt, że jakiś proces posiada shellcode w pamięci lub ma zainstalowane jakieś hooki, nie świadczy jeszcze o infekcji – dlatego materiał zebrany przez PE-sieve jest raczej punktem wyjścia do dalszej analizy, a nie werdyktem.
Wszystkich których chcą dowiedzieć się więcej, zapraszam na Wiki projektu: github.com/hasherezade/pe-sieve/wiki
Na swoim blogu opublikowałaś poradnik z wprowadzeniem do inżynierii wstecznej w kontekście analizy złośliwego oprogramowania. Czy możesz coś o nim opowiedzieć? Dla kogo jest dedykowany oraz czy można już tam zapoznać się z PE-bearem?
Ten poradnik był próbą odpowiedzi na powtarzające się pytania, które często dostawałam od początkujących osób. Wielokrotnie proszono mnie o linki, wyjaśnianie jakichś podstaw czy o materiały, z których sama korzystałam, ucząc się fachu. Chciałam więc stworzyć coś w rodzaju “mapy drogowej” dla każdego, kto chciałby zostać analitykiem malware.
Poradnik jest pogrupowany tematycznie – od tematów najbardziej podstawowych, do bardziej zaawansowanych. Nie jest więc adresowany wyłącznie do osób całkowicie początkujących.
Z założenia miał opisywać wszystko w skrócie i posiłkować się linkami do materiałów rozwijających temat. Znajdziemy tam więc krótkie wyjaśnienie każdego zagadnienia napisane przeze mnie oraz bazę materiałów innych autorów. Poradnik jest co jakiś czas aktualizowany o nowe materiały, a także o odpowiedzi na nowe pytania, które dostaję.
Oczywiście linki do moich narzędzi, w tym do PE-beara, znajdują się pośród materiałów. Przede wszystkim dlatego, że są to narzędzia, z których sama korzystam w swojej codziennej pracy. Poza tym, jak już wcześniej wspomniałam, PE-bear może też pomagać w zrozumieniu plików PE, więc polecam go początkującym uczącym się tego formatu.
Czy masz jakiś nowy projekt na horyzoncie?
Szczerze mówiąc, mam dużo różnych pomysłów, ale znajduję czas na realizację jedynie niewielkiego procentu z nich. Moje aktualne projekty też wymagają ciągłej pracy nad nimi i udoskonaleń. Więc w najbliższym czasie raczej nie planuję rozpoczynać kolejnych większych programów open source. Ale nigdy nie wiadomo, to są projekty, które piszę głównie dla przyjemności i pozwalam im żyć własnym życiem. Nie jest tak, że wstaję rano i mówię sobie “dzisiaj zacznę nowy projekt open source” (w stylu waterfall model). Raczej rozwija się to naturalnie, w stylu spiral model. Jest pomysł i prototyp, a jeśli to zadziała i brzmi ciekawie, to dodaję nowe pomysły – stawiam na ewolucję i nieustanny refaktoring. Niektóre z tych pomysłów doczekują się publikacji i rozwijają dalej, inne zostają w “szufladzie”.
Podsumowanie
Hasherezade bardzo dziękujemy za udzielone odpowiedzi, a Czytelników zachęcamy do skorzystania z narzędzi PE-bear oraz PE-sieve i spróbowania swoich sił z analizą złośliwego oprogramowania.
Komentarze
Dzięki za ciekawą rozmowę. How-to-start przegapiłem, wygląda super, dorzucę link do swoich prezentacji i będę szerował dobre słowo ;-)
Ciekawy wywiad, czekam na kolejne z innymi ciekawymi ludźmi.
Świetne narzędzie. Jeszcze lepsza sama postać autorki. Inspirujące jest to, że chce się komuś w wolnym czasie robić takie projekty.