Ngày 21 tháng 2 năm 2025, các nhà tấn công đã lấy đi khoảng 1,46 tỷ USD từ ví lạnh Ethereum của Bybit trong một giao dịch duy nhất – vụ đánh cắp tiền điện tử lớn nhất từng được ghi nhận. Sự xâm nhập không khai thác lỗi trong smart contract hoặc phá vỡ mật mã của Ethereum. Nó làm suy yếu một nhà phát triển tại Safe{Wallet}, đưa mã JavaScript độc hại vào giao diện mà Bybit sử dụng để ký các giao dịch, và lừa ba người ký bằng ví cứng để chấp nhận nâng cấp hợp đồng mà họ cho là một chuyển giao nội bộ thông thường. Nhà tấn công là nhóm Lazarus của Triều Tiên, và phương pháp – một cuộc tấn công chuỗi cung ứng vào cơ sở hạ tầng ký – đã phát hiện ra một lỗ hổng ở trung tâm của việc quản lý tiền điện tử của các tổ chức mà bất kỳ mức giới hạn multisig nào cũng không thể khắc phục một mình.
Bybit và Safe{Wallet}: Cài đặt
Bybit, được thành lập vào năm 2018, là một trong những sàn giao dịch tiền điện tử lớn nhất thế giới theo khối lượng giao dịch hiện tại và tương lai, phục vụ hơn 60 triệu người dùng. Giống như hầu hết các sàn giao dịch, Bybit phân loại các khoản tiền của khách hàng giữa ví nóng (trực tuyến, cho việc rút tiền hàng ngày) và ví lạnh (từ chối, cho phần lớn các khoản nắm giữ). Ví lạnh Ethereum của Bybit là một smart contract đa chữ ký Safe{Wallet} (cũ là Gnosis Safe) – một thiết lập thang độ 3-of-m yêu cầu ba chữ ký hợp lệ để thực hiện bất kỳ giao dịch nào.
Safe{Wallet} là tiêu chuẩn trong ngành cho việc quản lý multisig, được sử dụng bởi hàng nghìn DAO, sàn giao dịch và các tổ chức sở hữu tổng cộng hàng trăm tỷ đô la. Mỗi ví Safe là một hợp đồng đại diện, ủy quyền tất cả logic thực hiện cho một hợp đồng thực hiện (được gọi là masterCopy) thông qua delegatecall. Kiểu thiết kế này cho phép hợp đồng thực hiện được nâng cấp – một tính năng được thiết kế để cập nhật hợp lệ, nhưng nó trở nên thảm họa nếu một kẻ tấn công kiểm soát quá trình nâng cấp.
Các người ký đã sử dụng ví cứng Ledger để phê duyệt giao dịch. Tiến trình ký là: mở giao diện web Safe{Wallet} → xem chi tiết giao dịch trên màn hình → ký bằng Ledger → giao dịch được gửi lên chuỗi. Được giả định rằng ví cứng cung cấp một lớp xác minh không liên kết. Tuy nhiên, giả định này đã trở thành một sai lầm chết người.
Lịch sử: 48 giờ đã thay đổi thế giới tiền điện tử
19 tháng 2 năm 2025, 15:29 UTC — Các nhà tấn công đã chèn mã độc JavaScript vào khay AWS S3 của Safe{Wallet}, thay thế một tệp tài nguyên hợp lệ. Mã này được thiết kế để chỉ được kích hoạt khi nguồn giao dịch phù hợp với địa chỉ ví lạnh của Bybit (0x1db9…). Kiểm tra pháp y của Sygnia đã xác nhận thời điểm sửa đổi bằng cách sử dụng bộ nhớ đệm Wayback Archive.
21 tháng 2 năm 2025, ~14:13 UTC — Các người ký tên của Bybit đã mở giao diện Safe{Wallet} để thực hiện một chuyển khoản thường lệ từ ví lạnh sang ví nóng. JavaScript độc hại đã phát hiện địa chỉ mục tiêu và kích hoạt. Giao diện Safe hiển thị một chuyển khoản giống như một chuyển khoản thông thường: "gửi 401,000 ETH vào ví nóng". Bản tin giao dịch thực tế được gửi đến các thiết bị Ledger là một delegatecall sẽ thay thế hợp đồng thực hiện của Safe bằng một địa chỉ được kiểm soát bởi kẻ tấn công.
14:16 UTC — Ba người ký đã xem màn hình của họ, thấy dữ liệu giao dịch nguyên thủy mà họ không thể giải thích được, và đã ký. Giao dịch đã được gửi lên chuỗi: 0x46de.... Trường operation được đặt thành 1 (delegatecall) thay vì 0 (call). Đối tượng delegatecall đã thay thế slot 0 của proxy — địa chỉ masterCopy — bằng 0xbdd0..., một hợp đồng mà kẻ tấn công đã triển khai 72 giờ trước đó.
14:16–15:10 UTC – Người tấn công gọi hai hàm backdoor được tích hợp trong bản implement xấu: sweepETH() và sweepERC20(). Trong 5 giao dịch, họ đã rút:
| Tài sản | Số tiền | Giá USD (ở thời điểm đó) |
|---|---|---|
| ETH | 401,346.77 | ~ 1,12 tỷ USD |
| stETH | 90,375.55 | ~ 253 triệu USD |
| cmETH | 15,000 | ~ 44 triệu USD |
| mETH | 8,000 | ~ 23 triệu USD |
| USDT | 90 | 90 USD |
| Tổng | ~ 1,46 tỷ USD |
~14:18 UTC — Hai phút sau khi giao dịch tấn công được xác nhận, các nhà tấn công đã tải lên các bản sao sạch của các tập tin JavaScript vào khay S3 của Safe, loại bỏ mã độc hại. Điều này cho thấy họ đang theo dõi thời gian thực – họ đã xóa ngay lập tức sau khi payload được kích hoạt.
~12:30 PM UTC – Bybit phát hiện ra sự rò rỉ không được phép. Giám đốc điều hành Ben Zhou đã trực tiếp phát sóng trong vòng vài giờ, xác nhận sự rò rỉ và đảm bảo cho người dùng rằng tất cả các ví khác đều an toàn và quá trình rút tiền sẽ tiếp tục được thực hiện.
Số liệu: Thiệt hại, phục hồi và rửa tiền
Thiệt hại 1,46 tỷ USD vượt xa mọi vụ tấn công tiền điện tử trước đó. Để có cái nhìn tổng quan, vụ tấn công lớn thứ hai – Ronin Bridge năm 2022 – là 625 triệu USD. Thiệt hại của Bybit lớn hơn 2,3 lần.
Cơn khủng hoảng ngay lập tức của Bybit là khả năng thanh toán. Sàn giao dịch phải đối mặt với 580.000 yêu cầu rút tiền trong những giờ sau khi thông báo. Bitget đã cho vay 40.000 ETH (~ 95 triệu USD) để giúp đáp ứng nhu cầu. Bybit đã xử lý tất cả các yêu cầu rút tiền và vẫn có khả năng thanh toán – một sự khác biệt rõ rệt so với sự sụp đổ của FTX năm 2022.
Các nỗ lực khôi phục đã không có tiền lệ về quy mô:
- 15,000 cmETH (~$44 triệu) – được lấy lại bởi mETH Protocol, đã tạm dừng việc rút tiền trong thời gian tấn công, ngăn chặn kẻ tấn công chuyển đổi các token
Tính đến tháng 4 năm 2025, Giám đốc điều hành Ben Zhou đã báo cáo tình trạng của quỹ:
Kho bạc hoạt động trên quy mô công nghiệp. Lazarus đã chuyển 432.748 ETH (84,45% số tiền bị đánh cắp) thành Bitcoin thông qua Thorchain, sau đó phân phối BTC trên hơn 35.000 ví. 944 BTC (~ 90,6 triệu USD) đã được chuyển qua Wasabi Mixer. Họ cũng sử dụng các đợt phát hành đồng meme Pump.fun trên Solana như một vectơ rửa tiền – một kỹ thuật kết hợp số tiền bị đánh cắp với khối lượng giao dịch đầu cơ.
Nguyên nhân: Một cuộc tấn công chuỗi cung ứng vào sự tin tưởng
Sự tấn công vào Bybit không phải là một lỗ hổng trong smart contract. Đó là một cuộc tấn công chuỗi cung ứng Web2 đã gây ra một thảm họa của Web3. Nguyên nhân gốc của chuỗi:
1. Máy của nhà phát triển bị đánh cắp. Lazarus đã sử dụng kỹ thuật kỹ thuật xã hội để lừa gạt một nhà phát triển của Safe{Wallet} – có thể thông qua một cuộc phishing hoặc payload phỏng vấn có trojan, một kỹ thuật mà DPRK đã hoàn thiện trong nhiều cuộc tấn công vào các sàn giao dịch. Họ đã lấy các token phiên của AWS từ máy macOS của nhà phát triển, bỏ qua MFA.
2. Tấn công bằng JavaScript. Dùng thông tin truy cập AWS bị đánh cắp, các nhà tấn công đã đưa mã JavaScript độc hại vào kho S3 / CDN CloudFront của Safe. Mã này có điều kiện: nó chỉ được kích hoạt khi nguồn giao dịch phù hợp với địa chỉ ví lạnh của Bybit. Mọi người dùng khác của Safe đều thấy giao diện hợp lệ.
3. Không phù hợp giữa giao diện người dùng (UI) và payload. Khi các người ký tên của Bybit mở giao diện Safe vào ngày 21 tháng 2, các JS đã tạm dừng giao dịch. Giao diện hiển thị một giao dịch chuyển ETH tiêu chuẩn. Các dữ liệu EIP-712 thực tế được gửi đến các ví phần cứng Ledger chứa một lệnh delegatecall nhắm vào hợp đồng của kẻ tấn công. Kích thước tham số operation đã bị đảo ngược từ 0 (call) sang 1 (delegatecall) – một bit duy nhất đã thay đổi "chuyển tiền" thành "thay đổi toàn bộ logic của ví".
4. Khu vực cản trở của ví cứng. Màn hình của Ledger hiển thị dữ liệu gọi hex nguyên thủy cho lệnh delegatecall. Hiện tại, không có cách giải mã có thể đọc được cho mục đích của lệnh delegatecall trên các ví cứng. Các người ký đã nhìn thấy một chuỗi dài các ký tự hex, họ cho rằng nó phù hợp với những gì được hiển thị trên giao diện người dùng an toàn, và nhấn xác nhận. Ba chữ ký. Một giao dịch. 1,46 tỷ đô la biến mất.
5. Lợi dụng nâng cấp proxy. Các ví an toàn sử dụng mô hình proxy, trong đó delegatecall đến hợp đồng thực hiện trong ngữ cảnh bộ nhớ của proxy. Việc gọi delegatecall đến một hợp đồng xấu, kẻ tấn công đã thay đổi slot 0 – chỉ mục masterCopy – thay thế hợp đồng thực hiện hợp lệ bằng bản của riêng họ. Hợp đồng xấu chứa các hàm sweepETH() và sweepERC20() chuyển toàn bộ số dư token sang địa chỉ được kiểm soát bởi kẻ tấn công.
Tại sao các ví cứng không cứu được Bybit
Sự hack của Bybit đã phơi bày một hạn chế cơ bản của ví cứng mà ngành đã thừa nhận từ lâu nhưng chưa bao giờ giải quyết: chúng xác minh mật mã, không phải nghĩa ngữ.
Khi một thiết bị Ledger nhận một giao dịch cần ký, nó sẽ hiển thị dữ liệu giao dịch nguyên thủy – địa chỉ nhận, giá trị, dữ liệu gọi (dữ liệu gọi hàm dưới dạng hex). Đối với một chuyển khoản ETH đơn giản, nó có thể đọc được: "Đến: 0x..., Giá trị: 401,000 ETH". Đối với một delegatecall đến một hợp đồng chưa được xác minh, dữ liệu gọi là một chuỗi hex không thể đọc được. Người ký không thể biết liệu "0x000000000000000000000000bdd077f651..." có nghĩa là "cải tiến thực hiện" hay "chuyển đổi mã thông báo".
Kết quả phân tích của NCC Group đã xác định khoảng trống cụ thể: payload ký EIP-712 không liên kết chi nhánh gọi đại diện của tác vụ theo cách mà người ký có thể xác minh. Safe UI hiển thị một cấu trúc dữ liệu được định dạng trông giống như một chuyển khoản; payload được ký thực tế chứa chi nhánh gọi đại diện. wallet điện tử đã ký đúng những gì được cung cấp cho nó – nó chỉ không được cung cấp một thứ có thể hiển thị có ý nghĩa.
Đây không phải là vấn đề riêng của Ledger. Mỗi ví cứng trên thị trường đều có giới hạn tương tự với các loại giao dịch phức tạp. Ngành công nghiệp cần có chức năng mô phỏng và giải mã giao dịch dễ đọc trên màn hình ví cứng – hoặc một lớp xác minh riêng biệt có thể tái tạo độc lập những gì giao dịch sẽ làm trước khi ký.
Nhân vật tấn công: nhóm Lazarus / TraderTraitor
Người điều tra On-chain ZachXBT đã liên kết vụ tấn công với nhóm Lazarus của Triều Tiên trong vòng 48 giờ. Nghiên cứu của ông cho thấy ví của kẻ tấn công đã thực hiện các giao dịch thử nghiệm sử dụng địa chỉ đã được kết nối trước đó với các vụ tấn công Phemex (tháng 1 năm 2025, 73 triệu USD), BingX (tháng 9 năm 2024, 52 triệu USD) và Poloniex (tháng 11 năm 2023, 126 triệu USD) – bốn vụ xâm nhập vào sàn giao dịch được cho là do cùng một nhóm của DPRK thực hiện.
FBI chính thức cho rằng vụ tấn công Bybit là do TraderTraitor (còn được theo dõi với tên Jade Sleet, UNC4899, Slow Pisces) thực hiện, một nhóm nhỏ hoạt động dưới sự chỉ đạo của Tổng cục Tình báo của Triều Tiên. Trail of Bits lưu ý rằng các cuộc tấn công này không phải là một hoạt động đơn lẻ, mà là kết quả của một "cuốn sách thử nghiệm" – một bộ công cụ đa nền tảng được cải tiến trong nhiều năm qua, có thể hoạt động trên Windows và macOS, duy trì sự tồn tại với mức phát hiện tối thiểu và điều khiển những gì người dùng nhìn thấy trên giao diện của họ.
Khoản giao dịch thử nghiệm 90 USDT trước khi thực hiện quá trình rút tiền chính là dấu hiệu của Lazarus. Họ thực hiện các giao dịch nhỏ trước khi thực hiện các giao dịch lớn – mô hình tương tự đã xuất hiện trong các vụ tấn công Phemex và BingX. Sự đồng nhất này giúp các nhà điều tra xác định các cuộc tấn công, nhưng không ngăn được vụ tấn công này.
Trả lời quy định và tác động của ngành
Trả lời của Bybit đã rất hiệu quả đối với khoản lỗ 1,46 tỷ USD. Livestream tức thời của Ben Zhou, cách truyền thông minh rõ và quyết định giữ mở cửa cho việc rút tiền đã ngăn chặn tình trạng "người dân đổ xô đi rút tiền" trở thành một vòng xoáy chết người. Các công ty trong ngành rộng lớn đã đoàn kết: Bitget cho vay ETH, các sàn giao dịch tạm dừng các địa chỉ đã xác định, Tether đưa USDT vào danh sách đen, và hành động nhanh chóng của mETH Protocol đã cứu được 44 triệu USD.
Safe{Wallet} tạm ngừng hoạt động, sau đó di chuyển cơ sở hạ tầng và thực hiện các biện pháp bảo mật bổ sung, bao gồm mô phỏng giao dịch được thực hiện bằng phần cứng. Sự cố này đã dẫn đến các cuộc kiểm tra toàn ngành về các quy trình ký hợp đồng đa chữ ký, với nhiều sàn giao dịch chuyển sang các thiết lập ký bằng cách không kết nối và các lớp xác minh giao dịch độc lập.
Sự xâm nhập này cũng đã gây ra tranh cãi về bảo mật ký EIP-712, độ phù hợp của màn hình ví điện tử cho các giao dịch phức tạp, và liệu "ví điện tử ấm" có phải là một thuật ngữ có ý nghĩa khi giao diện ký được tải từ máy chủ web.
Những bài học: Điều gì đã ngăn chặn được sự việc này
1. Đăng ký không kết nối Internet. Nếu các máy ký không có kết nối Internet – tải dữ liệu giao dịch qua mã QR hoặc microSD từ một máy được kết nối riêng – thì mã JavaScript độc hại sẽ không bao giờ có thể đến được nơi chứa dữ liệu ký. Để có một kho lưu trữ "lạnh" thực sự, môi trường ký phải ở trạng thái offline, không chỉ các khóa.
2. Mô phỏng giao dịch độc lập. Một hệ thống thứ hai độc lập mô phỏng giao dịch và hiển thị sự thay đổi trạng thái mong đợi – "giao dịch này sẽ thay thế hợp đồng thực hiện, không chuyển ETH" – sẽ phát hiện sự không phù hợp. Hiện tại, nhiều nhóm đang xây dựng lớp này.
3. Giải mã ví điện tử có thể đọc được bởi người dùng. Ví điện tử phải giải mã và hiển thị mục tiêu delegatecall, mẫu nâng cấp hợp đồng và tên hàm – không phải là hex nguyên vẹn. Đây là một vấn đề khó khăn nhưng có thể giải quyết.
4. Bảo mật điểm cuối của nhà phát triển. Tất cả cuộc tấn công dựa trên một máy MacOS của một nhà phát triển. EDR (Điều tra và phản ứng điểm cuối), các khóa bảo mật phần cứng cho truy cập AWS và việc thay đổi mã token phiên sẽ làm tăng đáng kể chi phí.
5. Tự chủ trong việc ký kết nhiều bên. Nếu ba người ký sử dụng các giao diện, máy tính và phương thức xác minh khác nhau, việc làm suy yếu tất cả ba người đồng thời sẽ trở nên khó khăn hơn nhiều. Các người ký của Bybit đều sử dụng cùng một giao diện web Safe{Wallet} – một điểm yếu duy nhất.
Những câu hỏi thường gặp
Số tiền bị đánh cắp trong vụ tấn công Bybit là bao nhiêu? Khoảng 1,46 tỷ USD trong các token ETH và ERC-20: 401.346 ETH (~1,12 tỷ USD), 90.375 stETH (~253 triệu USD), 15.000 cmETH (~44 triệu USD) và 8.000 mETH (~23 triệu USD), bị đánh cắp vào ngày 21 tháng 2 năm 2025.
Ai đã tấn công Bybit? FBI đã xác định chính xác nhóm Lazarus của Triều Tiên (phân nhóm TraderTraitor) là người thực hiện cuộc tấn công này, dựa trên các bằng chứng trên chuỗi được ZachXBT thu thập và liên kết nó với các cuộc tấn công vào Phemex, BingX và Poloniex – tất cả đều được quy kết là do cùng một nhóm của DPRK thực hiện.
Người dùng Bybit có bị mất tiền không? Không. Bybit đã bù đắp thiệt hại từ các khoản dự trữ của mình, xử lý tất cả 580.000 yêu cầu rút tiền và vẫn duy trì khả năng thanh toán. Không có tài khoản của khách hàng bị mất. Sàn giao dịch đã thu hồi tiền thông qua một sự kết hợp của các khoản dự trữ, các khoản vay (Bitget đã cho vay 40.000 ETH) và các nỗ lực khôi phục.
Bybit bị hack khác với các vụ hack tiền điện tử trước đó như thế nào? Các vụ hack lớn trước đây (Ronin, Wormhole, Nomad) đã khai thác các lỗ hổng trong smart contract hoặc cầu nối. Bybit là một cuộc tấn công chuỗi cung ứng đối với nhà cung cấp cơ sở hạ tầng bên thứ ba (Safe{Wallet}) – không có lỗi trong smart contract, không có khiếm khuyết trong thuật toán mã hóa, chỉ là các giao diện ký kết bị điều khiển và giới hạn hiển thị ví cứng.
Có bao nhiêu tiền bị đánh cắp đã được thu hồi? Đến tháng 4 năm 2025, khoảng 3,84% (~56 triệu USD) đã bị đóng băng, 15.000 cmETH (~44 triệu USD) đã được thu hồi bởi mETH Protocol, 43 triệu USD đã được thu hồi bởi nhóm Mantle, và 68,57% vẫn có thể theo dõi. Bybit đã phát động chương trình thưởng 140 triệu USD. Tuy nhiên, 27,59% đã "biến mất" thông qua các mixer bao gồm Wasabi, Tornado Cash và Railgun.
delegatecall là gì và tại sao nó là vector tấn công? delegatecall là một opcode Solidity thực thi mã từ một hợp đồng khác trong ngữ cảnh bộ nhớ của người gọi. Trong ví an toàn, đại lý sử dụng delegatecall đến hợp đồng thực hiện. Việc gửi delegatecall đến một hợp đồng xấu ý, kẻ tấn công đã thay thế khung bộ nhớ masterCopy – thay thế toàn bộ logic của ví bằng mã của họ chứa các chức năng rút tiền ngầm.
