Phân tích nguyên lý sự kiện tấn công BNO

Vào ngày 18 tháng 7 năm 2023, giờ Bắc Kinh, Ocean BNO đã bị một cuộc tấn công cho vay chớp nhoáng và kẻ tấn công đã kiếm được khoảng 500.000 đô la Mỹ.

20230718161919783image.png

SharkTeam lần đầu tiên tiến hành phân tích kỹ thuật về sự cố này và tóm tắt các biện pháp phòng ngừa bảo mật, hy vọng rằng các dự án tiếp theo có thể rút kinh nghiệm và cùng nhau xây dựng tuyến phòng thủ bảo mật cho ngành công nghiệp blockchain.

1. Phân tích sự kiện

Địa chỉ kẻ tấn công:

0xa6566574edc60d7b2adbacedb71d5142cf2677fb

Hợp đồng tấn công:

0xd138b9a58d3e5f4be1cd5ec90b66310e241c13cd

Hợp đồng bị tấn công:

0xdCA503449899d5649D32175a255A8835A03E4006

Giao dịch tấn công:

0x33fed54de490797b99b2fc7a159e43af57e9e6bdefc2c2d052dc814cfe0096b9

Quá trình tấn công:

(1) Kẻ tấn công (0xa6566574) đã mượn 286.449 BNO thông qua khoản vay flash pancakeSwap.

20230718161449018image.png

(2) Sau đó, gọi chức năng stakeNft của hợp đồng bị tấn công (0xdCA50344) để cam kết hai nft.

20230718161457306image.png

(3) Sau đó, gọi chức năng cầm cố của hợp đồng bị tấn công (0xdCA50344) để cầm cố 277856 BNO coin.

20230718161633397image.png

(4) Gọi chức năng EmergencyWithdraw của hợp đồng bị tấn công (0xdCA50344) để trích xuất tất cả BNO

20230718161641122image.png

(5) Sau đó, gọi hàm unstakeNft của hợp đồng bị tấn công (0xdCA50344), truy xuất hai nft đã cam kết và nhận thêm mã thông báo BNO.

20230718161732948image.png

(6) Lặp lại quy trình trên để liên tục nhận thêm mã thông báo BNO

20230718161752651image.png

(7) Sau khi hoàn trả khoản vay chớp nhoáng, hãy đổi tất cả các mã thông báo BNO lấy 50,5W BUSD và rời khỏi thị trường với lợi nhuận.

20230718161800166image.png

Thứ hai, phân tích lỗ hổng

Nguyên nhân sâu xa của cuộc tấn công này là: có sự cố với cơ chế tính toán phần thưởng và logic tương tác của chức năng rút tiền khẩn cấp trong hợp đồng bị tấn công (0xdCA50344), khiến người dùng nhận được thêm mã thông báo phần thưởng sau khi rút tiền gốc.

20230718161812689image.png

20230718161820027image.png

Hợp đồng cung cấp chức năng EmergencyWithdraw để rút mã thông báo khẩn cấp và xóa tổng số tiền thế chấp và tổng số nợ bonusDebt của kẻ tấn công, nhưng không xóa biến nftAddition của kẻ tấn công và biến nftAddition cũng được tính thông qua biến số tiền đặt cọc.

20230718161834850image.png

Trong hàm unstakeNft, phần thưởng hiện tại của người dùng sẽ vẫn được tính và nếu biến nftAddition không được đặt lại về 0, thì hàmendingFit sẽ vẫn trả về giá trị phần thưởng BNO bổ sung, khiến kẻ tấn công lấy thêm mã thông báo BNO.

20230718161842539image.png

Thứ ba, Khuyến nghị bảo mật

Để đối phó với cuộc tấn công này, chúng ta nên tuân theo các biện pháp phòng ngừa sau trong quá trình phát triển:

(1) Khi tính phần thưởng, hãy xác minh xem người dùng đã rút tiền gốc chưa.

(2) Trước khi dự án trực tuyến, cần tìm kiếm sự hỗ trợ kỹ thuật từ nhóm kiểm toán chuyên nghiệp của bên thứ ba.

Xem bản gốc
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Phần thưởng
  • Bình luận
  • Chia sẻ
Bình luận
0/400
Không có bình luận
  • Ghim
Giao dịch tiền điện tử mọi lúc mọi nơi
qrCode
Quét để tải xuống ứng dụng Gate
Cộng đồng
Tiếng Việt
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)