Phân tích toàn diện các cuộc tấn công lừa đảo trên Blockchain

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

Bài viết này được X-explore và WuBlockchain đồng xuất bản.

Giới thiệu

Theo bài báo của Chainalysis vào năm 2024, các địa chỉ bất hợp pháp đã nhận được số tiền trị giá 24,2 tỷ USD, chiếm 0,34% tổng khối lượng giao dịch trên chuỗi. Với sự quan tâm ngày càng tăng đối với ngành công nghiệp blockchain, nhiều người dùng và tài sản bắt đầu chảy vào thị trường Web 3, tuy nhiên, số vụ tấn công mạng được báo cáo từ người dùng ngày càng tăng.

Trong số các cuộc tấn công khác nhau, lừa đảo vẫn là một trong những khía cạnh chính của các cuộc tấn công mạng. Kẻ tấn công nhắm vào nhiều loại token khác nhau như stablecoin, ETH hoặc thậm chí là altcoin. Chúng dụ người dùng ký các giao dịch độc hại hoặc nhập khóa riêng để nắm quyền kiểm soát tài khoản của người dùng. Bài viết sẽ điều tra sâu hơn về các phương pháp lừa đảo hiện có và khám phá các phương pháp ngăn chặn hoặc xác định các tài khoản độc hại trong tương lai.

Bối cảnh & Công việc liên quan

Các phương thức tấn công lừa đảo hiện có Khung (ngoài chuỗi)

Các cuộc tấn công lừa đảo tập trung vào việc lôi kéo người dùng nhập thông tin cá nhân vào thế giới trực tuyến. Có nhiều cách khác nhau để thu hút người dùng nhưng hầu hết hành vi lừa đảo được thực hiện trên nền tảng như email, các kênh truyền thông xã hội hoặc các trang web nhân bản trông có vẻ hợp pháp. Email hoặc trang web như vậy lôi kéo người dùng nhập thông tin cá nhân hoặc ký các giao dịch trao quyền kiểm soát cho kẻ lừa đảo. Bài viết trước tiên sẽ điều tra 3 khuôn khổ chính mà những kẻ lừa đảo sử dụng ngoài chuỗi.

Lừa đảo trực tuyến

Các cuộc tấn công lừa đảo trực tuyến nhắm vào các cá nhân hoặc tổ chức cụ thể. Bằng cách thu thập trước thông tin tùy chỉnh, kẻ tấn công tạo một email được cá nhân hóa cho các nhóm cụ thể để khiến email đó trở nên hợp pháp. Hơn nữa, với sự phát triển của AI, kẻ lừa đảo giờ đây có khả năng thu thập thông tin được cá nhân hóa và tạo các email được cá nhân hóa nhắm mục tiêu vào các nhóm người dùng rộng hơn trước.

Tấn công dược phẩm

URL thủ công tấn công lừa đảo chuyển hướng đến các trang web giả mạo. Ví dụ: trên trang web Slack, “ www.apple.com " có thể trông giống với “ www.appie.com " khi “i” được thay thế bằng “I” viết hoa. Thông qua phương pháp như vậy, kẻ lừa đảo tạo ra các URL độc hại và phân phối chúng qua email hoặc các kênh SNS như Telegram hoặc Slack.

Tiện ích mở rộng trình duyệt giả mạo

Kẻ lừa đảo lập trình các chương trình tiện ích mở rộng độc hại và tạo ra các liên kết tải xuống sau đó được phân phối qua các kênh email hoặc SNS. Khi nhấp vào, tiện ích mở rộng như vậy sẽ được tải xuống môi trường của người dùng, tiện ích mở rộng này sẽ tìm kiếm thông tin cá nhân như cụm từ ghi nhớ và khóa riêng.

Lưu ý rằng khi người dùng nhấp vào liên kết tải xuống, nhập thông tin cá nhân hoặc ký giao dịch , kẻ lừa đảo sẽ có toàn quyền kiểm soát tài khoản và người dùng không có phương pháp nào để quay lại. Do đó, điều quan trọng là người dùng không nhấp vào các nguồn mà họ không tin tưởng.

Khai thác tiền trên Blockchain (on-chain)

Với khuôn khổ ngoài chuỗi, bài viết sẽ xem xét cách kẻ lừa đảo giành được toàn quyền kiểm soát ví trên chuỗi. Trong lĩnh vực blockchain, kẻ tấn công có thể giành quyền kiểm soát tài khoản của người dùng theo nhiều cách khác nhau. Đặc biệt với các hợp đồng mã thông báo ERC-20 như stablecoin và altcoin, những kẻ lừa đảo không nhất thiết cần khóa riêng của người dùng mà thay vào đó cần có chữ ký đăng nhập của người dùng trên chuỗi hoặc ngoài chuỗi. Bài viết sẽ xem xét nhiều cách khác nhau mà kẻ tấn công sử dụng để rút tiền.

Khóa riêng

Trích xuất khóa riêng không phải là một phương pháp phổ biến hiện nay. Kẻ tấn công tạo ra các trang web hoặc email yêu cầu người dùng nhập cụm từ hạt giống hoặc khóa riêng. Sau khi kẻ tấn công lấy được khóa riêng hoặc cụm từ hạt giống của người dùng, kẻ tấn công có toàn quyền kiểm soát ví và địa chỉ.

Hình ảnh mẫu tấn công dược phẩm dựa trên khóa riêng. (Nguồn: X)

Dù là phương pháp đơn giản nhưng người dùng trước đây rất dễ rơi vào bẫy do thiếu kiến thức về lĩnh vực blockchain.

Phê duyệt & ChuyểnTừ

