Lớp Vô Hình Chúng Ta Quên Bảo Vệ Khi nói về bảo mật Web3, hầu hết mọi người thường nghĩ đến hợp đồng thông minh. Và điều đó hoàn toàn hợp lý. Suy cho cùng, những đoạn mã này nắm giữ tài sản thực, xác định logic giao thức và bảo vệ hàng tỷ đô la tiền của người dùng. Trong nhiều năm, các nhóm bảo mật đã dành không ngừng nỗ lực để tìm kiếm các lỗ hổng re-entrancy, các vấn đề kiểm soát truy cập, lỗi số học và các lỗ hổng tinh vi chỉ xuất hiện trong các đường dẫn thực thi cụ thể. Nhưng trong nỗi ám ảnh về những gì xảy ra trên chuỗi, chúng ta đã bỏ qua điều đầu tiên mà đại đa số người dùng thực sự tương tác: giao diện người dùng. Giao diện người dùng luôn được coi là lớp vỏ bóng bẩy, giao diện giúp người dùng giao tiếp với blockchain. Nhưng "lớp vỏ" này đang nhanh chóng trở thành một trong những lớp bị lạm dụng nhiều nhất trong toàn bộ hệ sinh thái. Trong khi hợp đồng thông minh là bất biến và có thể kiểm tra, thì giao diện người dùng lại có thể thay đổi, tập trung và được phục vụ bởi cơ sở hạ tầng hoàn toàn nằm ngoài sự đảm bảo của blockchain. Tuy nhiên, chúng chính là những thứ xây dựng nên các khối dữ liệu giao dịch mà ví yêu cầu người dùng ký. Nếu điều đó vẫn chưa khiến bạn sợ hãi, thì nó nên như vậy.
Tin tưởng Giao diện nghĩa là tin tưởng Kẻ tấn công
Mối nguy hiểm thực sự với giao diện người dùng không nhất thiết là sự phức tạp về mặt kỹ thuật; mà là sự tin tưởng đặt nhầm chỗ. Hầu hết người dùng không biết họ thực sự đang ký cái gì khi xác nhận giao dịch. Họ hoàn toàn dựa vào những gì giao diện người dùng hiển thị.
Nút "Hoán đổi" có thể đang kích hoạt phê duyệt. Giao diện đặt cược có thể đang chuyển lệnh gọi ủy nhiệm. Trừ khi ví giải mã dữ liệu ở định dạng dễ đọc, và nhiều ví vẫn chưa làm được, nếu không người dùng không thể xác minh những gì họ đang làm.
Điều này khiến việc tấn công giao diện người dùng trở thành một trong những cách hiệu quả nhất để đánh cắp tiền trong Web3. Kẻ tấn công không cần phải phá vỡ hợp đồng hoặc tìm lỗ hổng trong giao thức cốt lõi. Tất cả những gì chúng cần là một cách để can thiệp vào giao diện người dùng, dù chỉ là tạm thời, và chúng có thể ẩn mình giữa người dùng và blockchain. Mỗi cú nhấp chuột đều trở thành cơ hội cho ý định chiếm đoạt.
Cách thức các cuộc tấn công này diễn ra
Cách thức thực hiện các cuộc tấn công này không có gì đặc biệt. Đôi khi, nó đơn giản như một cuộc tấn công chiếm quyền điều khiển DNS, khi kẻ tấn công truy cập vào các bản ghi tên miền của dự án và trỏ chúng đến một máy chủ độc hại. Trong các trường hợp khác, kẻ tấn công chèn mã thông qua các phần phụ thuộc bị nhiễm, thay thế logic độc hại và sửa đổi dữ liệu giao dịch trước khi dữ liệu được chuyển đến ví. Trong các trường hợp khác nữa, giao diện người dùng bị xâm phạm trực tiếp thông qua quyền truy cập vào bảng điều khiển đám mây hoặc cấu hình CDN, cho phép kẻ tấn công thay đổi các tập lệnh giao diện người dùng theo thời gian thực.
Hiệu ứng luôn giống nhau. Người dùng truy cập ứng dụng như bình thường, kết nối ví của họ và ký một giao dịch mà họ tin là an toàn. Nhưng những gì chúng ký lại hoàn toàn khác, thường là phê duyệt một hợp đồng không đáng tin cậy hoặc chuyển token vào ví do kẻ tấn công kiểm soát. Và vì blockchain thực thi chính xác theo chữ ký, nên không có nút hoàn tác.
Các sự kiện gần đây chứng minh điều này
Chúng ta đã thấy một số ví dụ đau lòng về điều này. Một trong những ví dụ đáng chú ý nhất là sự cố Curve Finance năm 2022, khi kẻ tấn công chiếm quyền kiểm soát DNS của Curve và hiển thị giao diện người dùng giả mạo. Trang web trông giống hệt nhau. Các thông báo về ví cũng trông bình thường. Nhưng đằng sau hậu trường, mọi giao dịch đều được chuyển đến ví của kẻ tấn công. Gần 600.000 đô la đã bị mất chỉ trong vài giờ.
Một ví dụ khác là BadgerDAO, nơi đã mất hơn 100 triệu đô la sau khi kẻ tấn công chèn JavaScript độc hại vào giao diện người dùng. Mã này đã âm thầm thay đổi tải trọng giao dịch cho một số người dùng cụ thể (đặc biệt là cá voi), khiến những người dùng này chỉ cần nhấp chuột là sẽ bị hủy hoại.
Điểm chung của những sự cố này là các hợp đồng thông minh vẫn không thay đổi. Logic thì hợp lý, các cuộc kiểm toán thì minh bạch, nhưng tất cả những điều đó đều vô nghĩa khi giao diện người dùng lại kể một câu chuyện khác.
Tại sao vấn đề này sẽ không biến mất
Điều khiến bảo mật giao diện người dùng đặc biệt khó khăn trong Web3 là nó rơi vào một vùng xám kỳ lạ. Nó nằm ngoài chuỗi, vì vậy hầu hết các công cụ bảo mật trên chuỗi không thể giám sát nó. Nó thường bị bỏ qua trong quá trình kiểm toán, đặc biệt là trong các dự án ưu tiên phân phối hơn bảo mật. Và nó phụ thuộc rất nhiều vào cơ sở hạ tầng tập trung như DNS, lưu trữ đám mây và sổ đăng ký gói JavaScript, không có cơ sở hạ tầng nào trong số đó cung cấp các đảm bảo giống như blockchain.
Tệ hơn nữa, công cụ xác thực giao diện người dùng vẫn còn non trẻ. Không giống như mã bytecode hợp đồng, có thể được xác minh trên chuỗi, mã giao diện người dùng thay đổi thường xuyên, hiếm khi được ghim hoặc băm, và hầu như không bao giờ được phát hành theo cách mà người dùng có thể kiểm tra. Điều này tạo ra một môi trường hoàn hảo cho các cuộc tấn công có chủ đích, đặc biệt là trong những thời điểm nhạy cảm như ra mắt token, airdrop hoặc nâng cấp giao diện người dùng.
Những điều cần thay đổi
Để Web3 phát triển an toàn, bảo mật cần phải mở rộng ra ngoài hợp đồng thông minh. Các nhà phát triển phải đối xử với giao diện người dùng với sự cảnh giác và nghiêm ngặt như họ đối xử với phần phụ trợ. Điều này có nghĩa là khóa các phần phụ thuộc, tránh các tập lệnh của bên thứ ba không cần thiết, bảo mật cấu hình DNS và xem xét kiểm tra giao diện người dùng như một phần của mỗi bản phát hành chính.
Các nhà cung cấp ví cũng nên đóng một vai trò. Người dùng cần hiểu rõ hơn về những gì họ đang ký. Điều này có thể đồng nghĩa với việc giải mã được cải thiện, cảnh báo tốt hơn, hoặc thậm chí là kiểm tra tính xác thực của giao diện người dùng. Hiện tại, người dùng quá tin tưởng vào giao diện và chưa nỗ lực đủ để xác minh tính toàn vẹn của chúng.
Từ góc độ người dùng, lời khuyên này tuy khắc nghiệt nhưng chân thành:
Đừng tin tưởng mù quáng vào bất kỳ giao diện người dùng nào. Nếu bạn đang tương tác với một giao thức có giá trị cao, đừng chỉ kiểm tra tên miền. Hãy kiểm tra mã nguồn. Sử dụng tiện ích mở rộng trình duyệt có chức năng theo dõi các hợp đồng độc hại. Nếu cảm thấy có điều gì đó không ổn, đừng ký.Kết luận
Web3 không chỉ là việc thực thi không cần sự tin tưởng. Nó còn là toàn bộ ranh giới tin tưởng, nơi nó bắt đầu, cách nó thay đổi và nơi nó kết thúc. Hiện tại, front-end nằm ngay giữa ranh giới đó, và đã trở thành sân chơi cho bất kỳ ai đủ thông minh để khai thác khoảng cách giữa những gì người dùng thấy và những gì họ ký.
Hợp đồng của bạn có thể hoàn hảo, nhưng nếu front-end của bạn bị xâm phạm, hậu quả cũng sẽ như nhau.
Tiền bạc bị mất, niềm tin bị phá vỡ, và người dùng tự hỏi tại sao mọi chuyện lại trở nên tồi tệ như vậy. Đã đến lúc ngành công nghiệp này ngừng coi front-end là thứ yếu. Bởi vì đối với tin tặc, nó đã trở thành mục tiêu tấn công đầu tiên của chúng.