Làm cách nào để tìm lỗi trong hợp đồng thông minh? 7 lời khuyên bạn cần biết

avatar
PANews
01-12
Bài viết này được dịch máy
Xem bản gốc

Làm cách nào để tìm lỗi trong hợp đồng thông minh? 7 lời khuyên bạn cần biết

Tìm ra các lỗi hợp đồng thông minh có thể là một nỗ lực rất bổ ích và nó cũng bảo vệ hệ sinh thái khỏi tin tặc. Gần đây, tôi rất hân hạnh được phỏng vấn một nhà phát triển đã tìm ra một lỗi trị giá 7 tỷ đô la và được trả 2,2 triệu đô la để báo cáo lỗi đó.

Trong bài đăng này, tôi sẽ hướng dẫn quy trình tìm lỗi mà nhà phát triển này đã tìm thấy, nó có khả năng gây thiệt hại 7 tỷ USD giá trị như thế nào, sau đó đưa ra một số chiến lược và công cụ để giúp bạn tìm ra lỗi.

hãy bắt đầu.

Trường hợp lỗi hợp đồng thông minh Polygon

lý lịch

Vào ngày 31 tháng 5 năm 2020, chuỗi khối Matic đã hoạt động (Matic sau đó được đổi tên thành Polygon). Polygon là một chuỗi khối tương thích với EVM được biết đến với phí gas thấp và thời gian tạo khối ngắn. Chuỗi gần đây đã bắt đầu khám phá công nghệ zk- Rollup .

Nếu bạn nhìn vào khối "genesis" của Polygon , khối đầu tiên của chuỗi khối, bạn sẽ thấy 10 giao dịch. Một trong những giao dịch này tạo ra một hợp đồng gọi là MRC20.

Làm cách nào để tìm lỗi trong hợp đồng thông minh? 7 lời khuyên bạn cần biết

 Khối Genesis Polygon

Hợp đồng thông minh này là gì?

Khi chúng tôi gửi mã thông báo blockchain gốc, chúng tôi phải tiêu xăng. Vì vậy, nhóm Polygon đã triển khai một hợp đồng cho phép bạn ký một giao dịch để gửi ETH cho ai đó và người khác có thể trả phí gas cho giao dịch đó. Được gọi là “giao dịch meta”, chức năng này trở nên phổ biến với sự ra đời của EIP-712.

Bạn có thể thấy rằng hợp đồng đã được trao gần 10 tỷ mã thông báo Matic để giúp tạo điều kiện thuận lợi cho các giao dịch không tốn xăng này. Tuy nhiên, hợp đồng được thiết kế gọn gàng này có một lỗi có thể bị khai thác để đánh cắp toàn bộ số dư!

Vào ngày 3 tháng 12 năm 2021, nhân vật chính của câu chuyện, nhà phát triển giả ẩn danh Leon Spacewalker, đã gửi báo cáo cho chương trình tiền thưởng lỗi Immunefi trình bày chi tiết vấn đề với chức năng này. Hero thứ hai, chúng tôi gọi là Whitehat2, cũng đã báo cáo lỗi này một ngày sau đó.

Khoảng 800.000 Matic đã bị đánh cắp trước khi chuỗi cuối cùng được phân nhánh, khôi phục và sửa lỗi vào ngày 5 tháng 12 năm 2021.

Sự việc này đặt ra cho chúng ta nhiều câu hỏi: Bug là gì? Làm thế nào mà nó đã không được khám phá quá lâu? Làm thế nào nó được phát hiện?

khai thác lỗi

Dưới đây là chức năng gửi giao dịch gasless

Làm cách nào để tìm lỗi trong hợp đồng thông minh? 7 lời khuyên bạn cần biết

Thoạt nhìn, nó có vẻ vô hại: nó yêu cầu chữ ký của người dùng, họ có bao nhiêu mã thông báo, họ muốn gửi mã thông báo cho ai, dữ liệu bổ sung và ngày hết hạn của giao dịch.

Nó cũng có một số hạn chế, hãy lấy hàm băm dữ liệu để gửi giao dịch meta, đảm bảo rằng hàm băm dữ liệu không được sử dụng và thực thi chức năng ecrecovery này.

