Bài viết này là một bài viết từ cộng đồng. Tác giả là Minzhi He, kiểm toán viên tại CertiK.

Quan điểm thể hiện trong bài viết này là của người đóng góp/tác giả và không nhất thiết phản ánh quan điểm của Binance Academy.

Bản tóm tắt

Cầu nối chuỗi khối rất quan trọng trong việc đạt được khả năng tương tác trong lĩnh vực chuỗi khối. Vì vậy, an ninh cầu là rất quan trọng. Một số lỗ hổng bảo mật phổ biến của cầu nối bao gồm xác thực yếu trên chuỗi và ngoài chuỗi, xử lý mã thông báo gốc không đúng cách và cấu hình sai. Nên kiểm tra cây cầu chống lại tất cả các vectơ tấn công có thể có để đảm bảo tính logic xác minh hợp lý.

Giới thiệu

Bridge blockchain là một giao thức kết nối hai blockchain để cho phép tương tác giữa chúng. Nếu bạn có bitcoin nhưng muốn tham gia vào các hoạt động DeFi trên mạng Ethereum, cầu nối blockchain cho phép bạn làm như vậy mà không cần bán bitcoin.

Cầu nối chuỗi khối là điều cần thiết để đạt được khả năng tương tác trong lĩnh vực chuỗi khối. Cây cầu này hoạt động bằng cách sử dụng nhiều xác thực trên chuỗi và ngoài chuỗi khác nhau, do đó nó có nhiều lỗ hổng bảo mật khác nhau.

Tại sao an ninh cầu lại quan trọng?

Bridge thường lưu trữ token mà người dùng muốn chuyển từ chuỗi này sang chuỗi khác. Cầu nối thường được triển khai dưới dạng hợp đồng thông minh và lưu trữ số lượng lớn mã thông báo khi chuyển khoản xuyên chuỗi tích lũy, khiến chúng trở thành mục tiêu hấp dẫn của tin tặc.

Ngoài ra, các cầu blockchain có khoảng cách tấn công lớn vì chúng liên quan đến nhiều thành phần. Do đó, bọn tội phạm rất có động cơ nhắm mục tiêu vào các ứng dụng xuyên chuỗi để tiêu hao số tiền lớn.

Các cuộc tấn công cầu đã gây thiệt hại hơn 1,3 tỷ USD vào năm 2022, chiếm 36% tổng thiệt hại trong năm đó theo ước tính của CertiK.

Các lỗ hổng bảo mật phổ biến của cầu

Để cải thiện an ninh cầu, điều quan trọng là phải hiểu các lỗ hổng bảo mật phổ biến của cầu và kiểm tra cầu trước khi hạ thủy. Những lỗ hổng này có thể được phân loại thành bốn lĩnh vực.

Xác thực trên chuỗi yếu

Đối với các cầu nối đơn giản, đặc biệt là các cầu nối được thiết kế cho các DApp cụ thể, việc xác thực trên chuỗi là tối thiểu. Cây cầu dựa vào một chương trình phụ trợ tập trung để thực hiện các hoạt động cơ bản như đúc, ghi và chuyển mã thông báo trong khi tất cả việc xác minh được thực hiện ngoài chuỗi.

Ngược lại, các loại cầu nối khác sử dụng hợp đồng thông minh để xác thực tin nhắn và thực hiện xác minh trên chuỗi. Trong tình huống này, khi người dùng gửi tiền vào chuỗi, hợp đồng thông minh sẽ tạo ra một thông báo đã ký và trả lại chữ ký trong giao dịch. Chữ ký này đóng vai trò là bằng chứng gửi tiền và được sử dụng để xác minh yêu cầu của người dùng trên các chuỗi khác. Quá trình này sẽ ngăn chặn các cuộc tấn công bảo mật khác nhau, bao gồm các cuộc tấn công lặp lại và hồ sơ tiền gửi giả mạo.

