Bash Bug / Shellshock Bug

24.09.2014 tarihinde tüm Unix ve Linux tabanlı işletim sistemlerinde etkili olabilecek ‘ Bash Bug ’ ya da ‘ Shellshock Bug ’ isimli bir açık yayınlandı. CVE (Common Vulnerabilities and Exposures) standardı tarafından CVE-2014-6271 başlığı altında duyurulan bu açık, yayınlandığı andan itibaren başta Unix ve Linux tabanlı işletim sistemi geliştirici firma ve topluluklar ile bilgi güvenliği uzmanları olmak üzere, tüm teknoloji sevenlerin dikkatini çekti. İlk yorumlar Heartbleed Bug (bakınız: http://www.lostar.com/2014/04/heartbleed-bug-arastirma-raporu.html) kadar büyük bir açık olabileceği yönündeydi ancak şu an ki durum belki daha da tehlikeli bir açık ile karşı karşıya olabileceğimizi göstermekte.

Bash Bug

Stephane Chazelas tarafından bulunan bu zafiyetin bu kadar tehlikeli görülmesinin nedeni, zafiyetin ihtiyaç duyduğu yazılımın yaygınlığı, zafiyetin sömürebilirliğinin kolay olması ve zafiyetin etkisinin çok yüksek olmasından kaynaklanmaktadır.

Bash Bug / Shellshock Bug, özel hazırlanmış değerlere sahip ortam değişkenlerini kullanarak, CentOS, Ubuntu, Redhat, Mac OS gibi tüm Unix-Linux tabanlı işletim sistemlerinin hemen hemen hepsinde standart olarak yüklü gelen Bash yazılımı üzerinde komut çalıştırılmasına neden olmaktadır. Bu yolla işletim sistemi ele geçirilebilmektedir. Bash (Bourne-Again Shell) yazılımının bu kadar yaygın olmasının nedeni, Unix-Linux tabanlı işletim sistemleri için bir kabuk ya da başka bir deyişle komut dili yorumlayıcısı olmasıdır; bu nedenle çoğu Unix-Linux dağıtımında standart olarak bulunmaktadır.

Bu zafiyetin aktif olarak ilk aşamada kullanılabileceği alanlar aşağıda listelenmiştir:

  • Apache sunucularında genellikle Bash aracılığı ile çalışan ‘mod_cgi’ ve ‘mod_cgid’ scriptleri.
  • Sistem konfigürasyonu için Shell scriptleri kullanan DHCP Client’lar.
  • Shell script ve ortam değişkenleri kullanabilecek çeşitli Deamon ve SUID (‘set user ID upon execution’ ya da ‘set group ID upon execution’) haklarına sahip uygulamalar.
  • Shell aracılıyla çalıştırılabilen ve diğer uygulamalarla Bash katmanı aracılığı ile etkileşen tüm uygulamalar.

 

Unix-Linux tabanlı işletim sistemlerinde bu zafiyeti test etmenin yolu aşağıdaki gibidir:

İşletim sisteminde komut satırı içerisinden

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

Yazıldığından ekrana aşağıdaki bir çıktı veriyorsa sistem belirtilen güvenlik zafiyetine sahip ve gerekli güncelleştirmeler yapılmamış demektir.

vulnerablethis is a test

Gerekli güncellemeler yapıldıktan sonra aynı satırların komut satırına yazılması halinde aşağıdaki gibi çıktı verilmektedir.

bash: warning: x: ignoring function definition attemptbash: error importing function definition for `x’this is a test

 

Bash Bug / Shellshock Bug’ının bulunduğu platform ve bu platformlara göre uygulanması gereken çözüm öneriler ve kaynak linklerinin 25.09.2014 tarihine göre güncel durumları aşağıdaki tabloda belirtilmiştir:

Platform Düzeltildiği paket Referanslar
Red Hat Enterprise Linux 7 bash-4.2.45-5.el7_0.2 Red Hat Enterprise Linux
Red Hat Enterprise Linux 6 bash-4.1.2-15.el6_5.1 Red Hat Enterprise Linux
bash-4.1.2-15.el6_5.1.sjis.1 Red Hat Enterprise Linux
bash-4.1.2-9.el6_2.1 Red Hat Enterprise Linux 6.2 AUS
bash-4.1.2-15.el6_4.1 Red Hat Enterprise Linux 6.4 EUS
Red Hat Enterprise Linux 5 bash-3.2-33.el5.1 Red Hat Enterprise Linux
bash-3.2-33.el5_11.1.sjis.1 Red Hat Enterprise Linux
bash-3.2-24.el5_6.1 Red Hat Enterprise Linux 5.6 LL
bash-3.2-32.el5_9.2 Red Hat Enterprise Linux 5.9 EUS
Red Hat Enterprise Linux 4 bash-3.0-27.el4.2 Red Hat Enterprise Linux 4 ELS
Novell LE 11 SP2 DEBUGINFO bash-debuginfo >= 3.2-147.14.20.1bash-debugsource >= 3.2-147.14.20.1 Builds
SAT Patch Nr: 9736
Novell SUSE Linux Enterprise Server 11 SP2 LTSS bash >= 3.2-147.14.20.1bash-doc >= 3.2-147.14.20.1libreadline5 >= 5.2-147.14.20.1

readline-doc >= 5.2-147.14.20.1

Builds
SAT Patch Nr: 9736
Novell SUSE Linux Enterprise Server 11 SP2 LTSS bash >= 3.2-147.14.20.1bash-doc >= 3.2-147.14.20.1libreadline5 >= 5.2-147.14.20.1

libreadline5-32bit >= 5.2-147.14.20.1

readline-doc >= 5.2-147.14.20.1

Builds
SAT Patch Nr: 9736
Novell SLE 11 SP1 DEBUGINFO bash-debuginfo >= 3.2-147.14.20.1bash-debugsource >= 3.2-147.14.20.1 Builds
SAT Patch Nr: 9738
Novell SUSE Linux Enterprise Server 11 SP1 LTSS bash >= 3.2-147.14.20.1bash-doc >= 3.2-147.14.20.1libreadline5 >= 5.2-147.14.20.1

readline-doc >= 5.2-147.14.20.1

Builds
SAT Patch Nr: 9738
Novell SUSE Linux Enterprise Server 11 SP1 LTSS bash >= 3.2-147.14.20.1bash-doc >= 3.2-147.14.20.1libreadline5 >= 5.2-147.14.20.1

libreadline5-32bit >= 5.2-147.14.20.1

readline-doc >= 5.2-147.14.20.1

Builds
SAT Patch Nr: 9738
Novell SUSE Linux Enterprise Server 10 SP4 LTSS for x86 bash >= 3.1-24.32.1readline >= 5.1-24.32.1readline-devel >= 5.1-24.32.1 Builds
ZYPP Patch Nr: 8950
Novell SUSE Linux Enterprise Server 10 SP4 LTSS for AMD64 and Intel EM64T
Novell SUSE Linux Enterprise Server 10 SP4 LTSS for IBM zSeries 64bit
bash >= 3.1-24.32.1readline >= 5.1-24.32.1readline-32bit >= 5.1-24.32.1

readline-devel >= 5.1-24.32.1

readline-devel-32bit >= 5.1-24.32.1

Builds
ZYPP Patch Nr: 8950
Novell SLE 11 SP3 DEBUGINFO bash-debuginfo >= 3.2-147.20.1bash-debuginfo-x86 >= 3.2-147.20.1bash-debugsource >= 3.2-147.20.1 Builds
SAT Patch Nr: 9740
Novell SLE 11 SP3 DEBUGINFO bash-debuginfo >= 3.2-147.20.1bash-debugsource >= 3.2-147.20.1 Builds
SAT Patch Nr: 9740
Novell SUSE Linux Enterprise Software Development Kit 11 SP3 libreadline5 >= 5.2-147.20.1readline-devel >= 5.2-147.20.1 Builds
SAT Patch Nr: 9740
Novell SUSE Linux Enterprise Software Development Kit 11 SP3 readline-devel >= 5.2-147.20.1 Builds
SAT Patch Nr: 9740
Novell SUSE Linux Enterprise Software Development Kit 11 SP3 readline-devel >= 5.2-147.20.1readline-devel-32bit >= 5.2-147.20.1 Builds
SAT Patch Nr: 9740
Novell SUSE Linux Enterprise Software Development Kit 11 SP3 libreadline5 >= 5.2-147.20.1readline-devel >= 5.2-147.20.1readline-devel-32bit >= 5.2-147.20.1 Builds
SAT Patch Nr: 9740
Novell SUSE Linux Enterprise Desktop 11 SP3
Novell SUSE Linux Enterprise Server 11 SP3
Novell SUSE Linux Enterprise Server 11 SP3 for VMware
bash >= 3.2-147.20.1bash-doc >= 3.2-147.20.1libreadline5 >= 5.2-147.20.1

readline-doc >= 5.2-147.20.1

Builds
SAT Patch Nr: 9740
Novell SUSE Linux Enterprise Server 11 SP3 bash >= 3.2-147.20.1bash-doc >= 3.2-147.20.1bash-x86 >= 3.2-147.20.1

libreadline5 >= 5.2-147.20.1

libreadline5-x86 >= 5.2-147.20.1

readline-doc >= 5.2-147.20.1

Builds
SAT Patch Nr: 9740
Novell SUSE Linux Enterprise Desktop 11 SP3
Novell SUSE Linux Enterprise Server 11 SP3
Novell SUSE Linux Enterprise Server 11 SP3 for VMware
bash >= 3.2-147.20.1bash-doc >= 3.2-147.20.1libreadline5 >= 5.2-147.20.1

libreadline5-32bit >= 5.2-147.20.1

readline-doc >= 5.2-147.20.1

Builds
SAT Patch Nr: 9740
Novell SUSE Linux Enterprise Server 11 SP1 bash-debuginfo >= 3.2-147.14.20.1bash-debuginfo-32bit >= 3.2-147.14.20.1 Builds
SAT Patch Nr: 9737
Novell SUSE Linux Enterprise Server 10 SP3 LTSS for x86 bash >= 3.1-24.32.1readline >= 5.1-24.32.1readline-devel >= 5.1-24.32.1 Builds
ZYPP Patch Nr: 8951
Novell SUSE Linux Enterprise Server 10 SP3 LTSS for AMD64 and Intel EM64T
Novell SUSE Linux Enterprise Server 10 SP3 LTSS for IBM zSeries 64bit
bash >= 3.1-24.32.1readline >= 5.1-24.32.1readline-32bit >= 5.1-24.32.1

readline-devel >= 5.1-24.32.1

readline-devel-32bit >= 5.1-24.32.1

Builds
ZYPP Patch Nr: 8951
Debian squeeze vulnerable
Debian squeeze (lts) 4.1-3+deb6u1
Debian wheezy vulnerable
Debian wheezy (security) 4.2+dfsg-0.1+deb7u1
Debian jessie vulnerable
Debian sid 4.3-9.1
Ubuntu 14.04 LTS bash 4.3-7ubuntu1.1 Source Package
Ubuntu 12.04 LTS bash 4.2-2ubuntu2.2 Source Package
Ubuntu 10.04 LTS bash 4.1-2ubuntu3.1 Source Package

 

Update işlemlerinin çeşitli platformlarda nasıl yapılabileceği ve zafiyetten diğer korunma yöntemleri aşağıdaki gibidir:

  • Ubuntu:

Ubuntu Masaüstü versiyonları üzerinde güncelleştirme günlük olarak kullanıcıya bildirilse de “ALT+F2” tuş kombinasyonu ve sonrasında “update-manager” yazılarak “Update Manager” uygulaması açılabilir ve mevcut güncellemelerin yüklenmesi sağlanabilir.

Server’lar üzerinde ise, “pdate-notifier-common” paketi yüklü ise gerekli bildiri ve yönlendirmeler konsol üzerinden bildirilse de, konsoldan

sudo apt-get update

Yazıp güncelleştirme bilgisini alarak,

sudo apt-get dist-upgrade

Komutu ile gerekli yamaların yüklenmesi sağlanmalıdır.

Unutulmamalıdır ki güncelleştirme işlemi sırasında servisler yeniden başlatılabilir.

  • Debian:

Debian sistemleri üzerinde çoğunluğu için gerekli yamalar çıkmış bulunmaktadır. Mevcut sürüme göre yama durumu kontrol edilmeli, mevcut bir güncelleştirme var ise; konsoldan

sudo apt-get update && sudo apt-get upgrade

Komutu ile mevcut güncelleştirme listesini alarak tüm güncelleştirmelerin kurulumunu sağlayabilirsiniz.

Debian üzerinde sadece bir paketin güncellenmesi istenildiğinde aşağıdaki komut yapısı kullanılmalıdır.

sudo apt-get update && sudo apt-get install –only-upgrade bash

Yapılan güncelleştirmelerin etkili olabilmesi için ilişki servisler ya da işletim sistemi yeniden başlatılmalıdır.

 

  • RedHat:

RedHat’in mevcut zafiyet için yayınladığı güncelleştirmeler bulunmaktadır. Bu güncelleştirmeleri gerek grafik ara yüzünden, gerekse komut satırı üzerinden yapmak mümkündür.

Grafik ara yüzünden mevcut paketleri güncelleştirmek için “System -> Administration -> Software Update” adımları, daha önceki sürümler için “Applications -> System Tools -> Software Updater” adımları izlenmeli ve gerekli güncellemeler yüklenmelidir.

Red Hat Enterprise Linux 5 ve daha öncesi sürümler için komut satırından güncelleştirmeleri almak için;

yum update

Sadece bir pakete ait güncelleştirmeleri almak için;

yum update bash

Komutları kullanılmalıdır.

Red Hat Enterprise Linux 4 ve daha öncesi sürümler için komut satırından güncelleştirmeleri almak için;

up2date

Sadece bir pakete ait güncelleştirmeleri almak için;

up2date bash

Komutları kullanılmalıdır.

Güncelleştirmelerin hemen uygulanamayacağı durumda olan sistemler için RedHat’in yayınladığı bash_ld_preload.c isimli dosyanın indirilip derlendikten sonra eskisi ile değiştirilmesi gerekmektedir.

Gerekli işlemleri gerçekleştirmek için aşağıdaki adımlar izlenmelidir:

İndirilen dosya derlenmeli,

gcc bash_ld_preload.c -fPIC -shared -Wl,-soname,bash_ld_preload.so.1 -o bash_ld_preload.so

Derlenen dosya /lib klasörüne kopyalanmalıdır.

cp bash_ld_preload.so /lib/

Yapılan çalışmanın tüm sistemi etkileyecek şekilde uygulanması istendiğinde aşağıdaki satır /etc/ld.so.preload içerisine eklenmelidir.

/lib/bash_ld_preload.so

Derlenen dosyanın kopyalanmasının ardından ilişkili servisler yeniden başlatılmalı ya da sistem yeniden başlatılmalıdır.

Ayrıca aşağıda listelenmiş olan mod_security kuralları ile içerisinde Bash tarafından yorumlanan, fonksiyon gibi tanımlamalar bulunan HTTP isteklerini geri çevrilebilir. Bu sayede CGI gibi uygulamalara karşı yapılabilecek atakların bloklanması sağlanabilir.

İstek Başlıkları SecRule REQUEST_HEADERS “^\(\) {” “phase:1,deny,id:1000000,t:urlDecode,status:400,log,msg:’CVE-2014-6271 – Bash Attack'”
SERVER_PROTOCOL değerleri SecRule REQUEST_LINE “\(\) {” “phase:1,deny,id:1000001,status:400,log,msg:’CVE-2014-6271 – Bash Attack'”
GET/POST isimleri SecRule ARGS_NAMES “^\(\) {” “phase:2,deny,id:1000002,t:urlDecode,t:urlDecodeUni,status:400,log,msg:’CVE-2014-6271 – Bash Attack'”
GET/POST değerleri SecRule ARGS “^\(\) {” “phase:2,deny,id:1000003,t:urlDecode,t:urlDecodeUni,status:400,log,msg:’CVE-2014-6271 – Bash Attack'”
Yüklemelerdeki dosya isimleri SecRule  FILES_NAMES “^\(\) {”  “phase:2,deny,id:1000004,t:urlDecode,t:urlDecodeUni,status:400,log,msg:’CVE-2014-6271  – Bash Attack'”

Leave A Comment