CVE-2014-6271 bash güvenlik açığı (Shellshock) nedir ve nasıl düzeltilir?


141

Son zamanlarda, Bash’te bir güvenlik açığı olan “CVE-2014-6271” (Bkz. USN-2362-1 ) hakkında haberler var . Bundan etkilenip etkilenmediğimi nasıl bilebilirim, nasıl düzeltebilirim ve neden umursayayım?

Bu, kapsamı ve ciddiyeti nedeniyle bu güvenlik açığına yönelik kanonik bir cevap olarak tasarlanmıştır.


18
"nasıl düzeltebilirim?" -> sadece yükseltme yöneticini çalıştır! Gerçekten, Ubuntu güvenlik güncellemeleri yayınlar, özel bir güvenlik ekibi var. Lütfen Bash yapımı ile ilgili cevapları kaynağından göndermeyin! ; Sisteminizi gelecekte korumak için gereksiz yere karmaşık ve daha zordur.
gertvdijk

5
Ayrıca, eksik düzeltme için ek CVE. CVE-2014-7169
gertvdijk

18
Lütfen yapmak kaynağından bina hakkında yazılan cevaplar. Gerekirse de olmasa da, bazı insanlar eski Ubuntu sunucularına sahiptir ve kaynaktan inşa etmek tek seçenek olabilir.
GaryO

3
Üzgünüz, testte kısa çizgi yerine bash koyduğumu fark ettim. Neyse boşver.
Matt H

Yanıtlar:


126

Bash nedir?

Bash, Ubuntu'daki varsayılan etkileşimli kabuktur. Terminale arabirim oluştururken (terminal emülatöründen, bir tty'nin veya ssh'nin üzerinden), genellikle bashokuyacak ve yürütecek komutları yazıyorsunuzdur . Terminali hiç kullanmasanız bile, hala Bash'iniz var.

Ubuntu'da, /bin/shbash değildir (tire). Bu güvenlik açığından yalnızca bash etkilenir.

Bu istismar beni nasıl etkiler?

Bash ve işletim sistemi , oturum açmış olan kullanıcıyı, sabit diskteki programları ve diğer benzeri işlevleri arayacakları tanımlayan bir dizi ortam değişkenini takip eder. Saldırgan, belirli bir yapıya sahip bir ortam değişkenini işleyerek, Bash başladığında kodu çalıştırabilir.

Saldırgan, bu ortam değişkenini birden çok yolla ayarlayabilir:

  • SSH gibi bir hizmete, git over ssh gibi belirli bir kurulumla uzaktan bağlanın. Mitre'nin uyardığı gibi, sshd ForceCommandseçeneğinin kullanımı bir saldırı vektörüdür. Kabuğu bas olmayan hesaplar etkilenmez.
  • Ortam değişkenini ayarlamanız için sizi kandırmak.
  • Başka bir programın, hazırlanmış bir değere sahip bir ortam değişkenini ayarlamasına neden olmak. Örneğin, belirli bir kullanıcı içeriğine sahip bir ortam değişkeni ayarlamanız gereken bir web sunucunuz ve komut dosyanız olabilir. Bu komut dosyası kendi kodunu yaratsa ve diğer ortam değişkenlerine dokunmasa bile, bu yeterlidir. Açıklamanın başarılı olması için, herhangi bir adı ve hazırlanmış bir değeri olan tek bir ortam değişkeni yeterlidir .
  • Burada bahsetmediğim diğer yollar.

Bu değişkeni ayarladıktan sonra, bir dahaki sefere herhangi bir nedenle bashaçılır , saldırganın kodu çalıştırılır. Bu, özellikle süper kullanıcının ( bilgisayarınızın verileri ve programları üzerinde tam kontrole sahip olan bir idari kullanıcı kuralı) olarak bash olarak ortaya çıkmasından korkudur . Bash'ı yalnızca standart bir kullanıcı olarak başlatsanız bile, o kullanıcının dosyaları silinebilir.sudo -s

Bash'i kullanmasanız bile, birçok programın kendi çalışmasının bir parçası olarak bash'ı üreteceğini not etmek önemlidir. Bu durumda bile, savunmasızsın. Ancak, Ubuntu's /bin/shbash değildir, bu yüzden sadece açıkça bash'ı çağıran ve varsayılan komut dosyası kabuğunu değil programlar etkilenir.

