Nanomity (ang. nanomites) – technika stworzona przeciwko inżynierii odwrotnej kodu i zastosowana po raz pierwszy w oprogramowaniu Armadillo[1]. Głównym zadaniem tej techniki jest utrudnienie zrzutu pamięci procesu. Z powodu, że technika ta chroni przed analizą kodu programu znajduje też zastosowanie w wirusach komputerowych czego przykładem może być wirus Nanomites.w32[2].

Zasada działania

edytuj

W języku Asembler za zmianę ścieżki wykonania aplikacji odpowiadają głównie instrukcje skoku (np. JA, JB, JZ, JNZ...). Ogólna zasada działania tej techniki polega na zamienieniu w zabezpieczanym programie instrukcji, które odpowiadają za kontrolę przepływu na nanomit, czyli instrukcję INT3. Jest to rozkaz przerwania do którego podpina się odpowiednią procedurę obsługującą. To właśnie zadaniem tej procedury jest sterowanie ścieżką wykonania aplikacji. Informacje o podmienionych instrukcjach skoku przechowuje się w specjalnej strukturze danych, którą można wielokrotnie zaszyfrować. Procedura obsługująca nanomity (rozkazy INT3) może być osobnym procesem, ale niekoniecznie. Przechwytywanie obsługi przerwania INT3 może być wykonane na kilka sposobów np. strukturalna obsługa wyjątków (ang. Structured Exception Handling) czy też debugowanie utworzonego procesu (funkcja WaitForDebugEvent)[3].

Przypisy

edytuj
  1. Anton Kotik: Nanomite and Debug Blocker Technologies: Scheme, Pros, and Cons. 11-06-2015. [dostęp 2020-04-12]. (ang.).
  2. ViperEye: Anti-Memory Dumping Techniques. 10-03-2013. [dostęp 2020-04-12]. (ang.).
  3. Nanomity — metoda utrudniająca zrzuty pamięci. 23-01-2020. [dostęp 2021-04-19]. (pol.).