Tuy nhiên, nếu lỗ hổng tồn tại trong quá trình xác thực trên chuỗi, kẻ tấn công có thể gây ra thiệt hại nghiêm trọng. Ví dụ: nếu một cây cầu sử dụng cây Merkle để xác thực hồ sơ giao dịch, kẻ tấn công có thể tạo ra bằng chứng sai lệch. Điều này có nghĩa là họ có thể bỏ qua xác thực bằng chứng và đúc mã thông báo mới vào tài khoản của mình nếu quá trình xác thực dễ bị tấn công.

Một số cây cầu triển khai khái niệm “mã thông báo được bao bọc”. Ví dụ: khi người dùng chuyển DAI từ Ethereum sang Chuỗi BNB, DAI của anh ta sẽ được lấy từ hợp đồng Ethereum và một lượng DAI được gói tương đương sẽ được cấp cho Chuỗi BNB.

Tuy nhiên, nếu các giao dịch này không được xác thực hợp lệ, kẻ tấn công có thể thực hiện một hợp đồng độc hại để định tuyến các mã thông báo được gói từ cầu nối đến địa chỉ sai bằng cách thao túng chức năng của nó.

Kẻ tấn công cũng yêu cầu nạn nhân đồng ý với hợp đồng bắc cầu để chuyển mã thông báo bằng chức năng “transferFrom” nhằm rút tài sản khỏi hợp đồng bắc cầu.

Thật không may, điều này trở nên tồi tệ hơn vì hầu hết các cây cầu đều yêu cầu phê duyệt mã thông báo không giới hạn từ người dùng DApp. Đây là một phương pháp phổ biến giúp giảm phí gas nhưng gây ra rủi ro bổ sung khi cho phép các hợp đồng thông minh truy cập vào token từ số lượng ví người dùng không giới hạn. Những kẻ tấn công có thể khai thác việc thiếu xác thực và phê duyệt quá mức để chuyển mã thông báo từ người dùng khác sang chính họ.

Xác thực ngoài chuỗi yếu

Trong một số hệ thống cầu nối, máy chủ phụ trợ ngoài chuỗi đóng vai trò quan trọng trong việc xác minh tính hợp lệ của các tin nhắn được gửi từ chuỗi khối. Trong trường hợp này, chúng tôi tập trung vào việc xác minh các giao dịch gửi tiền.

Cách thức hoạt động của cầu nối blockchain với xác thực ngoài chuỗi như sau:

  1. Người dùng tương tác với DApp để gửi token vào hợp đồng thông minh trên chuỗi nguồn.

  2. Sau đó, DApp gửi hàm băm của giao dịch gửi tiền đến máy chủ phụ trợ thông qua API.

  3. Băm giao dịch yêu cầu máy chủ xác thực một số. Nếu được coi là hợp lệ, người ký sẽ ký vào tin nhắn, sau đó gửi chữ ký trở lại giao diện người dùng thông qua API.

  4. Sau khi nhận được chữ ký, DApp sẽ xác minh nó, sau đó cho phép người dùng rút mã thông báo khỏi chuỗi mục tiêu.

Máy chủ phụ trợ phải đảm bảo rằng giao dịch gửi tiền được xử lý thực sự diễn ra và không bị giả mạo. Máy chủ phụ trợ này xác định liệu người dùng có thể rút mã thông báo trên chuỗi mục tiêu hay không, khiến nó trở thành mục tiêu có giá trị cao cho những kẻ tấn công.

Máy chủ phụ trợ phải xác thực cấu trúc sự kiện do giao dịch tạo ra cũng như địa chỉ của hợp đồng đã tạo ra sự kiện. Nếu địa chỉ hợp đồng bị bỏ qua thì kẻ tấn công có thể thực hiện một hợp đồng độc hại để giả mạo một sự kiện gửi tiền bằng cách sử dụng cấu trúc giống như một sự kiện gửi tiền hợp pháp.

Nếu nó không xác minh địa chỉ đã tạo ra sự kiện thì máy chủ phụ trợ có thể cho rằng hợp đồng này hợp lệ và ký vào tin nhắn. Sau đó, kẻ tấn công có thể gửi hàm băm giao dịch đến phần phụ trợ, qua đó bỏ qua xác minh và cho phép chúng rút mã thông báo khỏi chuỗi mục tiêu.

