Diễn Đàn SEO - vnseo.edu.vn - Nếu bạn đã theo dõi thị trường tiền mã hóa đủ lâu, bạn có thể đã nghe nói về một hoặc hai cuộc tấn công hợp đồng thông minh. Các cuộc tấn công đã gây tổn thất hàng chục triệu USD. Cuộc tấn công đáng chú ý nhất vẫn là DAO, một trong những dự án được mong chờ nhất và là một minh chứng về khả năng cách mạng của các hợp đồng thông minh. Trong khi hầu hết mọi người đã nghe nói về các cuộc tấn công này, nhưng rất ít người thực sự hiểu những gì đã xảy ra và làm thế nào để tránh lặp lại sai lầm. Hợp đồng thông minh năng động, phức tạp và cực kỳ mạnh mẽ. Mặc dù tiềm năng của chúng là không thể tưởng tượng được, nhưng dường như chúng sẽ không thể chống lại các cuộc tấn công chỉ trong một đêm. Tuy nhiên, vì tương lai của tiền mã hóa mà tất cả chúng ta cần phải học hỏi từ những sai lầm trước đây và cùng nhau phát triển. Mặc dù DAO đã là chuyện của quá khứ, nó vẫn là một ví dụ tuyệt vời của các cuộc tấn công hợp đồng thông minh mà các nhà phát triển, nhà đầu tư và các thành viên cộng đồng nên làm quen với chúng. Trong Phần 1 của loạt bài viết về các cuộc tấn công hợp đồng thông minh, tôi sẽ chỉ ra cho bạn chi tiết (bao gồm cả bộ mã) về 3 cuộc tấn công thường thấy mà chúng ta có thể học từ DAO. Cho dù bạn là nhà phát triển, nhà đầu tư hay người hâm mộ tiền mật mã thì việc hiểu biết về những cuộc tấn công này sẽ trang bị cho bạn sự kiến thức và đánh giá sâu sắc hơn về công nghệ đầy hứa hẹn này. Cuộc tấn công thứ nhất: Reentrancy Một cuộc tấn công reentrancy xảy ra khi kẻ tấn công rút tiền từ mục tiêu bằng cách tạo ra vòng lặp đệ quy hàm rút tiền (withdraw) của mục tiêu, như trường hợp với DAO. Khi hợp đồng không cập nhật trạng thái của nó (số dư của người dùng) trước khi gửi tiền, kẻ tấn công có thể liên tục triển khai hàm withdraw để rút cạn tiền của hợp đồng. Bất cứ khi nào kẻ tấn công nhận được Ether, hợp đồng của kẻ tấn công sẽ tự động thực hiện hàm fallback được viết ra để thực hiện hàm withdraw một lần nữa. Tại thời điểm này cuộc tấn công đã bước vào một vòng lặp đệ quy và các khoản tiền của hợp đồng bắt đầu bị rút ra bởi kẻ tấn công. Hợp đồng mục tiêu không bao giờ có thể cập nhật số dư của kẻ tấn công. Hợp đồng mục tiêu bị lừa khi nghĩ rằng không có điều gì bất thường… Để rõ ràng, hàm fallback là hàm của hợp đồng được thực hiện tự động bất cứ khi nào hợp đồng nhận được Ether và dữ liệu trống. LỖ HỔNG REENTRANCY Để dễ hiểu, SecurityBox mô tả dạng lỗ hổng và cách tấn công này như sau: giả sử bạn có 100 triệu đồng trong tài khoản Ngân hàng. Bạn muốn rút tiền, bạn ra Lệnh rút 100 triệu đồng, tài khoản của bạn tại Ngân hàng về 0 đồng. Nếu Lệnh rút bị lỗi Reentrance, bạn có thể rút nhiều lần 100 triệu đồng mà tài khoản của các bạn vẫn không thay đổi về 0. Với lỗi này, bạn sẽ rút hết tiền của Ngân hàng với nhiều lần rút như vậy. Lỗi trên là do Hacker kết hợp cơ chế của một số hàm trong Hợp đồng thông minh khiến cho hàm rút tiền withdraw() chạy vào vòng lặp đệ quy tại vị trí call.value(). Việc này rõ ràng khiến tiền bị rút hết mà số tiền trong tài khoản của Hacker vẫn không thay đổi. Ví dụ, với kết hợp cơ chế của hàm call.value() và hàm Fallback, Hacker sẽ thực hiện cuộc tấn công Reentrancy như sau: Đây là mô tả mã khai thác của Hacker: Ngoài ví dụ trên, Hacker có thể tận dụng lỗi Reentrancy này trong rất nhiều tình huống tùy thuộc vào kịch bản của Hợp đồng thông minh. Cuộc tấn công -Kẻ tấn công gửi Ether cho hợp đồng mục tiêu. -Hợp đồng mục tiêu cập nhật số dư của kẻ tấn công. -Kẻ tấn công yêu cầu lấy tiền lại. -Tiền được gửi lại. -Hàm Fallback của kẻ tấn công kích hoạt và yêu cầu lệnh rút tiền tiếp theo. -Hợp đồng thông minh chưa cập nhật số dư của kẻ tấn công, do đó lệnh rút tiền được gọi lại thành công. -Tiền được gửi đến kẻ tấn công. -Lặp lại các bước 5–7. -Khi cuộc tấn công kết thúc, kẻ tấn công sẽ gửi tiền từ hợp đồng của họ đến địa chỉ cá nhân của họ. TỔNG KẾT Trên đây là mô tả về những lỗ hổng thường xảy ra trong việc phát triển các Hợp đồng thông minh. Trên thực tế, tồn tại rất nhiều lỗ hổng xuất hiện do lập trình sai hoặc do thực thi sai lệch với quy trình làm việc thực tế. Nguồn: SecurityBox