Reentrancy trên chiến trường: Từ EduChain 2017 đến FPV Drone 2024
Phan Thảo
Năm 2017, tôi 24 tuổi, ngồi trong một văn phòng nhỏ ở Hạ Long, đọc từng dòng mã Solidity của EduChain – một hợp đồng ICO điển hình với token, vesting, và hàm withdraw(). Ba tuần đào bới, tôi tìm thấy lỗi reentrancy kinh điển: hợp đồng gửi ETH trước khi cập nhật balance. Kẻ tấn công có thể gọi withdraw() một lần nữa trước khi state được set về 0. Tôi báo cáo lên GitHub, nhận 0.5 BTC tiền thưởng. 120 ETH đã được cứu. Hôm nay, đọc tin từ Crypto Briefing về việc Ukraine dùng FPV drone tấn công xe tăng Nga, tôi nhận ra mình đã thấy cấu trúc này trước đây. Một quả drone giá 500 đô la đâm vào một cỗ máy chiến tranh giá 3 triệu đô la – không phải vì drone thông minh hơn xe tăng, mà vì xe tăng có một lỗ hổng reentrancy: nó gửi giá trị (sự sống của kíp lái, khả năng chiến đấu) trước khi cập nhật state (chiến thuật phòng thủ cho mối đe dọa từ trên không).
Crypto Briefing không phải một tạp chí quân sự. Đây là một trang tin blockchain – nơi thường viết về gas fee, TVL, và airdrop. Nhưng họ đưa tin về FPV drone với ba điểm dữ liệu: thứ nhất, Ukraine đã sử dụng FPV drone với quy mô lớn trong chiến dịch chống tăng; thứ hai, chúng hiệu quả đến mức được coi là yếu tố thay đổi cán cân; thứ ba, đây là một chiến lược chuyển đổi sâu rộng chứ không phải một sự kiện đơn lẻ. Không có số liệu thương vong, không có tọa độ giao tranh, không có model xe tăng cụ thể. Giống như một smart contract: chỉ vài trăm dòng code, nhưng ẩn chứa toàn bộ logic của một hệ thống. Tôi đã quen với việc này. Mười bảy năm trong nghề, tôi học được rằng thông tin ít không có nghĩa là không có thông tin – nó có nghĩa là độ chính xác cần được kiểm chứng qua cấu trúc, không phải qua bề mặt ngôn từ.
FPV – First Person View – về bản chất là một quadcopter thương mại, gắn camera analog hoặc digital, điều khiển bằng kính thực tế ảo. Giá một con hoàn chỉnh khoảng 500 đến 1.000 đô la. Linh kiện mua từ AliExpress: motor không chổi than từ Thâm Quyến, flight controller chạy PX4 hoặc ArduPilot – phần mềm mã nguồn mở, pin lithium polymer, khung carbon, và một camera 600TVL. Không có gì bí mật, không có gì mang tính quân sự. Một thiếu niên đam mê drone racing có thể lắp ráp được trong một buổi tối. Điều này khiến tôi nhớ đến kiến trúc của Uniswap V2: mọi thứ đều công khai, mọi thứ đều có thể fork. Nhưng chính sự công khai đó lại tạo ra một mạng lưới không thể bị tiêu diệt bằng một đòn duy nhất. Hợp đồng thông minh không thể bị ném bom; nó tồn tại trên hàng nghìn node. Một garage chứa linh kiện drone cũng vậy – nó không phải là một nhà máy quốc phòng, nó là một nút trong mạng lưới sản xuất phân tán.
Hãy nhìn vào kiến trúc. Ukraine sản xuất FPV drone theo mô hình "garage factory" – hàng trăm xưởng nhỏ lẻ, mỗi xưởng lắp ráp vài chục con mỗi tuần. Không có một cơ sở duy nhất nào mà nếu bị phá hủy sẽ ngừng toàn bộ chuỗi cung ứng. Đây là khả năng chống kiểm duyệt áp dụng vào sản xuất vũ khí – một khái niệm mà cộng đồng crypto gọi là "censor-resistant". Trong khi đó, xe tăng T-72B3 của Nga là một hệ thống tập trung: cần một nhà máy Uralvagonzavod khổng lồ, cần đường ray vận chuyển, cần kỹ sư chuyên môn cao, cần logistics bảo trì phức tạp. Một hệ thống như vậy có "single point of failure" – không phải ở một node, mà ở toàn bộ mạng lưới kỹ thuật duy trì nó. Hãy nhớ Ronin Bridge. 600 triệu đô la bị hack vì năm trong chín validator keys nằm trên một máy chủ duy nhất – một lỗ hổng kiến trúc ẩn sau vỏ bọc phi tập trung. Xe tăng Nga cũng vậy: một lớp giáp dày 700mm ẩn sau một lỗ hổng duy nhất trên nóc xe. FPV drone chỉ cần tìm đúng validator – điểm yếu duy nhất – và exploit nó.
Số học của sự bất đối xứng là điều khiến tôi giật mình. Một xe tăng T-72B3 giá khoảng hai đến ba triệu đô la. Một FPV drone giá năm trăm đô la. Giả sử tỷ lệ tiêu diệt mục tiêu là hai mươi phần trăm – nghĩa là cần năm drone để hạ một xe tăng. Tổng chi phí: 2.500 đô la. Tỷ lệ trao đổi khoảng 1:1000. Đây là một đòn bẩy mà bất kỳ ai trong DeFi cũng mơ ước. Nhưng đừng vội kết luận. Năm 2020, tôi viết một bài phân tích tám nghìn từ về Uniswap V2, chỉ ra rằng công thức x*y=k tạo ra impermanent loss trong một số điều kiện thanh khoản. Bài toán tương tự với FPV drone: hiệu quả chỉ tồn tại trong một môi trường cụ thể. Khi chiến trường có ít hệ thống phòng không, khi xe tăng hoạt động đơn lẻ, khi tác chiến điện tử chưa được triển khai toàn diện. Trong một môi trường khác – ví dụ khi Nga triển khai hệ thống EW dày đặc, khi có lồng chống drone trên nóc xe, khi phòng không tầm ngắn được bổ sung – FPV drone có thể trở thành "impermanent loss" của Ukraine: tồn tại trong lý thuyết, nhưng không mang lại lợi ích thực tế trên chiến trường.
Reentrancy attack kinh điển trong smart contract hoạt động như sau: một hàm withdraw() gửi tiền cho người gọi trước khi cập nhật số dư của họ. Hợp đồng của kẻ tấn công nhận được ETH, rồi gọi lại withdraw() một lần nữa – trước khi transaction đầu tiên hoàn tất, trước khi state được set về 0. Lặp lại. Vô hạn. Chiến trường Ukraine đang vận hành đúng logic này. Ukraine dùng FPV drone tấn công xe tăng Nga; mỗi lần thành công là một lần "sendFunds" – tiêu diệt một mục tiêu giá trị cao. Nhưng Nga chưa kịp "update state" – họ vẫn đưa xe tăng ra chiến trường theo cách cũ, vẫn xếp hàng dài trên đường hành quân, vẫn tin rằng giáp dày và hỏa lực sẽ bảo vệ họ. Ukraine lặp lại cuộc gọi. Đây chính là reentrancy ở cấp độ chiến lược – và mỗi video drone lao vào xe tăng được lan truyền trên Telegram, Twitter, và cả các trang tin như Crypto Briefing chính là một hàm gọi được thực hiện lại một lần nữa trên toàn cầu.
Nhưng tôi đã học được từ lớp học đầu tiên của mọi auditor: checks-effects-interactions. Không có lỗ hổng nào tồn tại vĩnh viễn. Nga đang học bài học này. Họ bắt đầu sản xuất drone của riêng mình – Lancet, Zala, Geran-2 – và triển khai các hệ thống tác chiến điện tử như R-330Zh Zhitel hoặc Pole-21 để gây nhiễu tín hiệu GPS và điều khiển. Họ thêm lồng thép hàn vội lên nóc xe, họ thay đổi đội hình hành quân, họ tích hợp cảm biến phát hiện drone. Khi họ cập nhật state, reentrancy không còn hoạt động. Chiến tranh drone trở thành một cuộc đua viết lại code – bên nào thích nghi nhanh hơn, bên nào triển khai bản vá sớm hơn, bên đó sống sót. Tôi nhớ đến ZK-Rollup: chi phí tạo bằng chứng cho một batch giao dịch có thể lên tới vài trăm đô la – một con số kinh khủng trong điều kiện gas trung bình. Nhưng khi chi phí phòng thủ (lồng thép, EW, phòng không tầm ngắn) vượt quá chi phí tấn công (một drone 500 đô la), "strategic shift" của Ukraine sẽ biến mất. Vấn đề chỉ là thời gian.
Trong blockchain, proof-of-work là một cơ chế costly signaling – bạn đốt hàng nghìn megawatt điện để chứng minh bạn nghiêm túc với chuỗi. Ukraine đang làm điều tương tự với FPV drone. Mỗi video drone tấn công xe tăng là một "block" trong chuỗi khối tường thuật – chi phí 500 đô la để xác minh rằng "xe tăng của bạn vô dụng". Đây là một dạng attestation mạnh nhất: không phải lời nói, không phải tuyên bố chính trị, mà là một hành động tốn kém được ghi lại không thể xóa. Đoạn video không thể bị giả mạo – bởi vì nó được quay từ chính quả drone, với góc nhìn thứ nhất, lao thẳng vào mục tiêu. Bạn không thể fake điều đó mà không tốn kém. Đây là lý do tại sao bài báo lại xuất hiện trên Crypto Briefing – cộng đồng crypto hiểu ngay ngôn ngữ này: costly signal, proof-of-destruction, tính bất biến của bằng chứng. Một video FPV không thể bị xóa khỏi Internet. Nó là immutable, như một transaction trên Ethereum.
Và đây là điểm mù mà tôi muốn mổ xẻ. Mọi bài báo đều nói "FPV drone là tương lai của chiến tranh". Nhưng tôi thấy một nghịch lý lộ ra ngay giữa trung tâm của câu chuyện: Ukraine phụ thuộc khoảng 80% linh kiện từ Trung Quốc. Motor, flight controller, camera, pin, khung carbon – tất cả đều đến từ các nhà máy ở Thâm Quyến và khu vực lân cận. Nếu nguồn cung này bị chặn – dù vì lý do chính trị, do bị kiểm soát xuất khẩu, hay do bên thứ ba gây áp lực – "chiến tranh phi tập trung" của Ukraine sẽ sụp đổ trong vòng vài tuần. Nghe quen không? Giống hệt DeFi: chúng ta nói "don't trust, verify