Xử lý mã thông báo gốc không đúng cách

Bridge thực hiện nhiều cách tiếp cận khác nhau để xử lý mã thông báo gốc và mã thông báo tiện ích. Ví dụ: trên mạng Ethereum, mã thông báo gốc là ETH và hầu hết các mã thông báo tiện ích đều tuân theo tiêu chuẩn ERC-20.

Khi người dùng có ý định chuyển ETH của mình sang chuỗi khác, trước tiên anh ta phải gửi số tiền đó vào hợp đồng bắc cầu. Để đạt được điều này, người dùng chỉ cần đính kèm ETH vào một giao dịch và sau đó có thể truy xuất số lượng ETH bằng cách đọc trường “msg.value” của giao dịch.

Gửi mã thông báo ERC-20 rất khác với gửi ETH. Để gửi mã thông báo ERC-20, trước tiên người dùng phải cho phép hợp đồng cầu nối sử dụng mã thông báo của họ. Sau khi anh ta đồng ý và gửi mã thông báo vào hợp đồng cầu nối, hợp đồng sẽ ghi mã thông báo của người dùng bằng chức năng "burnFrom()" hoặc chuyển mã thông báo của người dùng sang hợp đồng bằng chức năng "transferFrom()".

Một cách tiếp cận để phân biệt chúng là sử dụng câu lệnh if-else trong cùng một hàm. Một cách tiếp cận khác là tạo hai hàm riêng biệt để xử lý từng tình huống. Cố gắng gửi ETH bằng chức năng gửi tiền ERC-20 có thể dẫn đến mất tiền.

Khi xử lý yêu cầu gửi tiền ERC-20, người dùng thường cung cấp địa chỉ mã thông báo làm đầu vào cho chức năng gửi tiền. Hành động này gây ra rủi ro đáng kể vì các lệnh gọi bên ngoài không đáng tin cậy có thể xảy ra trong quá trình giao dịch. Triển khai danh sách trắng chỉ bao gồm các mã thông báo được hỗ trợ bằng cầu nối là một phương pháp phổ biến để giảm thiểu rủi ro. Chỉ những địa chỉ trong danh sách trắng mới được phép chuyển làm đối số. Điều này ngăn chặn các cuộc gọi bên ngoài vì nhóm dự án đã lọc địa chỉ mã thông báo.

Tuy nhiên, các vấn đề cũng nảy sinh khi cây cầu xử lý việc chuyển mã thông báo gốc xuyên chuỗi, vì mã thông báo gốc không có địa chỉ. Địa chỉ 0 (0x000...0) đại diện cho mã thông báo gốc. Điều này có thể có vấn đề vì việc chuyển địa chỉ rỗng tới một hàm có thể bỏ qua việc xác minh danh sách trắng ngay cả khi được triển khai không chính xác.

Khi hợp đồng cầu nối gọi “transferFrom” để chuyển nội dung của người dùng sang hợp đồng, lệnh gọi bên ngoài tới địa chỉ 0 sẽ trả về sai vì không có chức năng “transferFrom” nào được triển khai ở địa chỉ 0. Tuy nhiên, giao dịch vẫn có thể xảy ra nếu hợp đồng không thể xử lý chính xác giá trị kết quả. Điều này tạo cơ hội cho kẻ tấn công thực hiện giao dịch mà không cần chuyển mã thông báo vào hợp đồng.

Lỗi cấu hình

Trong hầu hết các cầu nối blockchain, một vị trí đặc quyền chịu trách nhiệm đưa các mã thông báo và địa chỉ vào danh sách trắng hoặc danh sách đen, chỉ định hoặc thay đổi người ký và các cấu hình quan trọng khác. Việc đảm bảo rằng tất cả các cấu hình đều chính xác là rất quan trọng, vì ngay cả những lỗi tưởng chừng như nhỏ nhặt cũng có thể gây ra tổn thất lớn.

