Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
到最后,c0debreak打開了一個“機密文檔”給我看。這是一個宅男積累多年的秘密,我瞇著眼好奇地湊過去,里面密密麻麻的都是。。。。對最新網絡安全技術的研究筆記。
“我讓你給我展示一下和工作無關的‘業余愛好’,XX都X了,你就給我看這個?”我怒道。
“對啊,這就是和工作無關的業余愛好啊。因為這些技術現在都還用不到工作里?!?c0debreak一臉呆萌。
瞬間,我特別想見見那個馬上就要和他結婚的妹子,據說她也是個程序員。我強烈懷疑他們的蜜月旅行會是:在用馬爾代夫海灘做桌面的電腦上敲代碼。
c0debreak,百度安全工程師,一個比百度工程師還像百度工程師的百度安全工程師。其實,c0debreak還有另一個身份,那就是OpenRASP項目負責人。
OpenRASP,看到這個名字時,估計很多人也像我一樣升騰起不明覺厲的感覺。(我覺得凡是名字里帶有五個大寫字母的項目都挺有前途,例如:CPPCC,不知道的童鞋可自行百度)其實,OpenRASP是一個百度安全旗下的免費開源安全項目,全稱應該是:Opensource Runtime Application Self-Protection開源實時程序自保護系統。它隸屬于百度OAESE智能終端安全生態聯盟,是其中五大開放技術之一。
作為一個把復雜科技講簡單的媒體,我總結這套系統的功能就是——檢測網絡入侵,從而發現漏洞。
在這類功能的系統中,最著名的要數 WAF,也就是Web應用防火墻。WAF被設置在應用的外部邊界上,可以通過特定的規則和模式識別出惡意請求,并且把它們拒之門外,是一種被廣泛應用,連程序員家的貓都知道的網絡安全系統。
我們就是想顛覆 WAF!
難以想象,一個不愛說話只對你呵呵笑的宅男工程師在沉默了五秒之后突然認真地看著你,沒有一點過度直接說出這么一句“豪言壯語”。
一、顛覆 WAF的 OpenRASP到底是神馬?
在 c0debreak看來,傳統WAF存在一個非常大的問題,概括起來就是:“因為不夠深,所以不夠爽”。為了對比二者的技術實現方式,下面我們以一幢辦公樓的安保來舉個例子:
WAF——門衛模型
WAF代表大樓的門衛,很遺憾這里的門衛并沒有朝陽大媽那種柯南般的智慧。每當走進一個人,他只會攔下來問:“來者何人?”并且把這個人的形態樣貌和手里的冊子(特征庫)一一核對。如果不是“在案”的壞蛋,就一律放行。
雖然特征庫在不停升級,但是從壞人的角度來看,這樣的門衛并非無懈可擊。如果我是小偷,我今天來的時候可以戴一頂紅帽子,明天可以換一頂綠帽子,后天甚至男扮女裝。對于技術水平一般的 WAF來說,很可能“穿上馬甲你就不認識我了”。而智能程度高一些的WAF,可以利用技術識別出一些“變裝”伎倆,但這時對方同樣可以用“整容”甚至“換人”的方法,加大成本再次騙過門衛的眼睛。
如果想有效地阻止壞人,WAF必須以非常高的頻率升級特征庫,但即使是這樣,它仍然無法擺脫兩個弊端:1、永遠追在敵人后面跑。2、高居不下的誤報率。
OpenRASP——管家模型
RASP技術,干脆選擇了另一個思路,它把防護系統跑在每一個應用內部。還是以大樓作比喻,這相當于在每個辦公室里都設置了一位管家(就是上圖這個Superman)。無事不登三寶殿,壞人進入大樓,肯定是要做壞事的。所以RASP的思路是:你長了一張什么臉我并不關心,重要的是你有沒有在房間里做出“攻擊動作”。
c0debreak給我看了OpenRASP的技術文檔,里面列舉了25類“攻擊動作”。
這其中包括:數據庫 SQL注入、數據庫慢查詢、任意文件上傳、敏感文件下載等等。。。
每一個攻擊場景,都有具體的代碼描述,而這種描述,相比 WAF上繁復的規則要簡單許多。正如世界上的騙局有千萬種,但最后無外乎是把你口袋里的錢掏出來;世界上越獄的方法有千萬種,但最終的動作都是離開牢房;漢子們對姑娘的花言巧語永遠在翻新,但最終目標都是【此處省略三個字】。只要你能站在事件的邏輯中心,分辨出真偽善惡就相對容易很多。
利用對“攻擊動作”的判斷,OpenRASP可以比較精準地揪出惡意攻擊行為,有了惡意行為,就可以由此回溯,找到未被發現的漏洞。
二、OpenRASP厲害在什么地方?
如果不考慮技術實現的難度和成本,顯然為每間辦公室單獨設置一個管家比在大門口設置門衛的模式更為安全,因為管家們可以看到門衛看不到的“詳情”。類比到 WAF和OpenRASP上,這意味著兩種安全系統可供判斷的信息量是不一樣的。
WAF掌握的是軟件的“入口流量”,
而 OpenRASP卻掌握了內部所有動作的“上下文聯系”。
這同樣可以用一個例子來說明:
在 WAF所代表的“門衛模型”中,如果一個人帶著錘子進入辦公樓,門衛無權攔截他,因為這個人并沒做什么傷天害理的事情,而且依照規章,帶錘子進入辦公室也未嘗不可。
在 OpenRASP所代表的“管家模型”中,同樣還是這個人,進入辦公室之后,卻猛地用錘子砸向文件柜上面的鎖,那么毋庸多言,管家上來一個掃堂腿撂倒便是。
你看,之所以門衛不敢攔下這個拿錘子的人,就是因為他不掌握這個人接下來的行動信息。而房間里的管家,卻是有充足把握做出判斷的。
實際上,OpenRASP身處應用內部,還有諸多的好處。為了說明OpenRASP技術的優點,c0debreak用了四個關鍵詞:
1、誤報
廣義的黑客“攻擊”,應該包含兩個方面:1、掃描;2、實際進攻。這大概對應著竊賊的“踩點”和“盜竊”兩個步驟。
這里有一個重要的認知:“踩點”本身是不違法的,甚至對你來說是不用在意的。
為什么這樣說呢?看過阿凡提的叔叔阿姨們應該記得,有一集講的是盜賊挨家挨戶踩點,最終選定了幾家作為盜竊對象,并且在門口標記了記號準備晚上“光臨”。(當然陰謀被神勇的阿凡提發現了并且把每一家門口都畫上了同樣的記號)
科普一下竊賊在你門口做標記的含義
我想說的是,你家大門被各種人打量,并不意味著你一定會被盜。說回黑客攻擊,借助自動化工具,黑客進行的掃描行為可能是實際進攻行為的萬倍或億倍之多。這是一種典型的“廣種薄收”的策略,絕大多數掃描僅僅停留在掃描。如果你的系統沒有攻擊價值,或沒有他掌握的漏洞,黑客根本就不會對你采取下一步動作。
有了這個背景知識,你就可以進一步感受 WAF和OpenRASP的區別了。
c0debreak給我舉了個栗子:
如果有人掃描了一個根本不存在的路徑,這很可能就是自動化程序進行的掃描,產生威脅的可能性非常小。但是由于 WAF不掌握應用內部的信息,它沒辦法判斷掃描的危害性有多大,因此保險起見只能報警。
這時 OpenRASP的優勢就非常明顯,它知道應用內部的路徑,所以就會選擇不報警。
這就是 OpenRASP誤報率低的原理之一。
2、兼容
如果你看過《唐人街探案2》或者更早的《不見不散》,你可能記得里面都出現了中國人教美國警察說漢語的細節。為啥美國的警察要學說漢語?很簡單,因為作為安全保衛者,需要和你的被管理者有語言交流。
一個正常的應用,在URL里面用“&”來分割請求參數,但是,在有些語言中,也可以用“;”來分割。如果你不知道參數還可以這樣寫,那么你一定會漏掉一些攻擊的代碼。
c0debreak說。
還是之前的原理,WAF存在于應用之外,它不知道也不關心應用本身是什么語言寫成的。這就很難完全兼容后端應用的特性,而 c0debreak和團隊,根據Java、PHP等每一種語言來獨立開發。這雖然會耗費很多時間和精力,但是換來了非常好的兼容性。
3、應用熱補丁
正如之前所說,同一類漏洞,在黑客手里可能被披上各種偽裝來使用。這些相似的攻擊方法,在 WAF看來卻沒有內在聯系,對于每一種都要逐一添加規則。其實,這樣做的最大問題并不在于“笨”,而是在于“慢”。
一旦黑客成功突破進入系統,就有可能迅速安插后門。后門設置成功,就相當于多了一條供他來去自由的密道,根本不用再走大門。WAF再想發現他的難度就大大增加。
而 OpenRASP在應用內部,把攻擊動作抽象成為一種“OGNL表達式”,大意就是透過現象看本質,任你千路來,我只一路去。只要是利用原理相同的攻擊手法,無論外表怎么翻新,都可以被直接識別。
這就是 c0debreak所說的“應用熱補丁”,從某種程度上說,它可以防護“未知攻擊”。
最近三年,Struts漏洞被爆出三十多個,但是針對這些漏洞的利用方法,其實都收錄在我們的25條攻擊套路之內。根據我們的測試數據,是完全可以攔截的。
他說。
4、安全編碼
既然把 OpenRASP比作是“辦公室”里的管家,那么除了“抓賊”的作用以外,他一定還有幫你做好內部安全規范的作用,比如機密文件不能隨意放置,不要把鑰匙掛在鎖上等等。。。
在企業服務器里,這種情形同樣存在:
數據庫查詢的時候,有哪些字符串的拼接是不能出現的;哪些敏感的函數是不能讓數據庫自己使用的,等等這些編碼規范問題造成的漏洞,應該在研發階段就消滅在萌芽里。如果 OpenRASP被嵌入在應用里,隨著系統開發流程,這些錯誤都能被警告和糾正。
c0debreak說。
另外,OpenRASP還可以輔助服務器調整安全基線,例如服務器的某些安全策略是不是被開啟,是不是存在弱密碼等等問題。
從這幾點來看,OpenRASP確實很有前途。
三、“OpenRASP”的“Open”
其實,有關 RASP的理念,早在2014年就已經被提出,并且被世界頂級咨詢公司Gartner列為應?安全領域的“關鍵趨勢”。
這就讓我想到兩個問題:
1、為什么四年以來,RASP仍然沒能取代WAF的江湖地位?
2、百度安全現在推動這種技術,是否有前途呢?
這兩個問題,還真不太好回答,不如來看三個小故事。
1st
CPU性能損耗20%。
“臥槽!”c0debreak看著這樣的數據,內心其實是崩潰的。
此刻是2017年9月,這就是OpenRASP最初版本的性能。
其實他內心比誰都清楚,性能本來就是 RASP技術相比傳統WAF的最大劣勢。畢竟在每個應用內部都強勢安插了那么多“內線”,這些進程人吃馬喂,哪個不向CPU要糧餉?
一個安全進程消耗了 CPU 20%的性能,就好比你請的管家要花掉全家五分之一的收入,不用說,連我都知道不會有人買單。(不過OpenRASP是開源項目,本來就不需要花錢。即使這樣,這種指標還是意味著幫倒忙。)
他知道,自己和團隊掉進了一個所有 RASP技術開發者都曾經掉進的坑。這樣的性能指標拿出去,百度丟人,百度安全也丟人。更可怕的是,為了降低社區參與的門檻,團隊采用了之前沒人在這類產品上使用的JavaScript(JS)語言編寫了所有的檢測邏輯。以至于連可參考的前人經驗教訓都沒有。
項目上線的幾個月的時間里,團隊都在為解決這個問題發愁。走投無路的時候,他們甚至都已經決定放棄之前的所有代碼,把編程語言換成 Lua重新開發。實際上,他們已經著手開始做新的Demo了。
很巧,某日一位團隊小伙伴忽然抬起頭,用百度程序員特有的冷靜語氣對 c0debreak說:那個,我好像找到了解決的辦法。。。
他的辦法就是,用火狐最新版的 Rhino引擎替代之前的谷歌V8引擎來編寫代碼。
就是這個從來沒有人嘗試過用的 JS+Rhino組合,把CPU的性能損耗迅速降到了1%-5%的可用水平,作為RASP產品中唯一開源的一個,OpenRASP的性能開始超越市面上大多數的商業產品。這讓 c0debreak和團隊大松一口氣。因為就在幾個月以前,項目還是“生死未卜”的狀態。
2nd
此時的 c0debreak還在焦灼地等待一個“判決”。
一個月以前,他就把 OpenRASP的項目計劃書遞交領導審核了,百度安全實驗室的負責人韋韜從技術角度很快開了綠燈,現在項目就放在百度安全總經理馬杰的桌面上,等待他最后拍板。
但是一個月的時間過去了,沒有音信,c0debreak慌了:“我感覺當時這個項目要被砍了,覺得蠻可惜的?!?/p>
而另一邊,馬杰面對 OpenRASP的計劃確實有些猶豫。但讓他拿不定注意的最主要原因,不是“RASP”,而是“Open”。
久經沙場的安全“老炮兒”馬杰非常明白,要運營一個開源項目,靠的可不是頭腦一熱。
首先,開源項目需要投入很大精力來宣傳和經營,如果發出去就不管了,那么命運肯定是死路一條,這些年輕人是否能堅持下去是個未知數。
其次,開源項目是免費的,需要通過建設生態來實現效益,而 OpenRASP團隊沒人有開源項目的經驗,未來要面對的挑戰確實不小。
但是,沉默寡言的 c0debreak在這件事上表現出少見的堅持,他三天一個表決心,五天一個問進度,一副赴湯蹈火永不言敗的姿態。
縱然有所推遲,但馬杰最終給這個年輕人投出信任票;c0debreak拿到批復,沒有多說一個字,火速開工。這是一個典型的屬于百度的溫情故事。
3rd
其實“開源”兩個字,很能代表最近兩年百度身上發生的變化。
從開源深度學習平臺 PaddlePaddle到開源自動駕駛平臺Apollo,看上去百度要在開源這條路上越走越遠了。
OpenRASP也是這條路上的一份子。
某種程度上說,一個開源項目的運營,靠的不僅僅是核心技術團隊,而是認同這個項目的社區中的每個人。
除了技術開發本身,讓這個項目獲得更多的認同,也是 c0debreak迫切要做的事情。
他在百度內部各個部門“奔走呼號”,先說服幾個部門灰度測試了OpenRASP系統;幾個月來,他還在公眾平臺上不斷發布OpenRASP的技術解析文章,“以死相逼”讓身邊的技術大牛轉發宣傳;他甚至找來一些比較成功的開源項目,從他們的代碼提交記錄里一點點學習運營開源項目的經驗。
功夫不負有心人,百度安全實驗室老大韋韜轉發的一篇文章引起了OWASP(開放式Web應用程序安全項目組織)的關注,幾天后,OpenRASP的介紹出現在了OWASP的網頁上。
也就是在這些日子,OpenRASP的技術交流QQ群不斷涌進來很多人。c0debreak馬上帶著三個同事客串客服,忙得不亦樂乎。
一開始人們問的都是怎么安裝怎么配置的問題,到后來,問題就變成了支持什么型號的服務器,支持什么架構。項目主頁上用于點贊的“Star”按鈕,也開始有人點擊。
OpenRASP項目在GitHub上的主頁
幾個月的時間里,c0debreak和同事每天盯著Star的個數。每多一個Star,他們都感覺爽爆了。
2018年2月4日,對他和團隊來說是一個值得紀念的日子。這一天,OpenRASP收到了第一份“Pull Request”,也就是代碼合并請求?!吧鐓^中有人對項目的代碼進行了升級,并且想合并到主代碼中,這意味著有人開始主動為社區做貢獻了,開源的意義真正被體現出來了!”他興奮地說。
就在一個星期以后,團隊又收到了一封來自西班牙的郵件,那位程序員用英語詢問 OpenRASP什么時候可以支持PHP語言。c0debreak滿懷激動地認真回復了郵件,要知道,他們甚至還沒來得及把技術文檔翻譯成英文,目前只有官網上有一些簡單的英文Q&A。
c0debreak覺得,這個項目的發展甚至超過了自己最好的預期。短短幾個月時間里,唯品會、蘇寧、攜程、科大訊飛、綠盟等等大企業都已經開始內部測試這套系統,并且根據這套開源代碼定制自己需要的版本。
和這些用戶交流,詢問他們的意見和需求,現在成為了 c0debreak重要的工作之一。
他盯著屏幕上已經累積到300多的“Star”,嚴肅地說:“看來未來幾年,我都要全心投入在這個項目上了。”
在 Github頁面上,標注了項目的路線圖和里程碑
三個故事講完了。
可能你心中的疑問被解開了,也可能你有了更多疑問。
c0debreak和百度安全的同事們創造了OpenRASP,并且奮力讓它成長至今。他們想要的東西很簡單,那就是讓更多人了解OpenRASP,認可OpenRASP,愿意為OpenRASP做點什么。
打開網絡空間搜索引擎 Shodan,里面已經可以查到很多第三方公司利用OpenRASP做的安全項目。至于他們是誰,具體怎樣使用OpenRASP,c0debreak并不了解,但他感到很幸福?!皾櫸锛殶o聲”,這正是開源的魅力所在。
在 Shodan上,搜索到“OpenRASP”的地區,就會被標為紅色,現在地圖上只有四個國家。我問 c0debreak未來的計劃,這個技術宅楞了一下,然后把手一揮,說:“全變成紅色。”
我突然明白,對于開源世界來說,最好的姿態莫過于:
心懷夢想 信馬由韁
再自我介紹一下吧。我叫史中,是一個傾心故事的科技記者。我的日常是和各路大神聊天。如果想和我做朋友,可以關注微博:@史中方槍槍,或者搜索微信:shizhongst。不想走丟的話,你也可以關注我的自媒體公眾號“淺黑科技”。
月26日,GOSIM Conference、IstioCon、ONE Summit Regional Day、OpenJS World、阿里云云原生開放日、Kubernetes貢獻者峰會等六大系列、十一場活動在上??鐕少彆怪行呐e行,近百位國內外嘉賓圍繞移動和互聯網、Rust語言、人工智能、汽車和機器人、游戲和元宇宙、服務網格、網絡和邊緣計算、JavaScript等開源和云原生領域進行深度分享,標志著為期三天的KubeCon + CloudNativeCon + Open Source Summit China
日,Mybridge 對 Github 上將近 250 個 JavaScript 開源項目進行了排名,并從中挑選出了 Top 10,旨在幫助開發者能找到一個對自己有所啟發的有趣的項目。
Top 10 的項目包含了日歷、驗證、人臉識別、3D 游戲、貨幣值、熱鍵、走馬燈效果、AWE Amplify、VS 代碼主題以及 Magenta.js。
▌No.1:Tui.calendar 1.0 版
Javascript 日歷,可以滿足你的所有需求。
▌No.2:Ow
為人類設計的的函數參數驗證。
▌No.3:Picojs
用 200 行 Javascript 編寫的人臉識別庫。
▌No.4:Babylon.js
完整的 Javascript 框架,可以通過 HTML 5 和 WebGL 創建 3D 游戲。
▌No.5:Dinero.js 1.0版
該代碼庫支持 immutable 對象,用于創建、計算和整理貨幣值。
▌No.6:Hotkeys 第3版
一個強大的Javascript庫,可以捕捉鍵盤的輸入,且沒有任何依賴。
▌No.7:Glide 3.0
JavaScript ES6 實現的幻燈片和跑馬燈效果,不包含任何依賴。優點有:輕量級、靈活性好、速度快。僅為幻燈片做的設計,恰到好處。
▌No.8:AWS Amplify GraphQL客戶端
用于云服務應用程序開發的聲明式 JavaScript 庫。
▌No.9:Subliminal
面向 JavaScript 的個性化簡約 VS 代碼主題。
▌No.10:Magenta-js
在瀏覽器中使用機器智能生成音樂和藝術。
原文:https://medium.mybridge.co/top-10-javascript-open-source-of-the-month-v-may-2018-d6ccb4940fda
作者:Mybridge
譯者:彎月,責編:屠敏
征稿啦!
CSDN 公眾號秉持著「與千萬技術人共成長」理念,不僅以「極客頭條」、「暢言」欄目在第一時間以技術人的獨特視角描述技術人關心的行業焦點事件,更有「技術頭條」專欄,深度解讀行業內的熱門技術與場景應用,讓所有的開發者緊跟技術潮流,保持警醒的技術嗅覺,對行業趨勢、技術有更為全面的認知。
如果你有優質的文章,或是行業熱點事件、技術趨勢的真知灼見,或是深度的應用實踐、場景方案等的新見解,歡迎聯系 CSDN 投稿,聯系方式:微信(guorui_1118,請備注投稿+姓名+公司職位),郵箱(guorui@csdn.net)。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。