Sunucumun ShellShock hatalarına karşı savunmasız olup olmadığı nasıl test edilir?


80

Bash kurulumumun güncellemelerden sonra ShellShock hatalarına karşı savunmasız olmadığından nasıl emin olabilirim ?



Lütfen bash'da hala yamalanmamış iki güvenlik açığı daha bulunduğunu unutmayın (CVE-2014-7186 ve CVE-2014-7187).
Deer Hunter

CVE-2014-7186 ve CVE-2014-7187'yi düzelten yamalar, Deer Hunter yorumunu yayınlamasından kısa bir süre sonra kullanılabilir. CVE-2014-7169 için dağıtılmış bir düzeltme ekiniz varsa, 7186/7187'yi engellemeye yetecek kadar sisteminiz varsa, aşağıdaki komutlarla sisteminizi test edin ve görün. Ayrıca dağıtımınız için daha fazla güvenlik güncellemesi olup olmadığını kontrol edin.
BeowulfNode42

Yanıtlar:


83

CVE-2014-6271 güvenlik açığını denetlemek için

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

savunmasız kelimeyi geri YAKMAMALIDIR.


CVE-2014-7169 güvenlik açığını denetlemek için
(uyarı: sizinki başarısız olursa /tmp/echo, sonradan silebileceğiniz ve yeniden test etmeden önce silmeniz gereken bir dosya oluşturacak veya üzerine yazacaktır )

cd /tmp; env X='() { (a)=>\' bash -c "echo date"; cat echo

tarih kelimesini söylemeli ve sonra bunun gibi bir mesajla şikayet etmelidir cat: echo: No such file or directory. Bunun yerine o anki tarihin ne olduğunu size söylerse sisteminiz savunmasızdır.


CVE-2014-7186’yi kontrol etmek için

bash -c 'true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF' || echo "CVE-2014-7186 vulnerable, redir_stack"

metni geri YANMAMALIDIR CVE-2014-7186 vulnerable, redir_stack.


CVE-2014-7187’yi kontrol etmek için

(for x in {1..200} ; do echo "for x$x in ; do :"; done; for x in {1..200} ; do echo done ; done) | bash || echo "CVE-2014-7187 vulnerable, word_lineno"

metni geri YANMAMALIDIR CVE-2014-7187 vulnerable, word_lineno.


CVE-2014-6277’yi kontrol etmek için. Artık erişemediğim kısmen yamalı bir sisteme güveniyor gibi göründüğünden% 100 emin değilim.

env HTTP_COOKIE="() { x() { _; }; x() { _; } <<`perl -e '{print "A"x1000}'`; }" bash -c "echo testing CVE-2014-6277"

Bu bir geçiş sonucu SADECE metni geri yankılanıyor testing CVE-2014-6277. Perl çalışırsa veya perl kurulu değilse şikayet ederse bu kesinlikle bir başarısızlıktır. Artık ekli sistemlere sahip olmadığım için diğer arıza özelliklerinden emin değilim.


CVE-2014-6278'i kontrol etmek için. Yine,% 100 emin değilim çünkü bu testin artık herhangi bir ekli sisteme sahip olmadığımdan eminim.

env HTTP_COOKIE='() { _; } >_[$($())] { echo hi mom; id; }' bash -c "echo testing CVE-2014-6278"

Bu test için bir geçiş, SADECE metni geri yansıtması gerektiğidir testing CVE-2014-6278. Seninki hi momherhangi bir yerde yankılanıyorsa bu kesinlikle başarısız.


1
Buna genel testi ekleyebilir miyiz foo='() { echo not patched; }' bash -c foo? İşlev ihracatı ayrı bir ad alanına konana kadar, bir ayrıştırıcı hatadan diğerine koşmayı bırakmayacağız.
billyw

Bu testte CVE var mı? Bu sorunu tanımlayan herhangi bir referansınız var mı? Ayrıca bu tür bilgiler, mevcut Q'ların başarısının veya başarısızlığının nasıl test edileceğine ilişkin olduğu için, bu Q'nun mermi ile ilgili diğer sorularından birine ait olabilir.
BeowulfNode42,

Bu, Michal Zalewski'nin yaklaşmakta olan Shellshock CVE'lerde ( lcamtuf.blogspot.com/2014/09/… ) blog yazısından . Hâlâ halka açık olmayan CVE-2014-6278 için önerilen sınavı. Yine de testin genelliği konusunda yanılmışım; Zalewski'nin testinin geçtiği bir dava ile karşılaştım ancak CVE-2014-7187 testi başarısız oldu.
billyw

Ve burada, CVE-2014-6277 ve CVE-2014-6278 hakkında tam açıklama, bunların kontrol edilmesiyle birlikte: seclists.org/fulldisclosure/2014/Oct/9
15

Notun bir noktası: BASH sürümü savunmasız olsa bile, hiçbir şey kullanmıyorsa (yani, "www" veya "su bardağı" ya da her neyse, servis sağlayıcılar tarafından kullanılan tüm hesaplar) varsayılan kabuk olarak BASH ile yapılandırılmış ve hiçbiri Kodlarınız sistemi () veya benzerlerini çağırır, güvenlik açığı olan versiyona sahip olmak daha az riskli olabilir, ancak yine de en kısa zamanda BASH’i yükseltin.
DTK

32

Bash'in savunmasız sürümleri tarafından otomatik olarak değerlendirilecek olan özel hazırlanmış bir ortam değişkenini dışa aktarın:

$ export testbug='() { :;}; echo VULNERABLE'