Gönye göre:

OpenSSH sshd'deki ForceCommand özelliğini, Apache HTTP Sunucusundaki mod_cgi ve mod_cgid modüllerini, belirtilmemiş DHCP istemcileri tarafından yürütülen komut dosyalarını ve ortamın ayarlanmasının Bash uygulamasından ayrılan bir ayrıcalık sınırında meydana geldiği diğer durumları içeren vektörler.

Korunmasız mıyım?

Kurulu paket sürümünüzü kontrol etmek için dpkg kullanın:

dpkg -s bash | grep Version

Bu, bashpaketinizdeki bilgileri arayacak ve çıktıyı yalnızca size gösterecek şekilde filtreleyecektir. Sabit sürümleri bulunmaktadır 4.3-7ubuntu1.4, 4.2-2ubuntu2.5ve 4.1-2ubuntu3.4.

Örneğin, görüyorum:

wlan1-loopback% dpkg -s bash | grep Version
Version: 4.3-7ubuntu1.4

ve savunmasız olmadığımı belirleyebilir.

Nasıl güncellerim?

Standart güncelleme yöneticisi bu güncellemeyi size sunar. Bu, hangi işletim sistemini kullanırsanız veya ne kadar iyi kullanıyor olursanız olun, güvenlik güncellemelerinin ne kadar önemli olduğunun bir örneğidir.

USN Bülteni yeni versiyonları Ubuntu 14.04 Trusty Tahr, 12.04 Hassas pangolin ve 10,04 Lucid Lynx için serbest bırakıldı belirtiyor. Bu LTS sürümlerinden birinde değilseniz ancak oldukça yeni bir sürümdeyseniz, büyük olasılıkla yamalı bir paket bulabileceksiniz.

İlk önce kontrol edip etmediğinizi kontrol edin.

Korunmasızsa, önce en yeni paket listelerini almalısınız:

sudo apt-get update && sudo apt-get install bash

İlk komut, sabit sürümü içeren en yeni paket listesine sahip olduğunuzdan emin olur ve ikinci komut, bash'ın en yeni (sabit) sürümünü yükler.

Böcek sadece bash doğduğunda ortaya çıkacak gibi görünse de, mümkünse derhal yeniden başlatmak iyi bir fikirdir.


20
Üzgünüm, savunmasızsın . Orijinal düzeltme eki tüm sorunu çözmez. Bkz. Cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-7169 AFAIAA, şu anda halka açık hiçbir düzeltme yok. Bkz. Örneğin people.canonical.com/~ubuntu-security/cve/pkg/bash.html
Mormegil

4
@hexafraction 12.10'un bunun için bir güncelleme aldığını nereden okuyorsun? Sanmıyorum ki, 12.10, 13.04, 13.10 çok fazla Yaşam Sonu ! Ayrıca, backport depoları güvenlik güncellemeleri için kullanılmaz .
gertvdijk

2
@hexafraction Hayır, yapmazlar! Hayatın Sonu olmanın tek yolu bu: Artık destek yok.
gertvdijk

1
@ Eğer Ubuntu 12.10 üzerinde konum MichaelHärtl varsa, gelen Bash 12.04 sürümünü indirebilirsiniz packages.ubuntu.com/precise/bash ve manuel olarak kurabilirsiniz.
David,

2
CVE-2014-7169 için düzeltme güncelleme yöneticisinde bulunmaktadır (benim için).
Calmarius

27

Bunu Hacker News’da çaldı . Benim gibi depolarınızda sorun yaşarsanız (Odroid-XU), kaynağından yama / inşa etmek istiyorsanız bu iyi çalışmalıdır.

TMPDIR=/tmp/bash-src
mkdir $TMPDIR
cd $TMPDIR
#download bash
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
#download all patches
for i in $(seq -f "%03g" 1 999); do 
  wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i
  if [[ $? -ne "0" ]]; then
    MAX=$(expr $i - 1)
    break;
  fi
done
tar zxf bash-4.3.tar.gz 
cd bash-4.3
#apply all patches
for i in $(seq -f "%03g" 1 $MAX);do
  echo apply patch bash43-$i
  patch -p0 < ../bash43-$i