Theo tiêu chuẩn ERC-20, mã thông báo ERC-20 hỗ trợ các giao dịch đẩy và kéo cho ứng dụng giao thức De-Fi. Giao dịch đẩy được thực hiện bởi người trả tiền, người quyết định số tiền sẽ được gửi cho người được trả tiền. Tuy nhiên, trong giao dịch pull, người nhận thanh toán sẽ hướng dẫn người thanh toán số tiền cần gửi. Do đó, phần thứ ba có thể kiểm soát các giao dịch. Hướng dẫn giao dịch pull được quản lý trên Web 3 theo quy trình dưới đây.

  1. Người dùng gọi và ký phê duyệt(). approve( owner, spender, amount) đặt số lượng địa chỉ của người nhận mã thông báo có thể lấy từ địa chỉ của người dùng. Lưu ý rằng có thể khai thác các đối tượng increaseAllowance( spender, amount) . Sự khác biệt giữa phê duyệt và tăngAllowance là phê duyệt đặt ra khoản phụ cấp mới trong khi tăng Allowance thêm vào khoản phụ cấp hiện có [đặt giới hạn cố định].

  2. Sau khi ranh giới được đặt, người nhận thanh toán có thể gọi transferFrom(to, from, amount) để chuyển mã thông báo của người dùng đến địa chỉ của người nhận thanh toán.

Trong các ứng dụng trong thế giới thực, người được trả tiền thường là hợp đồng thông minh. Người dùng sẽ chuyển mã thông báo ERC-20 sang hợp đồng thông minh và hợp đồng thông minh sẽ quản lý tiền tương ứng. Tuy nhiên, điều quan trọng cần lưu ý là một khi hợp đồng thông minh bị hack, tiền của người dùng sẽ bị cạn kiệt tùy theo mức trợ cấp đã được đặt. Trong một số trường hợp, để đơn giản hóa giao diện người dùng của người dùng, các hợp đồng thông minh có thể yêu cầu số tiền trợ cấp cao (Số tiền vô hạn), để người dùng không phải ký mỗi lần để đặt các khoản phụ cấp nhằm tiết kiệm phí gas. Vì số tiền được đặt thành số tiền vô hạn nên người dùng phải đảm bảo rằng bên thứ ba là nguồn đáng tin cậy.

Đặt trợ cấp và sử dụng phương thức transferFrom đã là một điểm dễ bị tổn thương trong một thời gian khá dài. Tuy nhiên, do ứng dụng thực tế của nó trong Tài chính phi tập trung (De-Fi) và dApps, Phê duyệt & Chuyển từ ngày nay thường được sử dụng với những cải tiến được thực hiện.

Ví dụ: do công suất tối đa của EVM được đặt thành 1024, các quy trình phức tạp như trợ cấp thiết lập → chuyểnTừ thường dẫn đến “vấn đề về độ sâu ngăn xếp 1024” do ngăn xếp vượt quá giới hạn khoảng trống nhất định dẫn đến hoàn nguyên giao dịch.

Do đó, nếu mỗi phương thức được gọi và chuyển sang phương thức tiếp theo, việc gọi nó sẽ tạo ra một điểm dễ bị tổn thương rất lớn. Khai thác chủ yếu có thể là các cuộc tấn công tái nhập. Vitalik đã nhận thức được một số tình huống nhất định và đã thực hiện các cải tiến vào năm 2017 cũng như giới thiệu tiêu chuẩn ERC-223.

Ảnh chụp màn hình nhận xét của Vitalk về độ sâu ngăn xếp 1024. (nguồn: Github)

Đã có các giao thức cải tiến khác được giới thiệu, chẳng hạn như Permit hoặc Permit2, tuy nhiên tính bảo mật của ví phụ thuộc vào giao dịch ký của người dùng. Do đó, điều quan trọng là phải kiểm tra 3 khía cạnh chính để ngăn chặn các hành vi lừa đảo tiềm ẩn.

  1. Số tiền phê duyệt : những kẻ lừa đảo thường tạo yêu cầu phê duyệt với số tiền cho phép cao bất thường để có được toàn quyền kiểm soát mã thông báo ERC-20 chuyên dụng. Khi ký hợp đồng, hãy đảm bảo kiểm tra số tiền trợ cấp.

  2. Hợp đồng thông minh đã được xác minh : Đảm bảo rằng bạn đang ký chữ ký trợ cấp cho các hợp đồng thông minh đã được xác minh do các dApp đã biết cung cấp. Kiểm tra thẻ và bản ghi nhớ từ Etherscan hoặc bất kỳ trình khám phá blockchain nào khác có thể giúp xác định xem hợp đồng có bị gắn cờ là độc hại hay không.

  3. Kiểm tra cảnh báo bảo mật : các nhà cung cấp ví như Meta Mask hoặc Wallet Connect tạo ra lời nhắc nếu bạn đang tương tác với các hợp đồng lừa đảo tiềm ẩn. Hãy chắc chắn kiểm tra các cảnh báo như vậy.

Trường hợp ví dụ

Hãy hình dung cách một cuộc tấn công thực tế được tiến hành và ghi lại trong Blockchain Explorer.

Chuỗi khối: Chuỗi BSC

Ngày: 2023–05–11

Kẻ tấn công: 0x49Dc14Dd851B6EaE8d685715e12a06cc1BFC5d8d

Nạn nhân: 0x5F464c94e93CEbd56aE2F1220912BA0ab0a27a38

Bước 1 : Người dùng ký Hợp đồng phê duyệt

Khi nhận được thông tin sai lệch trên môi trường Web 2 thông qua kênh điện tín, Instagram hoặc trang web lừa đảo, người dùng sẽ nhận được yêu cầu chữ ký Phê duyệt.

Kẻ lừa đảo đã được nạn nhân phê duyệt để lấy mã thông báo Shiba Inu

Yêu cầu phê duyệt và chuyển giao. Nạn nhân đã phê duyệt tổng cộng 426923054270173310680061630 SHIB sẽ bị kẻ lừa đảo kiểm soát

Ảnh chụp màn hình dòng tiền từ Dex hoặc Cex → Nạn nhân → Kẻ lừa đảo

Bước 2 : Rút vốn

Bây giờ, khi kẻ lừa đảo có quyền kiểm soát 426923054270173310680061630 hoặc ít hơn số tiền mã thông báo ERC-20 trong địa chỉ của nạn nhân, kẻ lừa đảo bắt đầu chuyển mã thông báo của nạn nhân vào tài khoản của họ. Như hình bên dưới, tổng số 256153832.56 SHIB đã bị rút khỏi tài khoản của nạn nhân.

giao dịch được thực hiện bởi kẻ tấn công đang rút 256153832.56 SHIB

