SETTINGS
Content language
flag Vietnamese
Vietnamese
flag Vietnamese
Vietnamese
Tiếng việt
flag English
English
English
Channel logo
Coin98 Insights
Save
Copy link

Unicats Go Phishing - Hình thức lừa đảo cơ bản nhưng thường bị bỏ qua

Unicats Go Phishing - Hình thức lừa đảo cơ bản nhưng thường bị bỏ qua. Làm cách nào để bào vệ tài sản của chính mình? Bài viết này là dành cho anh em.
Duy Nguyen
Published Oct 13 2020
Updated May 31 2023
14 min read
thumbnail

Sau khi rút mọi quỹ từ những dự án farming đáng ngờ, John Doe nằm ngủ với một cảm giác an tâm với suy nghĩ rằng không có một nguy hại nào có thể xảy đến với anh khi số vốn đều đã được rút về trong ví.

Bất ngờ thay khi tỉnh dậy, John phát hiện một nửa số UNI token đã bị chuyển khỏi ví của mình mà không cần anh phải cấp quyền hay ký giao dịch.

Private key của John được bảo quản rất tốt và không có người khác biết, trong ví cũng không tìm thấy một bug nào. Điều làm việc này trở nên có thể là do một thiếu sót cơ bản nhưng thường bị bỏ qua trong tiêu chuẩn ERC-20, tiêu chuẩn được dùng cho hầu hết các token trong mạng lưới Ethereum.

Bài dịch dưới đây được lấy từ bài gốc trên Medium sẽ giải thích vì sao sự tăng trưởng và thu hút của các Dapp liên quan đến DeFi cùng với việc bỏ qua những cảnh báo có thể khiến người dùng mất hết số vốn của mình.

Nếu muốn đi sâu và tìm hiểu bản chất của việc hack này, bài viết này là dành cho anh em!

Giai đoạn 1: Lừa đảo 

Unicats được ra mắt như một bản spin-off của những dự án DeFi nổi tiếng như Sushiswap. Không bất ngờ khi họ còn dùng một frontend giống hệt Sushiswap. Người dùng biết đến UniCats được hứa sẽ nhận về token MEOW nếu họ stake token UNI hoặc UNI LP trên UniCats. Lý do UNI được chọn để stake không phải là do trùng hợp.

Có rất nhiều người dùng có một lượng lớn UNI miễn phí qua đợt airdrop vừa qua và đó có lẽ là lí do khiến họ ít quan tâm hơn đến việc mạo hiểm số tài sản đó để tìm một cơ hội kiếm tiền mới. 

John Doe là một trong số những người tham gia protocol. Với xu hướng FOMO mọi dự án mới liên quan đến Farm và tư tưởng “audits are for noobs”. Điều này cũng dễ hiểu vì sao anh không bỏ qua cơ hội này. Jhon deposit 17,000 UNI (~50,000 đô) và một lần khác deposit thêm 15,000 UNI (~45,000 đô) vào contract của UniCats.

Điều đầu tiên Jhon cần làm đương nhiên là cấp quyền truy cập không giới hạn cho contract của UniCat với token UNI. Jhon có lẽ đã thấy dòng tin ghi rõ điều đó nhưng có lẽ tâm lý phải là người đầu tiên sử dụng đã làm anh ấy không để tâm đến việc này.

Ban đầu, mọi thứ vẫn ổn. Jhon bắt đầu farm và thu về một lượng MEOW. Sau ngày đầu farm, Jhon thực tế đã rút ra mọi UNI từ contract của Unicats. Cho đến lúc này, không có rủi ro, không có sai sót. Biết được lúc nào nên từ bỏ là một đức tính tuyệt vời.

Jhon chắc hẳn đã cảm thấy rất tuyệt, đi ngủ với lợi nhuận mà anh ấy kiếm được và quỹ của anh ấy đã an toàn khỏi những trường hợp rug pull tiềm năng.

Những người dùng khác không được may mắn như Jhon. Thứ duy nhất họ tìm thấy là một pool cạn khi họ nhận ra đây là một vụ lừa đảo và cố gắng để rút lại quỹ của mình.

Bài post của đội phát triển UniCats trên nhóm Telegram của họ trước khi xóa tài khoản. 

Vẫn như các kịch bản lừa đảo quen thuộc. Một dự án đáng ngờ thực hiện hành vi lừa đảo, đội phát triển nói “có bug trong dự án” hay là “chúng tôi đã bị hack” và họ nói họ đã “cố gắng hết sức”, bây giờ cần lấy “những gì thuộc về mình”. Và cũng có một câu nói quen thuộc rằng họ mong muốn dự án thành công trong tương lai và “chuyển giao dự án tuyệt vời này cho cộng đồng”... Ngay trước khi xóa tài khoản và biến mất với số tiền họ có được. Anh em thấy đấy… một kịch bản quen thuộc.

Jhon may mắn khi tránh được sự mất mát to lớn này ngay trước khi sự việc xảy ra. Nhưng anh ấy không thể ngờ rằng, câu chuyện vẫn chưa kết thúc ở đây và những điều khoản ngày xưa anh chấp thuận sẽ quay lại ám anh một lần nữa.

Một tuần trôi qua, người dùng của UniCats đã chấp nhận số phận của họ. Nhưng vào lúc này, Whiskers quyết định đưa hành vi lừa đảo đi thêm một bước nữa.

Giai đoạn 2: Lòng tham của những chú mèo

Những staking contract của UniCats có một tính năng khá thú vị là setGovernance. Một ai đó đọc lướt qua những contract chưa được audit (đã được đưa ra cộng đồng) có lẽ sẽ bỏ qua phần này vì có admin key và địa chỉ governance là một điều khá phổ biến trong các smart contract.

Tính năng setGovernance trong UniCats

Tính năng setGovernance mà Whisker đã sử dụng để rút quỹ trực tiếp từ tài khoản người dùng sẽ nhận hai thông số, một địa chỉ và một vài data. Mọi việc Whiskers cần làm chỉ là ghi thêm địa chỉ UNI token vào _governance và thêm vào data.

transferFrom(from: Jhon Doe, to: UniCats, amount: 10,000).

Việc này khởi xướng một lệnh đến contract của UNI, yêu cầu chuyển tiền trên danh nghĩa của Jhon đến contract của UniCats.

Người đưa ra lệnh transferForm trong trường hợp này, contract của UniCats, mặc định rằng Jhon đã hoàn toàn cho phép sử dụng số UNI của anh ấy. Lệnh transferForm được dùng để chuyển UNI của Jhon vào trong contract với mục đích đem đi stake, bây giờ lại được dùng để ăn cắp quỹ từ contract của họ.

Khi contract của UNI nhận được lệnh này nó không gặp trở ngại nào trong việc xử lý yêu cầu. Mọi bước đều được thông qua vì chính Jhon đã đồng ý cho contract sử dựng quỹ của mình. Những quỹ đó được chuyển từ tài khoản Jhon vào contract của UniCats và từ đó nằm trong bàn tay của Whisker.

Điều quan trọng ở đây là nguồn gốc của lệnh này trong contract của UniCats chính là do sự chấp thuận của John. Whiskers thông qua UniCats có thể lấy hết UNI của Jhon mà không phải chịu bất kỳ sự can thiệp nào từ phía anh.

Một thông điệp quan trọng là sự chấp thuận vô thời hạn này không biến mất khi anh em có 0 token trong tài khoản. Tài khoản với sự chấp thuận vô thời hạn vẫn sẽ bị đe dọa cho đến khi việc chấp thuận đó bị thu hồi hoặc tài khoản đó bị bỏ đi.

