Zadig + 洞態 IAST:讓安全溶於持續交付

語言: CN / TW / HK

Zadig on Github

Zadig on Gitee

IAST 作為當下備受關注的一種安全測試技術,我們如何利用 Zadig 執行時環境管理能力,快速的將 IAST 能力整合到我們的日常工作流程中?

IAST 作為當下備受關注的一種安全測試技術,我們如何利用 Zadig 執行時環境管理能力,快速的將 IAST 能力整合到我們的日常工作流程中?本文中以 Zadig K8s 專案 + Java 服務為例,來了解在 Zadig 中如何為已有服務快速接入 IAST 監測服務漏洞資訊,為服務安全保駕護航。

What is IAST & DongTai?

  • IAST:互動式應用程式安全測試(Interactive Application Security Testing),是近年來興起的一項新技術,被 Gartner 公司列為資訊保安領域的 Top 10 技術之一。它融合了 SAST 和 DAST 技術的優點,IAST 使用執行時代理方法在測試階段分析&監控應用程式的行為。

  • DongTai 是一款開源的被動式互動式安全測試(IAST)產品,通過動態 Hook 和汙點跟蹤演算法等實現通用漏洞檢測、多請求關聯漏洞檢測(包括但不限於越權漏洞、未授權訪問)、第三方元件漏洞檢測等,目前支援 Java、Python 兩種語言的應用漏洞檢測。

❗️注意:主要用於 開發環境  測試環境,即只需單次訪問即可實行安全檢測,並不適用在併發量高的生產環境 (參考 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 服務,有以下兩種方式:

  • 使用洞態官方提供的 SaaS 版本
  • 使用 Docker-Compose 或者 Kubernetes 完成私有化安裝 安裝文件 [3]

我們以第一種方式為例,使用洞態官方提供的 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 指令碼:

以下是圖中 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

 

建立&部署 注入 Agent 的 demo 服務

  1. 在 Zadig 中複製待測試服務配置,修改 K8s resource name 以及 label&selector 等,避免和現有服務衝突。
  2. 配置中新增 initContainer,提前將 agent 下載到服務所在容器中。
  3. 修改服務啟動命令,新增 -javaagent:/path/to/agent.jar
  4. 新建服務,服務名: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"

 

5. 將新建服務 demo-with-iast 部署到環境中(Zadig 建立環境 [4]),檢視對應環境中服務的日誌,出現如下日誌則意味著 agent 注入成功。

6. 基於新部署的 demo-with-iast 服務,執行服務的自動化測試&功能測試,觸發內部函式/服務的呼叫,agent 會自動地對執行過程中的漏洞資訊進行採集與上報。

至此,漏洞資訊已完成採集上報,可以在剛才獲取的 Dongtai backend 中檢視當前服務漏洞相關資訊。

配置自動化工作流

我們如果想要實時跟蹤服務中的漏洞資訊,需要我們將 IAST 融入我們的 DevOps 流程中。下面我們假設 demo 服務已經擁有 Zadig 工作流&構建的配置(Zadig 工作流配置 [5])),這時我們只需要兩步就輕鬆能將 IAST 加入我們現有流程中。

  1. 將我們剛才配置的服務 demo-with-iast  與  demo 服務的構建繫結。

2. 啟動工作流,選擇服務 demo-with-iast,對我們最新的服務進行部署與驗證。

 

執行效果

回到洞態 backend 介面,點選專案,就可以看到當前服務的漏洞情況分析:

至此我們已將 IAST 檢測與 Zadig 交付流程無縫結合起來,工程師可以隨時對業務服務的更新進行漏洞檢測,更加安全可靠的迭代產品。

參考連結:

[1] 洞態丨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/#建立環境

[5] https://docs.koderover.com/zadig/v1.12.0/project/workflow/#配置工作流

Zadig,讓工程師更專注創造!

歡迎加入 開源吐槽群🔥

Zadig on Github

Zadig on Gitee