Decrypted #05 | Tại sao Flash Loans là hình thức tấn công kiểu mới?
Flash Loans trở thành tâm điểm trong thời gian gần đây khi nhiều sự cố đánh cắp tiền từ các giao thức DeFi diễn ra thường xuyên hơn từ Harvest Finance bị tấn công lấy mất hơn 33 triệu USD đến sự việc gần đây nhất là OUSD đã bị khai thác 7 triệu USD.
Đứng theo lập trường của hacker thì cuộc tấn công này như một cơ hội tuyệt vời khi từ một người không một xu dính túi ngay lập tức vay hàng trăm nghìn USD theo giá trị của ETH. Sau đó chuyển nó qua các giao thức on-chain dễ bị tấn công rồi trích xuất hàng trăm USD bỏ túi sau đó trả lại khoản vay của họ. Tất cả sự việc này diễn ra chớp nhoáng chỉ trong một giao dịch Ethereum.
Chúng ta không biết những kẻ tấn công này là ai hoặc họ đến từ đâu. Họ đều bắt đầu không có gì và ra đi với giá trị hàng trăm nghìn USD và không để lại bất kỳ dấu vết để xác định danh tính.
[toc]
Flash Loans là gì?
Khái niệm về flash loans lần đầu được Max Wolff, người sáng tạo ra Marble Protocol “gọi mặt xưng tên" vào năm 2018.
Flash Loans thường được sử dụng cho Ethereum hoặc ERC20 chỉ được vay trong khoảng thời gian cần thiết để hoàn thành một block giao dịch trên blockchain. Miễn là khoản vay được trả lại trước khi block giao dịch tiếp theo bắt đầu thì người vay sẽ không phải chịu phí lãi suất.
Nếu như người cho vay (lender) truyền thống chịu hai hình thức rủi ro: Rủi ro vỡ nợ hoặc rủi ro về tính thanh khoản thì Flash Loans lại giải quyết được hai bài toán này. Về cơ bản, flash loans hoạt động như sau:
Tôi cho anh vay với số tiền anh muốn trong một giao dịch duy nhất. Nhưng khi kết thúc giao dịch này anh phải trả lại tôi ít nhất số tiền tôi đã cho anh vay. Nếu anh không trả thì tôi sẽ tự động khôi phục giao dịch của anh, tức là xem như mọi chuyện chưa hề bắt đầu.
Điều này chỉ tồn tại trên Blockchain. Anh em không thể thực hiện flash loans trên BitMex. Vì smart contract có thể xử lý từng giao dịch nên mọi thứ xảy ra trong giao dịch đều thực hiện tuần tự. Anh em có thể xem đây là “thời gian đóng băng” giao dịch của mình trong khi giao dịch đang thực hiện.
Những người cho vay truyền thống được bồi thường hai thứ: rủi ro mà họ đang gánh chịu (rủi ro vỡ nợ và rủi ro kém thanh khoản) và chi phí cơ hội của số vốn mà họ cho vay.
Flash loans thì khác. Flash loans thực sự không có rủi ro và không có chi phí cơ hội! Điều này là do người đi vay “frozen time” trong suốt thời gian flash loans của họ vì vậy vốn của hệ thống không bao giờ gặp rủi ro và không bao giờ bị cản trở, do đó nó không thể kiếm được lãi suất ở nơi khác (tức là nó không có chi phí cơ hội).
Điều này có nghĩa là, không có chi phí để trở thành flash lender. Nói thế thì flash loans mất bao nhiêu tại điểm cân bằng?
Về cơ bản, flash loans miễn phí. Hay nói đúng hơn, một khoản phí đủ nhỏ để khấu hao chi phí bao gồm thêm 3 dòng code để tài sản có thể cho vay nhanh.
Flash loans không thể tính lãi theo cách truyền thống, vì khoản vay có hiệu lực trong thời gian bằng không (bất kỳ APR nào * 0 = 0). Và tất nhiên, nếu các tổ chức cung cấp flash loans tính lãi suất cao hơn, họ sẽ nhanh chóng bị các flash lending pool khác tính phí lãi suất thấp hơn.
Một số dự án hiện đang áp dụng flash loans tính phí bằng 0 như dYdX hay AAVE tính phí 0.09% trên tiền gốc đối với flash loans.
Đọc thêm: Flash Loans Attack
Flash loans được sử dụng để làm gì?
Flash loans ban đầu được biết đến chủ yếu sử dụng để giao dịch chênh lệch giá. Marble, người tạo nguồn định nghĩa của Flash loans nói rằng:
"Với flash loans, nhà giao dịch có thể vay từ ngân hàng Marble, mua token trên một DEX, bán token trên một DEX khác với giá cao hơn, trả nợ ngân hàng và bỏ túi lợi nhuận chênh lệch giá chỉ trong một giao dịch".
Thật sự hầu hết các khoản vay đều được sử dụng cho mục đích này.
Nhưng khối lượng rất nhỏ. AAVE chỉ có hơn 10 nghìn đô la vay kể từ khi thành lập. Điều này là rất nhỏ so với thị trường chênh lệch giá và thanh lý trên DeFi.
Cũng do hầu hết các giao dịch chênh lệch giá được thực hiện bởi các nhà kinh doanh chênh lệch giá cạnh tranh chạy các chương trình phức tạp. Họ tham gia vào các cuộc đấu giá gas ưu tiên on-chain và sử dụng token gas để tối ưu hóa phí giao dịch. Đó là một thị trường rất cạnh tranh - những người này hoàn toàn hạnh phúc khi giữ một số token trên bảng cân đối của họ để tối ưu hóa thu nhập.
Mặt khác, vay trên AAVE tốn khoảng 80K gas và tính phí 0,09% tiền vốn, một mức giá quá đắt để trả cho một nhà kinh doanh chênh lệch giá cạnh tranh trên mức lợi nhuận nhỏ. Trên thực tế, trong hầu hết các người giao dịch chênh lệch giá AAVE, người đi vay cuối cùng phải trả nhiều khoản phí cho lending pool hơn là họ nhận về.
Về lâu dài, các nhà kinh doanh chênh lệch giá không có khả năng sử dụng flash loans trừ những trường hợp đặc biệt.
Nhưng flash loans có các trường hợp sử dụng khác hấp dẫn hơn trong DeFi. Một ví dụ là các khoản vay tái cấp vốn.
Ví dụ: Giả sử anh em có Maker vault (CDP) với $100 ETH bị khóa trong đó và anh em đã vay 40 DAI từ nó. Vì vậy, anh em đã có một vị thế ròng $60 trừ đi khoản nợ. Bây giờ anh em muốn tái cấp vốn vào Compound để có lãi suất tốt hơn.
Thông thường thì cần phải mua lại 40 DAI ở bên ngoài, có thể là trên sàn giao dịch đó để nạp CDP vì nó yêu cầu một số vốn trả trước. Thay vào đó, anh em có thể vay nhanh 40 DAI, đóng 100 đô CDP, gửi 60 đô ETH đã mở khóa vào Compound, chuyển đổi 40 đô ETH khác trở lại thành DAI thông qua Uniswap và sử dụng số tiền đó để trả flash loans.
Đọc thêm: Uniswap là gì? Tổng quan về DEX độc đáo của giới DeFi Uniswap
Các cuộc tấn công flash loans có ý nghĩa lớn đối với bảo mật
Những sự cố đầu tiên bắt nguồn từ vụ hack bZx và có lẽ đây là ngọn đuốc châm ngòi cho những cuộc tấn công tiếp theo.
Có hai lý do chính khiến flash loans đặc biệt hấp dẫn đối với những kẻ tấn công.
Nhiều cuộc tấn công đòi hỏi rất nhiều vốn từ trước (chẳng hạn như các cuộc tấn công thao túng oracle).
Flash loans giảm thiểu rủi ro bại lộ cho những kẻ tấn công. Nếu mình có ý tưởng về cách thao túng oracle với 10 triệu đô Ether, ngay cả khi mình sở hữu ngần ấy Ether, mình có thể không muốn mạo hiểm với số vốn của mình. ETH của mình sẽ bị ảnh hưởng, các sàn giao dịch có thể từ chối tiền gửi của mình và tiền sẽ khó tuồng đi hơn. Khá là rủi ro! Nhưng nếu mình vay nhanh 10 triệu đô la, thì ai quan tâm? Tất cả đều ngược lại. Nó không giống như pool thế chấp của dYdX sẽ bị coi là bị ảnh hưởng xấu vì đó là nơi xuất phát khoản vay của mình.
Đọc thêm: Oracle là gì? Tầm quan trọng & xu hướng của Oracle trong tương lai
Anh em có thể không thích danh sách đen sàn giao dịch là một phần của mô hình bảo mật blockchain ngày nay. Nó khá bí bách và tập trung. Nhưng thực tế thì khá quan trọng cho biết tính toán đằng sau những cuộc tấn công này.
Trong whitepaper về Bitcoin, Satoshi đã tuyên bố rằng Bitcoin an toàn trước các cuộc tấn công vì:
“[Kẻ tấn công] nên thấy việc chơi theo luật sẽ có lợi hơn […] hơn là phá hoại hệ thống và giá trị tài sản của chính mình.”
Với flash loans, những kẻ tấn công không còn cần phải bỏ nhiều tiền của cho trò chơi. Flash loans thay đổi đáng kể rủi ro đối với kẻ tấn công.
Và hãy nhớ, các khoản flash loans có thể chồng chất! Theo giới hạn gas, anh em có thể tổng hợp mọi khoản tiền có thể cho vay nhanh trong một giao dịch duy nhất (lên tới 50 triệu đô la) và mang tất cả số vốn đó xuống một hợp đồng dễ bị tấn công. Đó là một bộ nhớ khủng 50 triệu đô la mà bây giờ bất kỳ ai cũng có thể tham gia miễn là có tiền. Thật đáng sợ!
Tất nhiên, bây giờ anh em sẽ không thể tấn công một giao thức nếu chỉ có nhiều tiền. Nếu DeFi an toàn như người ta đã tuyên bố, tất cả điều này sẽ không thành vấn đề, loại giao thức nào không an toàn trước các whale? Không ngoại trừ việc đó chỉ là sơ suất.
Tuy nhiên, chúng ta có thể thấy bản thân Ethereum có thể bị tấn công 51% với giá dưới 200 nghìn đô la / giờ. Nếu mô hình bảo mật của riêng Ethereum về cơ bản được xây dựng xung quanh các hạn chế về vốn, thì tại sao chúng ta lại nhanh chóng đặt điều cho các ứng dụng DeFi có thể bị tấn công thành công chỉ với giá 10 triệu đô la?
Làm sao giảm thiểu các cuộc tấn công flash loans?
Giả sử mình là một giao thức DeFi và mình muốn tránh bị tấn công bằng flash loans. Câu hỏi đầu tiên là liệu mình có thể phát hiện người dùng tương tác với mình có đang sử dụng flash loans hay không?
Câu trả lời đơn giản là không!
EVM không cho phép anh em đọc bộ nhớ từ bất kỳ hợp đồng nào khác. Do đó, nếu anh em muốn biết điều gì đang diễn ra trong một hợp đồng khác, thì trên hợp đồng đó sẽ cho anh em biết.
Vì vậy, nếu anh em muốn biết liệu hợp đồng flash loans có đang được sử dụng hay không, anh em phải hỏi trực tiếp hợp đồng. Ngày nay, nhiều giao thức cho vay không phản hồi các truy vấn như vậy (và không có cách nào để thực thi điều mà một người cho vay nhanh thực hiện).
Thêm vào đó, ngay cả khi anh em đã cố gắng kiểm tra bất kỳ truy vấn nào như vậy cũng có thể dễ dàng bị định hướng sai khi sử dụng hợp đồng ủy quyền hoặc bằng cách liên kết giữa các nhóm cho vay nhanh. Nói chung là không thể nói một cách tổng quát liệu người gửi tiền có đang sử dụng flash loans hay không.
Cũng giống như việc ai đó gõ cửa và đứng trước mặt anh em với vali chứa 10 triệu đô, thì anh em cũng không thể biết đó có phải là tiền cửa họ hay không. Đúng không?
Làm thế nào được bảo vệ khỏi các flash loans attack?
Ngừng cung cấp dịch vụ Flash Loans
Nói một cách nghiêm túc, việc cố gắng yêu cầu các tổ chức cho vay ngừng cung cấp dịch vụ flash loans cũng giống như cố gắng ngăn chặn ô nhiễm tiếng ồn.
Việc cung cấp các khoản vay nhanh tùy thuộc vào lợi ích cá nhân của mọi giao thức và có những lý do chính đáng khiến người dùng của họ muốn có chức năng này. Vì vậy, chúng ta có thể loại bỏ điều này một cách an toàn.
Ép buộc các giao dịch quan trọng kéo dài hai khối
Hãy nhớ rằng, flash loans cho phép anh em vay vốn trong khoảng thời gian của một giao dịch duy nhất. Nếu anh em yêu cầu một giao dịch đòi hỏi nhiều vốn kéo dài hai khối, thì người dùng phải vay ít nhất hai khối, đánh bại mọi cuộc tấn công flash loans. (Lưu ý: Để điều này hoạt động, người dùng phải khóa giá trị của họ giữa hai khối, ngăn họ hoàn trả khoản vay).
Rõ ràng là điều này dẫn đến một sự cân bằng về UX: Có nghĩa là các giao dịch sẽ không còn đồng bộ. Nó hấp dẫn người dùng và cũng trông khá bảo mật hơn.
Nhiều nhà phát triển phàn nàn về các hoạt động hợp đồng thông minh không đồng bộ, chẳng hạn như tương tác với giao tiếp layer 2 hoặc cross-sharding trong Ethereum 2.0.
Trớ trêu thay, sự không đồng bộ thực sự làm cho các hệ thống này an toàn trước các cuộc tấn công flash loans, vì bạn không thể đi qua một phân đoạn hoặc một layer 2 trong một giao dịch nhỏ. Điều này có nghĩa là không có cuộc tấn công flash loans trên các phân đoạn ETH 2.0 hoặc chống lại các DEX ở layer 2.
Yêu cầu bằng chứng trực tuyến về số dư trước đó của người dùng
Chúng ta có thể đánh bại các cuộc tấn công flash loans nếu có một số cách để phát hiện số dư thực của người dùng là bao nhiêu - tức là số dư của họ là bao nhiêu trước khi họ vay.
Trước khi người dùng tương tác với giao thức của một nền tảng, nền tảng yêu cầu bằng chứng Merkle chứng minh rằng vào cuối khối trước, họ có đủ số dư để tính cho số vốn mà họ hiện đang sử dụng. Nền tảng cần theo dõi điều này cho từng người dùng trong mỗi khối.
Giải pháp này có một số vấn đề phức tạp: việc xác minh các bằng chứng on-chain này cực kỳ đắt đỏ trên chuỗi và không người dùng nào có suy nghĩ đúng đắn muốn tạo ra chúng và trả phí gas cho toàn bộ điều này. Ngoài ra, người dùng có thể đã thay đổi số dư của họ trước đó trong cùng một khối vì những lý do hoàn toàn chính đáng. Vì vậy, về mặt lý thuyết, nó có một số giá trị, nhưng nó không phải là một giải pháp thực tế..
Không có giải pháp nào có thể ngăn chặn hoàn toàn các cuộc tấn công flash loans nhưng hai ứng dụng cụ có thể giảm nhẹ các cuộc tấn công này là: oracle về giá dựa trên thị trường và token quản trị.
Đối với oracle về giá dựa trên thị trường như Uniswap hoặc OasisDEX, các cuộc tấn công flash loans khiến anh em không thể sử dụng mức giá giữa thị trường hiện tại như oracle.
Kế hoạch của những kẻ tấn công là di chuyển giá thị trường trung bình trong một giao dịch duy nhất và tạo ra một sự cố chớp nhoáng, làm hỏng oracle về giá.
Giải pháp tốt nhất ở đây là sử dụng trung bình có trọng số của các khối X cuối cùng thông qua TWAP hoặc VWAP. Uniswap v2 sẽ cung cấp giải pháp này. Ngoài ra còn có Polaris, một cách tiếp cận tổng quát để cung cấp đường trung bình cho các giao thức DeFi, nhưng Polaris đã bị tạm ngưng nhiều năm.
Quản trị on-chain thường được xác định bằng việc bỏ phiếu có trọng số bằng đồng coin giữa những người nắm giữ token quản trị. Nhưng nếu những token quản trị đó nằm trong một nhóm flash loans, thì bất kỳ kẻ tấn công nào cũng có thể lấy một đống tiền khổng lồ và dựa vào bất kỳ kết quả nào chúng muốn.
Tất nhiên, hầu hết các giao thức quản trị đều yêu cầu khóa token trong thời gian bỏ phiếu, điều này giúp đánh bại các cuộc tấn công flash loans. Nhưng một số hình thức bỏ phiếu không yêu cầu điều này, chẳng hạn như bỏ phiếu carbon hoặc hợp đồng điều hành của Maker. Với các cuộc tấn công flash loans hiện nay, các hình thức bỏ phiếu này nên được coi là hoàn toàn bị phá vỡ.
Hợp lý nhất là token quản trị hoàn toàn không thể cho vay nhưng nó phụ thuộc vào thị trường. Do đó, tất cả các hành động quản trị nên yêu cầu khóa để ngăn chặn các cuộc tấn công flash loans. Token COMP mới của Compound tiến thêm một bước bằng cách tính thời gian cho tất cả các phiếu bầu của giao thức, làm suy yếu tức thì ngay cả cuộc tấn công cho vay thường xuyên chống lại token quản trị.
Nói rộng hơn, tất cả các token quản trị phải có thời gian. Timelock thực thi tất cả các quyết định quản trị phải đợi một khoảng thời gian trước khi chúng có hiệu lực (đối với timelock của Compound là 2 ngày). Điều này cho phép hệ thống phục hồi sau bất kỳ cuộc tấn công quản trị nào không lường trước được.
Ý nghĩa trong dài hạn
Mình tin rằng các cuộc tấn công bZx đã thay đổi mọi thứ.
Đây sẽ không phải là cuộc tấn công flash loans cuối cùng. Cuộc tấn công bZx thứ hai là cuộc sao chép đầu tiên và mình nghi ngờ nó sẽ gây ra một làn sóng tấn công trong những tháng tới.
Và điều đó đã hoàn toàn xảy ra, liên tiếp các vụ tấn công thông qua flash loans xảy ra như Harvest Finance (33.8 triệu USD), Value DeFi (7 triệu USD), Akro (2 triệu USD), Cheese Bank (3.3 triệu USD) và gần đây nhất là OUSD (7 triệu USD).
Lời kết
Đó có lẽ là một trong số các động lực để Ethereum nhanh chóng chuyển sang Ethereum 2.0. DeFi không ổn định trên PoW chain, nếu các giao thức DeFi tồn tại trên các phân đoạn riêng biệt trên Ethereum 2.0, chúng sẽ không dễ bị tấn công flash loans.
Flash loans attack cho chúng ta một lời nhắc nhở nhỏ nhưng hữu ích rằng mọi nền tảng chỉ mới bắt đầu, cần rất nhiều thời gian nữa mới có được kiến trúc bền vững để xây dựng hệ thống tài chính trong tương lai.
Bài viết được dịch và có chỉnh sửa từ bài viết gốc được xuất bản bởi Dragonfly Research.