如何解決 Java 安全問題,目前的應對策略都十分笨拙,往往適得其反。幸運的是,有一種新的方法可以將安全機制嵌入 Java 執行平臺——或者更具體地說,嵌入 Java 虛擬機中,進而規避一些「Big Problem」。
保證 Java 應用的安全是一個艱巨的任務,在目前的軟件開發領域,Java 程序員往往會從第三方庫導入成千上萬行代碼。導入的代碼常用于執行通用任務,如數據庫訪問、XML 處理、日志記錄等。但是如果代碼是開源的,沒有人能保證其安全性或對其進行嚴格的滲透測試。因此,漏洞可以通過「導入代碼」的后門入侵到內部系統。造成了企業對這些漏洞一無所知,攻擊者卻對它們了如指掌的現狀。
當程序中出現缺陷代碼時,攻擊者可能在后端利用 SQL 注入等方式進行服務器攻擊或數據訪問。當然,開發者培訓和靜態軟件分析工具都可以減少這類危險,但無法在應用進入生產環境后處理漏洞。因此,無需開發者干預的安全方法是更符合實際的選擇。
由第三方庫造成的漏洞典型當屬2014年初的 Heartbleed 事件。簡單地說,一個在 OpenSSL 加密庫中發現的安全漏洞,影響了互聯網上三分之二的 Web 服務器。雖然這個漏洞和 JAVA 無關,但依舊值得我們警醒。
傳統 Java 防御
Java 應用的安全防護通常基于網絡或測試,但這兩種方法都不可靠。
首先是基于網絡的防御措施包括Web應用防火墻和運行時入侵防御系統,可以為生產系統抵御外部威脅。為了避免阻塞合法的流量,這些系統必須進行微調以降低其有效性。否則,就得投入大量精力來調整,使之只允許合法流量通行。畢竟,如果授權的流量都被阻塞,真實用戶也可能被拒之門外。也不得不說,網絡級防御機制(如 IP 防火墻)阻塞流量時,終止網絡連接的方法非常笨拙。
其次是應用測試工具會分析軟件是否存在漏洞,其分析結果可能會讓開發者大吃一驚,也可能數量非常龐大,讓人難以區分哪些是關鍵問題、次要問題和誤報。此外,如果漏洞僥幸入侵成功,這些工具在系統運行時根本無法起到保護作用。
新方法:帶 RASP 的 JVM
目前,運行應用自我保護 RASP 是保護 Java 應用的新方法,在應用運行時結合應用行為(應用程序現在正在做什么)和實時情境進行實時分析。因此,持續的安全分析成為運行環境中的原生功能,系統能在識別攻擊后即時響應。由于安全功能作用于程序內部,并且具備應用行為的指令意識,RASP 避免了其他防御方法常見的誤報。
OneRASP 認為,實現 RASP 的最佳途徑是充分利用 Java 虛擬機。JVM 是介于服務器操作系統和應用之間的完整運行環境,可以實時調整應用運行時的行為,且不需要修改應用代碼。其次,因為 JVM 還控制著 Java 應用的全部 I / O,它可以阻塞未經授權的操作。最重要的是,它可以通過應用現有的錯誤處理程序,有效阻止任何入侵代碼的執行。
RASP 的 OneRASP 是基于幾乎所有主流的 JVM ,它添加了安全規則引擎來保護 Java 代碼,且無需修改應用代碼。規則引擎支持細粒度的監控,同時還控制所有的應用行為,包括文件和網絡訪問、類加載、反射、方法調用、SQL 查詢、腳本功能等,能夠自動地緩解攻擊。
監督用戶輸入
在 JVM 中嵌入應用安全還意味著可以在程序執行過程中跟蹤用戶輸入——即 「變量污點跟蹤」功能,能夠防止不受信任的用戶輸入導致的數據訪問(如 SQL 查詢)或未經驗證的敏感操作(反射)。污點跟蹤通過阻止惡意輸入從不受信任的源傳給信任源(例如從 HTTP 查詢字符串到 SQL 數據庫),實現對代碼注入攻擊(如 SQL 注入)的安全防御。
由于帶 RASP 的 JVM 可以全面阻止惡意代碼的執行,不論其來自應用內部、第三方庫還是網絡,因此戰勝零日漏洞完全不在話下。此外,無需重啟或中斷服務,安全管理員就可以為運行的應用添加新規則,沒有安全供應商的補丁也能即時阻止新發現的漏洞。
RASP 實例
Apache Struts 2 是一個用于開發 Java Web 應用的開源 Web 應用程序框架。在過去的幾年中,我們發現了 Struts 框架中存在的諸多嚴重漏洞,攻擊者可以借助這些漏洞對缺乏保護的服務器進行遠程攻擊。
為了修復這些漏洞,用戶要么等待官方補丁(可能是幾個星期或幾個月),再對補丁進行測試和部署,要么重寫代碼,再重新測試和部署應用。
然而,有了 OneRASP 后,只需應用一條安全規則,無需重啟或中斷應用,在運行時就阻止入侵代碼的執行。
眾所周知,安全解決方案總免不了誤報,對于關鍵任務型應用尤甚。RASP 能將此類風險降到最低。通過監測運行環境中的應用執行,能更細致地監測應用行為和上下文。這種方法比網絡層檢測更為精密;因此,實際部署前的性能調優與應用行為建模也更加簡單。
?
最后,盡管沒有哪種安全處理可以完全擺脫處理開銷,但將安全操作嵌入 JVM 內,再由 JIT(Just-In-Time)編譯器進行優化,可以確保最小化對性能的影響。與那些遠程調用(如 REST API 調用)應用外部服務或「工具代理」將調試代碼插入應用中的安全方法相比,本地「in-JVM」安全機制的性能優勢可謂顯而易見。
RASP 這種「由內而外」的保護方法有很多優勢。將安全方法嵌入 JVM 內部,可以確保企業關鍵代碼的可用性,同時最小化對性能的影響。這種方式還可以保護多個應用,無需要修改軟件,比添加補丁更為快速靈活。
本文系 OneAPM 工程師編譯整理。如今,多樣化的攻擊手段層出不窮,傳統安全解決方案越來越難以應對網絡安全攻擊。OneRASP 實時應用自我保護技術,可以為軟件產品提供精準的實時保護,使其免受漏洞所累。想閱讀更多技術文章,請訪問 OneAPM 官方技術博客。
本文轉自 OneAPM 官方博客