GNU/Linux >> Znalost Linux >  >> Linux

Jak zkontrolovat, zda má Bash zranitelnost Shellshock?

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ý.


Linux
  1. Jak zkontrolovat podřetězec v Shell Script Bash?

  2. Jak zkontrolovat, zda Bash může tisknout barvy?

  3. Jak opravit Bash Shellshock CVE-2014-6271, CVE-2014-7169 v systému Linux

  1. Jak napsat smyčku v Bash

  2. Jak zkontrolovat, zda sed změnil soubor

  3. Jak zjistit, zda má soubor v Bash kusovník UTF-8?

  1. Jak zkontrolovat, zda řetězec obsahuje podřetězec v Bash

  2. Jak zkontrolovat syslog v Bash na Linuxu?

  3. Jak zkontrolovat, zda je soubor prázdný v Bash?