Tiêu đề gốc: "Giải thích chi tiết về hệ thống lỗ hổng FairWin trong đĩa quỹ: Liệu phía dự án có thể gạt bỏ nghi ngờ "ác quỷ"? 》
Nguồn gốc: PeckShield
Gần đây, một dự án thị trường vốn mang tên "FairWin" đã thu hút sự chú ý đặc biệt và bị ảnh hưởng bởi nó , mức tiêu thụ gas của mạng Ethereum tiếp tục ở trạng thái bão hòa cao và tốc độ sử dụng gas của một DApp đã đạt gần một nửa tổng lượng gas mà mạng Ethereum có thể mang theo.
Tuy nhiên, do lộ ra các lỗ hổng bảo mật hợp đồng thông minh, FairWin đã được đẩy lên hàng đầu, điều này tạm thời khiến công chúng lo ngại về số phận của các trò chơi giống FairWin và thậm chí cả sự ổn định của mạng Ethereum tổng thể.
Tổng quan
Vào ngày 27 tháng 9 năm 2019, giờ Bắc Kinh, nhân viên an ninh PeckShield đã phát hiện ra trong quá trình phân tích chuyên sâu về hợp đồng thông minh FairWin, hợp đồng thông minh FairWin có một số sai sót chết người do vấn đề cấp phép quản lý. Số dư trong hợp đồng cũ có thể được người dùng thao túng và chuyển giao theo ý muốn, còn có một vấn đề mới trong hợp đồng mới được nâng cấp, cho phép người dùng để đặt cược sai để giành được tổng giải thưởng.
Nguồn gốc của vấn đề hợp đồng FairWin
Dữ liệu giám sát mới nhất từ DAppTotal.com, một nền tảng dịch vụ dữ liệu DApp thuộc sở hữu của PeckShield, cho thấy kể từ ngày 26 tháng 8, mức tiêu thụ gas hàng ngày của mạng Ethereum tiếp tục ở mức bão hòa cao, tức là mức tiêu thụ gas hàng ngày chiếm hơn 90% tổng lượng gas mà mạng Ethereum có thể mang theo, và tình trạng chung của mạng là cực kỳ tắc nghẽn.
Lý do tình trạng tắc nghẽn tiếp tục là do một dự án quỹ có tên FairWin gần đây đã được triển khai và mức tiêu thụ gas hàng ngày của nó chiếm gần một nửa tổng công suất của mạng Ethereum (như hình bên dưới) 
Nhân viên bảo mật của PeckShield đã phân tích mã hợp đồng thông minh FairWin và phát hiện ra rằng vào ngày 17 tháng 6, FairWin đã triển khai một hợp đồng bắt đầu bằng 0x11f5. Phân tích mã nguồn hợp đồng của họ cho thấy có các lệnh gọi sau:
Không khó để nhận thấy rằng bất kỳ người dùng nào cũng có thể gọi phương thức sendFeeToAdmin(). Sau khi được gọi, số dư trong hợp đồng FairWin sẽ được chuyển đến địa chỉ quản trị viên được chỉ định. Vấn đề này được phát hiện bởi Daniel Luca, nhà nghiên cứu bảo mật tại ConsenSys, sau đó dự án đã triển khai phiên bản hợp đồng mới bắt đầu bằng 0x01ea vào ngày 27 tháng 7 để khắc phục sự cố.
Như được hiển thị bên dưới, bằng cách phân tích mã của phiên bản mới của hợp đồng, người ta thấy rằng phương thức sendFeeToAdmin() đã được đặt thành riêng tư:
Trong trường hợp này, phương pháp trên không thể được sử dụng trực tiếp bởi Cuộc gọi bên ngoài, vấn đề trên cũng đã được giải quyết, nhưng nhân viên an ninh PeckShield phân tích sâu cho thấy vấn đề không đơn giản như vậy: do đặc tính không giả mạo của blockchain, DApp đã được nâng cấp từ hợp đồng cũ lên hợp đồng mới, nhưng hồ sơ cá cược trước đó của người dùng vẫn được lưu trong hợp đồng cũ, nhóm dự án cần tìm cách di chuyển hồ sơ cá cược của người dùng sang hợp đồng mới .
Để giải quyết vấn đề này, nhóm FairWin đã giới thiệu giao diện Remedy() để nhập trực tiếp nội dung của người dùng vào hợp đồng mới:
Phân tích nguyên tắc dễ bị tổn thương của hợp đồng mới
Bằng cách phân tích giao diện Biện pháp khắc phục(), quy trình di chuyển tài sản kỹ thuật số chung như sau: p>
1. Đảm bảo rằng thao tác khắc phục () hiện đang mở;
2. Khôi phục dữ liệu cá cược của người dùng theo các thông số và lưu vào cơ sở dữ liệu của hợp đồng mới.
Nhân viên an ninh của PeckShield đã phân tích dữ liệu trên chuỗi Ethereum và phát hiện ra rằng Biện pháp khắc phục() đã được gọi sau khi hợp đồng mới hết hiệu lực trực tuyến. Tổng cộng 503 lần, quá trình di chuyển tài sản đã được hoàn thành cho 500 nhà đầu tư và lệnh gọi phương thức này do quản trị viên FairWin khởi xướng. Tuy nhiên, phương thức này có thể được gọi thành công hay không còn phụ thuộc vào việc tham số ActStu có bằng 0 hay không. Nhân viên bảo mật của PeckShield đã phân tích mã hợp đồng FairWin mới và phát hiện ra các vấn đề mới:
1. ActStu mặc định là 0, có nghĩa là phương thức Remedy() có thể được gọi;
2. Phương thức closeAct() đặt ActStu thành 1, nghĩa là đóng kênh Remedy().
Mấu chốt của vấn đề là ở đây: phương thức closeAct() thêm hạn chế onlyOwner, nhưng phương pháp khắc phục() không thêm hạn chế này.
Do sự không nhất quán của các hạn chế trên, nếu chủ sở hữu hợp đồng không đóng ActStu thông qua closeAct(), thì bất kỳ người dùng Bạn có thể sửa đổi dữ liệu cá cược thông qua giao diện Biện pháp khắc phục(), sau đó giả mạo một lượng vốn đầu tư lớn với khoản đầu tư bằng 0 và rút tiền thưởng số dư hợp đồng thông qua userWithDraw().
Thật may mắn, cho đến nay, chưa có cuộc tấn công nào xảy ra và chủ sở hữu hợp đồng FairWin đã đóng cửa ActStu, vì vậy các mối đe dọa tiềm ẩn đã bị loại bỏ trong thời điểm hiện tại.
Tác động tiếp theo của lỗ hổng
FairWin vẫn duy trì mức độ phổ biến lớn trong thời gian ngắn và nó cũng đã sản xuất ra các sản phẩm chẳng hạn như EtherHonor, HyperFair và các đĩa giả khác không loại trừ khả năng những đĩa giả đó cũng có thể tiềm ẩn vấn đề.
Ngoài ra, sau khi hợp đồng FairWin bị lộ có vấn đề về bảo mật, một số ý kiến dư luận đặt câu hỏi rằng đây có thể là "cửa hậu được bên dự án đặt trước và đánh cắp con sói trắng từ đó". Nhân viên an ninh PeckShield đã theo dõi cũ và mới Hành vi tương tác của hợp đồng nhận thấy rằng ngoài việc chuyển số tiền đầu tư trong hợp đồng cũ sang hợp đồng mới, nhóm dự án còn trả lại số tiền mà người dùng đã đầu tư không chính xác:
Như sau, xuất hiện vào ngày 1 tháng 8 Một cuộc gọi đã được thực hiện:
1. Tài khoản (người dùng) bắt đầu bằng 0xa584 đặt cược 11ETH trên hợp đồng FairWin cũ ở độ cao khối 8263419,
2. Số tiền đặt cược đã được thay thế bằng 0xcb10 trong khối Chiều cao 8264604 đã được chuyển sang tài khoản quản trị viên FairWin 0x854d,
3. Sau đó, khi chiều cao khối là 8264613, tài khoản quản trị viên đã chuyển 11ETH quay lại tài khoản 0xa584 (người dùng).
Dựa trên hành vi ban đầu trên chuỗi, phía dự án có thể gạt bỏ nghi ngờ về "việc xấu". Để đối phó với các mối đe dọa về lỗ hổng bảo mật ở trên, nhân viên bảo mật của PeckShield khuyến nghị nên thêm các hạn chế về quyền truy cập tương ứng vào các hoạt động nhạy cảm của hợp đồng thông minh. Ngoài ra, người dùng nên duy trì sự tôn trọng hoàn toàn đối với tài sản kỹ thuật số của mình.
Đối với các nhà phát triển, một vấn đề cũng đồng thời bộc lộ. Nhiều vấn đề "mới" khác nhau có thể phát sinh trong quá trình nâng cấp hợp đồng. Bên dự án nên phản hồi vấn đề này càng sớm càng tốt. Và bạn có thể tìm kiếm trợ giúp từ công ty bảo mật bên thứ ba để khắc phục các lỗ hổng tiềm ẩn trước khi lên mạng.
Đối với người dùng, điều này thậm chí không có nghĩa là họ có thể "ngồi yên thư giãn" sau khi tham gia FairWin. Suy cho cùng, thị trường vốn vẫn là thị trường vốn, khi bạn đang nhìn chằm chằm vào vực thẳm thì vực thẳm cũng đang nhìn chằm chằm vào bạn.

