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.
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'” |