Slepý návrat orientovaný programování - Blind return oriented programming
Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto problémech na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
Slepý návrat orientovaný programování (BROP) je technika zneužití, která může úspěšně vytvořit zneužití, i když útočník nedisponuje cílovým binárním souborem. BROP útoky ukázané Bittauem a spol. porazili randomizace rozvržení adresního prostoru (ASLR) a skládat kanáry na 64bitových systémech.
Historie ROP
Se současnými vylepšeními zabezpečení a hardwaru operačního systému, bezpečnostních funkcí, jako je Linux PAX projekt, vložení kódu je nyní nemožné. Výzkumníci v oblasti bezpečnosti poté vymysleli nový útok, který pojmenovali návratově orientované programování porazit NX (nespustitelná) paměť. Tento útok se spoléhá na ovlivnění toku programu řízením zásobníku, zejména zpáteční adresy. Gadgety jsou základní jednotky tohoto útoku. Gadgety jsou skupina sekvencí instrukcí končící instrukcí návratu spolu s určitým stavem zásobníku. Gadget může provádět operace, jako je načítání slova z paměti do registru, nebo provádět složitější operace, jako je podmíněný skok. S dostatečně velkým cílovým binárním souborem, a Turing-kompletní lze sestavit sbírku gadgetů, což je více než dost na to, aby byl spuštěn shell kód. Jedním z předpokladů, které ROP vytváří, je, že útočník vlastní cílové binární soubory, a proto předem zná adresy gadgetů.
Scénáře pro BROP
Existují tři nové scénáře, které BROP [1] může být relevantní pro. Oni jsou:
(i) V případě uzavřených binárních služeb odhalit zranitelná místa, kde je třeba použít techniky jako fuzz a penetrační testování.
(ii) Známou chybu zabezpečení v knihovně open-source lze využít k provedení exploitu, i když proprietární binární soubor, který ji používá, je uzavřeným zdrojem.
(iii) Lze jej také použít k hacknutí serveru s otevřeným zdrojovým kódem, jehož binární soubor není znám.
Útok předpokládá, že na serveru existuje služba, která má známou chybu zabezpečení zásobníku, a také to, že by se služba měla po pádu restartovat.
Fáze útoku
Čtení zásobníku
Ukazatele návratové instrukce jsou obvykle chráněny kanálovými kanály. Zásobník kanárek způsobí zhroucení programu, pokud je jeho hodnota změněna přetečením vyrovnávací paměti. V modelu útoku BROP se překročení vyrovnávací paměti provádí po bajtech. Každý pokus o překročení má za následek selhání programu nebo pokračující spuštění. Selhání programu znamená, že hodnota zásobníku byla nesprávně uhodnuta, proto při 256 pokusech (průměrný případ je 128 pokusů) lze hodnotu zásobníku pravděpodobně odhadnout. Na 64bitových strojích by bylo zapotřebí 4 takových čtení zásobníku, aby došlo k úniku z kanárků. Jakmile je kanár propuštěn, ukazatel návratové instrukce může být narušen stejným způsobem. Lze však poznamenat, že ačkoliv je odhad zásobníku kanárských kanálů přesný, o adrese návratové instrukce to nelze říci. Útočník by byl spokojen, že by mohl prozradit jakoukoli adresu v textovém segmentu adresního prostoru.
Slepý ROP
Tato fáze je srdcem útoku. Cílem v této fázi je zahájit systémové volání zápisu a zaslat výpis binárního souboru útočníkovi. Systémové volání zápisu má tři parametry: soket, vyrovnávací paměť a délku. Protože konvence volání x86-64 vyžadují předávání parametrů prostřednictvím registrů, k nastavení argumentů pro systémové volání zápisu by byly nutné příslušné popové instrukce do rsi, rdi a rdx. V tomto ohledu by byly užitečné instrukční sekvence jako pop rdi, ret a podobně. Jednoduchá ROP verze systémového volání write bude:
(1) pop rdi; ret (zásuvka)
(2) pop rsi; ret (vyrovnávací paměť)
(3) pop rdx; ret (délka)
(4) pop rax; ret (napište číslo syscall)
(5) Syscall
Jeden problém s touto metodikou spočívá v tom, že i když se v adresním prostoru naleznou užitečné gadgety po jejich návratu, adresa v zásobníku by vedla k nespustitelnému zásobníku s vysokou pravděpodobností. Aby to napravili, navrhovatelé BROP vytvořili stop gadgety. Stop gadget je cokoli, co by způsobilo blokování programu, například nekonečnou smyčku nebo blokující systémové volání (například spánek). Tím se také pracovníci, kteří byli zasaženi útokem, zasekli v nekonečné smyčce a umožnili tak útočníkovi pokračovat v útoku.
Výše je zmíněna metodika holých kostí útoku. Ve skutečnosti lze provést několik optimalizací, které pomohou efektivně provést útok. Primární mezi nimi je použití tabulek linkerů procedur (PLT) ke sledování systémového volání pro zápis namísto předávání čísla systémového volání funkci syscall. Jiní zahrnují použití strcmp k naplnění registru RDX, protože pop RDX, sekvence instrukcí ret jsou extrémně vzácné.
Postavte exploit
Jakmile je zápis nalezen v PLT, může útočník vypsat obsah cílové binárky a najít další gadgety. Útočník může použít konvenční techniky vyhledávání gadgetů ROP, aby shromáždil dostatek a vytvořil shell kód. Jakmile získají shell kód, lze zneužitý systém převzít pod plnou kontrolou s přístupem root.
Prevence BROP
Obrovským předpokladem útoku BROP je, že se server restartuje po každém selhání a při restartování nereandomizuje svůj adresní prostor. Povolení opětovné randomizace adresního prostoru při spuštění tedy může poskytnout téměř úplnou ochranu proti BROP. Další technikou používanou NetBSD a Linuxem je spánek při pádu. To značně zpomaluje útok a umožňuje správci systému prozkoumat jakoukoli podezřelou aktivitu. Kromě této konvenční ochrany proti útokům únosů řízení toku ve stylu ROP může Control Flow Integrity také poskytnout prokazatelnou prevenci, ale se značnou režií výkonu.
Podobné útoky
Další útok, který má podobnou povahu jako BROP, je JIT (Just-In-Time) -ROP nebo JIT-ROP. Je to také další útok založený na zpřístupnění informací, který je také schopen porazit Randomizace rozložení adresového prostoru. Jak BROP, tak JIT-ROP se pokusí najít gadgety na binárním souboru, aby zahájily útok ROP, jehož cílem je využít nějaký typ úniku dat. Na rozdíl od BROP však JIT-ROP není útok, který je interaktivní a snaží se přizpůsobit situacím bez pádu / pádu, ale spíše útočník pošle skript, který odhalí gadgety, a následně vytvoří útok pro doručení . JIT-ROP také musí mít dvě různé chyby zabezpečení (hromadu i zásobník) známé před útokem, zatímco BROP vyžaduje pouze povědomí o chybě zásobníku.[2]
Reference
- ^ „Blind Return Oriented Programming (BROP)“. Skupina Stanford Secure Computer Systems. Citováno 2016-02-24.
- ^ Keener, Lawrence (prosinec 2015). „Vyhodnocení obecnosti a omezení slepých programových útoků zaměřených na návrat“ (PDF). Calhoun: Institucionální archiv NPS: 26. Citováno 28. února 2016.
- Hacking Blind, Andrea Bittau, Adam Belay, Ali Mashtizadeh, David Mazieres, Dan Boneh
- Programování orientované na návratHovav Shacham a kol.
- http://www.scs.stanford.edu/brop/
- http://www.scs.stanford.edu/brop/bittau-brop.pdf
- http://ytliu.info/blog/2014/05/31/blind-return-oriented-programming-brop-attack-yi/