Obfuscator Eazfuscator i zabezpieczenia aplikacji .NET

Dzisiaj rozmawiałem z twórcą obfuscatora dla .NET – Eazfuscator i przyznam szczerze, że trochę zdębiałem. Interesowało mnie jak obecnie radzi sobie Eazfuscator z deobfuscatorem de4dot. Po pierwszej odmowie udzielenia mi odpowiedzi, gdyż reprezentuję firmę sprzedającą zabezpieczenia oprogramowania, poinformowałem go, że interesuje mnie sam obfuscator dla moich prywatnych celów, jednak odpowiedź jaką uzyskałem postanowiłem opublikować, w sumie jako ostrzeżenie dla innych klientów.

Obfuscator Eazfuscator

Rozmowa zeszła na techniki zabezpieczające aplikacje .NET przed inżynierią wsteczną i uzyskałem odpowiedź, że najlepszą techniką zabezpieczającą jest zmiana nazw klas, zmiennych i nazw funkcji… Dopytałem z ciekawości, czy sobie nie żartuje, ale najwidoczniej nie:

> Renaming is the best obfuscation technique? I hope you’re kidding 🙂
No pun intended. Renaming is the best technique because it is completely
*irreversible *— a Holy Grail property of any protection scheme.

Oleksiy Gapotchenko

Jak widać cała moja wiedza o zabezpieczeniach oprogramowania była jak dotąd uboga, a najlepszą metodą ochrony obfuscatora za 399 USD jest zmiana nazw w skompilowanym pliku. Doh!? Nie mutacja kodu, nie wirtualizacja, żadne dynamiczne szyfrowanie, JITtowanie… tylko zmiana nazw! Nie muszę chyba tłumaczyć nikomu, że nazwy klas, zmiennych czy funkcji nie są nikomu potrzebne przy próbie łamania zabezpieczenia, dotyczy to zarówno aplikacji .NET, natywnych czy Java po zastosowaniu obfusatora i takie stwierdzenia jak powyżej twórcy jednego z najpopularniejszych obfuscatorów stawiają duży znak zapytania nad poziomem ich wiedzy o tym czym są zabezpieczenia oprogramowania.

Rynek obfuscatorów dla .NET, których ceny są astronomicznie wysokie w porównaniu do systemów zabezpieczających 32 i 64 bitowe natywne aplikacje, a poziom skomplikowania zabezpieczeń natywnych wykracza technicznie daleko poza metody stosowane w zabezpieczeniach aplikacji .NET zawsze mnie zastanawiał. Zwłaszcza w obliczu aplikacji takich jak de4dot, które jednym klikiem sprawiają, że wszystkie te drogie zabezpieczenia znikają niczym pieniądze z portfeli klientów, którzy inwestują w tak słomianą ochronę.

Obfuscator v2.0

Właśnie wydałem nową wersję swojego oprogramowania Obfuscator v2.0.

Obfuscator służy do modyfikacji kodu źródłowego assemblera (dla składni MASM), w taki sposób, aby wynikowy kod był jak najbardziej skomplikowany do analizy.

Główne okno Obfuscatora

Do tego celu Obfuscator stosuje wiele metod jak:

  • mutacja instrukcji assemblera na serię innych równoznacznych instrukcji
  • zmiana wykonywania ścieżki kodu na nielinearną (skoki w górę i w dół w codeflow)
  • wstawianie nieinwazyjnych konstrukcji kodu utrudniających statyczną i dynamiczną analizę
  • ukrywanie bezpośrednich wywołań funkcji WinAPI
  • wstawianie junków między prawdziwe instrukcje
  • wstawianie fałszywych instrukcji
  • wstawianie celowych wyjątków i bramek SEH, które te wyjątki wyłapują, a utrudniają tracing
  • rozpoznawanie ponad 15000 stałych WinAPI i ich zamiana na postać liczbową, co pozwala mutację instrukcji je wykorzystujących

Kod wyjściowy po zastosowaniu Obfuscatora

Obfuscator to niszowe narzędzie, które stworzyłem dosyć dawno temu w PHP, a obecnie przeszło gruntowne zmiany, praktycznie cały silnik został przepisany, poprawiona została analiza kodu źródłowego, mutacje bazujące na matematycznych transformacjach zostały przepisane z wykorzystaniem biblioteki GMP dla zachowania kompatybilności z typem danych unsigned int, z którym PHP sobie po prostu nie radzi. Dodałem także rozpoznawanie stałych wartości wykorzystywanych w funkcjach WinAPI jak np. MB_ICONINFORMATION, które zostają zamienione na wartości liczbowe, dzięki czemu instrukcje je wykorzystujące mogą być poddane mutacjom.

Jeśli jesteście ciekawi jak to działa, zajrzyjcie na stronę programu, gdzie możecie ściągnąć klienta dla systemu Windows:

https://www.pelock.com/products/obfuscator

Znajdziecie tam też przykładowy skompilowany plik EXE przed i po zastosowaniu Obfuscatora – polecam spojrzeć na kod w IDA, Hiew i spróbować pośledzić go w OllyDbg.

Jeśli macie jakieś pytania, sugestie lub zastrzeżenia – piszcie w komentarzach.

Nowy rodzaj obfuskacji

binaryNiedawno natrafiłem na artykuł opisujący nowy rodzaj obfuskacji, bazujący na homomorficznym szyfrowaniu, czyli takim szyfrowaniu, gdzie można operować na zaszyfrowanych wartościach i operacje te będą miały bezpośredni wpływ na odszyfrowane dane.

Idea jest taka, żeby uniemożliwić zrozumienie algorytmów kodu tak zabezpieczonych przy jednoczesnym wykonaniu kodu.

Artykuł znajdziecie na:

http://www.rdmag.com/news/2013/07/computer-scientists-develop-mathematical-jigsaw-puzzles-encrypt-software

PDF-a z opisem techniki tutaj:

http://eprint.iacr.org/2013/451.pdf

Żałuję jedynie, że nie udostępnili żadnych binarek do wglądu, ale warto zaznajomić się z takimi nowinkami.

Obfuscator x86

Szaleństwo – jakby to napisali w reklamie Media Markt (tyle, że bez Michała Wiśniewskiego, bo odmówił udziału w tej promocji), rozdają za darmo kody do Obfuscatora kodu x86, który z twojego kodu wykrywanego przez wszystkie antywirusy zrobi sieczkę nie do rozpoznania nawet przez MksVira 🙂

https://www.pelock.com/products/obfuscator

Tak wygląda kod po jego zaciemnieniu:

Obfuscated

Każdy kto chce otrzymać promocyjny pakiet w wysokości 123 darmowych kredytów proszony jest o kontakt z redakcją i podanie jednego powodu, dla którego chce zamotać swój kod w assemblerze.