Cho phép làm gì

Giấy phép được giới thiệu trong ERC-2612 như một phép đo cải tiến của quy trình phê duyệt & chuyểnTừ. Không giống như phê duyệt và chuyểnTừ, chữ ký ngoài chuỗi được tạo có nghĩa là người dùng không phải ký phê duyệt trên chuỗi trước đó. Quy trình làm việc của Giấy phép và ChuyểnTừ như sau:

Quy trình công nghệ của giao thức cấp phép (nguồn: Medium)

  1. Người dùng cần tạo chữ ký thông qua permit (owner, spender, value, nounce, deadline) . Các giá trị trả về cho r, s, v là 3 phần tách chữ ký đã được tạo.

  2. Khi người dùng tạo chữ ký Giấy phép bằng r,s và v, bên thứ ba sẽ gọi permit(owner,spender, value, deadline, v, r, s) với các giá trị sau. Sau khi giao dịch để thay đổi giai đoạn, nó sẽ đặt mức trợ cấp tương ứng.

  3. Trong một giao dịch, sau khi khoản phụ cấp được thiết lập, bên thứ ba sẽ thực hiện chuyển khoản.

Thông qua việc tạo chữ ký ngoại tuyến sử dụng giấy phép(), phí gas có thể được tiết kiệm do không cần phải ký trợ cấp trên chuỗi. Hơn nữa, tính bảo mật đã được cải thiện ồ ạt thông qua việc tạo r, s, v, người dùng không bao giờ để lộ khóa riêng của mình để tạo chữ ký.

Lưu ý rằng không phải tất cả các phương thức hỗ trợ mã thông báo tiêu chuẩn ERC-20 đều cho phép(). Hơn nữa, cơ chế cốt lõi của license() nằm trong quy trình phê duyệt & chuyểnTừ. Điểm dễ bị tổn thương nằm ở việc người dùng tạo hoặc ký Permit().

Trường hợp ví dụ

Hãy hình dung cách một cuộc tấn công thực tế được tiến hành và ghi lại trong Blockchain Explorer.

Chuỗi khối: ETH

Ngày: 2024–05–24

Kẻ tấn công: 0x77865b925f96fc49837cfe27ec04cd5a691e61ef

Nạn nhân: 0x7cdd2a99fc014194218119a7100c259e31a10bf2

Bước 1 : Người dùng tạo chữ ký ngoài chuỗi

Quá trình như vậy không thể được theo dõi trên Blockchain Explorer vì nó được thực hiện ngoài chuỗi. Kẻ lừa đảo sẽ dụ nạn nhân tạo chữ ký ngoài chuỗi chỉ bằng một cú nhấp chuột đơn giản. Mặc dù nạn nhân chưa ký giao dịch trực tuyến, việc ký chữ ký ngoài chuỗi thông qua ví đã cho phép kẻ lừa đảo thực hiện TransferFrom sau này.

Bước 2 : Kẻ lừa đảo ký hợp đồng Giấy phép từ chữ ký Off-chain

Kẻ lừa đảo gửi tin nhắn đã ký tới hợp đồng Mã thông báo ERC-20 thông qua giao dịch trực tuyến. Sau khi xác thực địa chỉ của nạn nhân và số nonce, một yêu cầu phê duyệt sẽ được đưa ra. Lưu ý rằng thông qua giấy phép chỉ có một giao dịch trực tuyến. So với phê duyệt và chuyển từ truyền thống, giao dịch tiết kiệm phí gas ít hơn một lần.

Permit và transferFrom đã được gọi trong một lần thực thi

Thông báo số tiền phê duyệt lớn bất thường

Tổng cộng 173455570204 USDC đã bị rút hết

ERC-4337 ( Trừu tượng tài khoản hoặc Ví hợp đồng thông minh)

Được Vitalk giới thiệu vào năm 2021, sơ đồ AA mới đã được tạo ra dựa trên giao thức lớp đồng thuận hiện có. Không giống như các chương trình giới thiệu AA trước đây như EIP-86 (Bare multi-sig AA), EIP-3074 (Auth và Authcall) và EIP-2938 (Account abstraction), đây là chương trình đầu tiên giới thiệu AA trong sự đồng thuận hiện tại giao thức lớp cho phép tích hợp dễ dàng hơn trên thị trường hiện tại.

Trừu tượng hóa tài khoản (AA)

Trong blockchain tồn tại hai loại tài khoản chính: Tài khoản thuộc sở hữu bên ngoài và Hợp đồng thông minh. Đặc điểm của hai tài khoản khác nhau như được hiển thị trong bảng bên dưới.

Mục tiêu của AA là tạo ra một tài khoản hợp nhất mang lại lợi ích cho EOA và SC: khả năng lập trình đầy đủ với khả năng bắt đầu giao dịch. Lợi ích của AA là:

  • Khả năng trả lời các cuộc gọi hợp đồng trực tiếp

  • Dễ dàng chuyển quyền sở hữu tài khoản ( EOA không thể thực hiện được)

  • Giới thiệu các quy tắc xác thực mới (Có thể kiểm tra khóa mật khẩu trong các cấp độ SC)

  • Loại bỏ chi phí gas từ EOA sang hợp đồng thông minh

  • Quản lý một địa chỉ thay vì EOA và SC

  • Giới thiệu phương thức thanh toán phí gas mới (không nhất thiết phải là token gốc)

Quy trình làm việc của ERC-4337

AA là một tiêu chuẩn mới có thể tạo ra một tài khoản hợp nhất giúp cải thiện đáng kể giao diện người dùng cho người dùng. Luồng kỹ thuật của ERC-4337 như sau:

Sơ đồ luồng của ERC-4337 (nguồn: Eden Network)

Sơ đồ quy trình kỹ thuật của ERC-4337 (nguồn: Tài liệu ERC-4337 chính thức)

ERC-4337 có thể được chia thành bốn quy trình chính.

Bước 1: Tạo hoạt động của người dùng

