zaciemnienie

co to jest zaciemnienie?

zaciemnienie oznacza coś trudnego do zrozumienia. Kod programowania jest często zaciemniany w celu ochrony własności intelektualnej lub tajemnic handlowych oraz w celu uniemożliwienia atakującemu inżynierii wstecznej oprogramowania prawnie zastrzeżonego.

Szyfrowanie części lub całości kodu programu jest jedną z metod zaciemniania. Inne metody obejmują usuwanie potencjalnie ujawniających metadanych, zastępowanie nazw klas i zmiennych bezsensownymi etykietami i dodawanie nieużywanego lub bezsensownego kodu do skryptu aplikacji. Narzędzie o nazwie obfuscator automatycznie przekształci prosty kod źródłowy w program, który działa w ten sam sposób, ale jest trudniejszy do odczytania i zrozumienia.

niestety, złośliwi autorzy kodu również używają tych metod, aby zapobiec wykryciu ich mechanizmów ataku przez narzędzia antymalware. Atak 2020 SolarWinds jest przykładem hakerów używających maskowania do unikania obrony.

techniki Deobfuscacji mogą być używane do inżynierii odwrotnej-lub cofania-zaciemnienia. Techniki te obejmują program krojenie, który polega na zawężeniu kodu programu tylko do odpowiednich instrukcji w danym punkcie programu. Optymalizacja kompilatora i synteza programu to dwie inne techniki deobfuscacji. Zaciemnienie ma na celu utrudnienie inżynierii odwrotnej i nie jest warte zachodu.

jak działa zaciemnianie?

zaciemnienie w kodzie komputerowym wykorzystuje złożone zwroty okrężne i zbędną logikę, aby Kod był trudny do zrozumienia dla czytelnika. Celem jest odwrócenie uwagi czytelnika skomplikowaną składnią tego, co czyta i utrudnienie mu określenia prawdziwej treści wiadomości.

z kodem komputerowym czytnikiem może być osoba, urządzenie komputerowe lub inny program. Zaciemnianie jest również używane do oszukania narzędzi antywirusowych i innych programów, które w dużej mierze polegają na podpisach cyfrowych do interpretacji kodu. Dekompilatory są dostępne dla języków takich jak Java, systemów operacyjnych takich jak Android i iOS oraz platform programistycznych takich jak .NET. mogą one automatycznie odtwarzać kod źródłowy; maskowanie ma na celu utrudnienie tym programom ich dekompilacji.

zaciemnianie kodu nie polega na zmianie zawartości oryginalnego kodu programu, ale raczej na uczynieniu metody dostarczania i prezentacji tego kodu bardziej mylącym. Zaciemnienie nie zmienia sposobu działania programu ani jego końcowego wyjścia.

Poniżej znajduje się przykładowy fragment normalnego kodu JavaScript:

var greeting = 'Hello World';greeting = 10;var product = greeting * greeting;

ten sam fragment w zaciemnionej formie wygląda tak:

var _0x154f=;var _0x52df=function(_0x159d61,_0x12b953){_0x159d61=_0x159d61-0x122;var _0x154f4b=_0x154f;return _0x154f4b;};(function(_0x19e682,_0x2b7215){var _0x5e377c=_0x52df;while(!!){try{var _0x2d3a87=-parseInt(_0x5e377c(0x129))*parseInt(_0x5e377c(0x123))+-parseInt(_0x5e377c(0x125))*parseInt(_0x5e377c(0x12e))+parseInt(_0x5e377c(0x127))*-parseInt(_0x5e377c(0x126))+-parseInt(_0x5e377c(0x124))*-parseInt(_0x5e377c(0x12f))+-parseInt(_0x5e377c(0x128))*-parseInt(_0x5e377c(0x12b))+parseInt(_0x5e377c(0x12a))*parseInt(_0x5e377c(0x12d))+parseInt(_0x5e377c(0x12c))*parseInt(_0x5e377c(0x122));if(_0x2d3a87===_0x2b7215)break;else _0x19e682(_0x19e682());}catch(_0x22c179){_0x19e682(_0x19e682());}}}(_0x154f,0x1918c));var greeting='Hello\x20World';greeting=0xa;var product=greeting*greeting;

wersja zamaskowana jest prawie niemożliwa do naśladowania za pomocą ludzkiego oka.

techniki zaciemniania

zaciemnianie obejmuje kilka różnych metod. Często stosuje się wiele technik do tworzenia warstwowego efektu.