(Hợp đồng FairWin Thay đổi số dư địa chỉ, nguồn: etherscan.io)
Nhân viên bảo mật của PeckShield phân tích đường cong số dư địa chỉ ETH (như hình trên) ) nhận thấy rằng sau khi mối đe dọa về lỗ hổng bị lộ, số dư của hợp đồng FairWin đã giảm đáng kể, có thể thấy rằng vấn đề về lỗ hổng bảo mật đã gây ra một cuộc khủng hoảng niềm tin nhất định cho nhóm dự án và một số lượng lớn người dùng bắt đầu rút tiền. Xét về cơ chế của đĩa quỹ, việc số dư ngắn hạn liên tục sụt giảm có thể gieo mầm mống "sấm sét". PeckShield muốn nhắc nhở người dùng hãy thận trọng khi tham gia vào các dự án đĩa quỹ như vậy để tránh những hậu quả không thể khắc phục được do tiềm năng của nó sự bất ổn.
Địa chỉ gốc: https://mp.weixin.qq.com/s/wHtRaP9iysHQtATu9SKs7w
Chào mừng bạn tham gia cộng đồng chính thức của BlockBeats:
Nhóm Telegram đăng ký: https://t.me/theblockbeats
Nhóm Telegram thảo luận: https://t.me/BlockBeats_App
Tài khoản Twitter chính thức: https://twitter.com/BlockBeatsAsia