Trên thực tế, trong một sự cố, kẻ tấn công đã vượt qua được quá trình xác minh hồ sơ chuyển giao do lỗi cấu hình. Nhóm dự án đã triển khai nâng cấp giao thức vài ngày trước vụ hack bao gồm việc thay đổi một biến. Biến được sử dụng để biểu thị giá trị mặc định của tin nhắn đáng tin cậy. Thay đổi này khiến tất cả các tin nhắn được coi là đã được chứng minh tự động, cho phép kẻ tấn công gửi tin nhắn theo ý muốn và bỏ qua quá trình xác minh.

Làm thế nào để cải thiện an ninh cầu

Bốn lỗ hổng phổ biến của các bridge được mô tả ở trên thể hiện những thách thức trong việc đảm bảo an ninh trong hệ sinh thái blockchain được kết nối với nhau. Có những cân nhắc quan trọng liên quan đến việc giải quyết từng lỗ hổng này. Không có một hướng dẫn duy nhất nào áp dụng cho mọi thứ.

Ví dụ: việc cung cấp các hướng dẫn chung để đảm bảo quy trình xác minh không có lỗi là rất khó vì mỗi cây cầu có các yêu cầu xác minh riêng. Cách tiếp cận hiệu quả nhất để ngăn chặn việc bỏ qua xác minh là kiểm tra kỹ lưỡng cây cầu chống lại tất cả các vectơ tấn công có thể xảy ra và đảm bảo rằng logic xác minh có ý nghĩa.

Tóm lại, điều quan trọng là phải tiến hành kiểm tra nghiêm ngặt các cuộc tấn công tiềm ẩn và đặc biệt chú ý đến các lỗ hổng bảo mật phổ biến trên bridge.

Đóng cửa

Do có giá trị cao, các cầu nối chuỗi từ lâu đã trở thành mục tiêu của những kẻ tấn công. Các nhà xây dựng có thể tăng cường an ninh cầu bằng cách tiến hành kiểm tra kỹ lưỡng trước khi triển khai và tiến hành kiểm tra của bên thứ ba để giảm nguy cơ xảy ra các vụ hack tốn kém đã gây khó khăn cho các cây cầu trong vài năm qua. Cầu nối rất cần thiết trong thế giới đa chuỗi, nhưng bảo mật phải là mối quan tâm hàng đầu khi thiết kế và xây dựng cơ sở hạ tầng Web3 hiệu quả.

Đọc thêm

Cầu chuỗi khối là gì?

Khả năng tương tác chuỗi chéo là gì?

Ba cầu nối tiền điện tử phổ biến và cách chúng hoạt động

Token được bọc là gì?

Tuyên bố miễn trừ trách nhiệm và cảnh báo rủi ro: Nội dung này được cung cấp cho bạn trên cơ sở “nguyên trạng” chỉ nhằm mục đích thông tin chung và mục đích giáo dục mà không có sự đại diện hoặc bảo đảm dưới bất kỳ hình thức nào. Nội dung này không được hiểu là lời khuyên về tài chính, pháp lý hoặc chuyên môn khác cũng như không nhằm mục đích khuyến nghị mua bất kỳ sản phẩm hoặc dịch vụ cụ thể nào. Bạn nên tìm kiếm lời khuyên từ các cố vấn chuyên môn phù hợp. Nếu bài viết là đóng góp của bên đóng góp bên thứ ba, xin lưu ý rằng quan điểm thể hiện là quan điểm của bên đóng góp bên thứ ba và không nhất thiết phản ánh quan điểm của Binance Academy. Vui lòng đọc tuyên bố từ chối trách nhiệm đầy đủ của chúng tôi ở đây để biết thêm chi tiết. Giá tài sản kỹ thuật số có thể biến động. Giá trị khoản đầu tư của bạn có thể giảm hoặc tăng. Bạn có thể không lấy lại được số tiền đã đầu tư. Bạn hoàn toàn chịu trách nhiệm về các quyết định đầu tư của mình. Binance Academy không chịu trách nhiệm về bất kỳ tổn thất nào bạn có thể gặp phải. Tài liệu này không được coi là lời khuyên về tài chính, pháp lý hoặc chuyên môn khác. Để biết thêm thông tin, hãy đọc Điều khoản sử dụng và Cảnh báo rủi ro của chúng tôi.