Ta witryna korzysta z plików cookies. Korzystając z witryny akceptujesz: polityka prywatności.   [×]
Online: 0x0F (15)

haker.info – Etyczny hacking🕊️

Spreading knowledge like a virus.

Zaciemnianie ciągów tekstowych w malware

🕰 ✒️ Dawid Farbaniec 📄 780 słów

0x01. Słowem wstępu

Zaciemnianie (ang. obfuscation) ciągów tekstowych może mieć różne zastosowania. Bardziej wtajemniczonym Czytelnikom może się kojarzyć ze złośliwym oprogramowaniem (ang. malware). Jednak tak samo młotek można użyć nie do pracy, a nieetycznie i uderzyć nim kogoś. Mimo możliwych negatywnych skojarzeń techniki zaciemniania znajdują zastosowanie wszędzie tam, gdzie potrzebne jest proste ukrycie danych (lub kodu) programu. Nie należy na pewno stosować zaciemniania do przechowywania haseł i innych wrażliwych danych. Pod tym względem nie ma większej różnicy czy napis w programie jest zaszyfrowany poprzez AES czy zwykłym XORem, gdy później jest on odszyfrowywany w pamięci. W większości przypadków będzie można bardzo łatwo podejrzeć dane wychodzące z funkcji deszyfrującej np. debuggerem.

W tym i podobnych przypadkach stosuje się stwierdzenie:

Bezpieczeństwo przez niejawność
(ang. Security through obscurity)

które oznacza, że takie działania nie zapewniają odpowiedniego poziomu bezpieczeństwa.

0x02. Wydobywanie ciągów tekstowych z plików

Napisy zastosowane w programie komputerowym mogą wiele podpowiedzieć jakiego rodzaju to program. Ma to szczególne znaczenie przy analizie złośliwego oprogramowania. W wydobytych napisach mogą być np. adresy serwerów C&C, ścieżki zrzucanych plików, nazwy używanych funkcji API itp.

Z tego typu powodów twórcy złośliwego oprogramowania bardzo często zaciemniają ciągi tekstowe w swoich programach.

Poniżej przedstawiono przykładowy program w Visual C++, który tworzy dynamicznie (podczas działania aplikacji) napis abcd.

#include <windows.h> int CALLBACK wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nShowCmd ) { WCHAR text[] { L"1234" }; text[0] = '\x61'; text[1] = '\x62'; text[2] = '\x63'; text[3] = '\x64'; //text == "abcd" MessageBox(NULL, text, L"haker.info", 0); ZeroMemory(text, 4); //text == (empty) MessageBox(NULL, text, L"haker.info", 0); return 0; }

Warto zaznaczyć, że napis utworzony podczas działania programu nie pojawił się w debuggerze x64dbg.


image
Rysunek: Wyszukiwanie odwołań do napisów w x64dbg (1 z 2)
image
Rysunek: Wyszukiwanie odwołań do napisów w x64dbg (2 z 2)

Bardziej wtajemniczeni Czytelnicy może zauważyli, że tworzony napis abcd jest przekazywany do funkcji API MessageBox.

M.in. z tego powodu z takim zaciemnianiem poradzi sobie np. FLOSS (FireEye Labs Obfuscated String Solver).


image
Rysunek: FireEye Labs Obfuscated String Solver w akcji (1 z 2)
image
Rysunek: FireEye Labs Obfuscated String Solver w akcji (2 z 2)

0x03. www.stringencrypt.com od PELock to żart?

Jakiś czas temu moją uwagę zwróciła usługa pod adresem www.stringencrypt.com. Korzysta ona z niejakiego silnika polimorficznego prezentowanego pod adresem [1] hxxps://github.com/PELock/Simple-Polymorphic-Engine-SPE32 [dostęp: 01.07.2021 r.]

Cytat: Poly Polymorphic Engine is the only commercial polymorphic engine available on the market. It's a highly specialized cryptographic solution which is used in anti-cracking software protection systems and anti-reverse engineering systems. [1]

Natomiast pod adresem [2] jest opisane, że programiści w pośpiechu zostawiają w kodzie hasła w postaci plain text.

[2] hxxps://github.com/PELock/StringEncrypt-WebAPI [dostęp: 01.07.2021 r.]

Cytat: What can be found in application binaries? Everything! I've listed a few examples of the things I found below. Sometimes these things shouldn't even be included in applications at all (they are there due to poor design choices or rushed work), but some are just cannot be avoided.
- Database passwords
- FTP passwords
- Login credentials
- ...

Jako rozwiązanie na hasła umieszczane w plikach *.exe autor szyfrowania (PELock) proponuje:

The solution — String Encrypt

Niestety jest to wprowadzanie w błąd. Zaciemnienie losowymi instrukcjami arytmetyczno-logicznymi nie jest rozwiązaniem. Dla niewtajemniczonych napiszę, że już o wiele lepsze jest umieszczenie aplikacji po stronie serwera WWW, gdzie nie ma dostępu do jej kodu bez włamania się na serwer.

Jak z jedynym komercyjnym silnikiem polimorficznym dostępnym na rynku, który ma być wysoce specjalizowanym rozwiązaniem kryptograficznym [1] radzi sobie darmowe narzędzie FireEye Labs Obfuscated String Solver?