Thông qua dApp và ví, người dùng có thể tương tác với các hoạt động của sơ đồ AA để tạo Hoạt động của người dùng. Người dùng có giao diện người dùng tốt hơn vì ứng dụng có thể hỗ trợ nhiều tính năng khác nhau trong một, chẳng hạn như đa chữ ký, khôi phục xã hội, v.v. Sau khi Thao tác của người dùng được tạo, nó sẽ tạo một chữ ký ngoại tuyến sẽ được tài khoản xác thực sau này trước khi thực thi.

Bước 2 : Xử lý gói

Sau khi người dùng gửi Hoạt động của người dùng, nó sẽ được lưu trữ trong Mempool hoạt động của người dùng nơi trình đóng gói sẽ tập hợp và tổng hợp thành một gói. Trình đóng gói sẽ kiểm tra tính hợp lệ của các giao dịch và sau khi được thông qua, các giao dịch được nhóm sẽ được gửi đến chuỗi để xử lý.

Bước 3 : Hợp đồng điểm đầu vào

Quy định về Hợp đồng EntryPoint. (nguồn: Tài liệu ERC-4337 chính thức)

Có một Hợp đồng điểm đầu vào thống nhất trong chuỗi như đã đề cập trong quy định trên. Khi nhận được các giao dịch theo gói, nó sẽ thực hiện tính toán gas để đảm bảo tài khoản hợp đồng thông minh phải trả bao nhiêu phí gas. Thông qua hợp đồng Entrypoint, người dùng không phải trả phí gas như tài khoản hợp đồng thông minh hoặc người quản lý thanh toán. Hơn nữa, lợi thế quan trọng nhất của chương trình này là phí gas không phải thanh toán bằng token gốc. Phí có thể được quy định theo dApps và được thanh toán bằng mã thông báo ERC-20 thông qua PayMaster. Sự sắp xếp như vậy sẽ cải thiện trải nghiệm của người dùng với các giao dịch.

Bước 4 : Xác thực và thực thi

Khi nhận được các phương thức từ Hợp đồng điểm đầu vào, việc xác thực các Hoạt động của người dùng ban đầu sẽ được thực hiện. Sau khi được xác thực, nó sẽ thực hiện giao dịch tương ứng. Lưu ý rằng hợp đồng EntryPoint sẽ thêm các giao dịch vào bộ nhớ mạng ETH.

Điểm dễ bị tổn thương

Từ góc độ bảo mật, vẫn còn rất nhiều điểm dễ bị tổn thương. Vì sơ đồ AA cho phép thực hiện các hoạt động của người dùng từ gói được quản lý ngoài chuỗi đến trên chuỗi, nên nó cung cấp rất nhiều lỗ hổng để những kẻ lừa đảo thao túng người dùng thực hiện các hoạt động của người dùng. Bài viết sẽ cung cấp các điểm dễ bị tổn thương tiềm ẩn trong suốt quá trình thực hiện hoạt động.

Hợp đồng điểm vào giả

Lưu ý rằng chỉ nên có một hợp đồng EntryPoint cho mỗi chuỗi. Tuy nhiên, kẻ lừa đảo có thể tạo phiên bản hợp đồng EntryPoint của mình trên chuỗi để thực hiện các hoạt động của người dùng. Vì hầu hết các giao thức bảo mật và giám sát sẽ tập trung nhiều vào hợp đồng EntryPoint đơn lẻ, kẻ lừa đảo có thể muốn tạo phiên bản của mình để tránh điều đó. Tuy nhiên, hợp đồng như vậy có thể dễ dàng được phát hiện và quản lý phù hợp với các hệ thống giám sát blockchain hiện tại.

Gói độc hại

Kẻ lừa đảo có thể tạo ra phiên bản dịch vụ Bundler của mình bằng nhóm hoạt động của người dùng. Dịch vụ Bundler bao gồm bốn khía cạnh chính: cấu hình, máy chủ RPC, bộ nhớ thay thế và gói UserOperations.

Cấu hình đặt địa chỉ cho tài khoản EntryPoint và người thụ hưởng.