programy napisane w skompilowanych językach, takich jak C# i Java, są łatwiejsze do ukrycia. Dzieje się tak dlatego, że tworzą instrukcje średniego poziomu, które są na ogół łatwiejsze do odczytania. W przeciwieństwie do tego, C++ jest trudniejszy do zatuszowania, ponieważ kompiluje się do kodu maszynowego, który jest trudniejszy dla ludzi do pracy.

niektóre powszechne techniki zaciemniania obejmują następujące:

  • zmiana nazwy. Obfuscator zmienia metody i nazwy zmiennych. Nowe nazwy mogą zawierać znaki nie nadrukowalne lub niewidoczne.
  • Pakowanie. Kompresuje to cały program, aby Kod był nieczytelny.
  • kontrola przepływu. Zdekompilowany kod ma wyglądać jak logika spaghetti, która jest nieustrukturyzowana i trudna do utrzymania w kodzie, w którym linia myśli jest zaciemniona. Wyniki tego kodu nie są jasne i trudno powiedzieć, jaki jest sens kodu, patrząc na niego.
  • transformacja wzorca instrukcji. Takie podejście przyjmuje wspólne instrukcje tworzone przez kompilator i zamienia je na bardziej złożone, mniej popularne instrukcje, które skutecznie robią to samo.
  • wstawienie kodu. Fałszywy kod może być dodany do programu, aby utrudnić jego czytanie i inżynierię wsteczną, ale nie wpływa to na logikę programu ani wynik.
  • metadane lub usunięcie nieużywanego kodu. Nieużywany kod i metadane dają czytelnikowi dodatkowe informacje o programie, podobnie jak adnotacje na dokumencie programu Word, które mogą pomóc mu go odczytać i debugować. Usunięcie metadanych i nieużywanego kodu pozostawia czytelnikowi mniej informacji o programie i jego kodzie.
  • nieprzezroczyste wstawianie predykatu. Predykat w kodzie jest wyrażeniem logicznym, które jest prawdziwe lub fałszywe. Nieprzezroczyste predykaty są gałęziami warunkowymi – lub wyrażeniami if-then-gdzie wyniki nie mogą być łatwo określone za pomocą analizy statystycznej. Wstawianie nieprzezroczystego predykatu wprowadza niepotrzebny kod, który nigdy nie jest wykonywany, ale jest zagadkowe dla czytelnika próbującego zrozumieć zdekompilowane wyjście.
  • Anti-debug. Legalni inżynierowie oprogramowania i hakerzy używają narzędzi debugowania do badania kodu linia po linii. Dzięki tym narzędziom inżynierowie oprogramowania mogą wykryć problemy z kodem, a hakerzy mogą ich użyć do inżynierii wstecznej kodu. Specjaliści ds. bezpieczeństwa IT mogą używać narzędzi zapobiegających debugowaniu, aby zidentyfikować, kiedy haker uruchamia program debugujący w ramach ataku. Hakerzy mogą uruchamiać narzędzia zapobiegające debugowaniu, aby zidentyfikować, kiedy narzędzie debugujące jest używane do identyfikacji zmian, które wprowadzają w kodzie.
  • Narzędzia te wykrywają kod, który został zmodyfikowany, a jeśli został zmodyfikowany, zatrzymuje program.
  • Szyfrowanie ciągów znaków. Ta metoda używa szyfrowania, aby ukryć ciągi znaków w pliku wykonywalnym i przywraca wartości tylko wtedy, gdy są one potrzebne do uruchomienia programu. Utrudnia to przechodzenie przez program i wyszukiwanie określonych ciągów znaków.
  • transpozycja kodu. Jest to zmiana kolejności procedur i gałęzi w kodzie bez widocznego wpływu na jego zachowanie.

jak mierzyć sukces zaciemniania

sukces metod zaciemniania można zmierzyć za pomocą następujących kryteriów:

  • Siła. Stopień, w jakim przekształcony kod jest odporny na zautomatyzowane próby deobfuscacji, decyduje o sile. Im więcej wysiłku, czasu i zasobów potrzeba, tym silniejszy jest kod.
  • Stopień, w jakim przekształcony kod różni się od oryginału, jest kolejną miarą jego skuteczności. Niektóre ze sposobów oceny różnicowania to:
    • liczba predykatów, które zawiera nowy kod.
    • głębokość drzewa dziedziczenia (DIT) — metryka używana do wskazania złożoności kodu. Wyższy DIT oznacza bardziej złożony program.
  • wydatek. Oszczędna metoda zaciemniania będzie bardziej przydatna niż droga, szczególnie jeśli chodzi o skalowanie do większych zastosowań.
  • Im więcej warstw dodaje obfuscator, tym bardziej złożony będzie program, dzięki czemu zaciemnienie będzie bardziej skuteczne.

