
Vào ngày 2 tháng 11, Mạng Axion đã ra mắt mã thông báo mới của mình, được gọi là AXN. Dự án đã chào hàng tài sản như một phương tiện đầu tư mới, tuyên bố rằng nó sẽ là chuỗi khối có lợi nhuận cao nhất cho đến nay. Trong quá trình dẫn đầu tạm thời cho đợt airdrop của AXN, năm nhóm riêng biệt được cho là đã kiểm tra mã của mã thông báo; những công ty con trong ngành như CertiK và Hacken nằm trong số những người đã tiến hành kiểm toán.
Tuy nhiên, một vài giờ ngắn sau sự kiện miễn phí của giao thức, rõ ràng là đã có điều gì đó không ổn. Một diễn viên không được phép đã bất ngờ đúc 79 tỷ AXN và bán chúng ra thị trường. Giá giảm hơn 99%, thu về cho những kẻ tấn công 1300 ETH – trị giá ước tính 500.000 đô la tại thời điểm xuất bản.
Trong những giờ sau đó, nhóm đứng sau dự án Axion đã khuyến khích người tham gia tránh xa giao dịch hoặc tương tác với tài sản, cho biết qua kênh Telegram chính thức của nền tảng:
“Không mua AXN ngay bây giờ, không tương tác với trang tổng quan,”
Tài khoản Twitter của Mạng Axion tiếp tục đăng các bản cập nhật, bao gồm:
Chúng tôi vẫn ở đây.
Tất cả AXN / HEX2T mà mọi người đang nắm giữ tại thời điểm khai thác sẽ được ghi có.
Chúng tôi sẽ khởi chạy cổng phần thưởng thanh khoản để xây dựng thanh khoản trở lại.
Chúng tôi đang làm việc chăm chỉ để khởi chạy lại AXN càng sớm càng tốt.
– Axion (@axion_network) Ngày 2 tháng 11 năm 2020
Bất chấp những cam đoan này, CertiK đang tiến tới cung cấp cho cộng đồng lời giải thích rõ ràng hơn về những gì họ cho là đã sai và hiểu rõ hơn về cách các cuộc tấn công tương tự có thể được ngăn chặn trong tương lai. Cointelegraph đã liên hệ qua email với “Jack Durden”, người được mô tả với chúng tôi là Giám đốc điều hành của Mạng Axion, nhưng không nhận được phản hồi ngay lập tức. Không có thành viên nào trong nhóm được liệt kê trong sách trắng của dự án hoặc trên trang web và tên “Jack Durden” được chia sẻ với người kể chuyện chưa từng thấy trong phim Câu lạc bộ chiến đấu.
Lưu ý rằng phần còn lại của bài viết này được sao chép lại từng chữ một, với sự cho phép của CertiK, như một dịch vụ công nhằm giáo dục độc giả về sự hiểu biết của nhóm kiểm toán về những gì đã xảy ra. Cointelegraph đã không kiểm tra mã và các quan điểm được nêu sau đây do đó chỉ là quan điểm của CertiK.
Báo cáo của nhân viên CertiK về sự sụp đổ giá Axion
Vào ngày 2 tháng 11 năm 2020 lúc khoảng 11:00 sáng + UTC một hacker đã quản lý để đúc khoảng 80 tỷ AXN token bằng cách sử dụng chức năng hủy bỏ của hợp đồng Axion Staking.
Sau đó, hacker đã tiến hành bán các mã thông báo trên sàn giao dịch AXN Uniswap để lấy Ether, lặp lại quá trình này cho đến khi sàn giao dịch Uniswap bị rút hết và giá mã thông báo được đẩy về 0.
Chúng tôi đã được thông báo về sự cố trong vòng vài phút sau khi cuộc tấn công xảy ra và các nhà phân tích bảo mật của chúng tôi bắt đầu đánh giá tình hình ngay lập tức.
Chúng tôi đã kết luận rằng cuộc tấn công có thể được lên kế hoạch từ bên trong, liên quan đến việc tiêm mã độc vào thời điểm mã được triển khai bằng cách thay đổi mã từ các phụ thuộc OpenZeppelin.
Chức năng đã khai thác không phải là một phần của quá trình kiểm tra mà chúng tôi đã tiến hành vì nó được thêm vào sau khi kết hợp mã Axion với mã của OpenZeppelin thông qua “làm phẳng” và đưa nó vào trong mã của OpenZeppelin trước khi triển khai.
Lập kế hoạch
Tin tặc đã sử dụng các khoản tiền ẩn danh được mua từ tornado.cash một ngày trước khi vụ hack xảy ra, ám chỉ về một cuộc tấn công được thiền định trước. Có lẽ để tiết kiệm một số tiền trong trường hợp cuộc tấn công không thành công, 2.1 Ether đã được tái lưu thông trong tornado.cash ngay sau khi tài khoản nhận được tiền.
Để hoàn thiện thiết lập tấn công, tin tặc đã mua ~ 700k mã thông báo HEX2T từ sàn giao dịch Uniswap. Tuy nhiên, những khoản tiền này cuối cùng không phải là một phần của cuộc tấn công và đóng vai trò như một màn khói liên quan đến cách cuộc tấn công diễn ra.
Thiết lập
Tin tặc bắt đầu theo hướng thực hiện cuộc tấn công của họ bằng cách tạo ra một khoản tiền “trống” trên Hợp đồng đặt cọc của Mạng Axion bằng cách gọi hàm đặt cược với số tiền 0 và thời hạn đặt cược 1 ngày tại khoảng 09:00 AM + UTC. Điều này đã tạo mục nhập Phiên cho kẻ tấn công với số lượng 0 và giá trị 0 cổ phiếu tại ID phiên 6.
Sau đó, kẻ tấn công đã phê duyệt trước một lượng AXN không giới hạn cho sàn giao dịch Uniswap với dự đoán cuộc tấn công của chúng sẽ thành công. Do đó, họ đã chấp thuận hợp đồng NativeSwap của Axion cho số tiền mà họ dự định chuyển đổi thành mã thông báo AXN.
Họ đã gọi chức năng gửi tiền của hợp đồng NativeSwap tại khoảng 10:00 sáng + giờ UTC, tuy nhiên, tin tặc không bao giờ gọi hàm rút lại của hợp đồng để yêu cầu AXN đã hoán đổi của anh ta như hiển nhiên trong hàm swapTokenBalanceOf của hợp đồng NativeSwap. Sau đó, họ thực hiện thêm một lần gọi hàm gửi không thành công trước khi thực hiện cuộc tấn công.
Chấp hành
Các giao dịch này chỉ đơn thuần là màn hình khói cho cách thức thực hiện cuộc tấn công hủy bỏ giao dịch. Vì các giao dịch mà kẻ tấn công thực hiện không dẫn đến thay đổi ánh xạ sessionDataOf, chúng tôi kết luận rằng đây là một cuộc tấn công đa địa chỉ.
Chúng tôi đã điều tra mã nguồn của hợp đồng tại kho lưu trữ GitHub đã được chia sẻ với chúng tôi để xác định một lỗ hổng có thể khiến ánh xạ sessionDataOf bị ảnh hưởng.
Chúng tôi không thể phát hiện bất kỳ nhiệm vụ nào cho nó hoặc các thành viên của nó bên ngoài các chức năng liên quan, điều này khiến chúng tôi đặt câu hỏi liệu việc triển khai các hợp đồng có được tiến hành đúng cách hay không.
Vector tấn công
Sau khi phân tích mã nguồn của hợp đồng Staking được triển khai, chúng tôi đã xác định chính xác một đoạn mã trong thư viện AccessControl OpenZeppelin giữa L665-L671 của mã nguồn triển khai của Hợp đồng đặt cọc. Hàm checkRole được liên kết không phải là một phần của triển khai OpenZeppelin v3.0.1, được liệt kê là phụ thuộc trong kho lưu trữ GitHub của dự án.
Trong hàm checkRole, tồn tại khối lắp ráp sau:

