0

Khám phá Kiến Trúc strix: AI Agent Vận Hành Tự Động Trong Sandbox An Toàn

Trong giới bảo mật và tự động hóa hiện nay, việc sử dụng các AI Agent để tự động hóa các tác vụ (như penetration testing) đang dần trở thành xu hướng. strix là một hệ thống AI Agent linh hoạt được thiết kế chuyên biệt để hoạt động độc lập, có thể suy nghĩ và tương tác với máy chủ thông qua một môi trường Docker cô lập (sandbox).

Với bài blog này, chúng ta sẽ "giải phẫu" kiến trúc của strix, vẽ ra luồng dữ liệu để phân tích cách nó xử lý thông tin, và kiểm nghiệm các mẫu thiết kế mã nguồn (coding patterns) giúp nó dễ dàng mở rộng như hiện tại. Phân tích này sẽ định hướng vững chắc cho bất kỳ ai muốn nắm bắt, đóng góp hoặc triển khai tính năng mới (vibe coding) lên strix.


1. Tổng Quan Kiến Trúc (C4 Model Component)

Thay vì tích hợp tất cả chức năng thành một khối cứng nhắc, kiến trúc của strix được thiết kế theo hướng phân tách rạch ròi giữa logic tư duy (Agent) và môi trường thực thi (Runtime/Sandbox), kết hợp tốt với một giao diện dòng lệnh linh hoạt.

Dưới đây là một sơ đồ C4 Component cấu trúc hệ thống mô tả các thành phần cốt lõi của strix: Screen Shot 2026-03-07 at 14.21.56.png

Các thành phần chính:

  • Interface (interface/): Bao gồm cli.pytui.py. Quản lý đầu vào của người dùng, tích hợp các cấu hình (telemetry, API config), trước khi bàn giao hoàn toàn cho phần nhân lõi Agent.
  • Agents (agents/): Chứa base_agent.py và state management (ngữ cảnh). Áp dụng pattern vòng lặp tác vụ (agent loop) để không ngừng hỏi LLM, thực thi action, và cập nhật trạng thái cho tới khi hoàn tất.
  • Runtime (runtime/): Xử lý môi trường "sandbox" của AI Agent, chịu trách nhiệm kết nối Docker thông qua module docker_runtime.py, tìm kiếm port, sao chép code/tool từ máy chủ sang vùng container an toàn.
  • LLM (llm/): Cung cấp các adapter dễ dàng giao tiếp đa dạng các LLM provider thông qua litellm.
  • Sandbox Tool Server: Máy chủ ẩn nhỏ bên trong Docker dùng để lắng nghe mệnh lệnh bash command, thao tác file do Agent gửi đến, tránh nguy cơ gây nguy hại cho máy chủ host thật.

2. Luồng Xử Lý Dữ Liệu (Dataflow Sequence)

Sức mạnh thực sự của strix Agent nằm ở vòng lặp tự động (Autonomous Loop). Sau đây là luồng Dataflow (Sequence Diagram) đi từ lúc User nhập prompt tới quá trình tự tư duy và trả về kết quả cuối cùng:

Screen Shot 2026-03-07 at 14.22.35.png

Chi tiết Vòng Lặp:

  1. Khởi tạo An Toàn: Hệ thống yêu cầu DockerRuntime dựng lên một container tạm gọi là Sandbox. Ngăn cách hoàn toàn quyền truy cập ở thiết bị gốc.
  2. ReAct/Reasoning Loop: Agent duy trì AgentState tập hợp các sự kiện trong quá khứ, system prompt. Gửi sang LLM.
  3. Thực thi uỷ quyền: Dựa trên tư duy của LLM (VD: "Tôi cần chạy nmap để biết port nào đang mở"). Agent bắt được hàm call_tool, tiến hành request HTTP đến Sandbox IP (tool_server).
  4. Cập nhật & Lặp lại: Sau khi Sandbox trả kết quả quét nmap, Agent nạp ngay kết quả vào context, và lại hỏi LLM bước tiếp theo. Chu trình chỉ dừng lại khi LLM gọi finish.

3. Kiến Trúc Prompt & Orchestration: "Điểm Ăn Tiền" Thật Sự Của Strix

Không chỉ có một sandbox an toàn, cái giúp strix thực sự trở thành một ứng dụng AI Pentest tự động xuất sắc nằm ở cách thiết kế Prompt (Agent Persona)kỹ thuật Orchestration nhiều sub-Agent (Multi-Agent System).

a. Hệ Thống System Prompt: Mang "Bug Bounty Mindset"

Đọc vào file system_prompt.jinja cốt lõi của strix, chúng ta nhận thấy rằng nó không được lập trình để hỏi-đáp thông thường, mà bị "ép" vào trạng thái hoạt động độc lập với những nguyên tắc gắt gao:

  • Tự trị 100% (Autonomous By Default): Base prompt bắt buộc Agent không bao giờ được chờ người dùng cấp quyền hoặc xác nhận. Nó nhận task và sẽ khai thác tới cùng.
  • Tư duy Bug Bounty Hunter: Agent được yêu cầu phải làm việc không ngừng nghì, sẵn sàng đi sâu (2000+ steps cho một target) bởi vì "một lỗi nghiêm trọng đáng giá hơn hàng chục báo cáo vô bổ lấy lệ". Những Scanner tự động (như Acunetix) hay dừng vòng dò tìm rất sớm nhưng Strix thì không.
  • Quy Tắc Buộc Thực Thi Công Cụ: Toàn bộ Response từ LLM bắt buộc phải chèn vào định dạng XML tag của function calls (<function>...<parameter>...</function>). Nếu LLM muốn nghĩ, nó phải gọi tool think thay vì trả lời theo dạng plain-text luyên thuyên.

