Zranitelnost Shellshock byla nalezena koncem roku 2014 (abych byl přesný, dopad byl zveřejněn na CVE-2014-6271 dne 24. září 2014). Později byla vydána aktualizace ve verzi bash 4.1.2-15 s opravou zranitelnosti Shellshock. No, celý svět pokračoval v aktualizaci bashe a zajistil svůj shell před Shellshockem, ale překvapivě mnoho strojů v mé kanceláři nebylo z jakýchkoli důvodů aktualizováno. Děsivé je, že jen málo z těchto strojů se zranitelným prostředím hostovalo mnoho služeb na internetu. Podle různých blogů na internetu exploit Shellshock umožňuje útočníkovi vzdáleně provést škodlivý příkaz v bash prostřednictvím skriptů CGI.
(I know this tutorial is pretty late, but there are many who are not aware of it and still using vulnerable bash on their public servers)
První věcí je zkontrolovat, zda je váš BASH zranitelný Shellshock nebo ne . Takže každá bash verze starší než 4.1.2 tuto chybu zabezpečení určitě bude mít.
$ bash --version GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
(nebo)
$ rpm -qa|grep bash bash-completion-1.3-7.el5 bash-3.2-32.el5_9.1
Nyní znáte verzi, takže spusťte níže uvedené příkazy, abyste potvrdili, že je zranitelná vůči Shellshock.
$ env x='() { :;}; echo vulnerable' bash -c "echo If you see the word vulnerable above, you are vulnerable to shellshock" vulnerable If you see the word vulnerable above, you are vulnerable to shellshock
Řešení:
Přejít na konec tohoto příspěvku. V případě, že chcete vědět, jak shellshock funguje, přečtěte si to.
Porozumění exportovaným proměnným v prostředí SHELL :
Jak říká výše uvedený výstup, váš SHELL je zranitelný, ale podívejme se, jak to funguje.
Normálně můžete nastavit proměnnou prostředí a použít ji v shellu. Například, jak je uvedeno níže:
$ test=1 $ echo $test 1
Ale nemůžete přímo použít proměnnou env ‘test’ v novém prostředí bash . Podívejte se na to:
$ test=1 $ echo $test 1 $ bash $ echo $test
Výstup je prázdný. Důvodem je, že proměnná prostředí je k dispozici pro přístup pouze ve stejném prostředí. Pokud ale exportujete proměnnou prostředí, je k dispozici i pro nový bash shell. Zde je příklad:
$ var="testing" $ export var $ bash $ echo $var testing
Nyní můžete vidět, že proměnná ‚$var‘ byla nastavena a exportována v jednom prostředí a zpřístupněna z jiného prostředí. Export můžete samozřejmě kdykoli zastavit pomocí níže uvedeného příkazu.
$ export -n var $ bash $ echo $var
Podobně můžete vytvářet funkce a exportovat je v jednom prostředí a přistupovat k exportované funkci z jiného prostředí. Podívejme se také na tento příklad.
$ fnc() { echo "testing"; } $ fnc testing $ bash $ fnc bash: fnc: command not found
Ve výše uvedeném výstupu vidíte ‘bash:fnc:příkaz nenalezen protože fnc není exportovaná funkce. Takže to nemůžete volat z jiného shellu.
Pojďme exportovat ‘fnc ‘ také.
$ export -f fnc $ fnc testing $ bash $ fnc testing
Funguje podle očekávání (od „fnc ‘ byl exportován a je k dispozici v jiném prostředí).
Export proměnné nebo funkce nastaví proměnnou prostředí
$ env | grep -A1 fnc fnc=() { echo "testing" }
Nyní Shellshock exploit
Na základě výše uvedených příkladů jsme zjistili, že nový bash shell přijímá definici proměnné prostředí začínající znakem () a interpretuje ji jako funkci . Ale tady je zranitelnost, nový shell spustí vše, co je v nabídce.
Například:
Proveďte níže uvedený příkaz:
$ export sse_fnc='() { echo "function shellshock exploit" ; }; echo "Not good"; '
Zkontrolujte proměnnou env pro „sse_fnc“:
$ env | grep -A1 sse_fnc sse_fnc=() { echo "function shellshock exploit" ; }; echo "Not good";
Přejít na nový bash shell:
$ bash Not good
Poznámka: Právě jsme napsali „bash “ a zobrazí se text „Není dobré ‘ vytištěno. Znamená to, že nový shell začne vykonávat funkci po načtení proměnné prostředí a také provede koncové příkazy (i když se složená závorka funkce zavřela po ‚echo „funkce shellshock exploit“;‘).
Jinými slovy „Exportovaná proměnná sse_fnc
byl předán subshell, který byl interpretován jako funkce sse_fnc
ale koncové příkazy byly provedeny (this is bad
), jak se vytvořila podslupka.“
přes Fixee@StackExchange
Jak lze tuto chybu zabezpečení zneužít?
Nemyslím si, že by to mohl někdo vysvětlit lépe než tento člověk (shellshocker.net). Díky chlape!
Jak opravit Shellshock?
Jednoduché, aktualizujte bash a vyzkoušejte exploit, abyste zjistili, zda zranitelnost zmizela.
$curl https://shellshocker.net/fixbash | sh
Výše uvedený příkaz automaticky stáhne přibližně 30+ oprav a zkompiluje bash ze zdroje. Tento skript můžete pravidelně spouštět, aby byl váš bash aktualizován nejnovějšími záplatami.
Jakmile je instalace úspěšná. Zkontrolujte verzi bash, jak je uvedeno níže:
$bash --version GNU bash, version 4.3.42(1)-release (x86_64-unknown-linux-gnu)
Test zranitelnosti Shellshock:
$env x='() { :;}; echo vulnerable' bash -c "echo If you see the word vulnerable above, you are vulnerable to shellshock If you see the word vulnerable above, you are vulnerable to shellshock
Z výše uvedeného výstupu nevypsalo slovo „zranitelné“. Takže můj bash je bezpečný!
(nebo)
$env X='() { (shellshocker.net)=>\' bash -c "echo date"; cat echo; rm ./echo
Pokud je BASH zranitelný, výše uvedený příkaz vydá datum. Jinak je BASH bezpečný.