==Ph4nt0m Security Team==
Issue 0x01, Phile #0x04 of 0x06
|=---------------------------------------------------------------------------=|
|=----------------------=[ 安全幻想曲2008 ]=---------------------=|
|=---------------------------------------------------------------------------=|
|=---------------------------------------------------------------------------=|
|=--------------------=[ By axis ]=--------------------=|
|=--------------------=[ <axis_at_ph4nt0m_dot_org> ]=--------------------=|
|=---------------------------------------------------------------------------=|
我見過的大多數安全人員,都對技術有著一種狂熱,甚至是一種偏執。這種情緒在做安
全研究員的時候是非常有好處的,因為作為研究員,可能要偏執考慮到一些極端的情況。這
種鉆研精神,是光靠勤奮所無法達到的。但是在甲方做安全的話,可能更多時候需要的就不
是狂熱,而是掌握平衡的藝術。在商業利益與安全性發生沖突時,如何處理好這個平衡,是一
個關鍵。
舉一個簡單的例子來說,眼下最流行的XSS攻擊,其修補方案從總體上來說,大致可以分
為escape output和filter input兩種。對于狂熱的安全人員來說,當然是恨不得把網站全
部弄成靜態的,輸出都采用escape output,全部輸出純文本,就天下太平了。然而現實與理
想總是有差別的,首道難關就是網站肯定會有些富文本的需求。
當安全和需求相抵觸時,一定是安全給商業需求讓路。這里要避免一個誤區,就是安全
應該是為需求而服務的,而不是成為需求的障礙。其實這個觀點大多數人都心知肚明,但是
在實際操作起來的時候往往會事與愿違。
再回到富文本上來,當需求決定需要有富文本輸出的時候,狂熱的安全人員(下稱為狂戰
士吧)就只好退而求其次,要求對富文本做filter input,對其他沒有富文本的地方做escape
output。接下來問題來了,對于程序員來說,富文本往往采用了一些第三方的,或者是基于第
三方的富文本編輯器,還有的是自己實現了一個。而這些富文本編輯器,往往在考慮
xss defense的時候有所欠缺。這時候采用什么樣的策略來做filter input,就成為了新的
問題。
第一個難關就是程序員會拉上商業,一起來和狂戰士PK,說filter input很容易誤殺客
戶的正常操作,還會影響到性能。當然這小小的難關還難不倒狂戰士??駪鹗客鶗p蔑的
一笑,然后把風險推到商業上,說出了問題讓他背黑鍋之類。這種狠話一放出來,商業往往就
會退縮了,畢竟狂戰士這么個狠角色是擺在那里的。所以最后會決定讓程序員去整filter。
于是程序員簡單寫了個基于正則的blacklist,并且禁用了部分標簽,比如script??駪?br>士這時候又蹦了出來,對程序員指手畫腳,要求禁用style,因為這玩意太難控制了,黑客有幾
百種利用style的方式;狂戰士還說,基于正則的匹配這個魔法等級太低了,要換個高級魔法,
比如個語法分析器,類似html purify這種,還要有log analysis和realtime monitor功能。
一般到了這個時候,程序員對狂戰士的忍耐已經差不多到極限了,因為甲方網站很少以
安全為主要考核因素,沒人會認為一個視頻網站或者是交友網站的安全需要做的比FBI更好,
因為沒那么大的成本投入。于是程序員說要釋放這么個高級魔法需要一個團的程序員配合,
還需要召喚很長時間才能放出來,所以狂戰士的這個非常牛B的魔法無法完成。而一般在這
個時候,程序員往往會用啥性能和穩定性之類的因素來忽悠狂戰士,說這種魔法一般有一定
概率會反噬,沒整好就把自己整殘了。
狂戰士無奈之下,只好同意程序員實現一部分的魔法,filter部分過濾完整有效就行了。
做好這個之后,狂戰士還讓程序員去對沒有富文本需求的地方使用escape output。程序員
這時候對狂戰士已經忍無可忍了,因為由于以前從來沒有注意過xss這方面的問題,所以需要
escape的地方是以“千”或者是“萬”為單位的,多如牛毛。于是程序員開始消極怠工,并且開
始訴苦。這條路走不通了,狂戰士只好開始尋求更好的方案。
后來狂戰士回家睡了一覺,在夢中有仙人傳授武藝,于是馬上想到了新的辦法。第一招
是filter output,不過這個扯淡的方法根本屬于yy,因為對服務器壓力太大。第二招是使用
WAF,就是web application firewall,開個虛擬補丁,這樣程序員不補也能搞定web漏洞。不
過這樣就依賴于WAF的規則了,而且治標不治本??磥碜蛲砟莻€仙人估計是灶君一類低級的
小神,盡出餿點子??磥砜駪鹗窟€得繼續和程序員PK下去了。
可以見到,那些牛圈里的狂戰士常認為是“奇技淫巧”的XSS問題里,有這么多頭疼的問題。
簡單的問題變得越來越復雜。
安全是一個持續的過程(process)。既然是過程,就會有第一步、第二步 ... 第N步,有
一個持續的概念在里面,不能今天整了,明天就不管了。今天的安全并不代表明天的安全,新
的技術和應用在不斷發展,就會不斷帶來新的問題。經??吹揭粋€升級反而把漏洞升級出來
的例子。所以安全是一個持續的對抗過程,hacking與anti-hacking的過程,廣義來說,更是
一個弱化風險的過程。
很多BOSS往往都會這么問狂戰士:我上了這個720安全衛士是不是桌面安全就不用管了?
我上了這個賣紅茶IPS是不是就能擋住所有刺客入侵了? 狂戰士這時候很無奈的說:不行,還
是有很多trojan和rootkit可以bypass主動防御,很多shellcode和0day可以anti IPS。 于
是BOSS很生氣的說: 那我花這么多錢買這個做啥? 狂戰士一般會忽悠他說:上了這個可以解
決90%的攻擊。 于是BOSS會很不滿意,讓狂戰士出技術分析報告,一定要有充分的理由才行,
狂戰士往往要面對這種煩惱。
其實BOSS的這種觀點是一種急功近利的想法,沒有認識到安全是一個過程,并且是一個
持續改進的過程。不是買個box就能解決問題的。沒有100%的安全,有漏洞的地方太多了。
經常有魔法師用木桶原理來闡述安全問題,但其實很多時候,連木板在哪里,到底那塊木板才
是短板,都沒有一個很清晰的認識,因為很多時候根本無法量化,所以狂戰士的工作經常陷入
誤區。板子太多了,系統、網絡、用戶、應用、數據、桌面......
放眼看去,全是短板,每塊板子都能讓刺客或盜賊輕松的進來,偷走核心數據或者弄攤網
站然后揚長而去?;蛘吒鞣N短板互相組合,讓問題變得更加撲朔迷離。
前面說的WAF就是一種比較功利的做法,雖然廠商經常會蹦出來說這玩意是需要有專人
維護的,也是一個持續的過程。但實際上很多購買WAF的用戶都沒有好好的去做這個過程。
其實WAF、IPS最大的軟肋不是在沒人跟進上,而是在于其是串聯的網絡上的,特別是開了虛
擬補丁的阻斷模式的時候。這對于高可用性的應用來說,絕對是無法忍受的。沒人敢背這個
誤殺的黑鍋。要是因此導致了PV下降,可能老板就要喊到辦公室去喝茶了。不過WAF也不是
完全沒用,如果能夠用好的話,對于網站還是還是很有幫助的,至少在monitor和攻擊流量分
析上起著積極的意義。不過前提是用好。
剛才說了安全是一個過程(Process),其實有人跟進這個過程還不夠,下面還要重點說說
深度防御的思想。經??吹結Y小說的作者在寫到黑客攻防的時候,說到XXX在xx分鐘內就突
破了N道防火墻,N大于100;變形金剛里也這么有這種場景。其實這純粹是扯淡,沒事整那么
多防火墻做什么,無端影響了可用性。不過YY作者深度防御的理念還是正確的,只是他不知
道那玩意不應該單純叫防火墻,要想表達這個思想,可以整個專業名詞,比如:多層防御體系。
這樣裝B就可以裝的比較像樣了。舉例來說,可以在應用層校驗用戶輸入數據,DB層面檢查每
條sql,操作系統上細分權限,服務最少化,網絡上防御arp spoof,加密傳輸通道,做好ACL…類
似措施還有很多,防御的方案交叉層疊起來,就能起來一個比較好的保護效果。
不過偏偏還有不識趣的,比如前面的很多程序員都會說,我都已經做了filter input,還
要escape output做啥。狂戰士一般聽到后會有想要狂化的沖動。按耐住狂化,告訴程序員,
說filter input可能會做不干凈,會被bypass,畢竟如果遇到一個手執絕世0day(bypass
filter)的9級刺客,什么牛B的防御魔法都擋不住,所以能escape output的地方,最好escape
掉,這樣最干凈。可是即便是這樣做好了,還是有些會有很難處理和發現的地方,比如在DOM
里的XSS,比如在JS里面一些寫的很BT的地方,等。這些只能靠肉眼去看了。PK還得進行下去。
但是程序員還是不能很好的理解,他們跑出來說:我這里做了完善的access control,只
有管理員才看的到,這里就算有注射有跨站就隨他去了,不需要修復。想偷這種懶的人其實
不在少數。這種想法違背了深度防御的思想。先姑且不論如果管理員密碼泄露,或者管理員
是個內鬼的情況。如果刺客通過注射拿到了管理員密碼,或者是直接通過XSS和CSRF來對后
臺進行注射,那么前面的access control就完全沒作用了。
在一定程度上,是可以容忍風險的存在的,但是從長期來看,這種做法是非常不可取的。
比如有的管理員會說防火墻只允許80端口,那么RPC漏洞或開其他端口的應用漏洞是否就可
以不補了。也許一時來說是沒什么問題,但是如果放置不管將導致沒有人來維護漏洞,也許
哪天的防火墻策略變更,或者來自內部系統的威脅,都有可能導致當時看起來無害的漏洞被
利用。而這種做法的一個后果往往是難以檢查原因,就是說咋死的都不知道。所以這又回到
了開始的話題:安全是一個持續的過程。
在灌輸完深度防御的思想給程序員以后,狂戰士又被另外一種程序員打擊到崩潰了。面
對滿目都是紅色的掃描報告,他們說:我這個xxx ftp沒漏洞,除非狂戰士可以證明黑客能搞
進來拿到shell。一般狂戰士聽到這種要求,狂化的概率在80%以上。首先,不是只有能拿到
shell的才叫漏洞。一個dos可能會造成業務的中斷,一個infomation leak可能會為后續攻
擊帶來便利,等等。
面對scan report以及CVE查詢出來的漏洞,大部分都是沒有現成的exp能夠利用的,而且
要利用漏洞可能有各種苛刻的條件,比如要求本地交互shell啊,或者要求有帳戶之類。而更
多的時候,漏洞根本連細節的都沒有,只有一個漏洞公告里一個簡單的劃分critical,標紅。
就算有exp,可能還要考慮到exp的穩定性和成功率、語言版本啥的,打過去也不一定能成功。
更何況狂戰士無法處心積慮了為了POC給程序員看,而花費大量的精力來追求一個可能沒有
結果的漏洞。
但是無法POC不代表就沒有風險了。我們的目標是要保證一個系統長期的在任何情況下
都能安全運行,機密數據不會外泄,業務不會中斷。所以這種程序員犯的錯誤就是偷換了概
念,把威脅范圍縮小了,用個體來代替全局。很多時候威脅可能來自內部,可能來自誤操作,
可能來自其他的風險。要說服這種程序員很辛苦,只能夠靠長期的“忽悠”,來慢慢感化他們,
要是運氣好還能做出一兩個POC來震撼下他們,劉震撼(ZhenHan.Liu)就是為此而生的。佛曰:
我不下地獄誰下地獄。
作為一個優秀的狂戰士,往往要有相當程度的mission impossible的修為。很多時候,
需要為瀏覽器漏洞、操作系統漏洞擦屁股,不然最后吃虧的還是自己的用戶。面對釣魚和詐
騙,很多時候那些認為web安全是“奇技淫巧”狂戰士們認為解決方案是impossible的,認為
no patch for stupid。比如phishing,誠然,如果有一個一勞永逸的方案,那么這種完美魔
法要是放出來了絕對可以獲得圣階魔導師的稱號。但是YY歸YY,現實歸現實??駪鹗總兒茴^
疼這種問題,但是卻不得不去面對它。
魔法最終還是放出來了,可惜不完美。目前anti-phishing的魔法,有整到瀏覽器里內置
對抗的(IE7/8),也有瀏覽器toolbar、擴展的,有在IM里做過濾的,還有窮舉malicious sites
的,更有發動人民戰爭來維護一個blacklist的,其難度和成本從低到高什么都有,不過基本
都無法一次性解決問題。比較有創意的魔法屬于yahoo發明的sign seal,基于認證機器的原
理來識別真實網站,不過這個方法的缺陷在于需要長期教育用戶,實際使用效果不一定好。
yahoo還整了個domainkey技術來在郵件里對抗phishing,不過這個缺陷更明顯,需要郵件服
務商支持。yahoo的狂戰士挺有想法的,就是太理想化了一點。
說到安全世界的另外一股強大力量不能不提教廷,這個宗教從精神上統治了安全世界,
一群群紅衣主教們整出來了一堆標準、規范比如BS7799之類來幫助狂戰士們更好的忽悠他
們的BOSS。其實標準是死的,主教們的出發點是好的,不過這些標準啥的就和秘籍差不多,狂
戰士們以為他們讀明白了,其實很少人真正讀懂了。那玩意如果拿來忽悠BOSS們確實是一套
套的,但用在實處則有一個本地化的過程。必須要把標準之類的東西和實際情況結合起來,
不然就只能停留在忽悠的層面上。
最能體現問題的出在編碼規范上??赡苡蠳個權威的機構都出了他們自己的code規范,
或者某些狂戰士傭兵團(安全公司)也自己整了套。不過在具體使用的時候,很多狂戰士都是
拿了一套去用在所有的公司身上,其實這樣的結果就是到最后沒有程序員遵守用那玩意,因
為在實際情況中往往不好用。每個公司都有自己的體系、環境和編碼習慣。系統的designer
和architect只要不是小白一般都或多或少的會考慮點安全風險,規范只有本地化以后才能
很好的用起來,不然絕對會水土不服。所以要是再遇到什么安全公司拿標準、規范來忽悠的
時候,狂戰士們就要睜亮了眼睛了!
胡侃瞎吹了這么多其實也沒說到重點,不過重點已經不是本文要講的事情了,想要講的
東西還有很多,也許以后會陸續寫出來??駪鹗渴欠莺芎玫穆殬I,希望有更多的狂戰士甚至
是半獸人朋友能夠加入我所在的狂戰士傭兵團!
-EOF-