Chức năng này về cơ bản là một Wrapper cho chức năng ecrecover của Solidity.

Làm cách nào để tìm lỗi trong hợp đồng thông minh? 7 lời khuyên bạn cần biết

 Một trình bao bọc cho chức năng ecrecover của Solidity

Đây là mã thực tế: Hàm của chúng tôi xác minh nguồn gốc của các giao dịch đã ký. Bạn sẽ nhận thấy rằng ngay cả trong tài liệu Solidity, nó cũng nói rằng nó sẽ "trả về 0 nếu có lỗi". Điều tương tự cũng xảy ra với chức năng ecrecovery, trả về 0 nếu có sự cố. Như nhiều nhà phát triển biết, điều này có thể rủi ro. Nếu nó trả về 0 do lỗi, điều đó có nghĩa là chúng ta nên kiểm tra để đảm bảo rằng địa chỉ được trả về không phải là 0, phải không?

Đây là mã thực tế:

Làm cách nào để tìm lỗi trong hợp đồng thông minh? 7 lời khuyên bạn cần biết

Đây là mã lý tưởng:

Làm cách nào để tìm lỗi trong hợp đồng thông minh? 7 lời khuyên bạn cần biết

Chúng tôi không thực sự kiểm tra địa chỉ để đảm bảo địa chỉ đó không gây ra lỗi, bạn nhé. Dòng mã cuối cùng trong hàm transferWithSig thực hiện chuyển giao thực sự, chắc chắn chúng ta phải thực hiện một số loại kiểm tra ở đó, phải không?

Làm cách nào để tìm lỗi trong hợp đồng thông minh? 7 lời khuyên bạn cần biết

Hàm _transferFrom vừa được gọi là hàm _transfer của chúng tôi, được hiển thị ở trên. Bạn sẽ nhận thấy nó không kiểm tra để đảm bảo địa chỉ gửi có đủ số dư.

Điều này có nghĩa là ai đó có thể gửi chữ ký không hợp lệ, điều này sẽ dẫn đến địa chỉ 0 được trả về từ ecrecovery, nhưng hợp đồng MRC20 sẽ vẫn gửi một lượng mã thông báo nhất định đến địa chỉ được gửi tới. Đây là cách 9.999.993.000 Matic đã bị đánh cắp, vì hợp đồng MRC20 gửi mã thông báo trực tiếp từ chính nó!

Vấn đề này có thể tránh được nếu trong hợp đồng có kiểm tra để đảm bảo rằng địa chỉ người gửi có đủ số dư cho giao dịch đã ký kết này.

Tại sao lỗi hợp đồng thông minh không được phát hiện trong một thời gian dài

Đối với tôi, điều kỳ lạ là sau khi con bọ này không hoạt động trong gần một năm rưỡi, nó đã được phát hiện trong vòng vài ngày bởi một chiếc mũ trắng khác, Leon, và một hacker.

Có vẻ phức tạp, nhưng nhóm Immunefi nói với tôi rằng điều đó xảy ra khá thường xuyên. Một số cách khai thác lỗi có thể trở nên phổ biến do một bài báo, bài báo hoặc thử thách và sau đó mọi người bắt đầu tìm kiếm lỗi, khiến nhiều người tìm thấy lỗi đó cùng một lúc.

Nhưng nhiều khả năng, hóa ra Polygon đã xác minh hợp đồng trên Polygonscan vào khoảng thời gian này - và đó là lúc mọi người thực sự bắt đầu chú ý đến nó.

Có thể có nhiều câu chuyện hơn, nhưng có thể không.

Dù sao đi nữa, hãy sử dụng lỗi này như một trường hợp giảng dạy để xem một số kỹ năng mà Leon và những người săn lỗi khác sử dụng để tìm lỗi và giúp bảo vệ hệ sinh thái Web3.

7 mẹo để phát hiện lỗi hợp đồng

Bây giờ, chúng ta sẽ tìm hiểu các kỹ năng mà Leon và những người săn bọ khác sử dụng để tìm ra những con bọ này và đăng ký tiền thưởng cho lỗi. Danh sách các mẹo này giả định rằng bạn đã biết những điều cơ bản về hợp đồng thông minh, vì vậy, học Solidity là điều kiện tiên quyết.

