Zadig + 洞態(tài) IAST:讓安全溶于持續(xù)交付
IAST 作為當下備受關注的一種安全測試技術,我們?nèi)绾卫?Zadig 運行時環(huán)境管理能力,快速的將 IAST 能力集成到我們的日常工作流程中?
本文中以 Zadig K8s 項目 + Java 服務為例,來了解在 Zadig 中如何為已有服務快速接入 IAST 監(jiān)測服務漏洞信息,為服務安全保駕護航。
What is IAST & DongTai?
- IAST:交互式應用程序安全測試(Interactive Application Security Testing),是近年來興起的一項新技術,被 Gartner 公司列為信息安全領域的 Top 10 技術之一。它融合了 SAST 和 DAST 技術的優(yōu)點,IAST 使用運行時代理方法在測試階段分析&監(jiān)控應用程序的行為。
- DongTai 是一款開源的被動式交互式安全測試(IAST)產(chǎn)品,通過動態(tài) Hook 和污點跟蹤算法等實現(xiàn)通用漏洞檢測、多請求關聯(lián)漏洞檢測(包括但不限于越權(quán)漏洞、未授權(quán)訪問)、第三方組件漏洞檢測等,目前支持 Java、Python 兩種語言的應用漏洞檢測。
注意:主要用于 開發(fā)環(huán)境 和 測試環(huán)境,即只需單次訪問即可實行安全檢測,并不適用在并發(fā)量高的生產(chǎn)環(huán)境 (參考 IAST 性能測試報告 [1])
Zadig & IAST 運行原理圖
準備工作
1. Zadig 中待開啟 IAST 功能的服務,下面提供一個示例服務,服務名:demo ,服務 YAML 配置如下(Zadig 新建服務 [2]):
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: dongtai-java-agent-demo
name: dongtai-java-agent-demo
spec:
selector:
matchLabels:
app: dongtai-java-agent-demo
template:
metadata:
labels:
app: dongtai-java-agent-demo
spec:
containers:
- name: app-container
image: dongtai/dongtai-java-agent-demo:0.0.1
2.獲取 DongTai backend 服務,有以下兩種方式:
- 使用洞態(tài)官方提供的 SaaS 版本
- 使用 Docker-Compose 或者 Kubernetes 完成私有化安裝 安裝文檔 [3]
我們以第一種方式為例,使用洞態(tài)官方提供的 SaaS 服務,注冊登錄賬號,進入項目管理界面:
- 點擊頁面右上角 「+ Add Agent」
- 在「下載探針」部分可以直接下載或者獲取下載鏈接
這里假設我們獲取到的連接是:?
AGENT_URL= http://192.168.2.169:8000/api/v1/agent/download?url=http://192.168.2.169:8000&language=java
AUTH_HEADER= 'Authorization: Token 88cab3057e199b95cb0780e2a8ab4771c8874acd'
以下是圖中 Shell 腳本:
curl -X GET "http://192.168.2.169:8000/api/v1/agent/download?url=http://192.168.2.169:8000&language=java" -H 'Authorization: Token 88cab3057e199b95cb0780e2a8ab4771c8874acd' -o agent.jar -k
創(chuàng)建&部署 注入 Agent 的 demo 服務
- 在 Zadig 中復制待測試服務配置,修改 K8s resource name 以及 label&selector 等,避免和現(xiàn)有服務沖突。
- 配置中添加 initContainer,提前將 agent 下載到服務所在容器中。
- 修改服務啟動命令,添加 -javaagent:/path/to/agent.jar
- 新建服務,服務名:demo-with-iast,粘貼修改后的配置并保存,修改后的服務 YAML 配置如下:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: dongtai-java-agent-demo-iast
name: dongtai-java-agent-demo-iast
spec:
selector:
matchLabels:
app: dongtai-java-agent-demo-iast
template:
metadata:
labels:
app: dongtai-java-agent-demo-iast
spec:
volumes:
- name: dongtai-iast-agent
emptyDir: {}
initContainers:
- name: agent-init-container
image: curlimages/curl
volumeMounts:
- name: dongtai-iast-agent
mountPath: /tmp
args:
- "-k"
- "-X"
- "GET"
- ${AGENT_URL} # 替換成前面獲取到的 AGENT_URL
- "-H"
- ${AUTH_HEADER} # 替換成前面獲取到的 AUTH_HEADER
- "-o"
- "/tmp/agent.jar"
containers:
- name: app-container
image: dongtai/dongtai-java-agent-demo:0.0.1
volumeMounts:
- name: dongtai-iast-agent
mountPath: /agent
env:
- name: JAVA_TOOL_OPTIONS
value: "-javaagent:/agent/agent.jar"
- 將新建服務 demo-with-iast 部署到環(huán)境中(Zadig 創(chuàng)建環(huán)境 [4]),查看對應環(huán)境中服務的日志,出現(xiàn)如下日志則意味著 agent 注入成功。
- 基于新部署的 demo-with-iast 服務,運行服務的自動化測試&功能測試,觸發(fā)內(nèi)部函數(shù)/服務的調(diào)用,agent 會自動地對運行過程中的漏洞信息進行采集與上報。
至此,漏洞信息已完成采集上報,可以在剛才獲取的 Dongtai backend 中查看當前服務漏洞相關信息。
配置自動化工作流
我們?nèi)绻胍獙崟r跟蹤服務中的漏洞信息,需要我們將 IAST 融入我們的 DevOps 流程中。下面我們假設 demo 服務已經(jīng)擁有 Zadig 工作流&構(gòu)建的配置(Zadig 工作流配置 [5])),這時我們只需要兩步就輕松能將 IAST 加入我們現(xiàn)有流程中。
- 將我們剛才配置的服務 demo-with-iast 與 demo 服務的構(gòu)建綁定。
- 啟動工作流,選擇服務 demo-with-iast,對我們最新的服務進行部署與驗證。
運行效果
回到洞態(tài) backend 界面,點擊項目,就可以看到當前服務的漏洞情況分析:
至此我們已將 IAST 檢測與 Zadig 交付流程無縫結(jié)合起來,工程師可以隨時對業(yè)務服務的更新進行漏洞檢測,更加安全可靠的迭代產(chǎn)品。
官網(wǎng):https://koderover.com/
github: https://github.com/koderover/zadig
參考鏈接:
[1] 洞態(tài)丨JAVA Agent v1.7.0 性能測試
[2] https://docs.koderover.com/zadig/v1.12.0/project/service/k8s/#新建服務
[3] https://doc.dongtai.io/docs/category/server-部署指南
[4] https://docs.koderover.com/zadig/v1.12.0/project/env/k8s/#創(chuàng)建環(huán)境
[5] https://docs.koderover.com/zadig/v1.12.0/project/workflow/#配置工作流?