Return-to-libc attack
Z Wikipedii
Return-to-libc attack - to jedna z technik wykorzystywania błędów w aplikacjach.
Spis treści |
[edytuj] Szczegóły techniczne
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 wywołań (ang. calling stack) aplikacji. Wskaźnik ten pozwala przekierować sterowanie do wybranej funkcji (najczęściej ze zbioru funkcji biblioteki standardowej języka C). Inne obszary 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 cracker mógłby przekierować sterowanie do dowolnego miejsca, najczęstszym celem jest 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ć wybrany proces).
[edytuj] Obrona
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. 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].