Vui lòng sử dụng các kỹ thuật này một cách có đạo đức và nhớ tiết lộ một cách có trách nhiệm bất kỳ lỗi nào bạn tìm thấy.

Phần lớn công việc tìm lỗi đến từ việc xem mã và chạy các công cụ như slither. Đối với vụ thu hoạch 2,2 triệu đô la này, Leon nói rằng anh ấy có thể tìm ra lỗi bằng cách xem từng dòng mã hợp đồng thông minh, vì vậy hãy nhớ rằng việc tìm lỗi thường đòi hỏi rất nhiều công việc thủ công!

Ngoài những lời khuyên thiết thực sau đây, lợi ích lớn nhất của Leon là để thợ săn lỗi hợp đồng thông minh "tìm thấy lợi thế của bạn", điều đó có nghĩa là gì? Thông thường, điều đó có nghĩa là tìm ra điều khiến bạn khác biệt với những người khác. Là một cộng đồng, chúng ta cần bao quát mọi ngóc ngách của không gian hợp đồng thông minh, vì vậy hãy tìm những phần bạn đặc biệt giỏi và giỏi.

Dưới đây là bảy chiến lược và mẹo giúp bạn tìm ra lợi thế và trở thành một thợ săn lỗi hợp đồng thông minh thành công.

1. Tìm dự án và tìm lỗi

Cách đầu tiên để tìm ra lỗi là hiểu chi tiết cách thức hoạt động của giao thức. Đây là một trong những kỹ năng đầu tiên mà mọi thợ săn lỗi hợp đồng thông minh cần học: khả năng hiểu giao thức từ đầu đến cuối.

Xem qua tài liệu, cố gắng tự thực hiện lại giao thức và xem các giao dịch thông qua nó trên trình khám phá khối.

Leon nói rằng chiến lược này hiệu quả với những người săn bọ khác, nhưng không phải với anh ấy. Anh ấy tập trung vào ba phần tiếp theo, nhưng điều quan trọng đối với mọi thợ săn bọ là có thể làm được điều này.

2. Tìm lỗi và tìm kiếm dự án

Một cách dễ dàng hơn để tìm lỗi là tìm một lỗi ít được biết đến và thử xem các triển khai của giao thức nào chứa nó. Chiến lược này đòi hỏi nhiều nghiên cứu vì có nhiều người làm việc để phơi bày lỗi ra công chúng: https://swcregistry.io/

Trước tiên, bạn cần hiểu tất cả các lỗi hợp đồng thông minh cơ bản, sau đó là các phiên bản nâng cao của chúng. Bạn cần biết các phương pháp hay nhất và xem liệu có bất kỳ giao thức nào mà bạn không tuân theo hay không.

Khi bạn tìm thấy một lỗi hợp đồng thông minh mà bạn nghĩ rằng nhiều dự án có thể không chống lại được, hãy bắt đầu tìm kiếm lỗi đó. Cho đến khi tôi thực sự quen thuộc với lỗi mới này và cách tìm ra nó. Hãy nhớ viết blog hoặc một số loại bài đăng để giúp các nhà phát triển hợp đồng thông minh khác gặp phải lỗi này.

3. Hãy nhanh chóng

Các dự án muốn những người săn lỗi xem hợp đồng thông minh của họ cần phải đăng ký chương trình tiền thưởng lỗi như Immunefi. Bạn sẽ muốn trở thành một trong những nhà phát triển đầu tiên phát hiện ra tiền thưởng mới. Nếu bạn bắt đầu xem xét hợp đồng trước những thợ săn khác, bạn sẽ có nhiều thời gian hơn để tìm lỗi.

Có một số cách để tăng tốc mọi thứ — một trong những cách mà Leon có thể tìm ra lỗi hợp đồng thông minh trước bất kỳ ai khác là thông qua thông báo trên kênh Immunifi Discord. Anh ta sẽ được thông báo bất cứ khi nào có một mặt hàng mới hoặc một mặt hàng được cập nhật. Các công cụ như thế này có thể giúp bạn khai thác mã của mình trước những người khác.

4. Hãy sáng tạo

