Jak działają ataki przepełnienia bufora? Za kulisami jako haker

Jak działają ataki przepełnienia bufora? Za kulisami jako haker
Czytelnicy tacy jak ty pomagają wspierać MUO. Kiedy dokonujesz zakupu za pomocą linków na naszej stronie, możemy otrzymać prowizję partnerską. Czytaj więcej.

W jaki sposób hakerzy atakują systemy za pomocą wirusów i złośliwego oprogramowania? Czasami może to być ransomware; czasami może to być atak, który zużywa twoje wymagania systemowe. Przepełnienie bufora jest jedną z tych metod ataku — ale czym właściwie jest? Jak działają te ataki?





WYKORZYSTAJ WIDEO DNIA PRZEWIŃ, ABY KONTYNUOWAĆ TREŚĆ

Co to jest przepełnienie bufora?

Czym właściwie są bufor i stos? Bufor to pole, w którym niektóre informacje wejściowe, które przekazujesz komputerowi, czekają, zanim dotrą do pamięci. Przywoływanie danych z pamięci jest operacją męczącą system. Kiedy więc w obszarze bufora jest wystarczająco dużo miejsca, wywołujesz dane bezpośrednio stąd. Oznacza to wzrost wydajności Twojego urządzenia. Oczywiście, gdy miejsce dostępne na bufor się zapełni, konieczne staje się zapisanie go do pamięci.





Stos jest zasadniczo strukturą danych, w której odbywają się operacje wypychania (dodawania) i usuwania (usuwania) danych. Koncepcje bufora i stosu są dość podobne; jednak bufor działa jak stos, który tymczasowo przechowuje dane przychodzące.





Przepełnienie bufora może być trudnym tematem, ale jak sama nazwa wskazuje, występuje w przypadku przeciążenia danych. Na przykład chcesz zalogować się do systemu. Twórcy mogą przeznaczyć 250 bajtów miejsca na nazwę użytkownika. Jeśli wprowadzisz 300 bajtów danych, bufor się przepełni. To przepełnienie może wpłynąć na inne dane w pamięci, powodując szkody.

co to akcesorium może nie być obsługiwane?

To jest dobre dla hakerów. Cyberprzestępcy mogą połączyć ten bałagan z różnymi wektorami ataków, na przykład włamać się do systemu i zalogować jako administrator.



Aby zrozumieć przepełnienie bufora, głównymi tematami, które musisz rozpoznać, będą Wewnętrzna architektura procesora , rejestry pamięci i sposób, w jaki pamięć przetwarza dane. Oto kilka terminów dotyczących procesora, o których musisz wiedzieć.





Kodeks montażu





Język programowania niskiego poziomu , czyli blisko języka maszynowego.

Bufor

Stały rozmiar przydzielona przestrzeń pamięci .

Kod bajtowy

Kompilowalna pośrednia forma kodu napisana w języku wysokiego poziomu.

Kompilator

Program konwertujący język programowania na kod maszynowy.

Sterta

Dynamiczna, zmienna przestrzeń pamięci.

Podstawy teorii pamięci

Bez zrozumienia teorii pamięci rozwiązywanie problemów związanych z przepełnieniem bufora w praktyce może być trudne. Możesz myśleć o tym jak o próbie zbudowania domu bez wiedzy, jak zrobić ścianę.

Wyobraź sobie, że chcesz uruchomić przepełnienie bufora z punktu widzenia hakera. W tym celu musisz manipulować pamięcią i sprawić, by procesor wykonał twój kod. Gdybyś był kimś, kto ma złe zamiary, twoim celem byłoby tutaj przeciążenie pamięci i manipulowanie ciągłymi obszarami pamięci.

  Diagram przedstawiający rosnący stos i rosnący stos

Ale przede wszystkim musisz skupić się na pojęciach sterty, stosu i segmentu tekstu.

Podczas tworzenia stosu pamięć wykorzystuje wysokie adresy pamięci. Wysokie adresy pamięci oznaczają rozszerzony obszar pamięci. Następnie wartości adresów zaczynają spadać. Stos pamięci wykorzystuje metodę o nazwie LIFO (Last In, First Out) podczas korzystania z pamięci. Zmienne w pamięci stosu są ważne tylko w zakresie, w jakim zostały zdefiniowane. Jeśli są poza tym zakresem, wystąpi błąd.

Z kolei pamięć stosu działa dynamicznie i nie musi zaczynać się od wysokich adresów. Nie ma ustalonego limitu pamięci sterty; wszystkie limity są ustalane przez system operacyjny. Możliwa jest dynamiczna zmiana pamięci sterty, a limity te mogą się zmieniać zgodnie z potrzebami użytkownika podczas użytkowania sterty. Limity pamięci sterty zależą od czynników określonych przez system operacyjny i sprzęt. Innymi słowy, oferuje dynamiczne użytkowanie w tych granicach.

