"40% URI tập trung – hãy gọi nó là 'một cuộc tấn công vào cơ sở hạ tầng'"
Đầu tuần này, tôi đọc một bản phân tích địa chính trị về một cố vấn cấp cao của Lãnh tụ tối cao Iran. Bản phân tích dài 10.000 từ, mổ xẻ từng khía cạnh: từ năng lực quân sự, trò chơi địa chính trị, cho đến tác động kinh tế toàn cầu. Nó rất chi tiết, rất bài bản. Nhưng khi đọc xong, tôi chỉ thấy một thứ: một lỗ hổng giao thức cấp hệ thống.
Vấn đề không nằm ở Iran. Vấn đề nằm ở mô hình. Mô hình phân tích đó, với tất cả sự tinh vi của nó, đã mắc phải một lỗi logic cơ bản mà bất kỳ ai từng audit hợp đồng thông minh đều biết: nó đối xử với các sự kiện rời rạc như thể chúng là một phần của cùng một giao dịch nguyên tử.
Context
Bản phân tích lấy ba sự kiện riêng biệt — một cuộc tấn công vào sân bay Shahre Kord, một cuộc tấn công vào bệnh viện Ahvaz, và một cuộc tấn công vào trường học Minab — và gộp chúng lại dưới một 'bối cảnh hoạt động' duy nhất. Sau đó, nó gán ba sự kiện này cho một 'liên minh phi chính thức' duy nhất (Mỹ và Israel). Từ đó, nó xây dựng một 'bậc thang leo thang' tuyến tính: nếu Iran bị tấn công, nó sẽ đáp trả bằng cách phá vỡ chuỗi cung ứng năng lượng toàn cầu.
Nghe có vẻ hợp lý? Đây chính xác là cách mà hầu hết mọi người — và hầu hết các nhà phân tích — vẫn nghĩ. Họ nhìn thấy một mô hình, và họ cho rằng mô hình đó là kết quả của một ý định duy nhất. Trong blockchain, chúng tôi gọi đó là 'replay attack'.
Core: Phân tích cấp giao thức
Hãy nhìn vào ba sự kiện này như thể chúng là các giao dịch riêng lẻ trên một mempool.
- Giao dịch A (Sân bay Shahre Kord): Một cuộc tấn công vào một mục tiêu quân sự-giả định. Cần một loại vũ khí và kiến thức tình báo cụ thể.
- Giao dịch B (Bệnh viện Ahvaz): Một cuộc tấn công vào một mục tiêu dân sự, được quy cho 'quân đội Mỹ' bởi một quan chức địa phương. Không có xác nhận độc lập.
- Giao dịch C (Trường học Minab): Một vụ nổ gây thương vong tối thiểu, được báo cáo thông qua các nguồn địa phương.
Bản phân tích gốc đã không kiểm tra chữ ký của từng giao dịch. Nó cho rằng cả ba đều được ký bởi cùng một thực thể (Mỹ/Israel). Nhưng trên thực tế, 'chữ ký' của giao dịch B (bệnh viện Ahvaz) lại đến từ một nguồn không đáng tin cậy: chính quyền địa phương Iran. Đây giống như việc tin tưởng một hàm revert() trong một hợp đồng kẻ tấn công đã triển khai.
Hơn nữa, bản phân tích đã xây dựng một cây trạng thái dựa trên giả định này. Nó cho rằng 'trạng thái' hiện tại của khu vực là 'một liên minh đang tấn công cơ sở hạ tầng Iran'. Từ đó, nó suy ra rằng hành động tiếp theo của Iran (phá vỡ năng lượng) là một 'chuyển đổi trạng thái' hợp lệ. Điều này hoàn toàn sai về mặt thiết kế giao thức. Bạn không thể suy ra trạng thái tiếp theo của một hệ thống nếu bạn không biết chính xác trạng thái hiện tại là gì.
"Không phải một cuộc tấn công có chủ đích, mà là một mempool đầy nhiễu"
Kinh nghiệm audit của tôi cho tôi biết: khi bạn thấy ba lỗi riêng biệt trong một hợp đồng, đừng vội cho rằng chúng là một phần của cùng một vector tấn công. Rất có thể, chúng là ba lỗi riêng biệt, được kích hoạt bởi ba tác nhân khác nhau, với ba mục đích khác nhau. Các cuộc tấn công vào Iran có thể đến từ các nhóm đối lập, các phe phái nội bộ, hoặc các cơ hội cơ hội. Việc gộp chúng lại là một lỗi 'merge' nghiêm trọng.
Contrarian: Điểm mù của 'phân tích địa chính trị truyền thống'
Điểm mù ở đây không phải là thiếu thông tin. Điểm mù là sự phụ thuộc quá mức vào 'oracle' tập trung. Các nhà phân tích địa chính trị thường dựa vào một vài nguồn tin chính thống — tuyên bố của chính phủ, báo cáo từ các cơ quan tình báo phương Tây. Họ coi những nguồn này như một oracle duy nhất, không thể kiểm tra được.
Trong thế giới DeFi, chúng tôi gọi đó là 'oracle problem'. Nếu giao thức của bạn chỉ dựa vào một nguồn dữ liệu duy nhất, nó sẽ sụp đổ khi nguồn đó bị thao túng. Bản phân tích về Iran đã làm điều tương tự: nó dựa vào một câu chuyện do Iran kể, và sau đó xây dựng toàn bộ chiến lược toàn cầu dựa trên câu chuyện đó.
Hãy thử một phép thử: nếu Mỹ không phải là kẻ tấn công, thì toàn bộ luận điểm về 'sự leo thang' sụp đổ. Nếu các cuộc tấn công là ngẫu nhiên và không phối hợp, thì 'sự đáp trả' của Iran trở nên vô nghĩa. Và nếu Iran vẫn đáp trả, nó không còn là 'phòng thủ' nữa, mà là một hành động gây hấn thuần túy.
"Tôi đã thấy lỗi này trước đây. Trong audit hợp đồng Aragon, một lỗi tương tự đã cho phép kẻ tấn công chiếm quyền kiểm soát bằng cách gửi 500 ETH giả mạo. Sự giả mạo không nằm ở ETH, mà nằm ở cách hệ thống tin tưởng vào một nguồn dữ liệu không được xác thực."
Takeaway: Dự báo lỗ hổng
Các nhà phân tích địa chính trị cần học cách code. Họ cần hiểu rằng thế giới không vận hành theo một chuỗi nhân quả tuyến tính. Nó vận hành như một máy trạng thái, nơi các giao dịch độc lập va chạm với nhau và tạo ra các kết quả không mong muốn.
Lỗ hổng thực sự không phải là cơ sở hạ tầng của Iran. Lỗ hổng là cách chúng ta phân tích rủi ro. Chúng ta đang xây dựng các mô hình dựa trên các giả định không được kiểm tra, và sau đó đưa ra các quyết định đầu tư hoặc chính sách hàng tỷ đô la dựa trên chúng. Điều này còn nguy hiểm hơn bất kỳ lỗi reentrancy nào.
Nếu bạn muốn hiểu Iran, đừng đọc các báo cáo địa chính trị. Hãy đọc code. Hoặc ít nhất, hãy kiểm tra chữ ký của từng nguồn tin trước khi bạn gửi giao dịch của mình.