Một cách khác để Leon có được lợi thế là kiểm tra rất nhiều diễn đàn cộng đồng và phát hiện ra rằng họ đang xem xét gửi lỗi. Sau đó, anh ấy bắt đầu xem xét hợp đồng thông minh ngay cả trước khi tiền thưởng được phê duyệt. Điều này giúp anh ta có nhiều thời gian hơn để xem xét hợp đồng so với các nhà phát triển khác, những người sẽ đợi quá trình gửi tiền thưởng lỗi của dự án thành công.

5. Biết các công cụ của bạn

Những người săn lỗi sử dụng tiện ích mở rộng VSCode Solidity, Hardhat, Foundry, Brownie, Dune, Etherscan và nhiều tiện ích khác.

Một chiến lược tìm lỗi tốt có thể là tải VSCode, sử dụng tiện ích mở rộng Solidity để thêm mã vào VSCode, sau đó tìm kiếm các lỗi phổ biến hoặc triển khai mã dễ bị tấn công theo từng dòng.

Sau khi tìm thấy các lỗ hổng tiềm ẩn, hãy thiết lập môi trường thử nghiệm để chạy thử nghiệm trên hợp đồng. Bạn thường có thể sử dụng lại một số lượng lớn các bài kiểm tra ban đầu được sử dụng bởi các nhà phát triển giao thức.

6. Không bỏ dự án đã kiểm toán

Không có nhiều để nói ở đây. Công ty kiểm toán phạm sai lầm. Nhiều dự án mà Leon tìm thấy lỗ hổng đã được kiểm toán bởi các công ty hàng đầu.

Sử dụng các kỹ thuật chúng tôi thảo luận trong blog này có thể giúp bạn tìm ra những vấn đề này!

7. Kiến thức chuyên ngành

Một trong những thế mạnh lớn nhất của bạn có thể là chuyên về một lĩnh vực cụ thể. Nếu bạn biết rõ về một miền, bạn sẽ có kiến thức để hiểu tất cả các chức năng gọi lẫn nhau như thế nào. Ngược lại, nếu bạn là một chuyên gia về lỗ hổng hợp đồng thông minh mạnh mẽ nhưng không biết gì về DeFi, sẽ rất khó để tìm ra lỗ hổng trong hợp đồng DeFi. Ví dụ: nhiều nhà phát triển hiểu mã nhưng không hiểu thuật ngữ tài chính.

Bạn có thể thực sự giỏi trong việc hiểu các sàn giao dịch phi tập trung, giao thức cho vay hoặc chỉ NFT!

Nếu bạn có thể trở thành một chuyên gia bảo mật và một chuyên gia trong một ngành dọc nhất định trong Web3, bạn sẽ ở một vị trí thuận lợi để đạt được lợi thế hơn những người khác đang tìm kiếm các lỗ hổng bảo mật.

tóm tắt

Tôi hy vọng bài viết này sẽ giúp bạn trong hành trình săn lỗi hợp đồng thông minh của mình. Nếu bạn muốn tìm hiểu thêm về bảo mật khi viết hợp đồng thông minh, hãy nhớ xem 10 phương pháp hay nhất về bảo mật DeFi.

Và, như mọi khi, tôi muốn thấy bạn xây dựng ở đó và giữ cho hệ sinh thái an toàn hơn.

Liên kết liên quan:

👉 Hợp đồng MRC20:

https://polygonscan.com/address/0x0000000000000000000000000000000000001010#code

👉Cung cấp miễn dịch:

Polygon

👉Chuyển sang Hợp đồng Polygon :

https://github.com/maticnetwork/contracts/commit/55e8118ad406c9cb0e9b457ca4f275c5977809e4#diff-cc4ed03464edad9d87d48cff647eb6940dfe9a4c419f63e3994bdc91b01bfecb

👉Các hợp đồng Polygon trước:

SOL

👉Thử thách khám phá:

https://github.com/code-423n4/2021-09-swivel-findings/issues/61

Nguồn
Tuyên bố từ chối trách nhiệm: Nội dung trên chỉ là ý kiến của tác giả, không đại diện cho bất kỳ lập trường nào của Followin, không nhằm mục đích và sẽ không được hiểu hay hiểu là lời khuyên đầu tư từ Followin.
Thích
Thêm vào Yêu thích
Bình luận