dosfuscation - techniki zaciemniania - rodzaje ataków typu „odmowa usługi”

Dosfuscation: ukryte zagrożenie typu „odmowa usługi” w zależnościach

Czym jest dosfuskacja? Dlaczego programiści powinni zwrócić na to uwagę?

Oto szybki przegląd zagrożeń: wyobraź sobie, że przeglądasz PR, który wygląda jak mała aktualizacja narzędzia. W środku, współautor dodał coś, co wygląda na nieszkodliwy skrypt pomocniczy. Jednak po scaleniu, działa on podczas CI. pipeline i uruchamia pętlę, która po cichu zużywa całą pamięć, powodując awarię kompilacji.

Dosfuscation to rodzaj wewnętrznego ataku typu „odmowa usługi” (DoS) zamaskowanego za pomocą technik zaciemniania kodu. Łączy on logikę mającą na celu przerwanie wykonywania kodu, taką jak nieskończone pętle lub rozrost pamięci, z taktykami ukrywającymi jego rzeczywiste działanie, utrudniając wykrycie go podczas przeglądów lub audytów. Nie jest to atak z zewnątrz; jest on już w kodzie i czeka tylko na zakłócenie kompilacji lub cyklu produkcyjnego.

Po co się tym przejmować? W przeciwieństwie do tradycyjnych ataków typu DoS (DoS), które zalewają serwery ruchem, DoS ukrywa się na widoku, często przechodząc przez przegląd kodu lub audyty pakietów. To bomba logiczna wbudowana w Twój system. pipeline.

Przykład rzeczywisty: An pakiet npm Zawiera ukrytą nieskończoną pętlę. Instalacje przechodzą pomyślnie, ale zajmują pamięć w środowisku produkcyjnym, aż do awarii aplikacji. To pokazuje, jak atak typu „dosfuscation”, oparty na technikach zaciemniania, staje się ukrytą odmianą najbardziej dotkliwych ataków typu „odmowa usługi”.

Typowy atak DoS a atak Dosfuscation: rzeczywiste różnice w ryzyku

Dosfuskacja to podtyp ataków typu „odmowa usługi”. Różni się od tradycyjnych ataków typu „odmowa usługi” tym, że jest wykonywana wewnętrznie za pomocą zaciemnionego kodu, a nie ruchu sieciowego.

Wyobraź sobie: zatwierdzasz żądanie żądania (PR) w GitHubie. Testy przechodzą, kompilacja się uruchamia, a następnie Twój program uruchamiający się zawiesza. Debugujesz nieudane zadanie GitHub Actions, które ciągle przekracza limit czasu. Okazuje się, że uszkodzony ładunek w drobnej zależności wywołał nieskończoną pętlę bezpośrednio w skrypcie postinstall.

Kiedy programiści myślą o ataku typu „odmowa usługi”, zazwyczaj wyobrażają sobie scenariusz z zewnątrz do wewnątrz, na przykład rój złośliwych żądań atakujących API lub botnety wyczerpujące przepustowość. To klasyczne typy ataków typu „odmowa usługi” i większość z nas jest na nie przygotowana. Wdrożyliśmy zapory sieciowe (WAF), stosujemy limity przepustowości i budujemy skalowalną infrastrukturę, która jest w stanie zamortyzować atak.

Jednak dosfuskacja nie pochodzi z zewnątrz. Jest bezpośrednio wbudowana w bazę kodu. Ukrywa się w zależnościach, przemyka przez CI. pipelinei czeka na wykonanie, aby wysadzić wszystko w powietrze. Żadne dostrajanie zapory sieciowej ani Łagodzenie DDoS zatrzyma go, ponieważ nigdy nie przechodzi przez sieć; jest już w domu.

To sprawia, że ​​atak typu „dosfuscation” jest szczególnie ukrytą formą odmowy usługi. Nie sygnalizuje się on szumem sieciowym. Usuwa ataki od wewnątrz, w trakcie kompilacji, w trakcie działania lub po dotarciu do konkretnej gałęzi logiki. A ponieważ jest on ukryty w kodzie z wykorzystaniem zaawansowanych technik zaciemniania, nie da się go wykryć, jeśli nie wniknie się głębiej.