Máy chủ RPC xử lý các hoạt động được cung cấp địa chỉ EntryPoint.

 async handleMethod (method: string, params: any[]): Promise<any> { let result: any switch (method) { case 'eth_supportedEntryPoints': result = await this.methodHandler.getSupportedEntryPoints() break case 'eth_sendUserOperation': result = await this.methodHandler.sendUserOperation(params[0], params[1]) break case 'eth_estimateUserOperationGas': result = await this.methodHandler.estimateUserOperationGas(params[0], params[1]) break case 'eth_getUserOperationReceipt': result = await this.methodHandler.getUserOperationReceipt(params[0]) break case 'eth_getUserOperationByHash': result = await this.methodHandler.getUserOperationByHash(params[0]) break // ... default: throw new RpcError(`Method ${method} is not supported`, -32601) } return result }

Bộ nhớ thay thế lưu trữ các hoạt động ở định dạng mảng trước khi gửi nó tới một chuỗi. Từ quan điểm của người đóng gói, việc ngăn chặn các cuộc tấn công DoS nên được quản lý ở đây.

 // add userOp into the mempool, after initial validation. // replace existing, if any (and if new gas is higher) // revets if unable to add UserOp to mempool (too many UserOps with this sender) addUserOp (userOp: UserOperation, userOpHash: string, prefund: BigNumberish, senderInfo: StakeInfo, referencedContracts: ReferencedCodeHashes, aggregator?: string): void { const entry: MempoolEntry = { userOp, userOpHash, prefund, referencedContracts, aggregator } const index = this._findBySenderNonce(userOp.sender, userOp.nonce) if (index !== -1) { const oldEntry = this.mempool[index] this.checkReplaceUserOp(oldEntry, entry) debug('replace userOp', userOp.sender, userOp.nonce) this.mempool[index] = entry } else { debug('add userOp', userOp.sender, userOp.nonce) this.entryCount[userOp.sender] = (this.entryCount[userOp.sender] ?? 0) + 1 this.checkSenderCountInMempool(userOp, senderInfo) this.mempool.push(entry) } this.updateSeenStatus(aggregator, userOp) }

Cuối cùng, đối với việc Đóng gói userOperations, nó sẽ tạo gói sẽ được gửi đến Hợp đồng EntryPoint. Người đóng gói phải đảm bảo rằng họ xác minh khả năng thanh toán phí của hoạt động trước khi chuyển tiếp nó để ngăn chặn các cuộc tấn công DoS. Nếu không, những kẻ lừa đảo có thể thực hiện các hoạt động có vẻ như phải trả phí nhưng sẽ hoàn nguyên, gây tắc nghẽn trong bộ nhớ của chuỗi.

Hơn nữa, các bước xác minh không được vi phạm các thay đổi trạng thái nghĩa là nó sẽ xác minh theo dữ liệu liên quan đến người gửi. Việc xác minh và tạo Bundle nằm trong đoạn mã bên dưới

 async createBundle (): Promise<[UserOperation[], StorageMap]> { const entries = this.mempoolManager.getSortedForInclusion() const bundle: UserOperation[] = []
 // paymaster deposit should be enough for all UserOps in the bundle. const paymasterDeposit: { [paymaster: string]: BigNumber } = {} // throttled paymasters and deployers are allowed only small UserOps per bundle. const stakedEntityCount: { [addr: string]: number } = {} // each sender is allowed only once per bundle const senders = new Set<string>() // all entities that are known to be valid senders in the mempool const knownSenders = entries.map(it => { return it.userOp.sender.toLowerCase() }) const storageMap: StorageMap = {} let totalGas = BigNumber.from(0) debug('got mempool of ', entries.length) // eslint-disable-next-line no-labels mainLoop: for (const entry of entries) { // check reputation system // check duplicate UserOps per sender // check stake // check storage access // check UserOp call gas limit // check Paymaster deposit if present // If sender's account already exist: replace with its storage root hash senders.add(entry.userOp.sender) bundle.push(entry.userOp) totalGas = newTotalGas } return [bundle, storageMap] }

Khai thác PayMaster

Vì PayMaster là một hợp đồng tùy chỉnh để xử lý các giao dịch, những kẻ lừa đảo có thể chuyển phí gas thông qua việc khai thác các lỗ hổng trong mã. Nghiên cứu sâu hơn sẽ được tiến hành trong tương lai. Hiện tại, không có nhiều trường hợp ví dụ được xác nhận về việc khai thác paymaster.

Trường hợp ví dụ

Hãy hình dung cách một cuộc tấn công thực tế được tiến hành và ghi lại trong Blockchain Explorer. Lưu ý rằng AA là một sơ đồ xử lý các giao dịch theo cách thức hoạt động theo gói. Những kẻ lừa đảo thường sử dụng sơ đồ AA để xử lý các giao dịch như Cho phép hoặc Phê duyệt. Ví dụ dưới đây sẽ xem xét yêu cầu Phê duyệt & ChuyểnTừ.

Chuỗi khối: Chuỗi BSC

Ngày: 2024–03–23

Kẻ tấn công: 0x454b8b645a981e6c197087ea154df94b5187d682 , 0x170f7be1baf9234af5966d194a0a6bd6073eed99

Nạn nhân: 0x3f3ce11b7809ecf6f571943800c28f585e8b187d

https://app.blocksec.com/explorer/tx/bsc/0x812bc694a8c6732b899e81727f128d06c2b7b6717a2dd67936079928b41621b3

Bước 1 : Người dùng ký yêu cầu cấp phép ngoài chuỗi

Giống như một yêu cầu cấp phép thông thường, kẻ lừa đảo sẽ dụ người dùng ký vào thông báo cấp phép. Nó sẽ được ngụy trang như một bước cần thiết để phê duyệt giao dịch hoặc truy cập dịch vụ. Nạn nhân tin rằng yêu cầu này là hợp pháp và sẽ ký các tin nhắn ngoài chuỗi bằng khóa riêng của họ.

Bước 2 : Tương tác với Bundler

Kẻ lừa đảo bây giờ sẽ tương tác với một người đóng gói, người sẽ xử lý giao dịch giấy phép như một hoạt động. Kẻ lừa đảo gửi giao dịch đến trình đóng gói và trình đóng gói hiện sẽ lưu trữ giao dịch đó dưới mempool hoạt động của người dùng. Sau khi được lưu trữ trong bộ nhớ hoạt động của người dùng, nó sẽ trải qua quá trình xác thực và xử lý theo hợp đồng EntryPoint.

Bước 3 : Hợp đồng EntryPoint

Nhận các quy trình vận hành từ gói, hợp đồng EntryPoint sẽ xác thực hoạt động của người dùng trong gói trước khi thực thi. Như được hiển thị trong ảnh chụp màn hình bên dưới. Sau khi kiểm tra tính khả dụng của phí gas và tính chính xác của các thay đổi trạng thái, nó sẽ xử lý các hoạt động nội bộ.

Ảnh chụp màn hình Hoạt động trước khi xử lý InnerOperations

Bước 4 : Xử lý các thay đổi trạng thái

Như được đánh dấu bên dưới, thao tác bên trong của ví dụ này chứa hai thao tác transferFrom. Lưu ý mức chênh lệch giá trị về số tiền chuyển ở hai địa chỉ: 212856150000000008192 , 37562849999999991808 . Tỷ lệ này là khoảng 0,85: 0,15, cho thấy có thể có một dịch vụ Drainer trong đó họ cung cấp dịch vụ lừa đảo và chia sẻ số tiền đã rút với Drainer và khách hàng theo một tỷ lệ nhất định. Chi tiết về dịch vụ của Drainer sẽ được đề cập ở phần sau của bài viết

Hai hoạt động TransferFrom cho Mã thông báo BSC-USD có sự Phê duyệt và Chuyển khoản bên trong

Thông báo có giá trị cao bất thường trong Phê duyệt

Dòng vốn và dòng hoạt động

Phương thức tấn công từ những kẻ lừa đảo

Kẻ rút tiền điện tử (Lừa đảo với tư cách là nhà cung cấp dịch vụ)

Gần đây ngày càng có nhiều báo cáo về Lừa đảo với tư cách là Nhà cung cấp dịch vụ trên Thị trường tiền điện tử. Các nhà cung cấp hoạt động trên nhiều chuỗi, cung cấp dịch vụ tiêu hao mã thông báo ERC-20 và kiếm mã thông báo bị đánh cắp làm phần thưởng. Bài viết sẽ xem xét một tình huống ví dụ từ các công cụ rút tiền điện tử.

Máy thoát nước địa ngục

Theo Scam Sniffer, Inferno Drainers đã đánh cắp 80 triệu đô la trở lên trong vòng 1 năm (11.2022–11.2023) kể từ thời gian hoạt động của chúng. Inferno Drainer thiết lập các trang web lừa đảo bằng kỹ thuật xã hội và chia sẻ nền tảng này với khách hàng.

Bài viết dựa trên Scam Sniffer từ Group-IB

Sau đó, khách hàng sẽ gửi các liên kết trang web được thiết kế mang tính xã hội trên Telegram, Facebook, Instagram hoặc các mạng xã hội khác để thu hút người dùng bình thường. Những nạn nhân thường không có kiến thức về lĩnh vực tiền điện tử và blockchain sẽ cấp quyền truy cập cho khách hàng của Inferno Drainer mà không hề hay biết.

Luồng tấn công chung của Inferno Drainer như sau:

Quy trình vận hành của Inferno Drainer (nguồn: Group-IB)

Như được hiển thị trong sơ đồ, Inferno Drainer chủ yếu tập trung vào việc xây dựng các trang web lừa đảo được thiết kế theo mạng xã hội để rút tiền của nạn nhân và khách hàng chịu trách nhiệm phát tán các trang web lừa đảo cho nạn nhân. Khi nạn nhân mở trang web và ký các giao dịch, khách hàng sẽ lấy 80% số token bị đánh cắp và Inferno Drainer sẽ lấy 20%.

Với thiết lập rất đơn giản với phương thức Phê duyệt&ChuyểnTừ hoặc phương thức Cấp phép đơn giản, Inferno Drainer đã đánh cắp hơn 80 triệu đô la tài sản trên chuỗi.

Phương pháp thoát nước

Inferno Drainer chủ yếu sử dụng phương pháp Phê duyệt & ChuyểnTừ cổ điển hoặc phương pháp cho phép. Hãy xem xét một trong những Phê duyệt&ChuyểnTừ trong thời gian hoạt động của họ

Nạn nhân : 0xe142C1858b8447238F3953e685e62ED6005DcAaA

Kẻ tấn công : 0xFC4EAA4ac84D00f1C5854113581F881b42b4A745

Mã thông báo: PEPE

Số tiền bị mất: 26.372.295,3 ($220)

Bước 1 : Nạn nhân ký xác nhận()

Lưu ý giá trị của số tiền được phê duyệt

Bước 2 : Kẻ tấn công thực hiện TransferFrom()

Angel Drainer và cải tiến phương pháp tấn công

Sau khi Inferno Drainer kết thúc dịch vụ, một dạng dịch vụ thoát nước mới tiên tiến hơn đã xuất hiện. Một trong những người thoát nước đáng chú ý là Angel Drainer. Không giống như Inferno Drainer, Angel Drainer tận dụng các kỹ thuật tiên tiến để điều khiển logic hợp đồng thông minh và hành vi của người dùng. Một số phương pháp nhất định tập trung vào việc bỏ qua các cảnh báo bảo mật được kích hoạt bằng phân tích hành vi và giới hạn tốc độ. Bài viết sẽ xem xét hai phương pháp tấn công mới chính mà Angel Drainer sử dụng để rút tiền.

Ảnh chụp màn hình các dịch vụ mà Angel Drainer cung cấp. (nguồn: Checkpoint)

  1. Cơ chế triển khai hợp đồng thông minh lồng nhau

Khi các âm mưu lừa đảo khác nhau sử dụng Phê duyệt&ChuyểnTừ hoặc Cho phép, các nhóm bảo mật blockchain như ChainAlysis, BlockAid và Check Point cũng đã phát triển các thuật toán giám sát tinh vi có thể xác định những kẻ lừa đảo tiềm năng trên chuỗi. Đặc biệt, các giao dịch như Cấp phép và Phê duyệt&Chuyển từ trên địa chỉ của kẻ lừa đảo rất dễ xác định. Do đó, Angel Drainer đã áp dụng một phương pháp phức tạp giúp vượt qua các cảnh báo bảo mật thông qua việc tạo ra các hợp đồng thông minh mới thực hiện chức năng Multicall.

Ví dụ

Để hiểu cách Angel Drainer vượt qua các cảnh báo bảo mật, chúng ta sẽ xem xét một cuộc tấn công mẫu thực tế bằng việc điều tra các hợp đồng thông minh đã được sử dụng. Hãy cùng khám phá những giao dịch đằng sau:

0xb60c32fb28aa6160df6f472f494f162b997aa49fb06776dce250aff80602a8a3

Bước 1 : Tạo hợp đồng thông minh lồng nhau

Angel Drainer trước tiên tạo một hợp đồng thông minh với các chức năng sau.

Như được hiển thị trong ảnh chụp màn hình bên dưới, đối với giao dịch cụ thể này, Angel Drainer đã sử dụng 0x095838d2() cuộc gọi đầu tiên và tiếp theo 0xf2fde38b() transferOwnership(address).

Để đơn giản, chúng ta sẽ gọi hợp đồng này là hợp đồng chính. Trong hợp đồng chính, chúng ta cần tập trung vào hàm 0x095838d2() . Logic của hàm như sau:

  1. Yêu cầu ba tham số (secondContractAddress, tokenContractAddress, arrayOf3Elements)

  2. Kiểm tra xem SecondContractAddress có phải là hợp đồng hiện có hay không. Nó kiểm tra kích thước mã của địa chỉ đã cho. Nếu nó lớn hơn 0 nghĩa là hợp đồng tồn tại, nếu không thì ngược lại.

  3. Nếu đúng như vậy, hãy thực thi chức năng Multicall bao gồm (Permit & TransferFrom). Nếu không, hãy triển khai hợp đồng mới với địa chỉ đó rồi thực hiện chức năng Muticall.

Đối với trường hợp giao dịch này, SecondContractAddress là Null để nó tạo hợp đồng thông minh mới trước tiên.

Bước 2 : Chức năng Mutilcall

Khi hợp đồng chính xác định hoặc tạo hợp đồng thứ hai, hàm Multicall() trong hợp đồng thứ hai sẽ được thực thi. Một chức năng như vậy tồn tại để sắp xếp sự tương tác theo hợp đồng. Hãy xem khả năng chính của hàm multicall().

Như đã nêu ở trên, multicall chấp nhận các hoạt động giao dịch dưới dạng tham số và xử lý từng tham số bằng cách tạo hợp đồng bên ngoài tại địa chỉ được chỉ định trong v1[v3]. Chi tiết về multicall có thể được xem trong quá trình thực hiện bên dưới.

Như được hiển thị ở trên, muticall đã xử lý tổng cộng 3 giao dịch là Permit và hai transferFrom. Giấy phép và chuyểnTừ được thực hiện trên hợp đồng token Lido: stETH .

Lưu ý sự khác biệt về giá trị trong transferFrom. Tỷ lệ là 0,85:0,15. Điều này ghi nhận việc phân phối lợi nhuận với Khách hàng và Angel Drainer.

Bước 3 : Chuyển quyền sở hữu

Để kẻ lừa đảo có toàn quyền kiểm soát hợp đồng thứ hai. Bước cuối cùng của 0x095838d2() bao gồm thực hiện Chuyển quyền sở hữu từ hợp đồng thứ hai đến địa chỉ của kẻ lừa đảo.

Chúng tôi đã xem xét một phương pháp thao túng được Angel Drainer sử dụng để vượt qua các cảnh báo bảo mật bằng cách tạo các hợp đồng mới và xử lý các hoạt động trong nhiều hợp đồng mới. Vì hợp đồng mới không chứa bất kỳ hồ sơ giao dịch nào, che giấu các giao dịch thông qua nhiều cuộc gọi và không được triển khai trực tiếp theo địa chỉ của kẻ lừa đảo nên nó có thể bỏ qua các cảnh báo bảo mật. Tuy nhiên, nhờ nhận dạng từ Check Point Research, phương thức tấn công hợp đồng thông minh Nested giờ đây có thể được xác định và sẽ không bỏ qua các cảnh báo bảo mật nữa.

2. Tấn công Retake Farming của EigenLayer

EigenLayer là một giao thức phi tập trung được thiết kế để nâng cao tính bảo mật và hiệu quả của mạng blockchain thông qua quá trình “đặt lại”, trong đó nó cho phép người dùng khóa mã thông báo của họ vào một hợp đồng thông minh. Ban đầu, người dùng có thể đặt cược mã thông báo trong một khoảng thời gian nhất định và kiếm phần thưởng, đồng thời đặt lại nhiều mã thông báo hơn thay vì hủy đặt cược và đặt cược lại. Thông qua quy trình như vậy, nó cho phép người dùng tương tác với nhiều dịch vụ và đặt cọc nhiều token hơn, điều này cuối cùng đồng thời nâng cao tính bảo mật và tiện ích của chuỗi.

Điểm vectơ tấn công

Tuy nhiên, có một điểm dễ bị tổn thương trong cơ chế đặt lại. Chủ yếu với cơ chế queueWithdrawal của giao thức EigenLayer. Để hiểu cách thức hoạt động của cuộc tấn công, chúng ta cần hiểu quá trình đặt cược và đặt lại hoạt động như thế nào.

Giao thức EigenLayer sử dụng một phương pháp đặc biệt để xử lý việc rút tiền đặt cọc.

Sau khi người dùng đặt cược một số lượng token nhất định và sau đó quyết định rút số token đã đặt cọc, giao dịch sẽ không được xử lý ngay lập tức. Thay vào đó, nó được lưu trữ trong hàng đợi. Người dùng phải đợi khoảng thời gian ký quỹ 7 ngày để hủy đặt cược và trên Etherreums, việc rút một phần tiền đặt cọc có thể được thực hiện 4–5 ngày một lần sau khi quét trình xác thực. Vì phương thức phê duyệt như vậy là mới nên hầu hết các nhà cung cấp bảo mật hoặc công cụ bảo mật nội bộ đều không xác thực loại phê duyệt đó và đánh dấu nó là một giao dịch vô hại. Vì vậy, nó đã để lại một điểm dễ bị tổn thương để Angel Drainer khai thác.

Ví dụ

Chuỗi: ETH

Ngày: Từ 2024–01–15 Đến 2024–01–29

Kẻ tấn công: 0x8031A648B169a9fa6f63954C0F0B106E57027696

Bước 1 : TẠO hợp đồng2

Đây là phần mà họ có thể vượt qua các cảnh báo bảo mật và che khuất quy trình. Angel Drainer chuẩn bị hợp đồng sử dụng CREATE2 với các tham số (salt, bytecode) . Sau đó CREATE2 sẽ tạo một địa chỉ mới cụ thể. Địa chỉ mới sẽ được sử dụng để thu thập phần thưởng và mã thông báo hủy đặt cược vượt qua cảnh báo bảo mật thành công.

Bước 2 : bắt đầu queueWithdrawal

Kẻ tấn công bắt đầu bằng cách bắt đầu hủy đặt cược từ lớp Eigen, kích hoạt thời hạn ký quỹ 7 ngày.

Bước 3 : Xả nước

Sau một khoảng thời gian nhất định, token sẽ bị rút về địa chỉ CREATE2 dẫn đến cuộc tấn công thành công như hình dưới đây.

Nhờ Blockaid, các cuộc tấn công như vậy đã được xác định và cũng được thông báo tới Giao thức EigenLayer. Hiện tại, các biện pháp bảo mật cao hơn đã được thiết lập để phát hiện các cuộc tấn công như vậy không giống như trước đây.

Rửa tiền bằng tiền điện tử

Nhóm Lazarus & cuộc tấn công cầu Ronin

Cuộc tấn công bắt đầu với việc Lazarus lấy được 5 chìa khóa trong số 9 người nắm giữ khóa riêng để thực thi trên cây cầu xuyên chuỗi. Điều này có thể thực hiện được nhờ vào tài khoản Multisignature được sắp xếp bằng Khóa bí mật Shamir. Sau khi có quyền truy cập vào chuỗi, họ bắt đầu quá trình rửa tiền.

Các bước bao gồm:

  1. Ether bị đánh cắp được phân phối đến ví trung gian

  2. Sử dụng Tornado Cash → giao thức trộn ngẫu nhiên

  3. ETH sang BTC

  4. Trộn và trộn BTC

  5. CEX để rút tiền

Biểu diễn trong biểu đồ trông như dưới đây:

Sơ đồ dòng vốn của nhóm Lazarus (nguồn: ChainAlysis)

Việc phát hiện các hoạt động như vậy là vô cùng khó khăn do Tornado cash. Tuy nhiên, sau khi Mỹ giành được quyền kiểm soát Tornado Cash sau cáo buộc rửa tiền, nhóm Lazarus đã thực hiện một phương pháp khác: Sử dụng giao thức De-fi.

Lưu ý rằng tiền di chuyển qua nhiều cây cầu khiến việc truy tìm khó khăn hơn (nguồn: ChainAlysis)

Ý tưởng chính là mọi người đều có thể nhìn thấy các giao dịch trên chuỗi và khi điều tra sâu hơn, các giao dịch có thể được phát hiện. Tuy nhiên, thông qua các phương thức kết hợp và hàng loạt, các giao dịch sẽ phân kỳ và sau đó hợp nhất thành một ví duy nhất. Đây sẽ và đang là xu hướng của những kẻ lừa đảo tinh vi.

Các phương thức rửa tiền và lừa đảo sẽ phát triển và cần có các phương pháp phát hiện phù hợp để đảm bảo tiền của người dùng.

Phát hiện tài khoản độc hại

Học máy

Tất cả các phương pháp phát hiện đều dựa trên các nguyên tắc cơ bản được giải thích ở trên. Tuy nhiên, các quy trình pháp y như vậy của con người rất tốn thời gian và không chính xác; do đó các công ty lớn như ChainAlysis sử dụng máy học để làm việc đó. Kỹ thuật và phương pháp tính năng chính xác chưa được ChainAlysis hoặc bất kỳ nền tảng bảo mật nào khác bao gồm. Tuy nhiên, dựa trên nhiều nghiên cứu và tài liệu khác nhau, bài báo đề xuất các phương pháp sau đây cần được nghiên cứu sâu hơn cho mục đích phát triển trong tương lai.

Học máy mạng thần kinh đồ thị

Sơ đồ con Elliptic2 Học máy

Mạng lưới thần kinh sâu (Kỹ thuật tính năng)

Phần kết luận

Các cuộc tấn công lừa đảo trên blockchain đã phát triển cùng với sự phát triển của ngành, nhắm mục tiêu vào người dùng thông qua các phương pháp tinh vi để vượt qua các cảnh báo bảo mật. Người dùng phải cảnh giác, đảm bảo xác minh hợp đồng thông minh, kiểm tra số tiền phê duyệt và chú ý đến các cảnh báo bảo mật. Luôn cập nhật thông tin và áp dụng các phương pháp hay nhất là điều cần thiết để bảo vệ tài sản trong hệ sinh thái tài chính phi tập trung.

Người dùng cần nhớ hai quy tắc vàng để ngăn mình khỏi mọi hình thức tấn công hiện tại và trong tương lai.

Chúng tôi đã khám phá cách tiến hành các cuộc tấn công lừa đảo trên blockchain và cách những kẻ lừa đảo xây dựng cơ sở hạ tầng cả trong và ngoài chuỗi để xâm phạm tài khoản và tài sản của người dùng. Tuy nhiên, với hai quy tắc vàng, bạn có thể ngăn mình khỏi mọi hình thức tấn công.

  1. Bảo vệ cụm từ hạt giống của bạn

  2. Hiểu những gì bạn đăng nhập trên chuỗi

Đảm bảo không bao giờ để lộ khóa riêng và cụm từ gốc của bạn trong môi trường Web 2 và Web3, đồng thời đảm bảo bạn hiểu đầy đủ về giao dịch mình đang ký.

Người giới thiệu

https://www.chainalysis.com/blog/crypto-hacking-stolen-funds-2024/

https://go.chainalysis.com/rs/503-FAP-074/images/The%202024%20Crypto%20Crime%20Report.pdf?version=0

https://coinpaper.com/360/what-is-chainalysis-and-how-do-you-avoid-being-traced-by-them

https://www.chainalysis.com/blog/tornado-cash-sanctions-challenges/

https://www.erc4337.io/docs/bundlers/introduction

https://ethereum.stackexchange.com/questions/142102/solidity-1024-call-stack-deep

https://www.chainalysis.com/blog/axie-infinity-ronin-bridge-dprk-hack-seizure/

https://dexaran820.medium.com/erc-20-approve-transferfrom-asset-transfer-method-poses-a-threat-to-users-funds-safety-ff7195127018#:~:text=ERC%2D20%20defines phương thức %20two%20

https://medium.com/edennetwork/erc-4337-exploring-the-Technical-comComponents-of-account-abstraction-part-2-fec300a7f052

https://medium.com/neptune-mutual/under Hiểu-erc-20-permit-and-liên kết-risks-41c29c969862#:~:text=EIP%2D2612%20introduces%20a%20feature

https://medium.com/oak-security/a-deep-dive-into-the-main-comComponents-of-erc-4337-account-abstraction-USE-alt-mempool-part-1-3a1ed1bd3a9b

https://eips.ethereum.org/EIPS/eip-4337#reputation-scoring-and-throttlingbanning-for-global-entities

https://crypto.news/angel-draener-targets-restaging-platforms-with-new-Attack-vector-blokcaid-warns/

https://cryptodaily.co.uk/2024/02/angel-drainer-targets-users-with-malicious-smart-contract

https://malware.news/t/the-rising-threat-of-phishing-Attack-with-crypto-drainers/77000

https://research.checkpoint.com/2023/the-rising-threat-of-phishing-Attack-with-crypto-drainers/

https://www.blockaid.io/blog/emerging-Attack-vector-restake-farming

https://www.chainalysis.com/blog/2024-crypto-money-laundering/

Mirror
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
10
Thêm vào Yêu thích
2
Bình luận