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

Quan điểm 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.

TL;DR

Cầu nối chuỗi khối là nền tảng để đạt được khả năng tương tác trong không gian chuỗi khối. Tính bảo mật của các cầu blockchain là hết sức quan trọng. Một số lỗ hổng bảo mật cầu nối phổ biến bao gồm các vấn đề về xác thực trên chuỗi và ngoài chuỗi, quản 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ể xảy ra để đảm bảo tính logic xác minh chắc chắn.

Giới thiệu 

Cầu chuỗi khối (hay "cầu chuỗi khối") là một giao thức kết nối hai chuỗi khối để cho phép tương tác giữa chúng. Nếu bạn sở hữu bitcoin nhưng muốn tham gia vào hoạt động DeFi trên mạng Ethereum, cầu nối blockchain cho phép bạn làm điều đó mà không cần phải bán bitcoin của mình. 

Cầu nối chuỗi khối là nền tảng để đạt được khả năng tương tác trong không gian chuỗi khối. Chúng 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 và do đó có các lỗ hổng bảo mật khác nhau.

Tại sao an ninh cầu lại cần thiết? 

Nói chung, một cây cầu chứa mã thông báo mà người dùng muốn chuyển từ blockchain này sang blockchain khác. Cầu nối thường được triển khai dưới dạng hợp đồng thông minh và nắm giữ một lượng token đáng kể khi chuyển khoản xuyên chuỗi tích lũy, khiến chúng trở thành mục tiêu sinh lời tiềm năng cho tin tặc. 

Hơn nữa, cầu nối blockchain có nhiều điểm dễ bị tấn công vì chúng liên quan đến nhiều thành phần. Với suy nghĩ này, những người dùng độc hại có động cơ nhắm mục tiêu vào các ứng dụng chuỗi chéo nhằm cố gắng đánh cắp số lượng lớn. 

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

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

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

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 được giữ ở mức tối thiểu. Những cây cầu này dựa vào phần phụ trợ tập trung để thực hiện các hoạt động cơ bản như phát hành, ghi và chuyển mã thông báo, trong khi tất cả các xác minh đều được thực hiện ngoài chuỗi.

Mặt khác, 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 trường hợp này, khi người dùng gửi tiền trên blockchain, 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 tương ứng. 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 rút tiền của người dùng trên blockchain khác. Quá trình này phải có khả năng 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 có lỗ hổng trong quá trình xác thực trên chuỗi, hacker 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ể giả mạo bằng chứng giả mạo. Điều này có nghĩa là nếu quá trình xác thực dễ bị tấn công, họ có thể bỏ qua xác thực bằng chứng và tạo mã thông báo mới trong tài khoản của mình.

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

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

Tin tặc cần nạn nhân phê duyệt hợp đồng bắc cầu để chuyển mã thông báo bằng chức năng “transferFrom” và đánh cắp tài sản hợp đồng. 

Thật không may, vấn đề này trở nên tồi tệ hơn vì nhiều cầu nối yêu cầu quyền truy cập không hạn chế (phê duyệt mã thông báo vô hạn) đối với mã thông báo của người dùng DApp. Đây là một phương pháp phổ biến giúp giảm phí Gas nhưng tạo ra rủi ro bổ sung bằng cách cho phép hợp đồng thông minh truy cập số lượng token không giới hạn từ ví của người dùng. Một số tin tặc có thể khai thác việc thiếu xác thực và quyền truy cập không hạn chế để đánh cắp mã thông báo từ những người dùng khác.

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 pháp 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 sẽ tập trung vào việc xác minh các giao dịch gửi tiền. 

Một cầu nối chuỗi khối với xác thực ngoài chuỗi hoạt động 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 blockchain gốc.

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

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

  4. Khi nhận được chữ ký, DApp sẽ xác minh nó và cho phép người dùng rút mã thông báo của họ khỏi chuỗi khối gốc.

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ự xảy ra và không bị giả mạo. Chính máy chủ này sẽ xác định xem người dùng có thể rút mã thông báo trên chuỗi khối mục tiêu hay không. Vì vậy, nó là mục tiêu có giá trị của tin tặc.

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

Nếu máy chủ phụ trợ không kiểm tra địa chỉ nào đã phát hành sự kiện, nó sẽ coi giao dịch này là hợp lệ và ký vào tin nhắn. Tin tặc có thể gửi hàm băm giao dịch đến phần phụ trợ, bỏ qua xác minh và cho phép chúng rút mã thông báo khỏi chuỗi khối.

Quản lý mã thông báo gốc kém