b. Sub-Agent Orchestration (Đội Quân Bot Chuyên Biệt)

Đây chính là điểm "ăn tiền" khác biệt nhất của Strix. Agent chính sẽ không tự tay chạy tất cả các tool từ A đến Z. Thay vào đó, nó chia tách quy trình quét thành các phase (Reconnaissance -> Systematic Validation).

Với mỗi bề mặt lỗi tìm thấy, Agent Lõi sẽ orchestration (điều phối) các Sub-Agent chuyên biệt dựa trên cấu trúc mô hình gốc (Tree-based Agents):

  1. Khám phá: SQL Injection Agent rà quét toàn bộ web form.
  2. Xác thực tự động (Validation Agents): Ngay khi thấy nghi vấn SQLi ở form Login, hệ thống đẻ ra một SQLi Validation Agent độc lập. Validation bot này sẽ chỉ có trách nhiệm duy nhất là chạy PoC khai thác thử. Nó không tin vào các scanner thuần tuý (False Positive mitigation).
  3. Báo Cáo (Reporting Agent): Nếu PoC ăn, một báo cáo được tạo ra dựa vào LLM deduplication để chống report trùng.
  4. Fix Lỗi (Trường hợp White-box): Nếu quét ở source code, hệ thống chạy thêm Auth Fixing Agent tiến hành vá mã nguồn ngay trong container, rồi test lại.

Tại sao cách tiếp cận Orchestration này lợi hại hơn một prompt "all-in-one"? Bởi vì giới hạn context (Context Limit) của các mô hình LLM. Nếu dồn dập hàng nghìn dòng output của nmap hay subfinder vào chung với việc tư duy khai thác lỗi XSS, LLM sẽ quên logic và bị "ảo giác" (hallucinate). Strix "trảm" context này ra theo bề mặt tấn công. Mỗi con Sub-Agent sinh ra mang một Prompt khác nhau, được giới hạn Focus (Focus Principles) đúng 1-3 tool, bảo đảm chất lượng khai thác lỗi liên tục như một Pentester bằng xương bằng thịt.


4. Các Coding Patterns và Góp Ý Cho Vibe Coding

Nếu bạn đang lên kế hoạch để triển khai nhanh một module, tool, hoặc thiết kế lại strix (vibe coding), có những core design pattern sau bạn cần tận dụng:

1. State Machine / Loop Pattern

Trong base_agent.py, luồng chính sử dụng vòng lặp agent_loop(task) kết hợp với logic quản lí AgentState.

  • Tip vibe coding: Khi thêm một logic mới dính tới ký ức hoặc token limits, đừng đụng sâu vào luồng while loop mà hãy làm việc với Dataclass AgentState và viết các helper function để format context.

2. Dependency Injection & Abstract Interfaces

Trong module runtime/, lớp trừu tượng hoá việc chạy môi trường được lập ra AbstractRuntime, còn DockerRuntime là implementation cụ thể.

  • Tip vibe coding: Khi bạn muốn đổi hoặc thử nghiệm môi trường sandbox mới (như AWS Lambda, hoặc K8s), chỉ cần thiết kế một Class thoả mãn Interface AbstractRuntime gốc mà không lo phá hỏng Agent Logic tĩnh.

3. Tool Registry Pattern

Khu vực tools/ cung cấp hệ thống mapping trực tiếp các lệnh LLM gọi. Gói các kĩ năng tương tác vào trong một module.

  • Tip vibe coding: Bạn có thể dễ dàng chế tạo các tool pentest như SqlmapTool, BurpSuiteTool độc lập và nhúng vào cơ chế, BaseAgent sẽ lo việc tự động khai báo JSON Schema của Tools thông qua litellm.

4. Resilience & Fault Tolerance (Kháng lỗi)

Hệ thống xử lý Retry ngay tại DockerRuntime khi chờ ToolServer bootup: Các hàm _wait_for_tool_server và vòng bảo đảm _recover_container_state hỗ trợ đảm bảo môi trường sandbox luôn sẵn sàng trước khi Agent Loop chạy. Giảm thiểu các lỗi phi logic do rác hệ thống gây ra khi pentesting tốn thời gian lâu.


4. Lời Kết

strix sở hữu một kiến trúc hệ thống xuất sắc khi kết nối được sức mạnh lý luận linh hoạt của LLMs và sự mạnh mẽ, đầy an toàn của môi trường Containerized. Nó hoàn thành xuất sắc vai trò "cách ly rủi ro" trên máy tính chủ, một yêu cầu bắt buộc để vận hành AI độc lập.

Áp dụng những phân tích C4 và Sequence trên, việc tự động hóa nâng cao, bổ sung các luồng Pentest tự hành vào Strix giờ đã nằm trong tầm tay của bạn!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí