Tin tức & Sự kiện
Blog

Lỗ hổng hợp đồng thông minh và cách giảm thiểu rủi ro

time 29 tháng 05, 2024

Hợp đồng thông minh tự động thực hiện nhiệm vụ được giao khi có sự kiện cụ thể xảy ra. Chúng thường được sử dụng để xử lý các luồng tài nguyên và dữ liệu lớn, do đó thu hút những kẻ tấn công mạng muốn đánh cắp dữ liệu.

Hợp đồng thông minh (Smart contract) được triển khai trên chuỗi khối (blockchain), chẳng hạn như Ethereum hoặc cơ sở hạ tầng sổ cái phân tán khác, nơi chúng theo dõi các sự kiện và cập nhật từ nguồn cấp dữ liệu được bảo mật bằng mật mã oracles.

Hợp đồng thông minh thường kiểm soát luồng dữ liệu rất lớn và nhiều tài nguyên có giá trị, chẳng hạn giao dịch chuyển tiền, cung cấp dịch vụ và mở khóa nội dung được bảo vệ,... Điều này khiến chúng trở thành mục tiêu hấp dẫn đối với những kẻ độc hại.

Bảo mật phải là ưu tiên hàng đầu khi thiết kế và phát triển hợp đồng thông minh. Khi hợp đồng thông minh đã được triển khai trên blockchain, rất khó hoặc không thể vá lỗi. Nó phải được gỡ bỏ, tạo mới và triển khai lại.

Một khi xuất hiện lỗ hổng bảo mật của hợp đồng thông minh trên chuỗi khối, bất kỳ ai cũng có thể truy cập. Dưới đây là một số rủi ro có thể gặp phải ở hợp đồng thông minh:

1. Tấn công Reentrancy (Reentrancy attacks)

Hợp đồng thông minh thực chất là các đoạn mã BYTECODE được viết và dịch bằng ngôn ngữ Solidity. Đoạn mã này sau đó được chuyển tới tất cả Node của chuỗi khối và sẽ thực thi hợp đồng trên máy ảo EVM (trong trường hợp của Ethereum).

Reentrancy là một trong những lỗ hổng của hợp đồng thông minh Ethereum phổ biến nhất. Mỗi dòng mã phải thực thi trước khi dòng tiếp theo bắt đầu. Có nghĩa là khi một hợp đồng thực hiện lệnh gọi bên ngoài đến một hợp đồng khác, việc thực thi hợp đồng gọi sẽ bị tạm dừng cho đến khi lệnh gọi quay trở lại.

Điều này cho phép hợp đồng được gọi có quyền kiểm soát tạm thời một cách hiệu quả đối với những gì xảy ra tiếp theo, tạo ra khả năng xảy ra một vòng lặp vô hạn.

Ví dụ, người dùng muốn rút tiền từ tài khoản có số dư 100 triệu đồng. Nếu người dùng ra lệnh rút 100 triệu, tài khoản tại Ngân hàng sẽ về 0 đồng. Tuy nhiên, nếu lệnh rút gặp lỗi reentrancy, người dùng có thể rút nhiều lần 100 triệu đồng mà tài khoản không thay đổi về 0, cho đến khi họ rút hết tiền từ Ngân hàng.

Cách khắc phục:

Lỗ hổng này xảy ra khi logic mã của hợp đồng thông minh bị sai sót. Các nhà phát triển cần thiết kế cẩn thận lệnh gọi bên ngoài, đồng thời luôn kiểm tra và cập nhật trạng thái của hợp đồng, chẳng hạn như giảm số dư Ether trước khi thực hiện yêu cầu gửi tiền.

Việc cài đặt thêm bộ bảo vệ reentrancy cũng góp phần ngăn chặn nhiều chức năng được thực thi cùng một lúc bằng cách khóa hợp đồng. Những công cụ khác nhau, chẳng hạn như Slither, Mythril và Securify, có thể kiểm tra sự hiện diện của các loại lỗ hổng reentrancy.

2. Tấn công phụ thuộc vào lệnh giao dịch (frontrunning)

Hợp đồng thông minh được hiển thị công khai kể từ thời điểm chúng được gửi lên mạng chuỗi khối dưới dạng giao dịch đang chờ xử lý. Tất cả giao dịch chưa được xác nhận nằm trong “phòng chờ” (mempool) trước khi chúng được thợ đào đưa vào một khối.

Người thợ đào thường sẽ chọn giao dịch có phí gas (Gas Fee - khoản tiền chi trả cho các nền tảng blockchain để thực hiện giao dịch hay hoạt động tương tác với smart contract) có lợi nhất.

Ví dụ: Người dùng trả một khoản phí để khuyến khích thợ đào ưu tiên giao dịch của họ trước các giao dịch khác trong cùng một khối. 

Điều này cho phép kẻ tấn công có cơ hội “chạy” trước các hợp đồng gốc. Chúng sẽ gửi một hợp đồng giống hệt nhưng với phí gas cao hơn. Do vậy, những hợp đồng đó được ưu tiên xử lý. 

Cách khắc phục:

Frontrunning được xem là lỗ hổng rất khó để ngăn chặn và là một rủi ro smart contract khá phổ biến. Cách đề phòng là chỉ nên chấp nhận những giao dịch có phí gas ở một ngưỡng xác định trước.

Ngoài ra, sử dụng cơ chế hash-commit-reveal, liên quan đến việc người dùng xuất bản hàm băm để “cam kết” và tiết lộ giá trị sau. Một số công cụ kiểm tra hợp đồng thông minh khác cũng có thể phát hiện liệu code (mã) có đang xuất hiện lỗ hổng hay không.


Thông thường khi gặp lỗi frontrunning, cần tái cấu trúc hoặc thiết kế lại hợp đồng để khắc phục - Ảnh: Internet

3. Thao túng Oracle

Oracle là thuật ngữ chỉ những ứng dụng cung cấp nguồn, xác minh và truyền thông tin từ bên ngoài thế giới thực đến smart contract chạy trên blockchain.

Hợp đồng thông minh truy cập và sử dụng dữ liệu do oracle cung cấp. Điều này cho phép chúng tương tác với hệ thống ngoài chuỗi khối, chẳng hạn như thị trường chứng khoán.

Dữ liệu oracle bị thao túng hoặc không chính xác có thể kích hoạt sai việc thực thi hợp đồng thông minh. Nhiều ứng dụng tài chính phi tập trung đã bị khai thác bằng phương pháp này, trong đó phổ biến nhất là những cuộc tấn công cho vay nhanh (Flash loan attack).

Khoản vay nhanh về cơ bản là khoản vay không bảo đảm, không giới hạn số tiền có thể vay, miễn là khoản vay được hoàn trả trong cùng một giao dịch. Kẻ tấn công sử dụng khoản vay này để bóp méo giá tài sản nhằm tạo ra lợi nhuận trong khi vẫn tuân thủ quy tắc của blockchain.

Cách khắc phục

Sử dụng một oracle phi tập trung hoặc thậm chí nhiều oracle là cách dễ nhất để đảm bảo hợp đồng nhận được dữ liệu chính xác. Điều này gây ra khó khăn và tốn kém cho kẻ tấn công khi muốn can thiệp dữ liệu.

4. Sự phụ thuộc trong thời gian khởi tạo khối

Thời gian khởi tạo khối (Timestamp) được tạo bởi nút (node) thực thi hợp đồng thông minh. Do tính chất phân tán của nền tảng Ethereum, gần như không thể đảm bảo rằng thời gian trên mỗi nút được đồng bộ hóa chính xác.

Sau đó, một node có thể thao túng timestamp mà nó sử dụng để thực hiện một cuộc tấn công logic chống lại bất kỳ hợp đồng nào dựa vào biến block.timestamp để thực hiện các hoạt động quan trọng về thời gian.

Cách khắc phục:

Muốn tránh lỗ hổng này, nhà phát triển không nên sử dụng hàm block.timestamp làm công cụ kiểm soát hoặc kiểm tra logic hay làm nguồn ngẫu nhiên.

5. Tấn công từ chối dịch vụ (DoS)

Giống như bất kỳ dịch vụ trực tuyến nào, hợp đồng thông minh dễ gặp phải tấn công DoS (Denial of service). Bằng cách làm quá tải các dịch vụ, chẳng hạn như xác thực, kẻ tấn công có thể chặn hợp đồng khác thực hiện hoặc khiến hợp đồng hoàn nguyên một cách không mong muốn.

Ví dụ, gas chưa sử dụng được trả lại và hợp đồng hoàn nguyên về trạng thái trước khi giao dịch bắt đầu thực hiện. Điều này có thể dẫn đến kết quả đấu giá hoặc giá trị được sử dụng trong giao dịch tài chính bị thao túng để có lợi cho kẻ tấn công.

Cách khắc phục

Làm cho những cuộc tấn công này trở nên tốn kém hơn là cách tốt nhất để ngăn chặn chúng. Việc đảm bảo lệnh gọi (Call) chỉ được thực hiện đối với những hợp đồng đáng tin cậy cũng làm giảm khả năng xảy ra một cuộc tấn công DoS gây nên sự cố nghiêm trọng.

6. Lộ thông tin và chức năng

