在 Web 程序的滲透方式(一) 中菲宴,詳細(xì)分析了 Web 程序的較為經(jīng)典的滲透方式,誠然這些滲透方式已經(jīng)有了較為悠久的歷史趋急,許多網(wǎng)站都做了相應(yīng)的防范喝峦。世界上沒有絕對安全的系統(tǒng),在這些滲透方式日漸難以實(shí)現(xiàn)之后呜达,新的更為有效的滲透手段就隨之出現(xiàn)了谣蠢。
近年來,SSL/TLS 的安全受到越來越多的挑戰(zhàn)查近,SSL/TLS 的本意是加密客戶端與服務(wù)器之間傳遞的內(nèi)容眉踱,但是由于設(shè)計(jì)的不完善,攻擊者可以將截獲的加密信息在不知道密鑰的情況下猜解出來霜威,或者直接獲得服務(wù)器的私鑰等等谈喳,以下列舉了近年來較為著名的由于 SSL/TLS 設(shè)計(jì)不完善而產(chǎn)生的漏洞及其利用方式。
HeartBleed(心臟出血)
原理:
OpenSSL 在實(shí)現(xiàn) TLS 和 DTLS 的心跳處理邏輯時(shí)戈泼,存在編碼缺陷婿禽。OpenSSL 的心跳處理邏輯沒有檢測心跳包中的長度字段是否和后續(xù)的數(shù)據(jù)字段相符合赏僧,攻擊者可以構(gòu)造異常的數(shù)據(jù)包,來獲取心跳數(shù)據(jù)所在的內(nèi)存區(qū)域的后續(xù)數(shù)據(jù)扭倾。
效果:
獲取服務(wù)器內(nèi)存中最多 64K 的數(shù)據(jù)淀零,這些數(shù)據(jù)中可能包含服務(wù)器的私鑰等敏感信息
實(shí)現(xiàn)方式:
DROWN攻擊(Decrypting RSA with Obsolete and Weakened eNcryption)
原理:
由于 OpenSSL 服務(wù)端的實(shí)現(xiàn)沒有嚴(yán)格遵守官方的標(biāo)準(zhǔn),若配置不當(dāng)可以強(qiáng)制使用不安全的 Export 加密套件(包括密鑰交換膛壹,加密算法驾中,HMAC 等的組合),附 SSLv2 加密套件(22模聋,24為對外出口的弱加密方式肩民,只有40位加密強(qiáng)度)
效果:
通過中間人的攻擊方式,獲取通信過程中的敏感信息
POODLE(Padding Oracle On Downgraded Legacy Encryption)
原理:
在服務(wù)器和客戶端之間充當(dāng)中間人链方,使客戶端和服務(wù)器通過不安全 SSLv3 進(jìn)行通信此改。使用 SSLv3 的通信可以通過 Padding Oracle 攻擊來解密其中的信息。有關(guān) Padding Oracle 攻擊侄柔,見我的另一篇文章 Padding Oracle
效果:
獲取通信過程中的敏感信息
實(shí)現(xiàn)方式:
充當(dāng)中間人發(fā)起降級攻擊,之后使用 Padding Oracle 攻擊(PadBuster)
ShellShock
Shellshock占调,又稱 Bashdoor暂题,是在Unix中廣泛使用的Bash shell中的一個(gè)安全漏洞,首次于2014年9月24日公開究珊。受影響的 Bash 版本為 4.3 及更老的版本薪者。
原理:
基于 Linux 的 Web 服務(wù)器一般提供 CGI 接口,允許遠(yuǎn)程執(zhí)行 Bash 指令
剿涮,而服務(wù)器會(huì)根據(jù) HTTP Header 的某些字段設(shè)置 Bash 的環(huán)境
CVE-2014-6271:
Bash 中有種定義函數(shù)的方式:如果環(huán)境變量的值以字符(){
開頭言津,這個(gè)變量就會(huì)被當(dāng)作是一個(gè)導(dǎo)入函數(shù)的定義。這種定義在 shell 啟動(dòng)的時(shí)候生效取试,例如如下語句:
env HELLO="() { echo 'Hello'; }" bash -c HELLO
當(dāng)然悬槽,如果服務(wù)端不調(diào)用這個(gè)函數(shù)當(dāng)然是沒有問題的。但是瞬浓,如果我們使用如下語句:
env CVE_2014_6271="() { echo 'Hello';}; echo 'Goodbye'" bash -c CVE_2014_6271
Bash 的輸出本應(yīng)該只有 Hello初婆,但是 Bash 把 Goodbye 也輸出了。值得留意的是猿棉,Goodbye 在 Hello 之前輸出的磅叛,它是在導(dǎo)入 CVE_2014_6271 的時(shí)候輸出的,也就是說萨赁,即使不調(diào)用 CVE_2014_6271 函數(shù)弊琴,在 Bash 初始化環(huán)境變量的時(shí)候,定義 CVE_2014_6271 函數(shù)之后的語句會(huì)被 Bash 解釋執(zhí)行杖爽。
CVE-2014-7169:
在 CVE_2014_6271 被修復(fù)后不久敲董,很快又曝出了另一個(gè) Bash 漏洞紫皇,這個(gè)漏洞跟重定向有關(guān):
env CVE_2014_7169='() { (a)=>\' bash -c "echo date"; cat echo
這次解析器先停在 = 號上(由于 (a)= 不是一個(gè)有效的 Bash 表達(dá)式),但至關(guān)重要的是把 < 號留在了解析管道中臣缀。接下來的轉(zhuǎn)義符 \ 會(huì)使解析器在重定向命令之間插入一些空格坝橡,最終導(dǎo)致了后面的命令變成了一條重定向命令:
date > echo
效果
CVE-2014-6271 導(dǎo)致遠(yuǎn)程任意代碼執(zhí)行
CVE-2014-7169 導(dǎo)致任意文件讀寫
實(shí)現(xiàn)方式
通過 CURL 等工具自定義 HTTP Header 后發(fā)送給服務(wù)器
參考資料:
Shellshock
Shellshock漏洞回顧與分析測試
Drown跨協(xié)議攻擊TLS漏洞分析
SSL Labs
不僅是Https!OpenSSL“心臟流血”漏洞深入分析
Padding Oracle
CVE-2014-0160
CVE-2016-0800
Automated Padding Oracle Attacks With PadBuster
DROWN Attack
Exploit Heartbleed