Bridge sử dụng các cách tiếp cận khác nhau để xử lý token gốc và token 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 thủ tiêu chuẩn ERC-20. 

Khi người dùng muốn chuyển ETH sang một blockchain khác, trước tiên họ phải gửi mã thông báo vào hợp đồng bắc cầu. Để thực hiện việc này, người dùng chỉ cần gắn ETH vào giao dịch và số tiền có thể được truy xuất bằng cách sử dụng chức năng “msg.value” trong trường giao dịch.

Việc gửi mã thông báo ERC-20 khác biệt đáng kể so với việc 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 chi tiêu mã thông báo của họ. Sau khi phê duyệt và gửi mã thông báo vào hợp đồng bắc cầu, 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 sang hợp đồng bằng chức năng "transferFrom()". 

Một cách tiếp cận để phân biệt điều này 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.

Đối với các 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. Hoạt động này tiềm ẩn rủi ro vì các cuộc 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 cầu nối hỗ trợ 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 chấp nhận làm đối số. Điều này tránh được 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 có thể phát sinh khi các bridge 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) là đại diện cho mã thông báo gốc. Điều này có thể có vấn đề vì việc gửi địa chỉ 0 cho hàm có thể khiến hàm này bỏ qua việc kiểm tra 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 hàm “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 tại địa chỉ 0. Tuy nhiên, giao dịch vẫn có thể xảy ra nếu hợp đồng không xử lý giá trị trả lại một cách thích hợp. Điều này tạo cơ hội cho tin tặc thực hiện giao dịch mà không chuyển bất kỳ mã thông báo nào vào hợp đồng.

Cấu hình không chính xác

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

Trên thực tế, đã xảy ra sự cố mà hacker có thể bỏ qua việc kiểm tra nhật ký chuyển do cấu hình không chính xác. Vài ngày trước cuộc tấn công, nhóm dự án đã triển khai bản cập nhật giao thức liên quan đến 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. Do thay đổi này, tất cả các tin nhắn đều tự động được coi là đã được xác minh, do đó cho phép kẻ tấn công gửi một tin nhắn tùy ý và vượt qua quá trình xác minh thành công.

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

Bốn lỗ hổng cầu phổ biến nhất được giải thích ở trên nêu bật 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 để xử lý từng lỗ hổng này và không có hướng dẫn nào áp dụng cho tất cả chúng. 

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à một thách thức vì mỗi cây cầu đề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 là hợp lý và nhất quán. 

Nói tóm lại, điều cần thiết là phải thực hiện kiểm tra nghiêm ngặt trước các cuộc tấn công có thể xảy ra và đặc biệt chú ý đến các lỗ hổng bảo mật phổ biến nhất trong bridge.  

Cân nhắc cuối cùng 

Do có giá trị cao nên các cầu nối chuỗi chéo đã trở thành mục tiêu của tin tặc trong một thời gian dài. Các nhà phát triển có thể cải thiện tính bảo mật cho các cây cầu của mình thông qua thử nghiệm trước khi triển khai và kiểm tra của bên thứ ba, giảm nguy cơ bị hacker tấn công tàn khốc như những năm gần đây. Cầu nối rất cần thiết trong một thế giới có nhiều chuỗi khối, nhưng bảo mật phải là ưu tiên hàng đầu khi thiết kế và phát triển cơ sở hạ tầng Web3 hiệu quả.

đọc thêm

Cầu Blockchain 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ì?

Thông báo rủi ro và tuyên bố từ chối trách nhiệm: Nội dung này được cung cấp cho bạn “nguyên trạng” chỉ nhằm mục đích thông tin và giáo dục mà không có bất kỳ hình thức bảo đảm nào. Nội dung không được hiểu là lời khuyên về tài chính, pháp lý hoặc chuyên môn và 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 của riêng bạn từ các cố vấn chuyên nghiệp. Trong trường hợp đóng góp và bài viết do cộng tác viên bên thứ ba gửi, xin lưu ý rằng các ý kiến ​​được đưa ra là của tác giả tương ứng và không nhất thiết phản ánh ý kiến ​​của Binance Academy. Để biết thêm chi tiết, vui lòng đọc tuyên bố từ chối trách nhiệm của chúng tôi tại đây. 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ể tăng hoặc giảm và 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 và Binance Academy không chịu trách nhiệm về bất kỳ tổn thất nào có thể xảy ra của bạn. Tài liệu này không nên được hiểu là lời khuyên về tài chính, pháp lý hoặc chuyên môn. Để biết thêm thông tin, vui lòng xem Điều khoản sử dụng và Thông báo rủi ro của chúng tôi.