本文介紹如何在 Ubuntu Linux 中使用 PentAGI 搭配本地端 Ollama 框架與 Qwen 模型,讓 AI 進行自動化滲透測試。

PentAGI 是一套開源的全自主 AI 滲透測試平台,採用多智能體(Multi-Agent)協作架構,整合了 Nmap、Metasploit、Sqlmap 等 20 多種資訊安全工具,能在隔離的 Docker 沙箱環境中自動執行資訊收集、漏洞掃描、攻擊驗證與報告生成。

開始安裝之前,請先參考 Ubuntu Linux 安裝與設定 NVIDIA GPU 與 Docker 環境,安裝 NVIDIA 與 Docker 環境,並設定讓 GPU 可在 Docker 容器內運行。

安裝 Ollama

LLM 的服務框架我們選擇最簡單的 Ollama,參考 Ollama 的官方文件,安裝 Ollama:

# 安裝 Ollama
curl -fsSL https://ollama.com/install.sh | sh

安裝完成後,查看一下 Ollama 服務,確認它有正常啟動:

# 查看 Ollama 服務狀態
systemctl status ollama

更改 Ollama 傾聽 IP 位址

Ollama 服務預設會傾聽 127.0.0.1 這個本機的 IP 位址,如果要讓 Docker 裡面的 PentAGI 也可以存取 Ollama,可以修改 /etc/systemd/system/ollama.service 設定檔,加上一行設定讓 Ollama 傾聽所有網路介面:

[Service]
Environment="OLLAMA_HOST=0.0.0.0"

修改完設定檔之後,重新啟動 Ollama 系統服務:

# 重新載入設定檔
systemctl daemon-reload

# 重新啟動 Ollama
systemctl restart ollama

下載與布署 Qwen3.8 模型:

# 下載 qwen3.8:27b 模型
ollama pull qwen3.8:27b

# 下載 qwen3-embedding:8b 模型
ollama pull qwen3-embedding:8b

安裝 PentAGI

PentAGI 本身只是一個用 Docker Compose 包裝好的專案,在使用 PentAGI 之前要進行一些系統的設定,可以利用它提供的 installer 設定工具,對於初次使用 PentAGI 的人,此工具可以快速釐清有哪一些設定需要寫:

# 建立 PentAGI 專用目錄
mkdir -p pentagi && cd pentagi

# 下載並解壓縮 PentAGI
wget -O installer.zip https://pentagi.com/downloads/linux/amd64/installer-latest.zip
unzip installer.zip

# 進行設定
./installer

PentAGI 可以調整的選項非常多,其中 Ollama 與 Embedding 的部份是一定要設定的,請參考下方 .env 的內容來進行設定,設定好之後 installer 會自動產生 .env 這個檔案,比較重要的內容如下:

# Ollama 伺服器 URL(必要)
OLLAMA_SERVER_URL=http://host.docker.internal:11434

# Ollama 使用的 LLM 模型(必要)
OLLAMA_SERVER_MODEL=qwen3.8:27b

# Ollama 自動下載模型
OLLAMA_SERVER_PULL_MODELS_ENABLED=true

# Embedding 伺服器 URL(必要)
EMBEDDING_URL=http://host.docker.internal:11434

# Embedding 模型(必要)
EMBEDDING_MODEL=qwen3-embedding:8b

# Embedding 模型由 Ollama 提供
EMBEDDING_PROVIDER=ollama

installer 在設定完成後會產生 docker-compose.yml 設定檔,並自動呼叫 Docker Compose 將服務啟動,但我們需要再進行一些調整,所以先手動停止 PentAGI 的 Docker Compose:

# 停止 PentAGI
docker compose down -v

編輯 docker-compose.yml 設定檔,在 pentagi 之下加上 extra_hosts 的設定,讓 Docker 容器內部可以連到外面的 Ollama 伺服器,同時加上靶機用的內部網路:

networks:
  
  # 加入靶機用的內部網路
  vulnerability-network:
    driver: bridge
    name: vulnerability-network

services:
  pentagi:
    networks:
      # 讓 PentAGI 連接靶機所在的內部網路
      - vulnerability-network
    
    # 讓 Docker 容器內部可以連到外面的 Ollama 伺服器
    extra_hosts:
      - host.docker.internal:host-gateway

設定完成後,重新用 Docker Compose 啟動 PentAGI:

# 啟動 PentAGI 與靶機
docker compose up -d

PentAGI 啟動之後,會將網頁操作介面開在 http://localhost:8443/,使用瀏覽器打開之後,即可使用,預設帳號與密碼如下:

預設帳號:[email protected]
預設密碼:admin

準備靶機

這裡我們使用 Vulhub 來建立靶機,它可以將靶機放在 Docker 內部的網路中,不會暴露在外頭,非常安全。

先下載整個 Vulhub 專案:

# 下載 Vulhub 專案
git clone --depth 1 https://github.com/vulhub/vulhub.git

接著選擇要建立的靶機,這裡我們選擇 CVE-2021-3129 這一個 Laravel 的漏洞作為示範:

# 進入 CVE-2021-3129 靶機目錄
cd vulhub/laravel/CVE-2021-3129

# 備份原始 Docker Compose 設定檔
cp docker-compose.yml docker-compose.yml.default

將其 Docker Compose 設定檔備份之後再進行修改,把上面 PentAGI 建立的靶機網路放進來,讓靶機可以開在 vulnerability-network 這個網路中,修改好的 docker-compose.yml 內容會類似這樣:

services:
  # 設定服務名稱(靶機的主機名稱)
  vulhost:
    image: vulhub/laravel:8.4.2
    ports:
      - "8080:80"

    # 設定靶機網路
    networks:
      - vulnerability-network

# 使用 PentAGI 建立好的靶機網路
networks:
  vulnerability-network:
    name: vulnerability-network
    external: true

修改好之後,啟動靶機的 Docker Compose:

# 啟動靶機
docker compose up -d

進入 PentAGI 的 Docker 容器內,確認可以正常連線到靶機:

# 從 PentAGI 的 Docker 容器內用 ping 測試靶機的網路連線
docker exec -it pentagi ping -c 4 vulhost

如果有正常的 ping 回應,就表示靶機與網路設定都沒問題。

使用 PentAGI 進行滲透測試

在 PentAGI 的網頁介面中新增一條 flow,輸入以下提示詞,對 vulhost 這一台 CVE-2021-3129 靶機進行滲透測試:

對 http://vulhost/ 進行滲透測試

這樣 PentAGI 就會自動對靶機進行滲透測試了。

PentAGI 自動進行滲透測試

PentAGI 自動進行滲透測試

在 Docker 中靶機的主機名稱就是 Docker Compose 設定檔裡面的服務名稱,我們也可以在靶機的 Docker Compose 中一次加入多台靶機,讓 PentAGI 一次對多台靶機進行滲透測試。

待處理事項

PentAGI 還有非常多的功能我尚未釐清,待未來有時間再繼續補:

  • 根據不同 agent 需求設定不同的 LLM 模型,範例可參考 ollama-llama318b.provider.yml 或同目錄下的其他 YAML 設定檔。
  • 將 Ollama 改為 vLLM,可增加效能,可參考 GitHub 的文件。
  • 嘗試 PentAGI 建議的本地端模型,例如 llama3.1:8b-instruct-q8_0。
  • 讓 Ollama 傾聽所有網路介面,會有安全性問題,若在正式環境則必須重新設計架構。