Co je to Shellcode?
Shellcode je posloupnost strojového kódu nebo spustitelných instrukcí, která se vstřikuje do paměti počítače s cílem převzít kontrolu nad spuštěným programem. Při takovém útoku je jedním z kroků získat kontrolu nad programovým čítačem, který identifikuje další instrukci, která má být provedena. Programový tok lze poté přesměrovat na vložený kód. Intruzivní strojový kód se nazývá užitečné zatížení útoku a je prvkem běžně označovaným termínem shellcode. Tato metoda se často používá k udělení přístupu útočníkovi otevřením shellu příkazů operačního systému, takže útoky na vstřikování kódu se obecně nazývají shell kódem.
Zranitelnost této chyby zabezpečení obvykle zahrnuje způsob, jakým program přiřazuje paměť, kontroluje platnost vstupních dat a zpracovává chyby paměti. Vývojáři softwaru se obvykle mohou vyhnout této hrozbě přísným definováním vstupních dat a odmítnutím nesprávných hodnot. Pokud není zaškrtnuto, mohou být akceptovány hodnoty vyžadující více úložného prostoru, než je paměť přidělená pro tuto hodnotu. To způsobí bezpečnostní závěr nazývaný přetečení vyrovnávací paměti, kde část dat je zapsána do paměťových umístění sousedících s přiřazeným prostorem hodnoty. Při pečlivé manipulaci může tato anomálie umožnit zavedení rušivého kódu.
Shellcode je obvykle psán v programovacím jazyce s nízkým přístupem do systému, jako je sestavení, C nebo C ++. V závislosti na cílené zranitelnosti však může být stejný výsledek realizován vložením kódu pro interpretovaný skriptovací jazyk, jako je PERL, nebo bytecode pro virtuální stroj, jako je JAVA. Kód lze implantovat před, během nebo po únosu programového čítače. Rušivý kód tedy může být obsažen v souboru na cílovém počítači nebo přenášen přes síťové připojení v reálném čase.
Využití místního kódu shellu je navrženo tak, aby útočníkovi umožnilo kontrolu nad počítačem, ke kterému má fyzický přístup. Cílem v tomto případě může být například vytvoření účtu s oprávněními správce. Podobně, pokud má spuštěný proces vysokou úroveň oprávnění, úspěšné zneužití by dočasně udělilo stejnou úroveň přístupu k vetřelci.
Pro komunikaci s cílovým počítačem lze využít procesy běžící na vzdáleném počítači pomocí standardních síťových protokolů. Connect-back shellcode dá cílovému počítači pokyn, aby zahájil připojení k počítači vetřelce. Pokud vetřelec naváže připojení, kód se nazývá bindshell, protože se pokouší převzít kontrolu nad síťovým připojením zvaným port na vzdáleném počítači. Metoda připojení-zpět se používá častěji, protože brány firewall zřídka zakazují odchozí připojení.