應用實時安全防護探索
隨著數字化轉型進程的不斷加快,應用程序安全作為安全防護關鍵一環,日益成為企業安全運營關注的焦點,運營人員需要為應用程序提供最佳的安全保護。當前常用的安全防護措施被視為一種附加安全層,它通過增加防御機制來保護應用程序,然而應用程序安全僅僅依靠外部加固安全解決方案和網絡安全措施來保護是不夠的,總結G行網絡攻防演習經驗,我們開始關注探索運行時應用程序自我保護(RASP)對于應用程序的保護。RASP技術可以實時地檢測和阻斷安全攻擊,確保應用程序的運行連續性同時保護其安全性。本文旨在探討運行時應用程序自我保護的工作原理、優勢和不足、實施和維護方法。
現狀分析
G行基于分層分級安全防護原則構建安全防護體系,建設信息安全運營指揮中心,縱深部署3大平臺:態勢感知平臺、安全數據湖和WEB應用防火墻,以平臺能力、可視化能力、安全資產能力、人員能力建設,開展全天候安全威脅監測和運營處置工作,實現及時預警、瞬時響應處置,保障業務和系統安全。
WEB應用防火墻是針對WEB防護、網頁保護的安全防護設備,主要防護功能基于流量規則的防御,存在一定誤報率和繞過風險,而RASP技術防御是根據應用代碼運行態請求上下文,在惡意攻擊代碼被執行前,進行有效識別和攔截。同時,隨著應用分布式演進導致應用模塊數量不斷增加,應用程序和中間件安全運維的壓力逐漸增大,傳統的基于已有規則的應用過濾和安裝安全補丁等被動安全防護手段不僅投入大而且效能低,特別是在應對0day漏洞攻擊手段時更是收效甚微,應用主動安全防護需求將成為企業安全防護必要補充。
功能介紹
傳統的安全措施通常建立在“最小特權原則”的基礎上,這意味著應用程序只能使用它具有的最小權限以避免安全漏洞。RASP技術是在應用程序層面上對安全事件進行管理,能夠實時檢測到應用程序的安全事件并對其采取相應措施的技術。這里的安全事件指在代碼級別執行安全檢查,類似代碼審計,及時檢測出異常攻擊行為。當檢測到安全事件時,RASP技術可以阻止不安全的操作、嘗試修復漏洞以及發出告警,從而保護應用程序的安全。
RASP技術可以在幾個方面為應用程序提供保護:
能夠實時檢測和響應安全事件RASP技術可以在應用程序運行時實時檢測并響應安全事件。這可以幫助安全人員在攻擊者發起攻擊之前便能夠阻止攻擊事件的發生,從而加強了應用程序的安全性。
能夠保護應用程序的數據和用戶RASP技術可以通過實時監控應用程序的行為,保護應用程序的數據和用戶。例如,RASP技術可以檢測到SQL注入攻擊并阻止攻擊,以保護應用程序的數據。
能夠自主阻斷不安全的操作RASP技術可以自主決定何時阻斷不安全的操作,而不是僅僅依靠網絡安全措施。這可以幫助安全人員為應用程序提供更好的防御措施,以保護其數據和用戶。
工作原理
各種語言均提供RASP技術實現方式,技術原理類似,下面以Java語言為例探討RASP技術工作方式。
JVM字節碼技術提供了一種實現RASP技術的方法,其可準確捕獲應用程序的運行時行為,可以很好地獲取應用程序運行時的所有細節,包括調用的方法、變量值及其他參數,然后使用這些信息可以檢測到不安全的行為,并采取相應的措施防止攻擊。
JVM字節碼使用Java-Agent實現,Agent是一個運行在目標JVM的特定程序,它的職責是負責從目標JVM中獲取數據,然后將數據傳遞給外部進程。從Java SE 5開始,開發者可以使用Java的Instrumentation接口構建?個獨?于應?程序的代理程序(Agent),用來監測和協助運行在JVM 上的程序,甚至能夠替換和修改某些類的定義。
圖1 基于JVM的RASP技術實現方法
Java Agent支持目標JVM啟動時加載,也支持在目標JVM運行時加載,這兩種不同的加載模式會使用不同的入口函數,如果需要在目標JVM啟動的同時加載Agent,那么可以選擇實現下面的方法:
public static void premain(String agentArgs, Instrumentation inst);
public static void premain(String agentArgs);
在premain函數中,我們可以對字節碼進?操作,編?RASP的安全探針。
public static void premain(String agentArgs, Instrumentation inst){
inst.addTransformer(new ClassTransformer());}
借助ClassFileTransformer接口,實現對字節碼的修改,定義一個類,實現ClassFileTransformer接口,并重寫transform方法,在這個方法中,通過ASM 技術修改字節碼。
在特定高風險類執行時,檢查其字段、參數和方法行為:如"eval", "getRuntime().exec()", "/bin/sh", "/bin/bash", "HttpURLConnection", "HttpClient", "SocketChannel" 或者SQL注入類型"select", "from", "insert", "union", ";", "and", "or", "drop", "update", "delete"等高風險行為時進行攔截和告警。
基于JVM字節碼底層實現,RASP技術可以針對以下常見的安全漏洞提供保護:
- SQL注入攻擊;
- 跨站點腳本攻擊;
- 跨站點請求偽造攻擊。
優勢和不足
優勢:
- 準確性高RASP技術是在代碼級別運行的,可以有效攔截混淆和加密的流量,從而具有更高的精度,這意味著它可以提供更高質量的保護。
- 可擴展性強由于JVM字節碼可以處理大量的Java等應用程序,因此RASP技術也可以對許多不同的應用程序進行擴展。這使得RASP技術適合在應用大規模部署使用的時候非常有幫助。
- 資源成本低RASP技術根植于應用程序,在應用程序動態運行時進行檢測和保護,基于這種實時檢測并響應安全事件機制,相對于網絡安全措施而言,具有更低的資源消耗。
- 維護成本低RASP從底層函數進行保護,監控和阻斷攻擊的最終危害行為,所以基本上不需要對RASP的規則做過多調整即可實現內建應用安全。
- 為應對0day漏洞提供幫助RASP技術能夠根據0day漏洞的提權、寫入和執行等行為特征快速識別并響應應用程序的各種安全事件,并對安全攻擊回溯追源效率較高。
不足:
- 語言兼容性限制RASP技術的實現需要編程語言和框架支持,目前Java、PHP等語言實現兼容性較好,但對其他語言需要額外開發和集成支持。
- 應用兼容性RASP技術在應用程序內部執行,應用程序不規范的運行代碼可能會導致兼容問題,同時應用投產變化如后臺WEB直接編輯命令等類似場景,需要RASP對應進行白名單注冊。
- 性能影響RASP和應用同時工作在運行時環境,和應用共享一定的計算資源,對高并發低時延的應用存在影響風險。例如對于跨站腳本攻擊(XSS)類攻擊,需要在用戶請求和服務器響應中分析是否嵌入惡意腳本,當存在龐大攻擊樣本表單的場景中,XSS的正則匹配將會消耗大量的資源。但是可以根據業務場景,控制正則匹配范圍來動態調整檢測精度和檢測速度。
實施和維護
實施RASP技術需要以下步驟:
- 確定保護目標遵循分層分級的防護策略,對互聯網邊界和重點防護系統進行篩選和重點防護,分級的保護目標對應執行不同的防護方案,同步RASP技術需要檢測的不同安全事件類型。
- 選擇適當的RASP技術G行對外業務程序主流Java程序,成熟的Java字節碼實現的RASP技術已在社區廣泛流行,如OpenRASP、OneRASP等。社區和互聯網大廠大規模部署后多年實踐和更新迭代,RASP技術在性能、穩定性和安全性控制方面表現優秀,尤其是其聯動WAF雙管齊下的場景,有效監測和攔截隱藏的安全攻擊。
- 實施RASP技術G行基于Java字節碼技術的鷹眼系統Agent已大范圍部署,可探索集成RASP功能實現。同時,Poin統一開發框架亦可集成RASP技術形成統一通用的安全防護方案。目前,信創中間件已適配RASP運行時應用自防護機制可攔截WEB安全攻擊,如內置命令注入、失效身份認證、敏感數據泄露、跨站腳本(XSS)等40余種常見安全漏洞,具備安全事件分類統計能力,為運維安全防護提供數據支撐,實現精準加固,提升業務系統安全性。
- 監測和調整對于應用集成RASP技術匯報的安全事件,安全人員可以實時監測和調整RASP技術策略以保持應對安全事件的準確性和時效性。RASP技術防護提供的特征可提供給WAF、全流量系統、廠商等,可有效判定未知0day并對安全攻擊回溯追源,同時,持續評估RASP技術的功能和表現,以保持其長期有效性。
總結
RASP技術提供了一種可行的方法來為應用程序提供安全保護。它提供了應用程序安全性更為全面的保護,并且能夠更好地識別和響應各種安全事件。盡管RASP技術仍存在一些缺點,但從根本上來說,RASP技術為應用程序提供了高效、可擴展和靈活的安全保護。后續我們將繼續探索RASP技術實施和維護的有效方案,以期更好地保護應用程序和信息,服務好廣大客戶。



