Dlatego Zespoły DevSecOps Trzeba myśleć szerzej niż tylko o zabezpieczeniach perymetrycznych. Bezpieczeństwo na poziomie aplikacji jest równie ważne. Jeśli skupiasz się wyłącznie na blokowaniu niepożądanego ruchu, przegapisz ładunek, który już znajduje się w Twoim repozytorium.

Jak atakujący wykorzystują zaciemnianie, aby ukryć logikę DoS w kodzie

Można to zaobserwować w praktyce, gdy zadanie w ramach przepływu pracy zaczyna trwać znacznie dłużej niż oczekiwano, a co gorsza, nigdy się nie kończy. W jednym z przykładów zespół uruchamiał testy w kontenerze Docker za pośrednictwem Akcje GitHubMały pomocniczy moduł JavaScript został dodany za pomocą modułu innej firmy. Został on zaciemniony, aby ukryć nieskończoną pętlę alokacji pamięci, która powodowała brak reakcji procesu węzła.

Utajnione ładunki DoS często prześlizgują się niezauważone w procesach CI. Na przykład, GitHub Actions pipeline może uruchomić pozornie niegroźny skrypt, który nagle zawiesza zadanie z powodu wbudowanej pętli nieskończonej.

Aby to urzeczywistnić, oto jak mógłby wyglądać ładunek dosfuscated w codziennym kodzie.

Przykład JavaScript: ukryta pętla nieskończona

dosfuscation - techniki zaciemniania - rodzaje ataków typu „odmowa usługi”

Powoduje to nieograniczone zapełnianie pamięci za pomocą ukrytej logiki, co ostatecznie powoduje zawieszenie się aplikacji.

Przykład Pythona: Zamaskowany pożeracz procesora

				
					import base64
exec(base64.b64decode("d2hpbGUgVHJ1ZToKICBhcCA9IFtdCiAgZm9yIGkgaW4gcmFuZ2UoMTAwMDAwMDApOgogICAgYXAucHVzaChzdHIoaSkp"))

				
			

Ta zakodowana w standardzie Base64 pętla działa w nieskończoność, zajmując pamięć i nie wzbudzając podejrzeń na pierwszy rzut oka.

Gdzie ukrywają się ładunki: Scenariusz dezintegracji w świecie rzeczywistym

Ładunki Dosfuscated często ukrywają się na widoku, w pakietach innych firm, w oprogramowaniu typu open source pull requestslub wewnętrzne skrypty ponownie wykorzystywane bez kontroli. Atakujący liczą na szybkość rozwoju i automatyzację, aby prześlizgnąć się niezauważeni, osadzając bomby logiczne głęboko w Twoim pipeline.

Scenariusz z życia wzięty pomaga zilustrować, jak to się dzieje:

Używasz GitHub Actions do uruchomienia przepływu pracy CI. Twój .github/workflows/build.yml Instaluje zależności projektu. Jednym z nich jest przechodni pakiet npm, instalowany nie bezpośrednio przez użytkownika, ale jako zależność innej zależności. Podobno pomaga w czymś trywialnym, na przykład w manipulowaniu ciągami znaków.

Ale w środku pakietu, ukryta za pomocą technik zaciemniania, kryje się bomba logiczna. Może to być nieskończona pętla alokacji pamięci uruchomiona podczas po instalacji skrypt lub import środowiska wykonawczego do testów. Pozostaje uśpiony do momentu wykonania, bez ostrzeżeń i flag audytu.

Nagle Twój program CI ulega awarii. Gwałtowny wzrost obciążenia procesora i pamięci. Przekroczony zostaje limit czasu zadania. Kompilacja lub wdrożenie kończy się niepowodzeniem.

To nie jest tylko hipoteza. Podobne incydenty zaobserwowano już w praktyce. Pokazują one, jak dosfuscation wykorzystuje zaufanie do łańcucha narzędzi, wykorzystując zautomatyzowane przepływy pracy, szybkie scalanie i pośrednie zależności.

