Tác giả: Jagjit Singh, CoinTelegraph; Người biên soạn: Wu Baht, Golden Finance
1. Các lỗ hổng tiềm ẩn trong hợp đồng thông minh
Mặc dù hợp đồng thông minh là bước đột phá nhưng chúng không tránh khỏi các sai sót có thể bị các bên độc hại khai thác.
Xác thực đầu vào không đầy đủ là điểm yếu phổ biến cho phép kẻ tấn công tác động đến việc thực hiện hợp đồng bằng cách cung cấp đầu vào không mong muốn. Ngoài ra, việc áp dụng logic kinh doanh không đúng cách có thể tạo ra các lỗ hổng logic hoặc hành vi không mong muốn trong hợp đồng, dẫn đến các lỗ hổng. Ngoài ra, các lệnh gọi bên ngoài không an toàn (chẳng hạn như các lệnh gọi liên quan đến giao diện với nguồn dữ liệu bên ngoài hoặc các hợp đồng khác) có thể tạo ra lỗ hổng nếu không được xử lý đúng cách.
Tấn công reentrancy là một lỗ hổng xảy ra khi một hợp đồng gọi một hợp đồng khác từ bên ngoài trước khi hoàn thành các thay đổi trạng thái của chính nó. Điều này cho phép hợp đồng được gọi nhập lại hợp đồng gọi và có thể thực hiện lại một số hoạt động của nó. Điều này có thể dẫn đến hành vi không mong muốn và cho phép kẻ tấn công thay đổi trạng thái của hợp đồng, tiêu hao tiền hoặc gây ra các tác động tiêu cực khác.
Trước khả năng xảy ra các cuộc tấn công như vậy, nhà phát triển cũng nên thận trọng khi sử dụng hợp đồng hoặc nguồn dữ liệu bên ngoài và đảm bảo rằng các lệnh gọi bên ngoài được xử lý chính xác để tránh hành vi và lỗ hổng không mong muốn. Họ có thể giúp bảo vệ hợp đồng thông minh khỏi các mối đe dọa ngày càng tăng bằng cách chú ý đến các quy trình bảo mật như thử nghiệm hợp đồng thông minh.
2. Tấn công reentrancy trong hợp đồng thông minh là gì?
Trong hợp đồng thông minh, một cuộc tấn công reentrancy xảy ra khi hợp đồng gọi một hợp đồng hoặc chức năng khác từ bên ngoài trước khi hoàn thành các thay đổi trạng thái của chính nó.
Điều này cho phép hợp đồng được gọi nhập lại hợp đồng gọi và có khả năng thực hiện lại một số hoạt động của hợp đồng đó, điều này có thể dẫn đến hành vi nguy hiểm thường xuyên và không lường trước được. Ví dụ: hợp đồng A gọi hợp đồng B để gửi tiền và sau đó sửa đổi trạng thái của chính nó.
Mã của hợp đồng B có thể chứa chức năng gọi lại cho phép nó nhập lại hợp đồng A và có thể thực hiện lại chức năng chuyển giao trước khi hợp đồng A hoàn thành thay đổi trạng thái. Điều này sẽ cho phép kẻ tấn công lấy được tiền từ hợp đồng nhiều lần trước khi hoàn thành giao dịch ban đầu.
Vụ hack tổ chức tự trị phi tập trung (DAO) khét tiếng năm 2016 trên chuỗi khối Ethereum là một ví dụ nổi tiếng khác. Kẻ tấn công đã khai thác lỗ hổng reentrancy trong mã hợp đồng thông minh để rút tiền khỏi DAO một cách đệ quy, cuối cùng dẫn đến việc đánh cắp Ethereum (ETH) trị giá hàng triệu đô la.
Ngoài ra, Uniswap được bao gồm Một số giao thức tài chính phi tập trung (DeFi), bao gồm Lendf.Me, BurgerSwap, SURGEBNB, Cream Finance và Siren Protocol, đã bị tổn thất tài chính đáng kể do lỗ hổng tái đăng ký. Các vụ vi phạm đã dẫn đến thiệt hại từ 3,5 triệu USD đến 25 triệu USD, làm nổi bật mối đe dọa đang diễn ra do các lỗ hổng tái xuất hiện trong không gian DeFi.
3. Cách hoạt động của các cuộc tấn công reentrancy
Các cuộc tấn công reentrancy sử dụng việc thực hiện tuần tự các chức năng hợp đồng thông minh và các lệnh gọi bên ngoài để tạo thành một vòng lặp. Kẻ tấn công có thể thực thi một chức năng cụ thể nhiều lần trước khi hoàn thành nó. Điều này có thể dẫn đến hành vi nguy hiểm và việc rút tiền không được chấp thuận.
Hợp đồng của kẻ tấn công "đánh lừa" hợp đồng của nạn nhân một cách hiệu quả để gọi lại hợp đồng của kẻ tấn công trước khi nạn nhân hoàn tất việc sửa đổi trạng thái. Hành động này có thể dẫn đến việc rút tiền nhiều lần hoặc hành vi vô ý khác.
Hình ảnh trên minh họa Reentrancy tấn công vào hợp đồng thông minh. Hợp đồng của kẻ tấn công gọi hàm “rút()” của nạn nhân, hàm này sẽ gửi Ethereum trước khi cập nhật số dư. Sau đó, chức năng dự phòng của kẻ tấn công được kích hoạt, gọi lại đệ quy rút tiền () để rút tiền từ hợp đồng nạn nhân. Cuộc tấn công này lợi dụng việc nạn nhân không cập nhật số dư trước khi gửi tiền.
Hãy phân tích cách thức hoạt động của một cuộc tấn công đăng nhập lại bằng một ví dụ đơn giản:
Hợp đồng thông minh với chức năng “Rút tiền”
Giả sử có Ví kỹ thuật số thông minh hợp đồng rút tiền. Ngoài việc theo dõi số dư của người dùng, hợp đồng còn có chức năng rút tiền để thuận tiện cho việc rút tiền. Chức năng rút tiền thường cho phép người dùng rút token hoặc Ethereum từ hợp đồng thông minh về ví cá nhân của họ.
Tương tác người dùng và thực hiện chức năng
Người dùng tự yêu cầu rút tiền từ ví. Họ sử dụng chức năng Rút tiền để nhập số tiền rút mong muốn.
Chức năng rút tiền sẽ xác minh xem người dùng có đủ tiền để rút khi được gọi hay không. Nếu các yêu cầu được đáp ứng, nó sẽ chuyển số tiền cần thiết đến địa chỉ do người dùng chọn.
Những lời kêu gọi từ bên ngoài
Đây là lúc điểm yếu bộc lộ. Hợp đồng thực hiện lệnh gọi bên ngoài tới hợp đồng hoặc tài khoản khác trước khi số tiền rút được phản ánh trong số dư của người dùng.
Các lệnh gọi đệ quy
Nếu mã của hợp đồng bên ngoài chứa một hàm có thể gọi lại hợp đồng gốc (chẳng hạn như một hàm rút tiền khác), một vòng lặp đệ quy sẽ được tạo. Điều này cho phép phương thức rút tiền được gọi lại trước khi hoàn thành.
Reentrancy
Kẻ tấn công sau đó sử dụng một hợp đồng độc hại để khai thác vòng lặp này. Trong khoảng thời gian hợp đồng ví gọi hợp đồng bên ngoài, hợp đồng kẻ tấn công sẽ nhanh chóng gọi lại chức năng rút tiền của ví trước khi số dư được cập nhật.
Chức năng dự phòng
Trong một số trường hợp, chức năng dự phòng của hợp đồng thông minh (một chức năng duy nhất được bắt đầu khi hợp đồng nhận được cuộc gọi mà không có bất kỳ dữ liệu hoặc Ethereum nào) có thể bị kẻ tấn công sử dụng . Các cuộc tấn công Reentrancy có thể được thực hiện bằng cách liên tục gọi hàm dự phòng trong khi tiền vẫn đang được xử lý.
Thao túng và rút tiền nhiều lần
Hợp đồng của kẻ tấn công có thể sử dụng lại chức năng rút tiền trong cùng một giao dịch vì hợp đồng ví trì hoãn việc cập nhật số dư cho đến khi nhận được cuộc gọi bên ngoài. Do đó, điều này giúp việc rút tiền mà không được phép dễ dàng hơn, cho phép kẻ tấn công đánh cắp tiền ngoài quyền hợp pháp của họ. Sau đó, nó đã gây ra tổn thất tài chính lớn cho người sử dụng hợp đồng ví.
4. Hậu quả của các cuộc tấn công truy cập lại
Các cuộc tấn công truy cập lại có thể ảnh hưởng nghiêm trọng đến người dùng hợp đồng thông minh vì chúng có thể gây ra tổn thất tài chính đáng kể.
Một trong những hậu quả trực tiếp nhất của cuộc tấn công reentrancy là việc rút tiền trái phép hoặc thao túng tiền mặt được giữ trong một hợp đồng thông minh dễ bị tấn công. Kẻ tấn công khai thác lỗ hổng này để liên tục rút tiền khỏi hợp đồng, làm cạn kiệt số dư hợp đồng và có khả năng gây tổn thất tài chính đáng kể cho người dùng đã đầu tư hoặc lưu trữ tài sản trong hợp đồng bị ảnh hưởng.
Ngoài ra, các cuộc tấn công tái truy cập có thể làm suy yếu niềm tin của người dùng vào tính bảo mật và tính toàn vẹn của hợp đồng thông minh và công nghệ chuỗi khối. Các lỗ hổng Reentrancy có thể gây ra những hậu quả thảm khốc, bằng chứng là các sự cố nổi bật như vụ hack DAO năm 2016 trên chuỗi khối Ethereum, gây ra tổn thất tài chính lớn và làm tổn hại đến danh tiếng của cộng đồng.
Ngoài những hậu quả tài chính ngắn hạn, các cuộc tấn công tái đăng nhập có thể gây ra những ảnh hưởng lâu dài, chẳng hạn như gây sự chú ý về mặt pháp lý và pháp lý, làm mất niềm tin của nhà đầu tư và gây tổn hại đến danh tiếng của các nền tảng và dự án blockchain. Nhận thức về lỗ hổng có thể khiến người dùng thận trọng khi tương tác với hợp đồng thông minh hoặc đầu tư vào các ứng dụng phi tập trung (DApps), cản trở việc áp dụng và mở rộng công nghệ blockchain.
5. Cách giảm thiểu các cuộc tấn công tái xuất hiện
Việc triển khai các phương pháp hay nhất trong việc tạo và kiểm tra hợp đồng thông minh là cần thiết để giảm thiểu các mối đe dọa tái xuất hiện.
Điều này bao gồm việc sử dụng các cơ sở mã có uy tín với hồ sơ theo dõi về bảo mật, đây là một cách để đạt được điều này. Các thư viện này đã được thử nghiệm và đánh giá ngang hàng rộng rãi, giúp giảm nguy cơ phát sinh lỗ hổng.
Các nhà phát triển cũng nên sử dụng các biện pháp kiểm tra bảo mật như thiết kế "kiểm tra hiệu ứng-tương tác" để giảm thiểu nguy cơ xảy ra các cuộc tấn công quay lại bằng cách đảm bảo rằng các sửa đổi trạng thái diễn ra một cách nguyên tử. Nếu có sẵn, khung phát triển hợp đồng thông minh được bảo mật lại có thể được sử dụng để bổ sung thêm một tuyến phòng thủ chống lại các lỗ hổng như vậy.
Các nhà phát triển ít có khả năng thêm các biện pháp bảo vệ bảo mật theo cách thủ công vì các khung này thường bao gồm các phương pháp tích hợp sẵn và các biện pháp bảo vệ được thiết kế đặc biệt để tránh các cuộc tấn công tái xuất hiện. Tuy nhiên, vì bảo mật blockchain vẫn đang phát triển nên các nhà phát triển phải tiếp tục tìm kiếm các mối đe dọa và lỗ hổng mới.