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