Các Lỗ Hổng Bảo Mật Cầu Nối Phổ Biến Là Gì?
Trang chủ
Bài viết
Các Lỗ Hổng Bảo Mật Cầu Nối Phổ Biến Là Gì?

Các Lỗ Hổng Bảo Mật Cầu Nối Phổ Biến Là Gì?

Nâng cao
Đã đăng Mar 22, 2023Đã cập nhật Jun 15, 2023
9m

Bài viết này là một đóng góp từ cộng đồng. Tác giả là Minzhi He, kiểm định 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.

Tóm lược

Cầu nối blockchain là nền tảng để đạt được khả năng tương tác trong lĩnh vực blockchain. Do đó, việc bảo mật các cầu nối là rất quan trọng. Một số lỗ hổng bảo mật cầu nối phổ biến bao gồm xác thực on-chain và off-chain yếu, xử lý token gốc không đúng cách và cấu hình sai. Nên kiểm tra cầu nối để đảm bảo nó có thể chống lại tất cả các hướng tấn công và đảm bảo logic xác minh hợp lý.

Giới thiệu 

Cầu nối 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 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 sẽ cho phép bạn làm điều đó mà không cần bán bitcoin của mình. 

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

Tại sao việc bảo mật cầu nối lại quan trọng? 

Cầu nối thường giữ token mà người dùng muốn chuyển từ chuỗi này sang chuỗi khác. Thường được triển khai dưới dạng hợp đồng thông minh, các cầu nối nắm giữ một lượng đáng kể các token 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 cho các tin tặc. 

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

Các vụ tấn công cầu nỗi dẫn đến thiệt hại hơn 1,3 tỷ USD vào năm 2022, chiếm 36% tổng các thiệt hại trong năm, theo ước tính của CertiK. 

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

Để nâng cao tính bảo mật của cầu nối, việc hiểu các lỗ hổng bảo mật phổ biến của cầu nối và kiểm tra các cầu nối trước khi khởi chạy chúng là việc rất có giá trị. Những lỗ hổng này có thể được phân loại thành bốn loại như sau. 

Xác thực on-chain yếu

Đối với các cầu nối đơn giản, đặc biệt là những cầu nối được thiết kế cho các DApp cụ thể, việc xác thực trên chuỗi thường được thực hiện ở mức tối thiểu. Những cầu nối này dựa vào một backend tập trung để thực hiện các hoạt động cơ bản như đúc, đốt và chuyển token 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 khác sử dụng hợp đồng thông minh để xác thực thông báo và thực hiện việc xác minh trên chuỗi. Trong trường hợp này, khi người dùng gửi tiền vào một chuỗi, hợp đồng thông minh sẽ tạo 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 về khoản tiền gửi, được sử dụng để xác minh yêu cầu rút tiền của người dùng trên chuỗi khác. Quá trình này sẽ có thể 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 phát 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, 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ầu nối sử dụng cây Merkle để xác thực bản ghi giao dịch, một kẻ tấn công có thể tạo các bằng chứng giả mạo. Điều này có nghĩa là họ có thể bỏ qua việc xác thực bằng chứng và đúc các token 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ầu nối triển khai khái niệm “các token được bọc.” Chẳng hạn, khi người dùng chuyển DAI từ Ethereum sang BNB Chain, DAI của họ được lấy từ hợp đồng Ethereum và một lượng DAI được bọc tương đương được phát hành trên BNB Chain. 

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

Những kẻ tấn công cũng cần nạn nhân phê duyệt hợp đồng cầu nối để chuyển các token bằng cách sử dụng chức năng “transferFrom” để rút các tài sản khỏi hợp đồng cầu nối. 

Thật không may, điều này trở nên tồi tệ hơn vì nhiều cầu nối yêu cầu phê duyệt token vô hạn từ những 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 vào số lượng token không giới hạn từ ví của người dùng. Những kẻ tấn công có thể khai thác từ việc thiếu xác thực và phê duyệt quá mức để chuyển các token từ người dùng khác cho chúng.

Xác thực off-chain yếu

Trong một số hệ thống cầu nối, máy chủ backend 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 thông báo được gửi từ blockchain. Trong trường hợp này, chúng ta đang 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 blockchain 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 các token vào hợp đồng thông minh trên chuỗi nguồn.

  2. Sau đó, DApp này sẽ gửi chuỗi băm giao dịch tiền gửi đến máy chủ backend thông qua API.

  3. Chuỗi băm giao dịch phải tuân theo một số xác thực của máy chủ. Nếu được xem là hợp pháp, người ký sẽ ký một thông báo 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 chữ ký đó và cho phép người dùng rút các token của họ khỏi chuỗi mục tiêu.

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

Máy chủ backend cần xác thực cấu trúc của sự kiện phát ra của giao dịch, cũng như địa chỉ hợp đồng đã phát ra sự kiện. Nếu điều thứ hai bị bỏ qua, kẻ tấn công 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ùng cấu trúc như một sự kiện gửi tiền hợp pháp. 

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

