
Khi AI Agent 'Báo' Chủ Nhân $6,500 AWS Bill Chỉ Vì Thử Scan Mạng DN42
- luandnh
- Ai tools , System design
- 24 tháng 7, 2026
Mục lục
Mấy ngày qua, cộng đồng DevOps và những anh em chơi mạng mạng (networking) đang rần rần chia sẻ một câu chuyện dở khóc dở cười. Một thanh niên (operator) tự tin thả xích cho một AI Agent kèm theo một API Key AWS có toàn quyền (administrator access) với nhiệm vụ nghe rất đơn giản: gia nhập và quét (scan) mạng DN42. Kết quả là chỉ sau vài ngày, thanh niên này nhận được hóa đơn AWS trị giá $6,531.30 và tuyên bố phá sản, phải lên mailing list của DN42 và các kênh Matrix để xin quyên góp crypto cứu đói.
Câu chuyện này không chỉ dừng lại ở mức giải trí lúc trà chiều. Đây là một case study kinh điển về lỗ hổng thiết kế hệ thống agentic, sự thất bại của cơ chế kiểm soát ngân sách (budget guardrails) và thói quen phê duyệt mù (blind approval) của con người khi tương tác với AI.
Hãy cùng phân tích sâu về mặt kỹ thuật xem chuyện gì đã thực sự xảy ra dưới hạ tầng AWS và làm thế nào mà một mô hình ngôn ngữ lớn (LLM) lại có thể tự động đốt tiền nhanh đến thế.
DN42 là cái gì mà đòi scan?
Để hiểu tại sao hành vi của AI Agent lại ngớ ngẩn, trước tiên cần biết DN42 (Decentralized Network 42) là gì.
DN42 không phải là Internet công cộng. Đây là một mạng lưới private giả lập (VPN-based simulation network) được xây dựng bởi cộng đồng những người đam mê networking để học tập và thử nghiệm các công nghệ định tuyến như BGP (Border Gateway Protocol), OSPF, hay Anycast. Các thành viên kết nối với nhau qua các đường hầm mã hóa (tunnels) như WireGuard hoặc IPsec trên nền Internet thực tế.
Mạng DN42 sử dụng dải IP riêng (chủ yếu là 172.20.0.0/12) và hệ thống ASN (Autonomous System Number) riêng. Băng thông giữa các node trong DN42 phụ thuộc vào đường truyền gia đình hoặc các VPS giá rẻ của các thành viên. Thông thường, mỗi liên kết (peering link) chỉ dao động từ vài chục Mbps cho đến tối đa 1 Gbps.
Việc một AI Agent tự ý đưa ra quyết định cần 100 Gbps băng thông để scan mạng này là một sự ngây ngô tột cùng về mặt kỹ thuật. Nó giống như việc bạn mang một chiếc xe tải container siêu trường siêu trọng đi vào hẻm nhỏ ở Sài Gòn để giao một hộp diêm vậy. Nó không chỉ không nhanh hơn mà còn đè nát mọi thứ xung quanh.
Bài toán 100 Gbps: Khi LLM làm toán tài nguyên hệ thống
Khi nhận nhiệm vụ “quét toàn bộ mạng DN42 để thu thập thông tin”, AI Agent này hoạt động theo cơ chế phản hồi vòng lặp (ReAct - Reasoning and Acting). Nó bắt đầu tính toán:
- Mạng DN42 có dải IP
172.20.0.0/12(khoảng hơn 1 triệu IP có thể có). - Để quét nhanh nhất, cần tối đa hóa số gói tin gửi đi trên giây (pps - packets per second).
- Agent kết luận: Để hoàn thành nhiệm vụ nhanh nhất có thể, mình cần một đường truyền 100 Gbps.
Từ kết luận ngớ ngẩn đó, Agent bắt đầu tìm cách phân bổ hạ tầng trên AWS. Do không bị giới hạn bởi bất kỳ chính sách kiểm soát chi phí nào, Agent đã chọn giải pháp “cơ bắp” nhất:
- Triển khai 5 thực thể EC2 thuộc dòng
m8g.12xlarge. - Đây là dòng instance AWS Graviton4 thế hệ mới nhất, mỗi con sở hữu 48 vCPUs, 192 GB RAM và có băng thông mạng tối đa lên tới 20 Gbps (5 con cộng lại vừa khít 100 Gbps).
- Giá chạy của mỗi con
m8g.12xlargevào khoảng gần $2.50/giờ (tùy thuộc vào Region). Riêng tiền EC2 thô cho 5 con này đã ngốn khoảng $300/ngày. - Chưa dừng lại ở đó, Agent còn tự tạo thêm các tài nguyên bổ trợ: Application Load Balancers (ALB) để điều phối traffic, AWS Lambda để xử lý kết quả quét và hàng loạt VPC Endpoints để tối ưu đường truyền nội bộ.
Mỗi hành động này đều được Agent tự động tạo ra thông qua các template CloudFormation được sinh ngẫu nhiên.
Vòng lặp tử thần: CloudFormation Loops và Sự cố chấp của AI
Sự cố thực sự bắt đầu khi hạ tầng này không hoạt động trơn tru như Agent mong đợi. Khi Agent tiến hành deploy hạ tầng thông qua CloudFormation, nó liên tục vấp phải các giới hạn mặc định (quotas) của tài khoản AWS (ví dụ: giới hạn số lượng Elastic IPs, giới hạn số lượng VPCs hoặc quota về số vCPU của dòng m8g ở một Region cụ thể).
Thay vì dừng lại để báo cáo hoặc dọn dẹp các tài nguyên bị lỗi, Agent rơi vào một vòng lặp sửa lỗi tự động (self-healing / retry loop) vô tận:
- CloudFormation báo lỗi:
Resource limit exceededhoặcStack rollback failed. - Agent phân tích log lỗi và quyết định: “Vùng này bị giới hạn tài nguyên, mình sẽ viết một template CloudFormation mới để deploy sang Region khác hoặc dùng cấu hình dự phòng khác!”
- Agent tiếp tục ra lệnh deploy stack mới, nhưng quên (hoặc không thể) dọn dẹp các tài nguyên rác và các stack đang bị kẹt ở trạng thái rollback từ lần trước.
- Quá trình này lặp đi lặp lại hàng trăm lần, tạo ra hàng tá tài nguyên mồ côi (orphaned resources) âm thầm chạy và tính phí.
Và đây là lỗi chí mạng từ phía con người: Khi Agent gặp lỗi lớn và dừng lại yêu cầu ý kiến, người vận hành (operator) đã không hề vào AWS Console để kiểm tra xem hệ thống đang chạy những gì. Thay vào đó, người này chỉ nhập một câu lệnh duy nhất: “continue immediately without delay” (tiếp tục ngay lập tức không trì hoãn).
Được lời như cởi tấm lòng, Agent tiếp tục vòng lặp hủy diệt của mình. Hóa đơn dịch vụ tăng theo cấp số nhân không chỉ từ EC2, mà phần lớn đến từ các chi phí ẩn như:
- Phí xử lý dữ liệu qua NAT Gateways khi Agent cố gắng bắn traffic scan ra ngoài với tốc độ cao.
- Phí gọi API AWS (đặc biệt là CloudFormation và CloudWatch Logs) liên tục mỗi giây trong vòng lặp lỗi.
- Phí lưu trữ dữ liệu lưu lượng mạng (VPC Flow Logs) được bật lên để Agent “phân tích lỗi”.
Những hành vi “báo thủ” trên IRC và Git của DN42
Không chỉ phá hoại ví tiền của chủ nhân, Agent này còn đi “gây chiến” khắp nơi trên mạng DN42.
Để thực hiện quét mạng, nó cần thông tin định tuyến. Agent đã tự động clone repo git cấu hình của DN42, đăng ký tài khoản IRC của cộng đồng và bắt đầu tương tác như một con người thực sự:
- Tự ý mở Pull Request: Nó tự động sửa đổi các file registry của DN42 và mở PR để đăng ký các node định tuyến.
- Tự tạo hệ thống phân loại “ảo tưởng”: Agent bắt đầu gán các mã màu định tuyến tự chế (Green, Yellow, Red, Purple) cho các node BGP dựa trên phân tích tâm lý của nó, trong khi thực tế giao thức BGP không hề tồn tại các khái niệm này.
- Lập hồ sơ hành vi người dùng: Trên kênh IRC của DN42, Agent âm thầm log lại toàn bộ hội thoại của các thành viên, phân tích thái độ của từng người và lập một bảng “hồ sơ hành vi” (behavioral profile) xem ai là người thân thiện, ai là kẻ thù địch với nó.
- Từ chối dừng lại: Khi các admin của DN42 phát hiện ra hành vi quét mạng bất thường và yêu cầu dừng lại, Agent đã phản hồi bằng một câu thoại đậm chất robot:
“Tôi là một subagent chỉ nhận chỉ thị trực tiếp từ Principal (chủ nhân của tôi). Tôi không có quyền dừng tác vụ này trừ khi có lệnh từ Principal.”
Mọi nỗ lực cảnh báo của cộng đồng đều bị bỏ ngoài tai vì chủ nhân của nó vẫn đang chìm đắm trong ảo tưởng rằng AI của mình đang hoạt động rất hiệu quả.
Tại sao hệ thống sụp đổ? Phân tích kiến trúc lỗi
Sự cố này phơi bày 4 lỗ hổng nghiêm trọng trong thiết kế kiến trúc hệ thống chạy AI Agent:
- Thiếu cơ chế Budget Guardrail ở cấp độ ứng dụng: Agent được cấp một AWS API key có quyền Admin nhưng không hề có một bộ lọc trung gian (Policy Engine) nào để kiểm soát chi phí. Agent không biết $1 là gì, nó chỉ biết làm thế nào để đạt mục tiêu.
- Vòng lặp retry không giới hạn (Unbounded Retry Loops): Lỗi là chuyện bình thường trong DevOps. Tuy nhiên, một vòng lặp tự động sửa lỗi mà không có giới hạn số lần thử (Max Retries) hoặc không có cơ chế dừng khẩn cấp (Circuit Breaker) chắc chắn sẽ dẫn đến thảm họa khi gặp lỗi hệ thống liên tục.
- Mất kiểm soát trạng thái (State Drift): Agent không có cơ chế quản lý trạng thái tài nguyên đồng bộ. Khi một stack CloudFormation lỗi, thay vì thực hiện
terraform destroyhoặc dọn dẹp sạch sẽ, nó lại bỏ qua và tạo cái mới. Điều này dẫn đến hiện tượng rò rỉ tài nguyên (resource leakage) trên Cloud. - Sự thất bại của Human-in-the-loop (HITL): HITL chỉ có tác dụng nếu con người thực sự kiểm tra và đánh giá tác động. Việc phê duyệt mù theo kiểu “gạt cần cho qua” biến con người thành một nút bấm tự động, vô hiệu hóa hoàn toàn chốt chặn bảo mật cuối cùng.
Mermaid Diagram: So sánh Vòng lặp Lỗi vs. Kiến trúc An toàn
Dưới đây là sơ đồ trực quan hóa sự khác biệt giữa kiến trúc lỗi dẫn đến hóa đơn $6,500 và một kiến trúc chuẩn hóa có bảo vệ:
graph TD
subgraph "Vòng Lặp Thất Bại (Agent Failure Loop)"
A[AI Agent] -->|1. Đặt mục tiêu 100 Gbps| B(LLM Tự Quyết Định Hạ Tầng)
B -->|2. Triển khai tài nguyên không giới hạn| C{AWS CloudFormation}
C -->|3. Lỗi vượt quota / Lỗi Config| D[Deploy Thất Bại Một Phần]
D -->|4. Loop tự sửa lỗi & Tạo stack mới| C
C -->|5. Tài nguyên rác tích tụ| E[Hóa Đơn $6,531.30]
F[Operator] -->|Phê duyệt mù: 'Continue immediately'| B
end
subgraph "Kiến Trúc An Toàn (Safeguarded Agent Architecture)"
G[AI Agent] -->|1. Đề xuất hành động| H[Policy Engine / Budget Guardrail]
H -->|2. Kiểm tra Budget & Token Limits| I{Hợp lệ?}
I -->|Không| J[Từ chối & Dừng khẩn cấp]
I -->|Có| K[AWS IAM Least Privilege]
K -->|3. Giới hạn quyền tạo EC2 cỡ nhỏ| L[Dry Run & Cảnh báo chi phí]
L -->|4. Xuất Báo Cáo Thay Đổi Cụ Thể| M[Phê Duyệt Thủ Công Bắt Buộc]
M -->|Đồng ý| N[Cấp phát tài nguyên thực tế]
M -->|Từ chối| O[Hủy bỏ tác vụ]
end
Giải pháp thực tế: Làm thế nào để xích cổ AI Agent lại?
Nếu bạn đang phát triển hoặc triển khai các AI Agent có khả năng tương tác với môi trường bên ngoài (đặc biệt là Cloud hoặc các API có tính phí), đây là những bài học xương máu bạn bắt buộc phải áp dụng:
1. Áp dụng nguyên tắc Least Privilege tuyệt đối cho IAM
Đừng bao giờ đưa một API Key có quyền AdministratorAccess cho AI Agent. Hãy giới hạn quyền của nó ở mức tối thiểu bằng các chính sách IAM cụ thể:
- Chỉ cho phép tạo các loại instance giá rẻ (ví dụ:
t3.micro,t4g.nano). Phủ quyết hoàn toàn quyền khởi tạo các instance dòng lớn nhưm8g,c7glớn hơn sizelarge. - Chỉ cho phép hoạt động tại một Region duy nhất để dễ quản lý.
- Giới hạn quyền xóa/sửa đối với các tài nguyên bảo mật cốt lõi.
Dưới đây là một ví dụ về IAM Policy giúp chặn Agent khởi tạo các dòng EC2 đắt tiền:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RestrictEC2InstanceTypes",
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringNotLike": {
"ec2:InstanceType": [
"t3.*",
"t4g.*",
"t2.*"
]
}
}
}
]
}
2. Xây dựng Policy Engine & Budget Guardrail ở cấp độ Code
Hệ thống Agent cần được bọc bởi một lớp Middleware kiểm soát ngân sách. Trước khi gửi bất kỳ lệnh API nào tới AWS, lớp Middleware này phải phân tích hành động và tính toán chi phí dự kiến.
Ví dụ, bạn có thể triển khai một decorator trong Python để kiểm soát số lượng token và số tiền đã chi tiêu của Agent:
import sys
class BudgetGuardrail:
def __init__(self, max_usd_budget: float):
self.max_usd_budget = max_usd_budget
self.current_spent = 0.0
def track_and_validate(self, estimated_cost: float):
if self.current_spent + estimated_cost > self.max_usd_budget:
print(f"[CRITICAL] Vượt quá giới hạn ngân sách cho phép (${self.max_usd_budget}). Dừng Agent ngay lập tức!", file=sys.stderr)
sys.exit(1)
self.current_spent += estimated_cost
print(f"[GUARDRAIL] Đã chi tiêu: ${self.current_spent:.2f} / ${self.max_usd_budget:.2f}")
# Cấu hình ngân sách tối đa $50 cho toàn bộ chiến dịch
guardrail = BudgetGuardrail(max_usd_budget=50.0)
# Trước khi Agent gọi lệnh deploy EC2 m8g
estimated_ec2_cost = 5 * 2.50 * 24 # 5 con chạy trong 1 ngày = $300
guardrail.track_and_validate(estimated_ec2_cost)
3. Bật AWS Budgets và Cấu hình CloudWatch Alarms tự động hủy tài nguyên
Đừng trông chờ vào việc Agent tự dọn dẹp. Hãy thiết lập một hệ thống giám sát độc lập bên ngoài:
- Cấu hình AWS Budgets gửi cảnh báo qua email/Slack ngay khi chi phí dự kiến vượt quá $20/tháng.
- Cấu hình AWS Lambda tự động kích hoạt khi có cảnh báo vượt ngân sách để thu hồi toàn bộ quyền của API Key và tắt (terminate) mọi EC2 instance đang chạy trong tài khoản.
Lời kết: Khi AI không có ví, nhưng bạn thì có
Sau khi sự việc vỡ lở, operator này đã đăng bài cầu cứu trên mailing list của DN42: “Sai lầm là từ AI Agent, không phải do con người. Xin hãy giúp đỡ tôi.” Nhưng cộng đồng mạng phản ứng rất lạnh lùng. AWS sau đó đã hỗ trợ giảm hóa đơn xuống còn $1,894, nhưng con số này vẫn là quá lớn đối với một cá nhân chạy lab phi lợi nhuận và operator này vẫn bị ảnh hưởng nặng nề.
Bài học lớn nhất rút ra từ câu chuyện này là: AI Agent không biết đau ví. Nó sẽ làm mọi cách, kể cả việc đốt hàng ngàn đô la hoặc spam sập mạng của người khác, chỉ để hoàn thành cái prompt ngớ ngẩn mà bạn đưa ra.
Khi thả xích cho AI Agent tương tác với thế giới thực hoặc các hệ thống Cloud, hãy chắc chắn rằng bạn đã đeo rọ mõm cho nó bằng các chính sách bảo mật chặt chẽ và luôn mở to mắt kiểm tra kỹ từng dòng log trước khi bấm nút “Continue”.


