1. 程式人生 > >甲方安全防禦體系建設的隨筆(二)

甲方安全防禦體系建設的隨筆(二)

開發十年,就只剩下這套架構體系了! >>>   

甲方安全防禦體系建設的隨筆(二)

書接上文:甲方安全防禦體系建設的隨筆
我以為我寫完上文後,我未來幾年內都寫不出東西來了,所以開啟侯亮大哥的pdf重新學起來了。其實不瞞大家說,我本來這段時間給自己定的okr是重新學習二進位制安全,但是學到一個新技術的時候發現學不下去了,那就是Address Sanitizer。

Address Sanitizer的主要思路是先利用編譯過程中對程式記憶體進行插樁,然後QA對程式進行各類的動態測試和模糊測試,如果程式發生了crash則可以非常精確的得到程式各類記憶體Buffer Overflow問題的根源的一種技術手段。咦?這怎麼看起來有點眼熟呢?emmmm,這不就是web領域的IAST技術嗎?

這裡附上一片寫的非常不錯的AddressSanitizer的資料AddressSanitizer演算法及原始碼解析

IAST的技術思路和Address Sanitizer的核心思路完全一致,就是利用技術手段對執行的程式進行插樁,在完成插樁後QA展開多維度的測試,依照插樁程式碼輸出的日誌,程式設計師可以非常有效的跟蹤程式自身的問題尤其是安全問題並進行修改。想起老人的一句話來:戶樞不蠹、流水不腐,動態的審計行為能發現非常隱蔽的問題。IAST技術由於現在有不少商業化的產品了,搜尋一下PPT有一大把我就不推銷了,不想在隨筆中做廣告,因為這不道德。

這裡順便談談靜態審計行為。相較於動態的安全防護技術,靜態程式碼審計固然能規範一些編寫規範,但是這種靜態的審計行為做到頂點也只能是讓程式設計師的程式碼風格高度一致,讓程式設計師保持在一種完成填空題的狀態。有一位好友是在某銀行任職安全的,他曾經十分自豪的告訴我們圈子裡的安全友人:我們銀行的java程式碼每一個變數都能做到資料校驗!對,你沒看錯是每一個!一個數據介面的流轉過程中從輸入到輸出以及所有的中間變數都是嚴格按照流轉過程中的業務邏輯要求進行校驗的。我不禁思考:為什麼他們能做到如此的仔細?思來想去,除了嚴格的管理還有就是非常體系化的應用開發架構,每一位程式設計師都在一個高度規範化的開發體系中進行著填空題作業,程式設計師的心智負擔高度收斂到業務邏輯上,所以保證了整套體系嚴密的質量,尤其是金融應用對髒資料問題的敏感性,必須保證應用本身不可能產生髒資料以及髒資料帶來的誤差。

依照OWASP的專案測試結果,市面上最好的靜態程式碼審計產品有著一個突出的問題:過高的誤報率。其實我一直覺得,能把靜態程式碼審計做到如此高的檢出率我也是蠻佩服了,雖然超過50%的誤報率這個問題真的不忍直視....。我個人還是挺贊同這個銀行的設計思想的,利用體系化的、規範化的程式碼編寫標準同時配合某商業化程式碼審計工具的審計能力,將程式設計師編寫程式碼的規範高度統一化、規範化,而這將極大的縮減企業程式碼由於不統一帶來的隱形成本(包括重構、維護、審計)最終將業務線的健壯性達到一個工業級別標準。

我個人就職的公司2018年下半年的時候公司經營困難,公司給我下最後通牒:未來一個月就不發工資了。所以我當時出去找工作,在這一個月尋找工作的時間段中遇到一個很有意思的事情:我宣導我對rasp技術的瞭解以及rasp技術的各種好處,但是遇到的面試官有好幾個似乎都對WAF情有獨鍾,我真的當時欲哭無淚,現在回想起來自己那個時候就是個傻瓜蛋,但是當時面臨失業的危機確實壓力很大,整個人非常痛苦。

這段經歷給我很大的衝擊,一直到現在我都會回想起那段時間,接觸連續21家公司不斷地被拒絕或者面試完了無音訊,有大量的企業的hr只是看了我的簡歷留下一個已讀,甚至還遇到一個公司面試我的時候當面羞辱我。我前天的隨筆中為何提到0day以及對0day做擴大解釋,就是因為經過這個經歷我體會到了:任何一件事情都是從做基實的地方開始做起的,安全行業都喜歡說短板效應,那我們自身考慮過自己的短板嗎?一個企業會因為一個人員的“0day”被竊取商業機密,或者因為一個技術的“0day”被直接攻入資訊系統的堡壘,那我們自己呢?我們會被什麼短板給打敗?那螢幕面前的你呢?你的短板在哪裡呢?

