Return-to-libc attack

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj

Return-to-libc attack – technika wykorzystywania błędów w aplikacjach w celu dokonania ataku na system komputerowy.

Szczegóły techniczne[edytuj | edytuj kod]

Zazwyczaj użycie tej techniki poprzedza wykorzystanie błędów przepełnienia bufora lub format bugów, które to pozwalają na nadpisanie adresu powrotu na stosie. Wskaźnik ten pozwala przekierować sterowanie do wybranej funkcji (najczęściej ze zbioru funkcji biblioteki standardowej języka C). Dalsze pozycje stosu wypełniane są wartościami służącymi jako argumenty tego wywołania.

Biblioteka standardowa języka C (libc) zapewnia środowisko wykonawcze dla aplikacji napisanych w tym języku. Pomimo, że atakujący mógłby przekierować sterowanie do dowolnego miejsca, najczęstszym celem jest właśnie libc, jako że biblioteka ta prawie zawsze rezyduje w przestrzeni adresowej procesów w systemach uniksowych oraz zawiera przydatne dla atakującego funkcje (np. funkcja system(), która wymaga tylko jednego argumentu, by uruchomić wybrane polecenie).

Obrona[edytuj | edytuj kod]

Typowe techniki zabezpieczające aplikacje przed wykonywaniem kodu na stosie (takie jak NX-bit, W^X, Exec Shield lub PageExec) nie zabezpieczają przed atakiem typu return-to-libc[potrzebne źródło]. Pomocne mogą okazać się techniki ochrony stosu przed celowym uszkodzeniem (tzw. stack-smashing protection), które mogą – w niektórych przypadkach – wykryć próby nadpisania adresu powrotu na stosie.

Losowość ułożenia przestrzeni adresowej procesu (ang. Address space layout randomization) czyni ten atak wyjątkowo trudnym do przeprowadzenia, ze względu na zmieniające za każdym wywołaniem procesu adresy wywołań funkcji, znajdujących się w bibliotekach lub – w niektórych rozwiązaniach – w sekcji kodu procesu[1].

Zobacz też[edytuj | edytuj kod]

Przypisy

Linki zewnętrzne[edytuj | edytuj kod]