Gdzie zazwyczaj ukrywają się te ładunki?

  • Pakiety innych firm: szczególnie z npm, PyPI lub Maven.
  • PR-y typu open source: z podstępną logiką maskującą się jako pomocne aktualizacje.
  • Skrypty wewnętrzne: ponownie wykorzystane fragmenty kodu bez odpowiedniej weryfikacji lub przeglądu.

Atakujący stosują zaciemnianie w celu opóźnienia wykrycia, licząc, że powierzchowne przeglądy kodu i automatyczne aktualizacje zależności wykonają resztę.

Jak wykryć dosfuscation w kodzie i zależnościach

Użyj analizy statycznej, aby znaleźć dziwną logikę

Używaj narzędzi, które:

  • Wykrywaj techniki zaciemniania, takie jak zakłócony przepływ sterowania lub rekonstrukcja ciągu znaków.
  • Logika flag jest zbyt skomplikowana dla prostych modułów.
  • Podświetl funkcje lub wzorce skryptów przypominające ataki typu „odmowa usługi”.

Skanuj zależności, nie tylko sprawdzając wersje

Nie ograniczaj się do sprawdzania numerów wersji:

  • Zajrzyj do właściwego kodu.
  • Priorytetem jest sprawdzenie najnowszych aktualizacji pakietów.
  • Wyszukaj zakodowane ciągi znaków, ukrytą logikę lub znaczniki Dosfuscation.

Ręczne sprawdzenie podejrzanych Pull Requests

Uważaj na:

  • Zbyt skomplikowane zmiany w prostych aktualizacjach.
  • Niejasna lub nieczytelna logika w nowym kodzie.
  • PR-owcy wprowadzają znane techniki zaciemniania.

Dosfuscation zaczyna się, gdy wszyscy zakładają, że „to tylko drobna zmiana”.

Jak zapobiec uderzeniu Dosfuskacji w Twój CI/CD

W środowiskach CI, takich jak GitHub Actions, GitLab CI czy CircleCI, zapobieganie polega na skonfigurowaniu mechanizmów kontroli, które wykrywają i blokują zaciemnione ładunki na wczesnym etapie. Na przykład, wymuszaj przeglądy PR dla wszystkich przepływów pracy zawierających skrypty powłoki lub instaluj hooksi monitorować .yml pipeline konfiguracje dla niezweryfikowanych działań stron trzecich.

CI/CD To plac zabaw dosfuskacyjny. Oto jak go zablokować:

  • Dodaj skanery statyczne do każdego PR i kompilacji.
  • Używaj wyłącznie pakietów pochodzących ze sprawdzonych i zaufanych źródeł.
  • Śledź użycie zasobów kompilacji; skoki mogą oznaczać ukrytą logikę.
  • Dopasuj każdą zależność do sprawdzonej SBOM.
  • Zabroń stosowania powszechnie stosowanych technik zaciemniania obrazu bez udokumentowanego uzasadnienia.

Koniec z „instalacją i nadzieją”. Zapobieganie oznacza posiadanie guardrails wbudowane w Twój tok pracy. Wczesne wykrycie dosfuscation zapobiega najbardziej uciążliwym typom ataków typu „odmowa usługi”.

Rola Xygeni: wykrycie Dosfuskatacji przed rozpoczęciem produkcji

Xygeni pomaga zespołom DevSecOps zatrzymać dosfuscation zanim spowoduje to przestoje poprzez osadzanie informacji o bezpieczeństwie w całym systemie przepływ pracy deweloperskiejSpecjalizuje się w wykrywaniu technik zaciemniania i egzekwowaniu zasad opartych na polityce guardrails które zapobiegają atakom typu „odmowa usługi” przedostawaniu się do środowiska produkcyjnego.

W recenzjach PR

Xygeni skanuje różnice w kodzie, aby zidentyfikować oznaki zaciemniania, takie jak:

  • w korzystaniu eval lub podobnych dynamicznych metod wykonywania zadań.
  • Ciągi znaków zakodowane w formacie Base64 lub szesnastkowym, mające na celu ukrycie logiki.
  • Podejrzany przepływ sterowania, np. nienaturalne pętle lub zawiłe rozgałęzienia logiczne.
    Wzory te wyzwalają alerty w czasie rzeczywistym podczas pull request przeglądy, zarówno kodu własnego, jak i kodu stron trzecich, pomagające recenzentom ds. bezpieczeństwa wykryć luki we wczesnym stadium rozwoju.

