Đề xuất cải tiến Ethereum (EIP)-1153 - Lưu trữ tạm thời: Tiết kiệm gas, Mất túi

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

Vào ngày 30 tháng 3 năm 2025, giao thức DeFi SIR.trading đã bị hack, gây ra thiệt hại 355.000 đô la tại thời điểm viết bài. Cuộc tấn công này là do lỗi khi thực hiện tối ưu hóa gas bằng cách sử dụng mã lệnh lưu trữ tạm thời Đề xuất cải tiến Ethereum (EIP)-1153 mới .

Tổng quan

Kẻ tấn công: https://etherscan.io/address/0x27defcfa6498f957918f407ed8a58eba2884768c

Hợp đồng dễ bị tấn công: https://etherscan.io/address/0xb91ae2c8365fd45030aba84a4666c4db074e53e7#code

Tấn công giao dịch: https://etherscan.io/tx/0xa05f047ddfdad9126624c4496b5d4a59f961ee7c091e7b4e38cee86f1335736f

Đề xuất cải tiến Ethereum (EIP)-1153 - Mã lệnh lưu trữ tạm thời thêm 2 mã lệnh để thao tác trạng thái có hoạt động gần giống hệt với lưu trữ nhưng bị loại bỏ sau mỗi giao dịch:

  • TLOAD lấy một từ 32 byte từ đầu ngăn xếp, coi giá trị này là địa chỉ, lấy từ 32 byte từ bộ nhớ tạm thời tại địa chỉ đó và đẩy giá trị đó lên đầu ngăn xếp.

  • TSTORE lấy hai word 32 byte từ đầu ngăn xếp. Word ở trên cùng là địa chỉ, và word tiếp theo là giá trị. TSTORE lưu giá trị tại địa chỉ đã cho trong bộ nhớ tạm thời.

Địa chỉ giống như SLOADSSTORE . Nghĩa là mỗi địa chỉ 32 byte trỏ đến một từ 32 byte duy nhất.

Chi phí gas cho TSTORE giống như SSTORE ấm của khe bẩn (tức là giá trị ban đầu không phải là giá trị mới và không phải là giá trị hiện tại, hiện tại là 100 gas) và chi phí gas của TLOAD giống như SLOAD nóng (giá trị đã được đọc trước đó, hiện tại là 100 gas). Chi phí gas không thể ngang bằng với quyền truy cập bộ nhớ do tương tác của bộ lưu trữ tạm thời với việc hoàn nguyên.

Tất cả các giá trị trong bộ lưu trữ tạm thời đều bị loại bỏ khi kết thúc giao dịch, về cơ bản chúng ta có thể sử dụng chúng như một bộ lưu trữ rẻ hơn chỉ tồn tại trong một giao dịch. Một trường hợp sử dụng là Khóa Reentrancy.

Phân tích khai thác

Phần kết luận

Đề xuất cải tiến Ethereum (EIP)-1153 - Mã lệnh lưu trữ tạm thời giới thiệu một cách tuyệt vời để tiết kiệm chi phí gas nhưng với sức mạnh lớn đi kèm với trách nhiệm lớn. Các nhà phát triển hợp đồng thông minh nên hiểu thời gian tồn tại của các biến lưu trữ tạm thời trước khi sử dụng.

Vì bộ nhớ tạm thời được tự động xóa khi kết thúc giao dịch, nên các nhà phát triển hợp đồng thông minh có thể muốn tránh xóa các khe cắm như một phần của lệnh gọi để tiết kiệm gas . Tuy nhiên, điều này có thể ngăn chặn các tương tác tiếp theo với hợp đồng trong cùng một giao dịch (ví dụ trong trường hợp khóa nhập lại) hoặc gây ra các lỗi khác, do đó, các nhà phát triển hợp đồng thông minh nên cẩn thận chỉ để lại các khe cắm lưu trữ tạm thời có giá trị khác không khi các khe cắm đó được dự định sử dụng bởi các lệnh gọi trong tương lai trong cùng một giao dịch . Nếu không, các mã lệnh này hoạt động giống hệt như SSTORE SLOAD , do đó, tất cả các cân nhắc bảo mật thông thường đều được áp dụng, đặc biệt là liên quan đến rủi ro nhập lại .

Trong trường hợp SIR.trading, họ đã không xóa khe 0x1 sau khi sử dụng nó để lưu trữ uniswapPoolamount , đồng thời họ cũng sử dụng lại 0x1 cho amount , dẫn đến việc khai thác.

Các nhà phát triển hợp đồng thông minh cần hiểu rõ các tính năng mới, đặc biệt là các thay đổi đột phá, trước khi sử dụng chúng. Luôn nhớ xem xét kỹ lưỡng các EIP , bao gồm tất cả các cân nhắc về bảo mật, khi triển khai chúng.

Ngoài ra, chúng tôi khuyến nghị mạnh mẽ nên tiến hành Kiểm định bảo mật , không chỉ đối với phiên bản phát hành đầu tiên mà còn đối với bất kỳ tính năng mới nào được thêm vào trong tương lai. Vì quá trình nâng cấp có thể gây ra nhiều vấn đề khác nhau nên cũng cần được kiểm tra kỹ lưỡng.

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