Şimdi, bu değişkeni kendiniz kullanmamış olsanız bile, Bash'in $ testbug içindeki kodu değerlendirip değerlendirmeyeceğini görmek için basit bir yankı yürütün:

$ bash -c "echo Hello"
VULNERABLE
Hello

"VULNERABLE" dizesini gösterirse, cevap açıktır. Aksi takdirde, endişelenmenize gerek yoktur ve Bash'in yamalı sürümünüz tamamdır.

Önemli Linux dağıtımları tarafından birden fazla düzeltme eki yayınlandığını ve bazen güvenlik açığını tam olarak çözemediklerini lütfen unutmayın. Bu hata için güvenlik önerilerini ve CVE girişini kontrol etmeye devam edin .


5
CVE-2014-6271’e ek olarak, özellikle Red Hat’in eksik düzeltmesi de aşağıdaki değerlere sahiptir: CVE-2014-7169 .
DocMax

3
Kabuğunuzu kirletmeyen ve 'alternatif bir giriş kabuğu kullanıyorsanız bile (hangisi bilmeyebilir export) kullanıyorsanız' bile olsa bir env testbug='() { :;}; echo VULNERABLE' bash -c "echo Hello"
astar

1
Burada bazı Ubuntu'ya özgü detaylar var askubuntu.com/questions/528101/… - şahsen sorunu çözmek için Ubuntu 13.10'dan 14.04'e yükseltmek zorunda kaldım
dodgy_coder

2

ShellShock, pratik olarak birden fazla bash güvenlik açığı birleşiminin bir birleşimidir ve şu anda bu güvenlik açığından yararlanan bir yazılım da vardır, bu nedenle ShellShock hala açık olan bir sorun olabilir , RedHat'tan bu konu hakkında güncellemeler içeren bir konu var .

Redhat aşağıdakileri tavsiye etti:

Çalıştır komutu:

$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"

Eğer çıktı:

$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
vulnerable
bash: BASH_FUNC_x(): line 0: syntax error near unexpected token `)'
bash: BASH_FUNC_x(): line 0: `BASH_FUNC_x() () { :;}; echo vulnerable'
bash: error importing function definition for `BASH_FUNC_x'
test

hiçbir fikrin yok.

Eğer çıktı:

$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
bash: error importing function definition for `BASH_FUNC_x()'
test

CVE-2014-6271tamir ettin

Çıktınız şuysa:

$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `BASH_FUNC_x'
test

savunmasız değilsin.

ShellShock kontrolünün diğer kısmı, CVE-2014-7169 güvenlik açığı kontrolünün sistemin dosya oluşturma sorununa karşı korunmasını sağlamasıdır. Bash sürümünüzün CVE-2014-7169'a açık olup olmadığını test etmek için aşağıdaki komutu çalıştırın:

$ cd /tmp; rm -f /tmp/echo; env 'x=() { (a)=>\' bash -c "echo date"; cat /tmp/echo
bash: x: line 1: syntax error near unexpected token `='
bash: x: line 1: `'
bash: error importing function definition for `x'
Fri Sep 26 11:49:58 GMT 2014

Sisteminiz savunmasızsa, saat ve tarih gösterilecek ve / tmp / echo oluşturulacaktır.

Sisteminiz savunmasız değilse, şuna benzer bir çıktı göreceksiniz:

$ cd /tmp; rm -f /tmp/echo; env 'x=() { (a)=>\' bash -c "echo date"; cat /tmp/echo
date
cat: /tmp/echo: No such file or directory

2

Web sunucunuzu CGI komut dosyalarındaki güvenlik açıklarına karşı sınamak için ShellShocker adlı bir CLI yardımcı programı yazdım . Sitenizi test etmek için şunları çalıştırırsınız:

python shellshocker.py <your-server-address>/<cgi-script-path>

yani

python shellshocker.py http://example.com/cgi-bin/possibly-vulnerable-script.cgi

EDIT: Bu yardımcı program kaldırıldı, üzgünüm: '(


Bağlantınız öldü
SSK

@SSK Üzgünüz;) Mistype.
Liam Marshall

Bağlantın hala ölü.
Mxx

Evet, üzgünüm, aşağı çektim. Sevmediğim şekillerde sömürülüyordu.
Liam Marshall

1

CGI URL’nizi şu çevrimiçi teste gönderebilirsiniz:

http://shellshock.iecra.org


4
Düşüşler için sebep göstermek kibarlıktır.
David

4
"Tüm taramaları kaydediyoruz" ??? Ürpertici. Python'u indirir ve kendim çalıştırırdım.
Brad

1
@brad en azından sana söylüyorlar. Bu hizmeti sunan bir beyaz güvenlik hizmeti sağlıyor olsam, kaç kişinin siteye ayrıntılarını kör bir şekilde girdiğini belirten bir web sitesine girdiğini gösteren bir günlük (yalnızca bireysel ayrıntıya sahip olmayan bir sayaç) tutabileceğime eminim. Sınama teklifini denemek için, testin sunulduğu sitenin orijinalliği hakkında fazla bir şey bilmeden ... ve birinin hizmetini başkalarına ait savunmasız siteleri bulmak için kullanması durumunda neyin sınandığını gösteren bir kayıt defteri isterler ...
Rob Moir

-1

env x = '() {:;} yazın; eko savunmasız 'bash -c "eko bu bir testtir" ve bu savunmasız hale gelirse ve bu bir testse, OSX / Linux makinenizin etkilendiği anlamına gelir. Çözüm bash'ın en son sürümüne güncellemektir.


6
Neden root olarak? Tamamen gereksiz.
Mat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.