Bài viết này là một sự đóng góp của cộng đồng. Tác giả là Minzhi He, kiểm toán viên của CertiK.
Ý kiế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 để đạt được khả năng tương tác trong không gian chuỗi khối. Vì vậy, sự an toàn của bạn là điều quan trọng nhất. Một số lỗ hổng bảo mật cầu nối phổ biến nhất 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ầ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 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 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 rất quan trọng để đạt được khả năng tương tác trong không gian chuỗi khối. Chúng hoạt động thông qua nhiều quá trình xác thực trên chuỗi và ngoài chuỗi khác nhau, do đó chúng bộc lộ các lỗ hổng bảo mật khác nhau.
Tại sao an toàn cầu là cần thiết?
Thông thường, một cây cầu sẽ chứa mã thông báo 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, 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 cho tin tặc.
Ngoài ra, các cầu blockchain có phạm vi tấn công lớn vì chúng bao gồm nhiều thành phần. Với ý nghĩ đó, những kẻ độc hại coi các ứng dụng chuỗi chéo là mục tiêu rất tốt để đánh cắp số tiền lớn.
Theo ước tính của CertiK, vào năm 2022, các cuộc tấn công cầu đã gây ra 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
Để cải thiện tính bảo mật của bridge, việc hiểu các lỗ hổng phổ biến nhất của chúng và kiểm tra chúng trước khi phát hành là rất có giá trị. 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ư đúc, đốt 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.
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 những trường hợp 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ý đóng vai trò là bằng chứng về khoản tiền gửi và đượ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 có thể ngăn chặn các loại 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à làm sai lệch hồ sơ tiền gửi.
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 lớn. Ví dụ: nếu một cây cầu sử dụng cây Merkle để xác thực nhật ký giao dịch, kẻ tấn công có thể tạo ra các biên nhận 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, kẻ tấn công có thể bỏ qua xác thực biên nhận và tạo mã thông báo mới cho tài khoản của bạn.
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 sẽ được lấy từ 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 không được xác thực chính xác, kẻ tấn công có thể thực hiện hợp đồng độc hại để chuyển các mã thông báo được gói từ cầu nối đến một địa chỉ không chính xác.
Những kẻ tấn công cũng 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à do đó rút tài sản khỏi hợp đồng bắc cầu.
Thật không may, điều này càng trở nên tồi tệ hơn vì nhiều cây cầu yêu cầu sự phê duyệt vô hạn mã thông báo từ người dùng DApps. Đâ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 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 pháp của các tin nhắn được gửi từ chuỗi khối. Lần này chúng tôi sẽ tập trung vào việc xác minh các giao dịch tiền gửi.
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:
Người dùng tương tác với DApp để gửi token vào hợp đồng thông minh chuỗi nguồn.
Sau đó, DApp sẽ 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.
Băm giao dịch trải qua 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.
Khi nhận được chữ ký, DApp sẽ xác minh nó và ủy quyền cho 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 mà nó xử lý thực sự diễn ra và không phải là 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 và do đó là mục tiêu tấn công được tội phạm mạng săn lùng nhiều.
Máy chủ phụ trợ phải xác thực cấu trúc của sự kiện được 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 sau 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ấu trúc giống như 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 hành sự kiện thì nó có thể coi đó là một giao dịch 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ợ, bỏ qua xác minh và quản lý để xóa 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
Các cầu nối có những 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 thủ tiêu chuẩn ERC-20.
Nếu người dùng cố gắng chuyển ETH của họ sang chuỗi khác, trước tiên họ 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 gắn ETH vào giao dịch và số lượng ETH có thể được truy xuất 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 chi tiêu mã thông báo của họ. Sau khi được phê duyệt 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 để phân biệt điều này là sử dụng câu lệnh điều kiện trong chính hàm đó. Một cách 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 tính năng gửi tiền cho ERC-20 có thể dẫn đến mất tiền.
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ỉ mã thông báo làm đầu vào cho chức năng gửi tiền. Điều này tiềm ẩn 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 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 này. Chỉ những địa chỉ trong danh sách trắng mới có thể được 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 đã rò rỉ địa chỉ mã thông báo.
Tuy nhiên, các vấn đề có thể phát sinh khi các cầu nối 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ỉ 0 cho hàm có thể bỏ qua việc kiểm tra danh sách trắng, ngay cả khi được triển khai đúng cách.
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 trả về sai vì tại địa chỉ 0 không có chức năng "transferFrom" nào được triển khai. Tuy nhiên, giao dịch vẫn có thể xảy ra nếu hợp đồng không xử lý đúng giá trị trả về. Đ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 chuyển bất kỳ mã thông báo nào vào hợp đồng.
Cấu hình sai
Trong hầu hết các cầu nối blockchain, người chịu trách nhiệm đưa 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 là một vai trò đặc quyền. Đảm bảo 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 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ố trong đó kẻ tấn công đã vượt qua thành công quá trình xác minh nhật ký chuyển do cấu hình sai. Nhóm dự án đã triển khai bản cập nhật giao thức vài ngày trước vụ hack và bản cập nhật này 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 khiến tất cả các tin nhắn được tự động phân loại là đã kiểm tra, 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.
Làm thế nào để cải thiện an toàn cầu
Bốn lỗ hổng cầu nối phổ biến nhất được giải thích cho đến nay cho thấy 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ó giải pháp dễ dàng nào phù hợp với 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à 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 các vectơ tấn công tiềm ẩn và đảm bảo rằng logic xác minh là mạnh mẽ.
Nói tóm lại, điều cần thiết là phải 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 cầu phổ biến nhất.
Kết luận
Do có giá trị cao nên các cầu nối chuỗi từ lâu đã trở thành mục tiêu 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ây cầu của mình bằng cách tiến hành thử nghiệm rộng rãi trước khi triển khai và tham gia kiểm tra của bên thứ ba, giảm nguy cơ tái diễn các vụ tấn công tàn khốc đã gây khó khăn cho các cây cầu trong những năm gần đây. Các cầu nối rất quan trọng đối với thế giới đa chuỗi, nhưng bảo mật phải là ưu tiên hàng đầu trong việc thiết kế và xây dựng 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ây cầu 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 pháp lý và cảnh báo rủi ro: Nội dung này được trình bày "nguyên trạng" chỉ nhằm mục đích thông tin chung và giáo dục mà không có đại diện hay bảo đảm dưới bất kỳ hình thức nào. Nó 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 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 cá nhân từ các cố vấn chuyên môn phù hợp. Vì bài viết này được đóng góp bởi bên thứ ba, xin lưu ý rằng các ý kiến được đưa ra là của bên đóng góp thứ ba và không nhất thiết phản ánh quan điểm của Binance Academy. Để biết thêm thông tin, hãy đọc thông báo pháp lý đầy đủ 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ị của khoản đầu tư có thể giảm hoặc tăng và bạn có thể không lấy lại được số tiền đã đầu tư. Chỉ có bạn chịu trách nhiệm về 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ể phải gánh chịu. 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 khác. Để biết thêm thông tin, vui lòng xem Điều khoản sử dụng và Cảnh báo rủi ro của chúng tôi.