Chức năng cụ thể này cho phép một địa chỉ cụ thể tiến hành ghi tùy ý vào hợp đồng dựa trên các biến đầu vào mà nó bổ sung thông qua các lệnh gọi cấp thấp. Chú thích, khối lắp ráp sẽ trông như thế này:

Chức năng này đã được đưa vào lúc triển khai vì nó không tồn tại trong việc triển khai OpenZeppelin AccessControl, có nghĩa là các thành viên của Mạng Axion có liên quan đến việc triển khai mã thông báo đã hành động có hại.
Phần kết luận
Cuộc tấn công đã sử dụng mã được cố ý đưa vào trước khi triển khai giao thức. Sự cố này không liên quan đến các cuộc kiểm toán do CertiK thực hiện và bên chịu trách nhiệm cho cuộc tấn công là một người dường như có liên quan đến việc triển khai các hợp đồng của Mạng Axion.
Như một mức độ bảo mật bổ sung, báo cáo kiểm toán nên chuẩn hóa để bao gồm các địa chỉ hợp đồng thông minh đã triển khai có mã nguồn đã được xác minh là giống với địa chỉ đã được kiểm toán.
Các Bảo mật Oracle đóng vai trò là người chuyển tiếp trên chuỗi thông tin tình báo bảo mật, tiến hành kiểm tra bảo mật bao gồm xác minh các hợp đồng thông minh đã triển khai để khớp với các phiên bản đã được kiểm toán.