zalety zaciemniania

główne zalety zaciemniania są następujące:

  • Tajemnica. Zaciemnienie ukrywa cenne informacje zawarte w kodzie. Jest to zaleta dla legalnych organizacji, które chcą chronić kod przed konkurencją i atakującymi. Z drugiej strony, źli aktorzy wykorzystują tajemnicę zaciemnienia, aby ukryć swój złośliwy kod.
  • Niektóre techniki zaciemniania, takie jak usuwanie nieużywanego kodu, powodują zmniejszenie programu i zmniejszenie zużycia zasobów.
  • bezpieczeństwo. Zaciemnianie to wbudowana metoda zabezpieczeń, czasami określana jako Samoobrona aplikacji. Zamiast używać zewnętrznej metody bezpieczeństwa, działa w ramach tego, co jest chronione. Doskonale nadaje się do ochrony aplikacji, które działają w niezaufanym środowisku i zawierają poufne informacje.

wady zaciemnienia

jedną z głównych wad zaciemnienia jest to, że jest on również używany w złośliwym oprogramowaniu. Twórcy złośliwego oprogramowania używają go do unikania programów antywirusowych, które skanują kod w poszukiwaniu określonych funkcji. Zasłaniając te funkcje, złośliwe oprogramowanie wydaje się zgodne z prawem dla oprogramowania antywirusowego.

do typowych technik stosowanych przez autorów złośliwego oprogramowania należą:

  • Exclusive or (XOR). Operacja, która ukrywa dane, stosując wartości XOR do kodu, aby tylko wyszkolone oko mogło je odszyfrować.
  • ROT-13. Instrukcja, która zastępuje kod przypadkowymi znakami.

z zaciemnieniem, zamiast rozwijać nowe złośliwe oprogramowanie, autorzy przepakowują powszechnie używane metody ataku towarowego w celu ukrycia ich funkcji. W niektórych przypadkach złośliwe podmioty obejmują techniki specyficzne dla dostawcy.

kolejną wadą zaciemnienia jest to, że może utrudnić odczyt kodu. Na przykład kod, który używa metody zaciemniania szyfrowania łańcuchów, wymaga odszyfrowania łańcuchów w czasie wykonywania, co spowalnia wydajność.

zaciemnianie i SolarWinds

atak na SolarWinds, producenta oprogramowania do zarządzania i monitorowania IT w Austin w Teksasie, który prawdopodobnie rozpoczął się już we wrześniu 2019 r., doprowadził do naruszenia wielu innych firm i agencji rządowych. Atak został odkryty w grudniu 2020 roku i jest przypisywany rosyjskim hakerom. Początkowo skompromitował platformę zarządzania It Orion firmy SolarWinds.

napastnicy użyli złośliwego oprogramowania Sunburst, które połączyło zaciemnianie, uczenie maszynowe i techniki sztucznej inteligencji, aby zainstalować backdoor w aktualizacjach oprogramowania dla platformy Orion. Aby zamaskować swoje wysiłki i obejść zabezpieczenia, zmienili dzienniki audytu, usunęli pliki i programy po użyciu i sfałszowali aktywność, aby wyglądało to na legalne aplikacje w sieci.

podejrzewa się, że ten atak łańcucha dostaw pozostawał niewykryty przez ponad rok. Złośliwe oprogramowanie umieszczone w kodzie Oriona leżało uśpione i ukryte, dopóki użytkownicy nie pobrali zainfekowanych aktualizacji. Następnie rozprzestrzenił się przez sieć niezauważony i zainfekował długą listę organizacji używających Oriona.

zaciemnianie jest jedną z wielu technik stosowanych przez hakerów do włamywania się do systemów IT. Dowiedz się więcej o obronie przed różnego rodzaju atakami cyberbezpieczeństwa w szczegółowym przewodniku TechTarget dotyczącym planowania cyberbezpieczeństwa.

Leave a Reply

Twój adres e-mail nie zostanie opublikowany.