Thực tế, một người dùng khác của contract cũng bị mất 10,000 UNI (~30,000 đô) với một quy trình tương tự. Anh không những đã chuyển tiền ra khỏi UniCats mà thậm chí còn chuyển hoàn toàn ra khỏi tài khoản của mình (nghĩa là không có gì để lấy). Nhưng không may cho anh ta đã chuyển lại một lượng UNI về lại tài khoản, ngay trước khi chúng bị cướp đi bởi Whiskers.

Một nạn nhân khác đã rút UNI và lại chuyển lại chúng lúc sau 

Để che dấu manh mối, Whiskers thậm chí còn ngay lập tức đổi UNI cho ETH bằng chính tài khoản khai thác. ETH được chuyển về một tài khoản của Whiskers và sau đó được deposit vào Tornado Cash (một dịch vụ giúp che dấu danh tính), theo từng gói 100 ETH.

Điều này khiến việc lần ra danh tính của Whiskers gặp rất nhiều khó khăn. Đi xa hơn nữa, Whiskers thực hiện việc hack qua nhiều tài khoản riêng biệt. Tất cả đều được đi qua Tornado Cash. Chỉ có tài khoản admin của UniCats được cấp quyền và hiển nhiên Whiskers đã có quyền sở hữu của các tài khoản, trước khi chuyển mục tiêu sang các nạn nhân tiếp theo.

Whiskers được chấp thuận quyền sử hữu của tài khoản UniCats

Mặc dù Whiskers đã làm nhiều việc để che dấu manh mối của mình, vẫn có những lỗ hổng giúp tìm ra hắn.

Những con mèo tập duyệt trước và để lại manh mối

Bằng cách nhìn trực tiếp vào data field của contract gửi các lệnh đến UniCats (thông qua Dune Analytics), chúng ta có thể thấy rằng trước khi thực hiện giai đoạn 2 của việc hack, Whiskers đã thực sự tập duyệt trước khi tiến hành hack on-chain.

Để làm điều đó, Whiskers tạo ra contract và tài khoản admin riêng biệt (lấy từ Torando.cash) để đảm bảo việc hack thành công.

Trong giao dịch đó, Whiskers cố gắng để lấy một lượng nhỏ UNI trực tiếp từ contract, sử dụng chính lệnh setGovernance được dùng trong vụ hack, lấy ra 2.75UNI (~9 đô). Việc này tương tự như giai đoạn một, khi các quỹ từ chính contract của UniCats bị bòn rút.

Sau đó, tài khoản này thực hiện thêm một giao dịch thử nữa, lạm dụng điểm yếu của baDAPProve (việc sử dụng dapp phải kết nối và cấp quyền với tài sản của mình từ đó đối tượng xấu có thể lợi dụng để gây những tác động xấu đến tài khoản kể cả khi không sử dụng dapp đó nữa), rút ra một lượng nhỏ UNI từ tài khoản Tornando cash. Sau đó chuyển trực tiếp thành ETH, tương tự giai đoạn 2 của việc hack..

Việc luyện tập này diễn ra trong một vài giờ trước khi thực hiện “trực tiếp” lên nạn nhân trong giai đoạn 2. Mặc dù không có liên kết giữa địa chỉ luyện tập và địa chỉ của Whisker, cả 2 đều tiến hành theo cùng một phương thức và thực hiện việc hack một cách hoàn toàn giống nhau. Thế nên gần như chắc chắn hai tài khoản do một người sử dụng.

Theo dấu của địa chỉ luyện tập ở đây. Tài khoản dường như thuộc Binance, vì vậy vẫn có cơ hội để truy tìm thủ phạm thông qua việc này.

Hậu quả

Thông qua việc rút trực tiếp từ contract của UniCats, Whiskers đã lấy được 17,000 UNI (~50,000 đô) cùng đó là stake các token LP của cặp UNI/ETH trên Uniswap, SushiSwap và Balancer. Xem toàn bộ giao dịch tại đây

Trong giai đoạn 2, lợi dụng baDAPProve, Whiskers đã kiếm về 60,000 UNI (~180,000 đô). Từ gần 30 tài khoản với thiệt hại lớn nhất thuộc về Jhon Doe, mất tổng cộng 37,000 UNI trị giá gần 120,000 đô vào thời điểm đó.

