應(yīng)用安全的工作有時候感覺就像在“和以往一樣的工作”與“該死的一天來了”之間反復(fù)橫跳。而當數(shù)字化轉(zhuǎn)型在每個部門都在加速進行,遠遠超過安全控制的節(jié)奏的時候,平衡就更加困難了。
打斷這個加速化進程的問題點基本都發(fā)生在網(wǎng)站開發(fā)和安全環(huán)境。二十年前,一個“典型”的網(wǎng)站都是為了發(fā)布信息的靜態(tài)頁面。而現(xiàn)在,則是由一個動態(tài)的網(wǎng)站應(yīng)用處理極其敏感的數(shù)據(jù),并執(zhí)行關(guān)鍵操作。
敏感信息持續(xù)通過幾乎每個網(wǎng)站,從而讓攻擊者有了竊取并販賣這些私人信息的完美機會。事實上,這樣的攻擊已經(jīng)相當成功了,而被泄漏數(shù)量的增長速度也在持續(xù)攀升。最近的數(shù)據(jù)顯示,2020年第一季度泄露的記錄相比2019年第一季度高出了273%。
現(xiàn)在,那些在應(yīng)用安全工作的人已經(jīng)知道傳統(tǒng)安全系統(tǒng)(比如像WAF這種服務(wù)器端和網(wǎng)絡(luò)安全的產(chǎn)品)無法防范針對網(wǎng)站的數(shù)據(jù)流出攻擊。攻擊者會利用客戶端側(cè)的安全盲點,將惡意代碼注入公司的網(wǎng)站,而不需要先成功攻擊他們的第一方服務(wù)器,這就引出“定時炸彈”——網(wǎng)站供應(yīng)鏈。
代碼相關(guān)性的收益和風(fēng)險
現(xiàn)在典型的JavaScript開發(fā)流程總是依賴于開源組件,來加速發(fā)展。這意味著公司在他們的網(wǎng)站上會使用幾百個外部源代碼。這個情況下,公司對代碼幾乎完全沒有管控能力,最終絕大部分會選擇信任他們使用的代碼模組可靠且安全。但問題是,這些模組可能也會依賴于第三方代碼,導(dǎo)致代碼相關(guān)性變得更為復(fù)雜。
代碼的相關(guān)性越多,攻擊面也就越大,也就使得攻擊者更有機會控制相關(guān)性中的一部分,并對網(wǎng)站頁面進行惡意代碼注入。
如果這個網(wǎng)站供應(yīng)鏈攻擊看上去簡直在復(fù)現(xiàn)SolarWinds事件,那是因為SolarWinds本身就是一個展示供應(yīng)鏈攻擊如何能達成爆炸效果的完美例子。
最近,攻擊者在PHP Git的官方代碼庫里植入了遠程執(zhí)行后門。不過,這個惡意代碼在本地代碼檢查中被發(fā)現(xiàn),因此它沒有進入官方的更新包中。然而,它顯現(xiàn)出網(wǎng)站供應(yīng)鏈當中的另一個安全缺陷:如果惡意代碼被隱藏得更好,它們能否進入公開發(fā)布的更新包中?這種事情以前就發(fā)生過,比如Copay事件中,惡意代碼影響了數(shù)個版本的產(chǎn)品(加密貨幣錢包),并且竊取了用戶數(shù)據(jù)。
另一個事件能讓我們意識到,事件更加糟糕。安全研究人員Alex Birsan通過利用相關(guān)性混淆的設(shè)計漏洞,成功攻擊了35個科技公司,包括微軟、蘋果、PayPal等。盡管說Alex的行為只是出于道德安全研究的目的,但是攻擊者們很快復(fù)制了這個攻擊方式,并試圖攻擊其他還沒開始防御的公司。
這些例子不過是冰山的上層。網(wǎng)站供應(yīng)鏈廣而且深,平均每個網(wǎng)站應(yīng)用包含超過1,000個外部源代碼組件。而且,最近的研究顯示,安裝其中的一個代碼包意味著間接信任79個第三方代碼包和39個維護人員——我們可以猜測一下現(xiàn)代網(wǎng)站應(yīng)用的攻擊面到底有多大。
減少潛在危險
那么,有那么多不確定的組件,同時越來越多的人認為網(wǎng)站供應(yīng)鏈會是一個必然發(fā)生的災(zāi)難,能做些什么?
這個問題的答案可能是使用深度防御,在服務(wù)器端和網(wǎng)絡(luò)安全管控之上,進一步部署更好的供應(yīng)商管理能力,并加上一層客戶端防御。用新的協(xié)議審查和管理第三方供應(yīng)商在越來越重要,盡管說審查數(shù)百個第三方部件相當困難。另外,審查只能給出某個時間點上的代碼狀況,卻無法識別突然被感染的原正常代碼。因此,需要在客戶端運行時額外加一層安全管控,檢測和控制可疑的代碼行為。在這個等級實現(xiàn)管控,能產(chǎn)生消耗的是數(shù)月,還是是實時,發(fā)現(xiàn)并解決因網(wǎng)站供應(yīng)鏈產(chǎn)生的數(shù)據(jù)泄露。
這些都是組織能夠采取的減少網(wǎng)站供應(yīng)鏈暴露的措施。至少,希望組織和機構(gòu)別到最后一秒才開始進行這些操作。