Segment tekstowy zawiera kod programu, a segmenty danych zawierają dane globalne. Wysoki udział adresów pamięć stosu i sterty między sobą. System przydziela obie pamięci w czasie wykonywania.

Aby lepiej zrozumieć przepełnienie bufora, należy przeanalizować rejestry danych ogólnego przeznaczenia, których architektura komputera używa do przechowywania danych. Zamiast analizować każdy rekord z osobna, skup się na tym, co najważniejsze.

  • ESP (rozszerzony wskaźnik stosu): Ten rejestr przechowuje adres na szczycie stosu.
  • EBP (rozszerzony wskaźnik bazowy): To trzyma wskaźnik bazowy.
  • EIP (wskaźnik rozszerzonej instrukcji): A ten rejestr zawiera adres następnej instrukcji do wykonania.

Te terminy techniczne mogą wydawać się nieco mylące, ale wyobraź sobie je wszystkie jako małe partycje w pamięci.

Jak działają ataki przepełnienia bufora?

Gdy dodasz nowe dane do dowolnego stosu, zostaną one umieszczone u góry. Wszystkie nowe dane są następnie przenoszone w dół. ESP jest na szczycie stosu. Więc w tym przypadku ESP przechodzi do niższego adresu pamięci. Wyobraź sobie, że dane dodane powyżej obniżają ESP.

  Diagram przedstawiający miejsce w buforze pomiędzy ESP a EBP

Gdy program zaczyna działać, system tworzy ramkę stosu ze zmiennymi lokalnymi. Głównym celem ataku polegającego na przepełnieniu bufora jest uzyskanie dostępu do EIP lub adresu zwrotnego. Haker mający dostęp do tego adresu może nakazać mu wskazanie dowolnego złośliwego kodu, który będzie miał wpływ na cały system.

  Diagram przedstawiający dane w ESP ukierunkowane na adres zwrotny

Z każdym nowym bitem danych stos rośnie w kierunku EBP. Prawdziwe pytanie brzmi: jeśli wprowadzimy zbyt dużo danych, czy możemy popchnąć EBP w kierunku EIP? W ten sposób żądane dane lub kod znajdują się w EIP i można zobaczyć pożądane wyniki. Pozostaje tylko go uruchomić. Po uruchomieniu program wskazuje na Twój kod EIP i rozpoczyna wykonywanie. W rezultacie, gdybyś był hakerem, przeprowadziłbyś swój pierwszy atak przepełnienia bufora.

Aby wziąć przykład z innej perspektywy, możesz rozważyć ciecze o różnych gęstościach, zwane ESP, EBP i EIP, w pojemniku. Wyobraź sobie, że ESP znajduje się na górze pojemnika, ponieważ jego gęstość jest mniejsza. Podobnie jak oliwa z oliwek i woda, nie powinny się mieszać. Złośliwy kod jest więc kolejnym płynem — po dodaniu go do pojemnika zaburza równowagę, wypiera część płynu i miesza się z EIP. Wskaże to przepełnienie bufora.

Jak chronić się przed atakami przepełnienia bufora

Jak więc temu zapobiec?

Po pierwsze, ważne jest przyjęcie dobrych praktyk kodowania w całym procesie tworzenia oprogramowania, aby zminimalizować luki w zabezpieczeniach. Starannie napisany kod może zmniejszyć prawdopodobieństwo przepełnienia bufora.

pobierz wideo z youtube na iPhone

Kolejnym krokiem jest wykorzystanie mechanizmów obronnych pozwalających na monitorowanie regionów pamięci, sprawdzanie limitów buforów oraz wykrywanie ataków. Wreszcie, musisz regularnie aktualizować systemy i instalować łatki. Aktualizacje, które naprawiają luki w zabezpieczeniach, utrudniają atakującym wykorzystanie znanych luk. Ponadto korzystanie z narzędzi obronnych, takich jak oprogramowanie i zapora ogniowa, zapewnia dodatkową warstwę bezpieczeństwa.

Podejmij działania przeciwko przepełnieniu bufora

Ataki z przepełnieniem bufora stanowią poważne zagrożenie dla Twojego cyberbezpieczeństwa i podjęcie środków ostrożności jest oczywiście ważne. Na szczęście możliwe jest zablokowanie tych ataków i wzmocnienie mechanizmów obronnych. Wiele dobrych praktyk w zakresie bezpieczeństwa, takich jak aktualizowanie oprogramowania w celu naprawiania poprawek, pomaga chronić przed takimi atakami, a także innymi lukami w zabezpieczeniach.