Đóng góp từ các chuyên gia, các đơn vị & thương hiệu :
- Ủy ban Khoa học – công nghệ Web3 – Hiệp hội Blockchain Việt Nam
- Công ty cổ phần TrustKeys Finance – thành viên hiệp hội Blockchain Việt Nam
- Khoa An toàn thông tin học viện Công nghệ bưu chính viễn thông (PTIT)
- Viện công nghệ thông tin & truyền thông – Học viện Kỹ thuật quân sự
- Ngành Ứng dụng phần mềm – Cao đẳng Việt Mỹ Hà Nội
Tóm tắt (Abstract)
Vào ngày 21 tháng 2 năm 2025, sàn giao dịch tiền mã hóa ByBit đã hứng chịu một vụ tấn công nghiêm trọng nhằm vào ví lạnh đa chữ ký (multisig cold wallet), dẫn đến thiệt hại khoảng 1,5 tỷ USD tài sản Ethereum (ETH) và token ERC20. Vụ tấn công khai thác lỗ hổng trong logic hợp đồng thông minh của ví Safe.global, kết hợp với điểm yếu trong cơ sở hạ tầng Web2, cho phép kẻ tấn công vượt qua các biện pháp bảo mật và chiếm quyền kiểm soát ví. Nghiên cứu này cung cấp phân tích chi tiết về các bước tấn công, bao gồm chuẩn bị giao dịch độc hại, thực thi giao dịch thông qua delegatecall, và rút tài sản bằng các hàm trong hợp đồng độc hại. Kết quả nhấn mạnh sự cần thiết của việc cải thiện bảo mật toàn diện cho cả Web2 và Web3, đồng thời đưa ra các bài học quan trọng về quản lý ví đa chữ ký trong hệ sinh thái blockchain.
Giới thiệu (Introduction)
ByBit là một sàn giao dịch tiền mã hóa hàng đầu, nổi tiếng với việc sử dụng ví lạnh đa chữ ký (multisig cold wallet) để bảo vệ tài sản của mình. Ví multisig yêu cầu nhiều chữ ký từ các bên được ủy quyền để thực hiện bất kỳ giao dịch nào, nhằm tăng cường bảo mật so với ví đơn chữ ký truyền thống. Ví lạnh multisig của ByBit được triển khai bởi Safe.global, một nền tảng quản lý tài sản blockchain phổ biến, sử dụng cấu trúc hợp đồng proxy để đảm bảo tính linh hoạt và bảo mật. Tuy nhiên, vào ngày 21 tháng 2 năm 2025, một vụ tấn công tinh vi đã xâm phạm ví lạnh này, dẫn đến việc mất khoảng 1,5 tỷ USD tài sản. Bài viết này trình bày phân tích kỹ thuật chi tiết về vụ tấn công, bao gồm phương pháp thực hiện, các lỗ hổng bị khai thác, và những tác động đối với an ninh blockchain.
Ví bị hack của ByBit là ví gì? Có phải ví lạnh không?
Theo dữ liệu onchain trên Etherscan.com thì địa chỉ ví bị tấn công là một smart contract – có gắn nhãn “ByBit: Cold Wallet 1” , địa chỉ cụ thể: 0x1Db92e2EeBC8E0c075a02BeA49a2935BcD2dFCF4
Khi đi sâu vào xem mã nguồn của địa chỉ thì thấy nó là địa chỉ smart contract mã nguồn mở. Và có thể nó chỉ được kiểm soát bởi các ví lạnh (nhiều người ký duyệt giao dịch)
Phương pháp (Methodology)
Vụ tấn công được thực hiện qua ba giai đoạn chính, kết hợp khai thác lỗ hổng trong hợp đồng thông minh và điểm yếu trong cơ sở hạ tầng Web2. Dưới đây là mô tả chi tiết từng bước:
1. Chuẩn bị và Đưa Giao dịch Độc hại vào Ví (Bước 0)
Kẻ tấn công đã tạo một giao dịch độc hại mang tên “transfer” với giá trị 0 ETH, nhằm đánh lừa những người ký duyệt giao dịch rằng đây là một thao tác không gây hại. Giao dịch này được thiết kế để trông giống một lệnh chuyển tiền thông thường, nhưng thực chất chứa dữ liệu độc hại trong tham số data. Phương pháp đưa giao dịch này vào hệ thống chưa được xác định rõ ràng, nhưng các giả thuyết bao gồm:
- Lừa đảo (Phishing): Kẻ tấn công có thể đã giả mạo giao diện hoặc email để lừa người ký duyệt.
- Khai thác API: Một lỗ hổng trong API của Safe.global hoặc ByBit có thể đã bị khai thác để chèn giao dịch.
- Thao túng giao diện người dùng: Dữ liệu giao dịch có thể đã bị hiển thị sai lệch trên giao diện, khiến người ký không nhận ra mối nguy hiểm.
Sau khi giao dịch được đưa vào, nó đã thu thập đủ chữ ký cần thiết từ các thành viên của ByBit để bước vào giai đoạn thực thi.
2. Thực thi Giao dịch Độc hại (Bước 1)
Với đủ chữ ký, kẻ tấn công gọi hàm execTransaction trong hợp đồng Safe.global để thực thi giao dịch. Hàm này được thiết kế để thực hiện các lệnh tùy chỉnh, bao gồm cả delegatecall, một cơ chế cho phép hợp đồng gọi mã từ một hợp đồng khác trong ngữ cảnh của chính nó. Dữ liệu giao dịch cụ thể như sau:
execTransaction(
to = 0x96221423681A6d52E184D440a8eFCEbB105C7242,
value = 0,
data = 0xa9059cbb000000000000000000000000bdd077f651ebe7f7b3ce16fe5f2b025be29695160000000000000000000000000000000000000000000000000000000000000000,
operation = 1,
safeTxGas = 45746,
baseGas = 0,
gasPrice = 0,
gasToken = 0x0000000000000000000000000000000000000000,
refundReceiver = 0x0000000000000000000000000000000000000000,
signatures = 0xd0afef78a52fd504479dc2af3dc401334762cbd05609c7ac18db9ec5abf4a07a5cc09fc86efd3489707b89b0c729faed616459189cb50084f208d03b201b001f1f0f62ad358d6b319d3c1221d44456080068fe02ae5b1a39b4afb1e6721ca7f9903ac523a801533f265231cd35fc2dfddc3bd9a9563b51315cf9d5ff23dc6d2c221fdf9e4b878877a8dbeee951a4a31ddbf1d3b71e127d5eda44b4730030114baba52e06dd23da37cd2a07a6e84f9950db867374a0f77558f42adf4409bfd569673c1f)
- operation = 1: Chỉ định sử dụng delegatecall thay vì call thông thường.
- to = 0x96221423681A6d52E184D440a8eFCEbB105C7242: Địa chỉ hợp đồng độc hại do kẻ tấn công triển khai.
- data: Chứa lệnh thay đổi địa chỉ triển khai logic của ví proxy sang 0xbdd077f651ebe7f7b3ce16fe5f2b025be2969516.
Việc sử dụng delegatecall cho phép hợp đồng độc hại thực thi mã trong ngữ cảnh của ví multisig, từ đó thay đổi logic cốt lõi của ví mà không cần thêm bất kỳ xác nhận nào. Bên dưới là mã nguồn độc hại được dịch ngược.
Các bước thực thi
3. Chiếm Quyền Kiểm soát và Rút Tài sản (Bước 2)
Sau khi logic ví bị thay đổi, kẻ tấn công sử dụng các hàm trong hợp đồng độc hại để rút tài sản. Các hàm chính bao gồm:
- sweepETH: Chuyển toàn bộ ETH từ ví Multisig sang địa chỉ của kẻ tấn công.
- sweepERC20: Rút tất cả token ERC20 có trong ví.
Quá trình này không yêu cầu thêm chữ ký vì logic ví đã hoàn toàn nằm dưới sự kiểm soát của kẻ tấn công. Các giao dịch rút tài sản được ghi nhận trên blockchain với các mã giao dịch cụ thể (xem phần Kết quả).
Kết quả (Results)
Phân tích kỹ thuật của vụ tấn công cho thấy nhiều phát hiện quan trọng:
Thông tin Ví Bị Tấn công
- Địa chỉ ví: 0x1Db92e2EeBC8E0c075a02BeA49a2935BcD2dFCF4
Nhà cung cấp: Safe.global
- Loại ví: Multisig Proxy Cold Wallet, được gắn nhãn trên Etherscan là “ByBit: Cold Wallet 1”.
- Cấu trúc: Sử dụng hợp đồng proxy, trong đó logic được ủy quyền cho một hợp đồng khác thông qua delegatecall.
Lỗ hổng trong Hợp đồng Thông minh
- Cơ chế delegatecall: Hàm execTransaction với operation = 1 cho phép gọi mã từ hợp đồng độc hại trong ngữ cảnh của ví multisig. Điều này dẫn đến việc kẻ tấn công thay đổi địa chỉ triển khai logic từ hợp đồng gốc sang 0xbdd077f651ebe7f7b3ce16fe5f2b025be2969516.
- Hợp đồng độc hại: Được triển khai tại 0x96221423681A6d52E184D440a8eFCEbB105C7242, chứa các hàm để ghi đè logic và rút tài sản.
Mã Nguồn Hợp đồng Độc hại
Dưới đây là các hàm chính trong hợp đồng độc hại:
uint256 _transfer; // STORAGE[0x0]
// Thay đổi địa chỉ triển khai logic
function transfer(address recipient, uint256 amount) public payable {
require(msg.data.length – 4 >= 64);
_transfer = recipient; // Ghi đè địa chỉ logic thành 0xbdd077f651ebe7f7b3ce16fe5f2b025be2969516
}
// Rút ETH
function sweepETH(address receiver) public payable {
require(msg.data.length – 4 >= 32);
require(msg.sender == 0xfa09c3a328792253f8dee7116848723b72a6d2e, “Ownable: caller is not the owner”);
(bool success, ) = receiver.call{value: address(this).balance, gas: 2300}(“”);
require(success, “ETH transfer failed”);
}
// Rút token ERC20
function sweepERC20(address token, address to) public payable {
require(msg.data.length – 4 >= 64);
require(msg.sender == 0xfa09c3a328792253f8dee7116848723b72a6d2e, “Ownable: caller is not the owner”);
(bool success1, bytes memory data) = token.call(abi.encodeWithSignature(“balanceOf(address)”, address(this)));
require(success1, “Balance check failed”);
uint256 balance = abi.decode(data, (uint256));
(bool success2, ) = token.call(abi.encodeWithSignature(“transfer(address,uint256)”, to, balance));
require(success2, “Token transfer failed”);
}
- Hạn chế quyền truy cập: Chỉ địa chỉ 0xfa09c3a328792253f8dee7116848723b72a6d2e (kẻ tấn công) được phép gọi các hàm rút tài sản.
Giao dịch Liên quan
- Giao dịch độc hại ban đầu:
https://etherscan.io/tx/0x46deef0f52e3a983b67abf4714448a41dd7ffd6d32d32da69d62081c68ad7882 - Giao dịch rút tài sản:
https://etherscan.io/tx/0x25800d105db4f21908d646a7a3db849343737c5fba0bc5701f782bf0e75217c9
https://etherscan.io/tx/0xb61413c495fdad6114a7aa863a00b2e3c28945979a10885b12b30316ea9f072c
Thiệt hại
Tổng cộng khoảng 1,5 tỷ USD tài sản, bao gồm ETH và token ERC20, đã bị rút khỏi ví lạnh của ByBit trong vòng vài giờ sau khi logic ví bị thay đổi.
Thảo luận (Discussion)
Vụ tấn công mang lại nhiều bài học và nhận định quan trọng:
1. Sai sót của Con người
Kẻ tấn công khai thác sự bất cẩn của người ký bằng cách tạo giao dịch “transfer” với giá trị 0 ETH, che giấu ý định thực sự trong tham số data. Người ký cần kiểm tra toàn bộ dữ liệu giao dịch, không chỉ giá trị value, để phát hiện các tham số nguy hiểm như operation = 1.
2. Điểm yếu trong Cơ sở hạ tầng Web2
Việc giao dịch độc hại được đưa vào hệ thống cho thấy khả năng tồn tại lỗ hổng trong các thành phần Web2 (API, giao diện người dùng). Điều này nhấn mạnh rằng bảo mật blockchain không chỉ phụ thuộc vào hợp đồng thông minh mà còn vào toàn bộ hệ sinh thái xung quanh.
3. Thiết kế Hợp đồng Thông minh
Tính linh hoạt của Safe.global, đặc biệt là hỗ trợ delegatecall, là một con dao hai lưỡi. Dù mạnh mẽ, nó tạo ra rủi ro lớn khi kết hợp với lỗi con người hoặc thao túng dữ liệu.
4. So sánh với Tài chính Truyền thống
Hệ thống tài chính truyền thống có thể ít bị tấn công công khai hơn, nhưng các vụ gian lận thường kéo dài và khó phát hiện do thiếu minh bạch. Blockchain, ngược lại, minh bạch hơn, nhưng việc phục hồi tài sản sau tấn công lại là thách thức lớn.
5. Đánh giá Ví Safe.global
Safe.global không có lỗi trực tiếp trong thiết kế hợp đồng, nhưng vụ tấn công cho thấy cần cải thiện giao diện người dùng và cơ chế xác thực Web2 để ngăn chặn thao túng dữ liệu giao dịch.
Kết luận (Conclusion)
Vụ tấn công ví lạnh multisig của ByBit ngày 21 tháng 2 năm 2025 là một trong những sự kiện nghiêm trọng nhất trong lịch sử blockchain, với thiệt hại 1,5 tỷ USD. Nó cho thấy sự kết hợp nguy hiểm giữa lỗ hổng kỹ thuật và sai sót con người, đồng thời nhấn mạnh nhu cầu cấp thiết về bảo mật toàn diện trong cả Web2 và Web3. Các biện pháp như kiểm tra giao dịch kỹ lưỡng, cải thiện giao diện người dùng, và nâng cao nhận thức người dùng là cần thiết để ngăn chặn các vụ tấn công tương tự trong tương lai.