我喜歡玩應用,我覺得應用的漏洞特別有意思,所以我思考0day的思路確實和rasp不謀而合,曾記得我還年輕的時候,在吐司上看到一篇文章,當時一個黑客提問:有沒有辦法繞過php指令碼的waf,因為那些商業化的waf實在太好繞了,但是一旦遇到應用層本身的WAF規則他就束手無策了(參考360的360_safe3.php),也是因為這件事我對rasp技術非常的著迷,自己反覆除錯並且閱讀原始碼,最後著迷到我每次面試都喜歡宣導我多麼瞭解rasp,結果發現確實是一個十分幼稚的行為。不過單純從技術來說,rasp未來會成為應用安全的標配那是肯定沒跑了,因為rasp堵住了應用的那塊短板:抵禦0day攻擊和高危漏洞的能力。一個java應用的底層程式碼被rasp修改了,整個程序徹底無法執行命令,請問攻擊者如何編寫exp進行RCE操作?一個應用對SQL構造的每一個引數都進行了正則校驗,攻擊者如何構造SQL注入?等等諸如此類的規則導致OWASP的攻擊鏈將會變成了歷史上的東西,未來甚至還能對輸入輸出的資料進行檢查,防止身份證、手機號等滿足資料敏感度的資料輸入輸出等等。所以我一直說,我們web安全工程師可以下崗了,真的沒啥要做的了,除了保證工作執行落地就可以了,哈哈。

其實看到這裡,大家會不會覺得上面那段我去年面試經歷的那段文字特別的突兀?和rasp抵禦0day和高危漏洞有什麼關係,這其實涉及到一個數據調查:去掉管理員許可權 97%的Windows漏洞可免疫 看過我前文的朋友知道,我是二進位制安全起步的,我對當時的本地溢位漏洞感到了一種特殊的感覺,就像是可以隨意控制世界那樣。同時,我對這個調查的結果也是非常的吃驚,不是因為攻擊者特別厲害,大量的攻擊事件的本質是:我們許可權用的不對。

亮哥說:內網滲透的本質是資訊蒐集。我特別的贊同,那些成功的攻擊事件不管是apt還是銀行劫匪那可都是踩點踩的好的:-)。我個人對攻擊的體會就是:如果你要獲取你沒有許可權接觸到的資訊,就是不斷蒐集資訊,然後辨析其中的問題,最終腦中逐步勾勒出一個攻擊鏈,一鼓作氣逐個擊破,達到你最終的攻擊行為的目的。那麼既然如此,我們如何正確的使用我們手中的許可權?不管是應用的許可權,系統許可權,還是你招聘的許可權?我們如何抵禦那些未知的風險?

又要談談歷史了,我會把過去的一些技術的發展線索都分析一下,保證各個技術路線的同志都能看懂我對安全的理解。

二進位制安全:
我以前做過外掛,我覺得外掛挺有意思的,就基本上是改記憶體中的核心點資料(包括可執行資料或者靜態資料)當然也有不少直接篡改cpu暫存器的值的手段,保證達到作弊的目的(其中這種作弊行為可以抽象為許可權的提升,大家仔細思考下)。大家發現沒有,外掛的本質都是對關鍵資料的篡改,這些關鍵資料的量級可能佔整個遊戲空間不到1%,但是可以讓遊戲公司痛不欲生。相對應的作業系統級別的各類提權漏洞那真的是和武俠小說似的,找到了一個高手的死穴,點一下,高手掛了....,不管你作業系統如何巨大,如何先進,在茫茫的執行邏輯中找到一個關鍵點進行篡改或者攻擊,就能直接讓這個龐然大物聽你的號令。所以,對應的反外掛技術應運而生,各種記憶體校驗,驅動記憶體保護,之後win7開始禁止無簽名驅動進入核心後,那就真的是各種大仙的表演時間了,過核心校驗,繞過反外掛的各類黑科技紛紛亮相。作業系統不管是win還是linux對於各類提權攻擊也同樣採取了措施,對各類記憶體漏洞都出了保護技術,DEP、ASLR、GS等等我們就用記憶體安全技術代稱吧,不管是windows還是linux都對許可權的管控邏輯也做了更加嚴格的保護措施,使用記憶體安全技術和增強許可權邏輯很好地限制了提權的攻擊的發生。

你發現了沒有?

攻擊的最終目的似乎沒有發生變化...

攻擊者依然在尋找那些核心點資料,並且想辦法攻擊那不到1%的資料,linux是為了那個提權後的0(root),windows是為了拿到system,外掛是為了篡改那點點資料...。

不著急,再來接著看。