done
#build and install
./configure && make
sudo make install
cd ../..
rm -r $TMPDIR

O zaman koş:

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

Ve eğer alırsan:

bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test

O zaman hepiniz iyisiniz!


UYARI: make install komutunu kurun /usr/local/bin, bu nedenle /bin/bashdeğiştirilmez ve curl'den çalıştırılabilir.



13
-1. Kaynağından inşa etmeye gerek yok. Ubuntu'nun depolarda bir güvenlik yaması var. "Deponuzla ilgili sorunlarınız" varsa, bunun yerine düzeltin. Güvenlik yükseltmeleri almazsanız, muhtemelen daha birçok yönden savunmasız kalacaksınız!
gertvdijk

1
@ Matt Beyaz Teşekkürler! Bana sadece birkaç saat kazandırdın :)
Florian Fida

5
@FlorianFida Bu AskUbuntu! Bu sitedeki herkesin Ubuntu kullanımı kapsamında cevap yazması beklenmektedir.
gertvdijk

6
@ MichaelHärtl 12.10, Hayatın Sonu. Zaten uzun zamandan beri hiçbir güvenlik güncellemesi almıyor. Yükselt!!!
gertvdijk

9

Not: CVE-2014-7169 için Güvenlik Düzeltme Eki standart bir güvenlik güncelleştirmesi olarak yayımlandı. Bu yamayı almak için ek ppa eklemenize gerek yok. Sadece aşağıdakiler gerekli.

sudo apt-get update

sudo apt-get upgrade

Bash'ı doğru şekilde yamaladığınızdan emin olmak için aşağıdaki komutu çalıştırın.

dpkg -s bash | grep Version

Eğer 14.04 LTS'deyseniz, çıktısını görmelisiniz:

Version: 4.3-7ubuntu1.4

12.04 LTS'deyseniz, çıktınız şöyle olmalıdır:

 Version: 4.2-2ubuntu2.5

1
Bu doğruydu, ancak resmi bir yama kullanıma sunuldu, bu yüzden güvenlik güncellemesi yayınlandı. Sonuç olarak, bu adımlar artık gerekli değildir.
Robie Basak

Doğru. Yukarıdaki yazıyı düzenleyeceğim. Teşekkür ederim.
branch.lizard

1

11.04 iseniz: aşağıdaki adımları kullanın (benim için çalıştı)

cd ~/
mkdir bash
wget https://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done

Eğer indirilmemişse, gerekli yamalı sonra ftp paketini kurun

apt-get install ftp
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
tar zxvf bash-4.3.tar.gz
cd bash-4.3
for i in $(seq -f "%03g" 0 25);do patch -p0 < ../bash43-$i; done
./configure && make && make install
apt-get install build-essential
./configure && make && make install

Yamanın uygulanıp uygulanmadığını görmek için:

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

0

EOL olan Natty 11.04 kullanıyorum (ve /etc/apt/sources.list'i old-releases.ubuntu.com'u kullanmak için güncelledim), bu yüzden kaynaktan oluşturmam gerekiyor. Bir .deb yapmak istedim, bu yüzden en azından paket yönetimi "farkında" dır, bash versiyonu varsayılan değil. % 100 başarılı değilim - ancak, paket "daha yeni" olarak kaydedildi ve bashikili sabit bitti, işte yaptığım işte:

apt-get source bash
wget https://gist.githubusercontent.com/drj11/e85ca2d7503f28ebfde8/raw/31bd53ed2e47b220d3c728f5440758e0f76769de/gistfile1.c -O bash_CVE-2014-6271.patch
wget https://gist.githubusercontent.com/drj11/239e04c686f0886253fa/raw/046e697da6d4491c3b733b0207811c55ceb9d927/gistfile1.c -O bash_CVE-2014-6271_plus.patch
cd bash-4.2/

Şimdi, (sub) dizininde bash-4.2/, var: kaynağa bash-4.2.tar.xzulaşmak için açılması gereken bir dosya bash; ve denilen bir alt dizin debian.

Bağımlılıkları önlemek için aşağıdaki değişiklikleri yaptım texlive: in bash-4.2/debian/control:

