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