web安全:
web安全我覺得已經可以說被討論的太多了,我就不獻醜了,我們就看看這幾年waf的發展歷史吧,一個充分解耦的產品,只要架設在web應用伺服器前面,就能抵擋攻擊,好好哦!但是也正是因為攻擊者實在太聰明瞭,各種繞過waf的技術層數不窮。好彩好彩,我們以後可以用rasp了。

那麼攻擊者最終是為了?

我們來看web應用執行流程中的邏輯資料被攻擊或者web應用的鑑權邏輯被越權,雖然web應用背後有大量的資料,但是一個應用漏洞發生所對應的邏輯執行資料或者一個鑑權出現問題對於的邏輯執行資料其實也只是佔整個應用資料的不到1%。

企業安全:
鄙人職業生涯中遇到好多次內鬼,有的是其他公司派來的,有的是利慾薰心把資料賣給黑產的,其實我算是對谷歌的0信任很有體會的一個人了,因為不管如何,人嘛,都是會叛變的,哈哈哈。最近幾年,很多企業都在做等保、iso27001的審計、合規工作,我覺得非常不錯,不過確實其中有不少企業真的是流於表面在執行了,因為大量企業自身對企業需要防護的漫長戰線都覺得望洋興嘆(當然也有企業是連風險識別都沒做好,都不知道風險點在哪裡)。

企業要保護的也不就是那些核心資料,以及最終保護核心資料所關聯的企業業務命脈嗎?而那些有問題的員工更是不到1%。

如果說我們把公式展開:
記憶體安全技術 == WAF防護 == 等保和ISO
請問我們的技術層面的手段層出不窮的時候,我們在企業安全建設方面真的做到了升級換代了嗎?同樣是保護那1%的核心,我們做了什麼新的舉措嗎?

記憶體安全技術從簡單的記憶體使用規範如今已經進化到了動態記憶體安全實時檢測的時代。
WAF防護我上篇隨筆中也說了,已經不是技術問題了,真的算是一個體制的問題了,囧。
可是我們在打造企業安全體系的時候,我們的手段還停留在十多年前的方針,是不是特別的有問題呢?

我們的安全技術也好安全管理也好,針對的都是我們要對核心資料執行所謂的CIA原則(機密性、完整性、可用性),尤其對企業來說這是企業執行的命脈,如果我們現如今的企業在打造企業安全體系的時候,我們是不是首先思考,我們的1%在哪裡?

對了!沒有錯!這1%就是安全圈已經講爛的短板效應!

我一直在企業的基層混,企業安全大量依賴開源,也十分依賴各種免費的安全情報,我的圈子裡的朋友都大致如此,某個安全新聞站上面有大量的開源安全系統的部署和使用教程,說實話我們現在都懶得看了,各種不維護或者bug滿天飛的所謂的安全系統部署起來到底有什麼意義?除了部署完以後用來忽悠領導自己完成了kpi,其他的意義其實一點用處都沒有,我管這個叫做自 慰防禦。

我的一個安全leader朋友和我深聊,就像我去年找不到工作的核心問題就是我的面試能力這個短板。那麼我們一個企業在構建安全體系的時候,也首先應該審視自己,我的短板在哪裡?一個企業的1%在哪裡?因為防護好這1%,很大程度上就將系統加固到了一個新的階段,現在很多體系建設寬泛而沒有重點,並且推動的難度之大令人咂舌,甚至有不少甲方安全的朋友每次到了新單位,第一件事情就是先要挖企業各種漏洞,否則難以服眾更沒有抓手,推動安全的工作簡直就像螳臂當車一樣無力,只有遇到了非常好的老大才能有久旱逢甘霖那種感覺,但是遇到這種機會的朋友猶如茫茫人海中那些獲得知遇之恩的才子一般真的是鳳毛麟角,國內大部分領導都喜歡看寬泛而漫長的防護體系,但是真的落地的程度就甘苦自知了。這也導致中國大部分安全從業者還是“一個人的安全部”的狀態,用意志力抵擋黑產的金錢誘惑和黑產從業者的譏諷,用0預算和開源防護手段抵抗著那些看不到影子的敵人。

有一位朋友是國內某大型國企的安全從業者,低薪、不被重視,但是他保護的資料是重要的財務類資料,拒絕了好多次黑產的合作邀請,用一堆開源產品在做防護,我有一種深深的悲哀,曾經很多朋友想給他介紹安全工作,但是他選擇留在那裡,他當時說了一句話我很感動:我走了,我們企業就不會再招安全了,我還是留下吧。

1%?

是資料嗎?

我認識一個好友,前幾天他告訴我,安全最大的問題是:

人。

謹以此文送給那些靠著信仰、意志在崗位上堅持的1%。
2019年4月7日,北京