Buffer Overflow – klasyczna podatność, która wciąż zagraża systemom
Cyberbezpieczeństwo Hacking

Buffer Overflow – klasyczna podatność, która wciąż zagraża systemom

💣 Buffer Overflow – klasyczna podatność, która wciąż zagraża systemom

Buffer Overflow (przepełnienie bufora) to jedna z najstarszych i najczęściej wykorzystywanych podatności w historii bezpieczeństwa informatycznego. Mimo upływu lat, nadal stanowi poważne zagrożenie, zwłaszcza w systemach pisanych w językach takich jak C czy C++, gdzie nie istnieje automatyczne zarządzanie pamięcią.

🧠 Na czym polega buffer overflow?

Buffer overflow to sytuacja, w której do bufora w pamięci (czyli zarezerwowanego fragmentu RAM) zapisywana jest większa ilość danych, niż przewidziano. Nadmiar danych „wylewa się” poza przypisany obszar, nadpisując inne dane w pamięci – często adresy zwrotne, wskaźniki, a nawet kod wykonywany przez aplikację.

🎯 Przykład:

char bufor[10];
gets(bufor); // nie sprawdza długości danych!

Użytkownik może wpisać 100 znaków, mimo że bufor mieści tylko 10, co prowadzi do przepełnienia bufora i potencjalnego wykonania złośliwego kodu.


🔥 Co może osiągnąć atakujący?

Atak buffer overflow może pozwolić na:

  • ✳️ Wstrzyknięcie i wykonanie złośliwego kodu
  • ✳️ Zmienienie kierunku wykonania programu (np. poprzez manipulację adresem zwrotnym)
  • ✳️ Uzyskanie dostępu do systemu
  • ✳️ Podniesienie uprawnień
  • ✳️ Obejście mechanizmów uwierzytelniania
Buffer Overflow – klasyczna podatność, która wciąż zagraża systemom
Buffer Overflow – klasyczna podatność, która wciąż zagraża systemom

🔬 Typy ataków buffer overflow

Typ Opis
Stack-based overflow Klasyczny typ ataku. Przepełnienie bufora w stosie, często umożliwiające nadpisanie adresu zwrotnego funkcji.
Heap-based overflow Przepełnienie bufora w stercie – trudniejsze do wykrycia i wykorzystania, ale nadal możliwe.
Integer overflow Zmiana wartości liczbowych (np. rozmiaru bufora) w celu ułatwienia przepełnienia.
Format string attacks Ataki przy użyciu nieprawidłowego formatowania ciągów znaków (printf() itp.), umożliwiające odczyt/zapis w pamięci.
Czytaj  Android: wizualny przewodnik po bezpieczeństwie – VPN, malware i antywirusy

🧰 Narzędzia do wykrywania buffer overflow

  • AFL (American Fuzzy Lop) – narzędzie do fuzzingu
  • Valgrind – wykrywanie problemów z pamięcią w aplikacjach
  • GDB – debugger pozwalający prześledzić przepływ programu
  • ASAN (AddressSanitizer) – rozszerzenie GCC i Clang
  • Pwntools / Ghidra / radare2 – eksploracja binarek, analiza luk

🛡️ Jak chronić się przed buffer overflow?

✅ Z punktu widzenia programisty:

  • Unikaj funkcji niezabezpieczonych: gets(), strcpy(), sprintf()
  • Używaj bezpiecznych alternatyw: fgets(), strncpy(), snprintf()
  • Sprawdzaj rozmiar danych przed zapisaniem do bufora
  • Wykorzystuj narzędzia analizy statycznej kodu

✅ Z punktu widzenia systemu:

  • Włącz DEP (Data Execution Prevention) – blokuje wykonywanie kodu w pamięci oznaczonej jako „dane”
  • Włącz ASLR (Address Space Layout Randomization) – losuje rozmieszczenie segmentów pamięci
  • Korzystaj z Canary values – wartości strażnicze wykrywające nadpisania bufora
  • Włącz stack smashing protection – zabezpieczenia w kompilatorze (-fstack-protector)

💣 Przykład ataku z wykorzystaniem buffer overflow (uproszczony):

  1. Aplikacja zawiera funkcję:
    void login() {
        char password[8];
        gets(password);
        if(strcmp(password, "sekret") == 0)
            printf("Dostęp przyznany");
    }
    
  2. Napastnik wpisuje długi ciąg np. 32 bajty + shellcode
  3. Nadpisuje adres powrotu funkcji login(), kierując go na własny kod w buforze
  4. Po zakończeniu funkcji login(), system wykonuje kod atakującego

📚 Znane ataki wykorzystujące buffer overflow

  • Atak na Morris Worm (1988) – pierwszy masowy robak komputerowy
  • Blaster Worm (2003) – wykorzystywał przepełnienie bufora w RPC
  • Heartbleed (2014) – częściowo związany z błędnym zarządzaniem pamięcią
  • Ataki na serwery z exploitem EternalBlue – wykorzystanie luki w SMB

🏁 Podsumowanie

Buffer overflow to technika ataku, która mimo swojego wieku nadal jest aktualna i skuteczna. Występuje głównie w niskopoziomowym kodzie, a jej skutki mogą być katastrofalne – od przejęcia sesji po zdalne wykonanie kodu. Dlatego programiści, administratorzy i zespoły DevSecOps muszą rozumieć ryzyko i korzystać z odpowiednich technik oraz narzędzi ochrony.

Czytaj  Ataki typu DNS Spoofing i DNS Poisoning – manipulacja ruchem sieciowym

 

Polecane wpisy
Szyfrowanie baz danych: Techniki ochrony poufnych informacji przechowywanych w bazach danych (np. transparentne szyfrowanie danych – TDE)
Szyfrowanie baz danych: Techniki ochrony poufnych informacji przechowywanych w bazach danych (np. transparentne szyfrowanie danych - TDE)

🔐 Szyfrowanie baz danych: Techniki ochrony poufnych informacji przechowywanych w bazach danych (np. transparentne szyfrowanie danych - TDE) W erze Czytaj dalej

Bezpieczne funkcje, które stają się niebezpieczne przy złej konfiguracji – analiza przypadków
Bezpieczne funkcje, które stają się niebezpieczne przy złej konfiguracji – analiza przypadków

Bezpieczne funkcje, które stają się niebezpieczne przy złej konfiguracji – analiza przypadków Dlaczego „bezpieczne” nie znaczy „bezpiecznie użyte” Systemy operacyjne Czytaj dalej

Marek "Netbe" Lampart Inżynier informatyki Marek Lampart to doświadczony inżynier informatyki z ponad 25-letnim stażem w zawodzie. Specjalizuje się w systemach Windows i Linux, bezpieczeństwie IT, cyberbezpieczeństwie, administracji serwerami oraz diagnostyce i optymalizacji systemów. Na netbe.pl publikuje praktyczne poradniki, analizy i instrukcje krok po kroku, pomagając administratorom, specjalistom IT oraz zaawansowanym użytkownikom rozwiązywać realne problemy techniczne.