Đúng vậy, số bị tiền bị lấy từ tài khoản của họ thậm chí còn nhiều hơn số tiền mà họ đã stake trong protocol, cho dù Jhon không deposit toàn bộ UNI của mình, phần còn lại trong tài khoản vẫn bị lấy đi qua điểm yếu trong contract.

Tất cả mọi tài khoản đã tương tác với UniCats mà chưa từ chối cấp quyền sử dụng của UniCats với token của họ vẫn dễ bị tấn công, kể cả những người chỉ chấp thuận mà chưa gửi bất kỳ một khoản tiền nào.

Bước tiếp

Jhon Doe trong câu chuyện trên là một tay chơi lão luyện về DeFi, anh ta có hơn 1600 giao dịch trong hơn một năm qua. John Doe có lẽ hiểu việc anh đang làm và sự thực là anh ấy đã có thể rút vốn trước khi việc rug pull xảy ra.

Tuy nhiên việc các hệ thống ngày càng trở nên phức tạp theo thời gian. Kinh nghiệm từ trước vẫn là chưa đủ để có thể bảo đảm cho chính bản thân mình.

Vụ việc này là kết quả của một cơn bão hoàn hảo. Một tiêu chuẩn yêu cầu sự chấp thuận mà rất ít người để ý hoặc hiểu ý nghĩa đằng sau nó. Một môi trường FOMO khi người dùng cố gắng trở thành những người được hưởng lợi nhiều nhất bằng cách tham gia các contract đầy rủi ro, liên tục tìm kiếm những đồng YFI mới.

Những người dùng tiếp tay bằng việc bấm “next” trên frontend, cuối cùng một tên hacker tận dụng được yếu tố này và sự phức tạp mà các hệ thống thường cố giấu.

Quá đơn giản để có thể khiến người dùng thực hiện việc chấp thuận vô thời hạn với một token. Mình không ngạc nhiên nếu những vụ việc như trên sẽ bắt đầu mọc ra như nấm sau cơn mưa.

Phụ lục: Làm cách nào để bảo vệ bản thân 

Nguồn gốc của vấn đề bắt đầu từ cách hoạt động của chuẩn ERC20 và những hạn chế mà nó mang lại.

Mặc dù các tiêu chuẩn khác có thể không có những vấn đề này, ERC20 vẫn là chuẩn phổ biến và ứng dụng rộng rãi nhất của hầu hết các token, và phải rất lâu để có thể thay thế.

Hiểu cách thức hoạt động của nó có thể giúp anh em bảo vệ được túi tiền của mình.

Từ bây giờ, hãy dùng những cách này khi anh em tương tác với các Dapp và smart contract đáng ngờ trong tương lai:

  • Phải nghiên cứu và hiểu về một Dapp trước khi tương tác với chúng. Không phải tất cả đều an toàn. Kể cả không có baDAPProve, một vài người dùng vẫn mất tiền khi stake token của họ trên contract.
  • Đừng chấp thuận dùng số lượng token nhiều hơn lượng mà anh em muốn mạo hiểm. Các ví như MetaMask có lựa chọn điều chỉnh lượng token mà anh em muốn chấp thuận. Khi gặp một Dapp không đáng tin, sử dụng tùy chọn trên sẽ chỉ chấp thuận và cho phép Dapp có quyền hạn với lượng tài sản mà anh em cho phép.
  • Để thu hồi quyền của các Dapp với token của mình, anh em có thể tìm hiểu và sử dụng một trong những công cụ sau:
  1. approved.zone
  2. revoke.cash
  3. tac.dappstar.io

Các Dapp và chuẩn ERC20 sẽ còn tồn tại trong một thời gian dài, vì vậy điều tốt nhất anh em có thể làm để bảo vệ tài sản của mình chính là học và hiểu cách mà hệ thống hoạt động.

Thân ái!

RELEVANT SERIES