Bài viết này là sự đóng góp của cộng đồng. Tác giả là Minzhi He, kiểm toán viên của CertiK.
Các 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 quan điểm của Học viện Binance.
Tóm tắt
Cầu nối chuỗi khối là nền tảng để đạt được khả năng tương tác trong lĩnh vực chuỗi khối. Do đó, tính bảo mật của công nghệ cầu nối chuỗi chéo là rất quan trọng. Một số lỗ hổng bảo mật cầu blockchain phổ biến bao gồm xác minh không đầy đủ 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. Để đảm bảo logic xác minh là hợp lý, bạn nên kiểm tra cầu nối chuỗi chéo chống lại tất cả các vectơ tấn công có thể xảy ra.
Cầu chuỗi khối kết nối hai chuỗi khối , một giao thức cho phép hai người để tương tác. Thông qua cầu nối blockchain, nếu người dùng muốn tham gia các hoạt động DeFi trên mạng Ethereum, họ chỉ cần giữ Bitcoin và không cần bán nó để đạt được mục tiêu của mình.
Cầu chuỗi khối là nền tảng cho khả năng tương tác trong lĩnh vực chuỗi khối. Họ sử dụng nhiều xác minh trên chuỗi và ngoài chuỗi để hoạt động, do đó cũng có thể có các lỗ hổng bảo mật khác nhau.
Cầu nối chuỗi khối thường chứa các 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 chuỗi khối thường được triển khai dưới dạng hợp đồng thông minh. Khi chuyển khoản xuyên chuỗi tiếp tục tích lũy, một số lượng lớn mã thông báo sẽ được giữ trên cầu. Khối tài sản khổng lồ này sẽ khiến chúng trở thành mục tiêu thèm muốn của tin tặc.
Ngoài ra, bề mặt tấn công của các cầu blockchain có xu hướng lớn do có nhiều thành phần liên quan. Do đó, bọn tội phạm có động lực mạnh mẽ để nhắm mục tiêu vào các ứng dụng xuyên chuỗi nhằm thu được số tiền lớn.
Theo ước tính của CertiK, các cuộc tấn công cầu blockchain đã gây ra 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 đó. .
Để nâng cao Bảo mật cầu chuỗi khối, điều quan trọng là phải hiểu các lỗ hổng bảo mật cầu nối chuỗi chéo phổ biến và kiểm tra cầu chuỗi khối trước khi khởi chạy nó. Những lỗ hổng này chủ yếu đến từ bốn khía cạnh sau:
Đối với các cầu nối blockchain đơn giản, đặc biệt là các cầu nối được thiết kế cho một dApp cụ thể, thường chỉ có mức độ xác minh trên chuỗi tối thiểu. Những cầu nối 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, ghi và chuyển mã thông báo, với tất cả quá trình xác minh diễn ra ngoài chuỗi.
Trong khi các loại cầu nối khác sử dụng hợp đồng thông minh để xác minh tin nhắn và xác minh chúng trên chuỗi. Trong 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ý này sẽ được sử dụng làm 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 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à các hồ sơ nạp tiền giả mạo.
Tuy nhiên, nếu có lỗ hổng trong quy trình xác minh trên chuỗi thì cuộc tấn công có thể gây ra thiệt hại nghiêm trọng. Ví dụ: nếu blockchain sử dụng cây Merkle để xác minh hồ sơ giao dịch, kẻ tấn công có thể tạo ra bằng chứng giả mạo. Điều này có nghĩa là nếu quá trình xác minh dễ bị tấn công, kẻ tấn công có thể bỏ qua xác minh bằng chứng và đúc mã thông báo mới trong tài khoản của họ.
Một số cầu nối blockchain sẽ 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 họ sẽ bị loại khỏi hợp đồng Ethereum và một lượng DAI được bao bọc 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 minh chính xác, kẻ tấn công có thể triển khai một hợp đồng độc hại và thao túng chức năng chuyển đổi mã được gói Tiền xu được chuyển từ cây cầu đến địa chỉ sai.
Kẻ tấn công cũng cần nạn nhân phê duyệt hợp đồng cầu nối chuỗi chéo trước khi sử dụng chức năng "TransferFrom" để chuyển mã thông báo từ cầu nối chuỗi chéo hợp đồng Lấy đi tài sản.
Nhưng điều khó khăn là nhiều cầu nối chuỗi chéo yêu cầu người dùng dApp phê duyệt mã thông báo vô thời hạn. Cách làm này rất phổ biến và nó Phí gas có thể giảm, nhưng việc cho phép các 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 sẽ gây ra nhiều rủi ro hơn. Những kẻ tấn công sẽ khai thác những xác minh dưới mức và phê duyệt quá mức này để chuyển mã thông báo từ người dùng khác sang chính họ.
Trong một số hệ thống cầu nối chuỗi chéo, 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 ta cần tập trung vào việc xác minh giao dịch nạp tiền.
Nguyên tắc hoạt động của cầu nối blockchain với xác minh ngoài chuỗi như sau:
Người dùng tương tác với dApp và gửi token vào hợp đồng thông minh trên chuỗi nguồn.
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.
Băm giao dịch cần được máy chủ xác minh nhiều lần. Nếu được coi là hợp pháp, người ký sẽ ký tin nhắn và gửi chữ ký trở lại giao diện người dùng thông qua API.
Sau 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 khỏi chuỗi mục tiêu.
Máy chủ phụ trợ phải đảm bảo rằng các giao dịch nạp tiền mà nó xử lý là thật và không 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 tấn công đầu tiên.
Máy chủ phụ trợ cần xác minh cấu trúc của sự kiện bắt đầu giao dịch và địa chỉ hợp đồng đã bắt đầu sự kiện. Nếu điều sau bị bỏ qua, kẻ tấn công có thể triển khai các hợp đồng độc hại để giả mạo các sự kiện nạp tiền có cấu trúc tương tự như các sự kiện nạp tiền hợp pháp.
Nếu máy chủ phụ trợ không xác minh địa chỉ nào đã khởi tạo sự kiện, nó sẽ coi đó là 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 máy chủ phụ trợ, bỏ qua xác minh và cho phép nó rút mã thông báo khỏi chuỗi mục tiêu.
Cầu nối chuỗi chéo có cách tiếp cận khác với 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 dự định chuyển ETH của họ sang một chuỗi khác, trước tiên họ phải gửi số tiền đó vào hợp đồng cầu nối liên chuỗi. Để thực hiện việc này, người dùng chỉ cần gắn ETH vào giao dịch và có thể lấy số lượng ETH bằng cách đọc trường giao dịch "msg.value".
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 chuỗi chéo sử dụng mã thông báo của họ. Sau khi họ phê duyệt và gửi mã thông báo vào hợp đồng cầu nối chuỗi chéo, hợp đồng sẽ sử dụng chức năng "burnFrom()" để hủy mã thông báo của người dùng hoặc chức năng "transferFrom()" để chuyển mã thông báo của người dùng sang hợp đồng.
Để phân biệt đó là thao tác nào, bạn có thể sử dụng câu lệnh if-else trong cùng một hàm. Hoặc tạo hai hàm riêng biệt để xử lý từng tình huống. Do các phương thức xử lý khác nhau, nếu người dùng cố gắng gửi ETH bằng chức năng gửi tiền ERC-20 thì ETH có thể bị mất.
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 tham số đầu vào và chuyển nó đến chức năng gửi tiền. Điều này gây ra 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. Sử dụng danh sách trắng để chỉ bao gồm các token được hỗ trợ bởi cầu nối chuỗi chéo là cách phổ biến để giảm thiểu rủi ro. Chỉ những địa chỉ trong danh sách trắng mới được chuyển dưới dạng tham số. Điều này ngăn các cuộc gọi bên ngoài vì nhóm dự án đã lọc các địa chỉ mã thông báo.
Tuy nhiên, khi cầu nối chuỗi chéo xử lý việc chuyển mã thông báo gốc xuyên chuỗi thì cũng gặp rắc rối vì mã thông báo gốc không có địa chỉ . Mã thông báo gốc có thể được biểu thị bằng một địa chỉ đặc biệt, "địa chỉ 0" (0x000... 0). Nhưng có một vấn đề với điều này, nếu logic xác minh danh sách trắng không được triển khai chính xác, việc chuyển địa chỉ 0 đến hàm có thể bỏ qua việc xác minh danh sách trắng.
Khi hợp đồng cầu nối chuỗi chéo 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 tới địa chỉ 0 sẽ trả về false vì hàm "transferFrom" không được triển khai ở địa chỉ 0. Tuy nhiên, nếu hợp đồng không xử lý chính xác giá trị trả lại thì giao dịch vẫn có thể tiếp tục diễn ra. Đ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.
Trong hầu hết các cầu nối blockchain, có một 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 hoặc danh sách đen, chỉ định hoặc thay đổi người ký và các cấu hình chính khác. Điều quan trọng là phải đảm bảo rằng tất cả các cấu hình đều chính xác, vì những sai sót tưởng chừng như nhỏ nhặt có thể dẫn đến thiệt hại đáng kể.
Trên thực tế, đã có những trường hợp kẻ tấn công vượt qua thành công quá trình xác minh bản ghi đường truyền 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, trong đó một biến nhất định đã bị thay đổi. Biến này là giá trị mặc định được sử dụng để thể hiện các tin nhắn đáng tin cậy. Thay đổi này khiến tất cả các tin nhắn được tự động coi là xác thực, do đó cho phép kẻ tấn công gửi một tin nhắn ngẫu nhiên và vượt qua quá trình xác thực.
Như đã đề cập ở trên Bốn lỗ hổng cầu nối chuỗi chéo phổ biến chứng minh rằng không thể đánh giá thấp những thách thức bảo mật trong hệ sinh thái blockchain được kết nối. Để xử lý các lỗ hổng này, chúng ta cần xem xét “theo điều kiện địa phương”, không có phương pháp nào có thể là thần dược để xử lý tất cả các lỗ hổng.
Ví dụ: vì mỗi cầu nối chuỗi chéo có các yêu cầu xác minh duy nhất nên chỉ cần cung cấp các nguyên tắc chung sẽ đảm bảo rằng quy trình xác minh không Không đúng, việc này khó thực hiện. Cách hiệu quả nhất để ngăn chặn việc bỏ qua xác minh là kiểm tra kỹ lưỡng cầu nối chuỗi chéo 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ý.
Nói chung, việc kiểm tra nghiêm ngặt phải được tiến hành để chống lại các cuộc tấn công tiềm ẩn, đặc biệt chú ý đến các lỗ hổng bảo mật phổ biến nhất trong các cầu nối chuỗi chéo.
Cầu chuỗi chéo từ lâu đã trở thành mục tiêu của những kẻ tấn công do số tiền khổng lồ. Các nhà xây dựng có thể tăng cường bảo mật của các cầu nối chuỗi chéo bằng cách tiến hành thử nghiệm toàn diện trước khi triển khai và kết hợp kiểm tra của bên thứ ba, từ đó giảm nguy cơ xảy ra các vụ hack thảm khốc đã xảy ra trên các cầu nối chuỗi trong vài năm qua. Cầu nối chuỗi chéo rất quan trọng trong thế giới đa chuỗi, nhưng bảo mật phải được cân nhắc hàng đầu khi thiết kế và xây dựng cơ sở hạ tầng Web3 hiệu quả.
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à nguyên tắc hoạt động của chúng
Mã thông báo được gói là gì?
Tuyên bố miễn trừ trách nhiệm và cảnh báo rủi ro: Nội dung của bài viết này là sự thật và chỉ nhằm mục đích cung cấp thông tin chung cũng như giáo dục và không cấu thành bất kỳ sự đại diện hay bảo đảm nào. Bài viết 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 và không khuyến nghị bạn 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 mình từ các cố vấn chuyên môn phù hợp. Nếu bài viết này được cung cấp bởi cộng tác viên bên thứ ba, xin lưu ý rằng quan điểm thể hiện trong bài viết này 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. Để biết thêm thông tin, vui lòng nhấp vàođâyđể đọc toàn bộ tuyên bố từ chối trách nhiệm của chúng tôi. Giá tài sản kỹ thuật số có thể dao động. Giá trị khoản đầu tư của bạn có thể giảm cũng như tăng và bạn có thể không lấy lại được số tiền gốc đã đầ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 bạn có thể phải gánh chịu. Bài viết này không phải 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ụngvàCảnh báo rủi ro của chúng tôi.