IAST技術知識-Java環境Agent部署知識乾貨分享
場景匯入
目前 IAST應用環境中,Java應用佔據了90%以上。傳統IAST對Java應用進行Agent安裝時,需要修改Tomcat、WebLogic等的啟動指令碼,增加javaagent引數來實現Agent的安裝載入。
對於安裝人員來說,
Agent安裝需要知悉Web容器的安裝路徑,並且需要對每個容器的啟動指令碼進行修改,最後重啟Web容器,完成Agent的安裝。
在實際的使用過程中,部署人員常常由於指令碼修改不當、找不到
Web容器等問題導致安裝失敗。除此之外,當團隊需要對幾百上千個應用進行安裝測試時,對安裝人員來說將是一項異常艱鉅的任務。此外,若後期需要對Agent進行升級或者解除安裝操作也將是一場運維災難。
Agent 部署技術基礎
JDK從1.5版本開始引入了 java.lang.instrument 包,可以通過其更方便地實現位元組碼增強。核心功能由 java.lang.instrument.Instrumentation 提供,這個介面的方法提供了註冊類檔案轉換器、獲取所有已載入的類等功能,允許對已載入和未載入的類進行修改。
在 JDK5中,開發人員只能在JVM啟動時指定一個java agent,在premain中操作位元組碼,這種Instrumentaion方式僅限於main方法執行前,存在很大的侷限性。從JDK6開始引入了動態 Attach Agen t的方案,可以在JVM啟動後任意時刻遠端載入Agent,jstack、jps、jmap等工具都是利用Attach API來實現的。
Instrumentation的第一種使用方式是通過JVM的啟動引數-javaagent來啟動,一個典型的使用方式如下所示:
在 SecPoint.jar中,AgentMain類有一個靜態的premain方法,JVM在類載入時會先執行AgentMain類的premain方法,再執行Java應用本身的main方法。在premain方法中可以對class檔案進行修改。這種位元組碼修改的方式並不會對原始碼做任何修改,但是可以實現對JVM中的類的動態修改和增強,從而捕獲應用程式的資料傳播過程。
Instrumentation的第二種方式是在JVM執行以後在任意時刻通過Attach API遠端載入Agent的jar包。在啟動時載入的Agent會呼叫premain方法,動態Attach的Agent會執行agentmain方法。Attach的發起端是一個獨立的java程式,這個java程式會呼叫`VirtualMachine.attach`方法開始和目標JVM進行跨程式通訊,從而實現位元組碼增強。
安全玻璃盒經驗
目前,【安全玻璃盒】孝道科技IAST為了滿足真實場景下大規模部署的場景,針對Java Agent的安裝方式做了多種方式的功能實現,使得使用者能夠根據實際需求靈活選擇部署方式,儘可能將Agent安裝過程自動化,減輕部署及後續運維的工作量。
1. 手動java agent部署
這種方式即為傳統的javaagent部署方式,首先需要將Agent下載至應用伺服器中,之後修改對應Web容器的啟動指令碼(例如,tomcat需要修catalina.sh或者catalina.bat),在指定位置新增javaagent等引數後重啟容器即可完成安裝部署。
2. 自動java agent 部署
該方式由安裝人員或者在後臺指定Web容器的位置,並Agent下載至應用伺服器後,通過使用“install”引數啟動Agent後,將自動修改Web容器啟動指令碼中的啟動指令碼,在其中新增對應的引數。例如:
3. Attach 部署
Attach部署方式需要JDK6以上版本,並且需要伺服器中具備JDK環境(JRE不包含tools.jar和attach.so)。將Agent下載至應用伺服器後,通過啟動Agent並選擇需要繫結的java程式,即可針對指定java服務完成Agent安裝部署。
4. 一鍵指令碼部署
自動化指令碼的方式能夠通過統一的指令碼實現對不同應用環境的 Java服務進行Agent部署安裝,當在應用伺服器執行指令碼後,能夠自動從後臺伺服器下載Agent至伺服器中,並自動對java進行進行Attach安裝。該方式對於大規模部署及容器等環境極為適用。
關注【安全玻璃盒】公眾號,獲取更多安全知識!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70001305/viewspace-2899935/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java版工程管理系統Spring Cloud+Spring Boot+Mybatis實現工程管理系統原始碼
- 利用Github Action實現Tornadofx/JavaFx打包
- 程式設計師職場之路,如何提升技術能力?
- 雲知聲,以技術為媒,開啟智慧醫療新模式
- 【Java面試】請你簡單說一下Mysql的事務隔離級別
- 深度剖析「圈組」關係系統設計 | 「圈組」技術系列文章
- AI 加持實時互動|ZegoAvatar 面部表情隨動技術解析
- 基於區塊鏈技術的反向保理模式供應鏈金融研究
- [重慶思莊每日技術分享]-linux 系統 修改核心引數導致不能啟動的問題
- 技術分享| 快對講,全球對講
- 麒麟作業系統 (kylinos) 從入門到精通 - 研發環境 - 第十篇 Java開發及環境準備
- Java開發學習(三)----Bean基礎配置及其作用範圍
- Java char 型別究竟佔幾個位元組?