Bất cứ ai cũng có thể truy cập blockchain. Thông tin bí mật hoặc nhạy cảm không bao giờ được lưu vào blockchain trừ khi nó được mã hóa. Các biến và chức năng trong hợp đồng thông minh cũng có thể được hiển thị công khai, điều này khiến chúng có thể bị sử dụng sai mục đích hoặc lạm dụng.

Cách khắc phục

Nhà phát triển phải luôn triển khai biện pháp kiểm soát truy cập phù hợp và áp dụng nguyên tắc cấp đặc quyền tối thiểu. Các công cụ sửa đổi khả năng hiển thị chức năng và biến của Solidity được dùng để chỉ định mức độ hiển thị tối thiểu khi cần thiết và không hơn thế nữa.


Thông tin bí mật trên hợp đồng thông minh có thể bị lộ nếu không được mã hóa - Ảnh: Internet

7. Tràn số nguyên

Tràn số nguyên xảy ra khi kết quả của phép toán số học nằm ngoài phạm vi giá trị có kích thước cố định: 0 đến 255 trong trường hợp loại số nguyên uint8.

Các giá trị cao hơn 255 tràn và được đặt lại về 0, trong khi các giá trị thấp hơn 0 được đặt lại thành 255. Điều này gây ra những thay đổi không mong muốn đối với các biến trạng thái và logic của hợp đồng, đồng thời kích hoạt những hoạt động không hợp lệ.

Cách khắc phục

Kể từ phiên bản 0.8.0, trình biên dịch Solidity không còn cho phép mã dẫn đến tràn số nguyên nữa. Nhà phát triển ngăn chặn lỗ hổng này bằng cách sử dụng thư viện toán học an toàn.

Tuy nhiên, số học số nguyên nói chung có thể dẫn đến kết quả thiếu chính xác nếu gặp sai sót trong quá trình tính toán.

Tóm lại

Để giữ cho smart contract an toàn, nhà phát triển phải xây dựng và xem xét thật kỹ tính ngay từ đầu rủi ro trong hợp đồng thông minh và kiểm tra nghiêm ngặt việc thực thi logic, mã. Lỗ hổng hợp đồng thông minh rất khó vá sau khi được triển khai. Vì vậy, việc đảm bảo an toàn trước khi đưa chúng lên chuỗi khối là bắt buộc.

Nguồn tham khảo:

https://www.techtarget.com/searchsecurity/tip/Smart-contract-vulnerabilities-and-how-to-mitigate-them


Blockchain là gì? Điểm mạnh của Blockchain (Chuỗi khối)
Blockchain là gì? Điểm mạnh của Blockchain (Chuỗi khối)
time 16/08/2024
Một khi dữ liệu đã được mạng Blockchain (Chuỗi khối) chấp nhận, sẽ không cách nào thay đổi được. Cụ thể, chuỗi khối là gì? Hãy cùng tham khảo trong bài viết này.
Ví Blockchain là gì? Ví blockchain nào tốt nhất?
Ví Blockchain là gì? Ví blockchain nào tốt nhất?
time 09/08/2024
Ví blockchain là một trong những dạng ví tiền điện tử có độ bảo mật cao nhất. Vậy ví blockchain là gì? Loại ví blockchain nào tốt nhất?
10 ứng dụng nổi bật của công nghệ Blockchain trong thực tiễn
10 ứng dụng nổi bật của công nghệ Blockchain trong thực tiễn
time 08/08/2024
Không chỉ hoạt động hiệu quả với Bitcoin và các loại tiền điện tử khác, công nghệ Blockchain (Chuỗi khối) còn được ứng dụng trong nhiều ngành công nghiệp khác.
Ý nghĩa của trí tuệ nhân tạo với ngành Y tế - Chăm sóc sức khỏe
Ý nghĩa của trí tuệ nhân tạo với ngành Y tế - Chăm sóc sức khỏe
time 07/08/2024
Trí tuệ nhân tạo (AI) tạo ra tác động lớn trong lĩnh vực chăm sóc sức khỏe, đặc biệt là sau thời kỳ dịch bệnh Covid-19. Ứng dụng công nghệ AI trong y tế đã từng là giấc mơ, nhưng nó đang dần được hiện thực hóa.
Hợp đồng thông minh là gì? Ứng dụng Smart contract trên Blockchain
Hợp đồng thông minh là gì? Ứng dụng Smart contract trên Blockchain
time 07/08/2024
Hợp đồng thông minh (Smart contract) là một giao thức giao dịch dựa trên công nghệ blockchain. Công cụ này mang lại nhiều lợi ích đối với tất cả các bên tham gia hợp đồng.