Source: bash
...
Build-Depends: autoconf, autotools-dev, patch, bison, libncurses5-dev,
# texinfo, debhelper (>= 5), texi2html, locales, gettext, sharutils, time, xz-ut
ils
 debhelper (>= 5), locales, gettext, sharutils, time, xz-utils
# Build-Depends-Indep: texlive-latex-base, ghostscript
Build-Depends-Indep: ghostscript

... ve içinde bash-4.2/debian/rules:

binary-doc: bash-install #bash-doc-build
        dh_testdir
        dh_testroot
        mkdir -p $(d_doc)/usr/share/doc/$(p)
        dh_installdocs -p$(p_doc) 
ifeq ($(with_gfdl),yes)
        #cp -p build-bash/doc/bashref.pdf $(d_doc)/usr/share/doc/$(p)/.
        #dh_link -p$(p_doc) \
        #    /usr/share/doc/$(p)/bashref.pdf /usr/share/doc/$(p_doc)/bashref.pdf
else
        rm -f $(d_doc)/usr/share/doc-base/bashref
endif
        rm -f $(d_doc)/usr/share/info/dir*
        #cp -p build-bash/doc/bash.html build-bash/doc/bash.pdf \
        #    $(d_doc)/usr/share/doc/$(p)/
        #dh_link -p$(p_doc) \
        #    /usr/share/doc/$(p)/bash.html /usr/share/doc/$(p_doc)/bash.html \
        #    /usr/share/doc/$(p)/bash.pdf /usr/share/doc/$(p_doc)/bash.pdf
        dh_installchangelogs -p$(p_doc) bash/CWRU/changelog
        ...

Sürümü değiştirmek için bu bash-4.2/dizinde şunları yapın:

bash-4.2$ dch --local patchCVE

... ve istendiğinde, değişiklik notundaki notları doldur. Bu (benim durumumda) .deb (ve ilgili meta veri) çağrılmasını sağlayacaktır bash_4.2-0ubuntu3patchCVE1_i386.deb.

Sonra inşa dpkg-buildpackage -us -ucveya debuildkomut ile deneyebilirsiniz . Not - bunlardan herhangi biri kaynağı fermuardan tekrar açacaktır - böylece sahip olabileceğiniz tüm yamaları geçersiz kılar! Yine de, bunlardan birini çalıştırın, böylece kaynağın debuildaçılması ve oluşturulması sağlanır (not texlive nedeniyle yine de başarısız olabilir, ancak kaynağı açıp derlemesi gerekir).

Sonra yamaları uygulayın; -p1Burada kullanmanız gerektiğini unutmayın , çünkü şu anda bash-4.2/dizindesiniz:

bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch 
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch 

Ardından yamalı sürümü çalıştırarak yeniden oluşturun:

bash-4.2$ fakeroot debian/rules build 

Bu çalıştırılabilir dosyayı yeniden kurar; test etmek için:

bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"

.Deb dosyalarını oluşturmak için aşağıdakileri çalıştırın:

bash-4.2$ fakeroot debian/rules binary

Bu, .deb dosyalarını ana dizine kaydeder; içeriklerini listelemek için:

bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb

.Deb'yi yüklemek için:

bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb

Ancak, bazı nedenlerden dolayı, bu .deb bir yamalı ikili dosya içeriyor (?!), Bu yüzden ayrıca şunu da yapmak zorunda kaldım:

bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/

... ve bundan sonra, test benim için doğru şekilde geçmeye başladı:

$ env VAR='() { :;}; echo Bash is!' bash -c "echo Bash Test"
bash: warning: VAR: ignoring function definition attempt
bash: error importing function definition for `VAR'
Bash Test

Soru: Orijinal Soru, 1 olası saldırı vektörünü "belirtilmemiş DHCP istemcileri tarafından yürütülen komut dosyaları" olarak belirtir. Ne anlama geliyor? Bu, Ubuntu'nun / sbin / dhclient <- in savunmasız olduğu anlamına mı geliyor?
Bran

Bence belki belirtilmemiş istemciler, Ubuntu’nun virüslü / sbin / dhclient’e sahip olduğunu ve bunun ardından bash betiğinin kabarma başlamasını başlatan komutları çalıştıracağı anlamına geliyor. DHCP Müşterilerinin mermi darbesine karşı savunmasızlıkları bu mudur? (Mantıklı
Bran
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.