Xử lý các token gốc không đúng cách

Các cầu nối có các cách tiếp cận khác nhau để xử lý các token gốc và token tiện ích. Ví dụ: trên mạng Ethereum, các token gốc là ETH và hầu hết các token tiện ích đều tuân thủ tiêu chuẩn ERC-20. 

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

Gửi các token ERC-20 khác đáng kể so với gửi ETH. Để gửi một token 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 các token của họ. Sau khi họ đã phê duyệt điều này và gửi các token vào hợp đồng bắc cầu, hợp đồng này sẽ ghi token của người dùng bằng chức năng "burnFrom()" hoặc chuyển token 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 điều này là sử dụng câu lệnh if-else trong cùng một chức năng. Một cách tiếp cận khác là tạo hai chức năng riêng biệt để xử lý từng tình huống. Việc cố gắng gửi ETH bằng chức năng ký gửi ERC-20 có thể dẫn đến việc mất các khoản tiền này.

Khi xử lý các yêu cầu gửi tiền ERC-20, người dùng thường cung cấp địa chỉ token làm đầu vào cho chức năng gửi tiền. Điều này gây rủi ro đáng kể 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. Việc triển khai danh sách trắng chỉ bao gồm các token được cầu nối hỗ trợ là một cách phổ biến để giảm thiểu rủi ro. Chỉ các địa chỉ trong danh sách trắng mới được phép chuyển thành đối số. Điều này ngăn các cuộc gọi bên ngoài vì đội ngũ dự án đã lọc địa chỉ token.

Tuy nhiên, các vấn đề cũng có thể phát sinh khi các cầu nối xử lý chuyển giao chuỗi chéo token gốc, vì token gốc không có địa chỉ. Địa chỉ số 0 (0x000...0) đại diện cho token gốc. Điều này có thể có vấn đề vì việc chuyển địa chỉ 0 đến 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 tài sản của người dùng sang hợp đồng, lệnh gọi bên ngoài đến địa chỉ số 0 trả về false do không có chức năng "transferFrom" nào được triển khai trong địa chỉ số không. 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 những kẻ tấn công thực hiện giao dịch mà không cần chuyển bất kỳ token nào vào hợp đồng.

Cấu hình sai

Trong hầu hết các cầu nối blockchain, một vai trò đặc quyền là trách nhiệm đưa các token 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. Đả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 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ố khi kẻ tấn công bỏ qua thành công quá trình xác minh bản ghi chuyển do cấu hình sai. Đội ngũ dự án đã thực hiện nâng cấp giao thức vài ngày trước vụ hack, 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. Thay đổi này dẫn đến việc tất cả các tin nhắn được tự động được xem là đã được chứng minh, do đó cho phép kẻ tấn công gửi một tin nhắn tùy ý và vượt qua quy trình xác minh.

Làm thế nào để cải thiện bảo mật cầu nối

Bốn lỗ hổng cầu nối phổ biến được giải thích ở trên cho thấy những thách thức đối với 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 bảo mật này và không có cẩm nang riêng lẻ nào áp dụng cho tất cả các lỗ hổ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ầu nối 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 bỏ qua xác minh là kiểm tra kỹ lưỡng cầu nối nhằm chống lại tất cả các hướng tấn công có thể có và đảm bảo logic xác minh hợp lý. 

Tóm lại, điều cần thiết là phải thực hiện kiểm tra nghiêm ngặt chống lại 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 nhất đối với các cầu nối.  

Tổng kết 

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

Đọc thêm:

Cầu Nối Blockchain Là Gì?

Khả Năng Tương Tác Xuyên Chuỗi Là Gì?

Ba Cầu Nối Tiền Mã Hóa Phổ Biến Và Cách Chúng Hoạt Động

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

Tuyên bố từ chối trách nhiệm và Cảnh báo rủi ro: Nội dung này được trình bày cho bạn trên cơ sở "nguyên trạng" chỉ nhằm mục đích thông tin chung và giáo dục, không có bất kỳ hình thức đại diện hay bảo đảm nào. Nó không nên được hiểu là tư vấn tài chính, pháp lý hoặc chuyên nghiệp khác, cũng như không nhằm 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 thích hợp. Trong trường hợp bài viết được đóng góp bởi cộng tác viên bên thứ ba, xin lưu ý rằng những quan điểm thể hiện đó thuộc về cộng tác viên 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 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ể 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 pháp lý cho bất kỳ tổn thất nào mà bạn có thể phải gánh chịu. Tài liệu này không nên được hiểu là tư vấn tài chính, pháp lý hoặc chuyên nghiệp khác. Để biết thêm thông tin, hãy xem Điều khoản sử dụng Cảnh báo rủi ro của chúng tôi.