Podczas analizy zależności

Xygeni analizuje nie tylko metadane pakietów, ale także faktyczne źródło nowych lub zaktualizowanych zależności. Wykrywa ukrytą logikę w funkcjach pomocniczych lub skryptach poinstalacyjnych, oznaczając pakiety wysokiego ryzyka, nawet jeśli na pierwszy rzut oka wydają się prawidłowe.

W czasie budowy w CI/CD Pipelines

Xygeni monitoruje zadania CI pod kątem anomalii w działaniu. Jeśli kompilacja nagle zużywa nietypowo dużo zasobów procesora lub pamięci, Xygeni śledzi ten wzrost do konkretnego kodu lub pakietów, które zostały niedawno wprowadzone. Automatycznie koreluje zachowanie środowiska uruchomieniowego ze statycznymi wynikami, aby wychwycić ukryte ataki DoS, zanim zakłócą one dostawę.

Jako warstwa egzekwowania zasad

Możesz skonfigurować Xygeni tak, aby całkowicie blokowało ryzykowne wzorce, takie jak:

  • Zakaz zależności obejmujących kod zakodowany w formacie base64 lub eval
  • Wymaganie ręcznego zatwierdzenia wszystkich skryptów po instalacji
  • Wdrażanie zasad zerowej tolerancji dla zaciemnionego przepływu sterowania w zadaniach PR lub CI

Dzięki Xygeni bezpieczeństwo staje się proaktywne. Zapewnia zespołom wgląd, wczesne ostrzeżenia i egzekwowanie zasad na poziomie polityki wobec technik zaciemniania, na których opiera się dosfuscation. Dzięki wbudowaniu Xygeni na każdym etapie, w żądaniach dostępu (PR), skanowaniu zależności i w środowisku wykonawczym CI, wykryjesz zagrożenie, zanim stanie się ono nieodwracalne.

Więc Dosfuscation obraca Twój kod przeciwko Tobie

Dosfuskacja to nie tylko teoretyczne ryzyko; to realny i rosnący wektor ataku, który zamienia proces rozwoju oprogramowania w broń. Doskonale sprawdza się w przerwach między szybkimi wydaniami, automatycznymi instalacjami i łańcuchami zależności zbyt złożonymi, by ręcznie je audytować. To nie tylko problem bezpieczeństwa; to wyzwanie dla inżynierii oprogramowania. Zamaskowane ładunki typu „odmowa usługi” omijają tradycyjne zabezpieczenia, osadzając się bezpośrednio w kodzie, gdzie zapory sieciowe i filtry ruchu nie są w stanie dotrzeć.

Dla programistów wniosek jest prosty: Jeśli piszesz kod, zatwierdź pull requestslub zarządzać CI/CD pipelineJesteś na pierwszej linii frontu. Bezpieczne kompilacje to nie tylko czysty kod; wymagają widoczności, kontroli i zabezpieczeń opartych na zasadach na każdym etapie. pipeline.

Wyjdź poza listy kontrolne. Zintegruj wykrywanie zaciemniania z procesem pracy. Uważaj na ciągi znaków base64, dziwną logikę lub nieoczekiwane skoki w wykorzystaniu zasobów CI. Weryfikuj nie tylko co instalujesz, ale co to robi. Leczenie pipeline konfiguracje takie jak kod produkcyjny. Automatyzacja guardrails. Zgłaszaj wszystko, co wygląda dziwnie, nawet jeśli „działa”.

Bo dosfuskacja nie krzyczy. Ona czeka. I jeśli jej nie szukasz, sama się prześlizgnie.

sca-tools-oprogramowanie-narzędzia-analizy-kompozycji
Określ priorytety, rozwiąż problemy i zabezpiecz zagrożenia związane z oprogramowaniem
Załóż darmowe konto.
Nie wymagamy karty kredytowej.

Zabezpiecz rozwój i dostarczanie oprogramowania

z pakietem produktów Xygeni