Możemy wziąć przykładowy kod z [2] (hxxps://github.com/PELock/StringEncrypt-WebAPI [dostęp: 01.07.2021 r.]):

// encrypted with https://www.stringencrypt.com (v1.3.0) [C/C++] // wszLabel = "C/C++ String Encryption" #include <iostream> int main() { wchar_t wszLabel[24] = { 0x5ADA, 0x6C21, 0x5A24, 0x6DEF, 0x6DFE, 0x74C5, 0x5240, 0x428B, 0x4382, 0x4F69, 0x4CDC, 0x4827, 0x73A6, 0x598D, 0x4CF8, 0x4A43, 0x40AA, 0x3FB1, 0x4D34, 0x42DF, 0x474E, 0x42D5, 0x4C50, 0x8514 }; for (unsigned int JTIif = 0, ktTcs = 0; JTIif < 24; JTIif++) { ktTcs = wszLabel[JTIif]; ktTcs ^= JTIif; ktTcs++; ktTcs += JTIif; ktTcs ^= JTIif; ktTcs = (((ktTcs & 0xFFFF) >> 3) | (ktTcs << 13)) & 0xFFFF; ktTcs = ~ktTcs; ktTcs += JTIif; ktTcs = (((ktTcs & 0xFFFF) >> 1) | (ktTcs << 15)) & 0xFFFF; ktTcs = ~ktTcs; ktTcs += JTIif; ktTcs ^= 0xB7B5; ktTcs += JTIif; ktTcs ^= JTIif; ktTcs -= JTIif; ktTcs = ((ktTcs << 13) | ((ktTcs & 0xFFFF) >> 3)) & 0xFFFF; wszLabel[JTIif] = ktTcs; } wprintf(wszLabel); return EXIT_SUCCESS; }

Wystarczy teraz wydać polecenie:

C:\Users\iamda\Desktop\floss-v1.7.0-windows>floss.exe Project1.exe

i w Wierszu polecenia otrzymujemy:

FLOSS decoded 1 strings
C/C++ String Encryption
Finished execution after 0.911000 seconds


image
Rysunek: Takie szyfrowanie to zwykłe zaciemnienie (ang. obfuscation) - FAIL.

0x04. Podsumowanie

Spróbujmy na koniec odpowiedzieć sobie na pytanie:

Czym jest zaciemnianie napisów w złośliwym oprogramowaniu?

Odpowiedź: Próbą marnotrawienia czasu badaczy.

Wykaz literatury (bibliografia)

[1] hxxps://github.com/PELock/Simple-Polymorphic-Engine-SPE32 [dostęp: 01.07.2021 r.]
[2] hxxps://github.com/PELock/StringEncrypt-WebAPI [dostęp: 01.07.2021 r.]
[3] https://github.com/fireeye/flare-floss [dostęp: 23.06.2021 r.]
[4] https://x64dbg.com/ [dostęp: 23.06.2021 r.]


Komentarze czytelników

📖 Trzymaj e-booka! 👋🏻

\\ więcej książek i e-booków »

Komentarze [0]

jas napisał komentarz do ↴
🔳 Dekodowanie kodu Aztec 2D z dowodu rejestracyjnego
[🕰 / 🌎 IP address logged ]
jas napisał komentarz do ↴
🔳 Mowa szesnastkowa (ang. hex speech)
[🕰 / 🌎 IP address logged ]
Iceman napisał komentarz do ↴
🔳 Mowa szesnastkowa (ang. hex speech)
[🕰 / 🌎 IP address logged ]

🎲 Losowe wpisy

Z pamiętnika autora — kwiecień 2012 r. (280 słów) Przeczytaj teraz »
Web Parameter Tampering (też Overposting) (680 słów) Przeczytaj teraz »
ethical7 — edukacyjny shellcode generator (90 słów) Przeczytaj teraz »

Maskotka haker.info

Postać Mr. At nawiązuje do gier z gatunku roguelike/ASCII RPG w których do wyświetlania grafiki korzysta się ze znaków tekstowych. Znak @ (at) w grach roguelike przeważnie oznacza postać bohatera.

Kontakt

mgr inż. Dawid Farbaniec  //  haker.iиfø

E-mail:
office@haker.info

Odwiedź mnie również na:

 

Wyrazy uznania: 📜 Credits page

Wszystkie treści umieszczone na tej witrynie są chronione prawem autorskim. Surowo zabronione jest kopiowanie i rozpowszechnianie zawartości tej witryny bez zgody autora. Wszelkie opublikowane tutaj treści (w tym kody źródłowe i inne) służą wyłącznie celom informacyjnym oraz edukacyjnym. Właściciele tej witryny nie ponoszą odpowiedzialności za ewentualne niezgodne z prawem wykorzystanie zasobów dostępnych w witrynie. Użytkownik tej witryny oświadcza, że z zamieszczonych tutaj danych korzysta na własną odpowiedzialność. Wszelkie znaki towarowe i nazwy zastrzeżone zostały użyte jedynie w celach informacyjnych i należą wyłącznie do ich prawnych właścicieli. Autor tej witryny w czasie tworzenia treści nie działa w imieniu firm, których technologie czy produkty opisuje — chyba, że jest to jasno oznaczone. Korzystając z zasobów witryny haker.info oświadczasz, że akceptujesz powyższe warunki oraz politykę prywatności.