Trong vài tuần qua, người dùng giao thức blockchain EOS đã gặp phải sự cố định kỳ với quyền truy cập mạng. Một bài báo gần đây của nhà phát triển hợp đồng thông minh và kỹ sư bảo mật Dexaran đã mô tả gốc rễ rõ ràng của vấn đề: một kỹ thuật rẻ tiền cho phép tin tặc làm “nghẽn” mạng – hoặc đưa nó vào chế độ hiệu quả thấp – chỉ với vài đô la giá trị của EOS.
Dường như, việc khai thác đó đã giúp một hacker đánh cắp hơn 110.000 đô la tiền điện tử từ một ứng dụng đánh bạc của EOS tên EOSPlay vào đầu tháng 9. Tuy nhiên, các giám đốc điều hành của công ty mẹ EOS, Block.one, không hề bối rối, cho rằng mạng đang hoạt động “đúng quy chuẩn”.
Khái niệm cơ bản về EOS: Chế độ quản trị, stake và tắc nghẽn
EOS.io là một giao thức hợp đồng thông minh được hỗ trợ bởi blockchain để phát triển và lưu trữ các ứng dụng phi tập trung (DApp). Nó sử dụng mô hình đồng thuận được gọi là PoS được ủy quyền (DPoS) và được điều chỉnh theo Thỏa thuận người dùng EOS (EOS User Agreement – EUA).
Theo thỏa thuận, các thay đổi mạng có thể được thực hiện khi có sự đồng thuận giữa ít nhất 15 trong số 21 nhà sản xuất khối – tức là, các thực thể độc lập chịu trách nhiệm xử lý các khối trên blockchain của EOS.
Giao thức được hỗ trợ bởi tiền điện tử cùng tên, hiện là tài sản lớn thứ bảy tính theo tổng vốn hóa thị trường. Các token đó là cốt lõi của cơ chế stake tài nguyên in-built, là một trong những tính năng đặc biệt của EOS. Bất cứ khi nào một giao dịch được gửi tới mạng EOS, nhà sản xuất khối phải xử lý nó.
Khoảng thời gian (tính bằng micrô giây) mà nhà sản xuất khối cần có để xác thực giao dịch được gọi là CPU. Nói một cách đơn giản, người dùng và nhà phát triển EOS có thể có quyền truy cập vào tài nguyên băng thông và CPU trên toàn chuỗi bằng cách stake token. Các khối được sản xuất cứ sau 500 mili giây. Mỗi nhà sản xuất khối có 200 mili giây để xác thực khối. 300 mili giây còn lại để phân phối trên toàn mạng.
Đáng chú ý, trong giới hạn 200 mili giây, cũng có ngưỡng phần trăm giới hạn tốc độ trên toàn mạng. Nói cách khác, khi một khối đạt đến giới hạn 10% trong tổng số 200 mili giây CPU được phép cho mỗi khối, nó sẽ kích hoạt thuật toán phân bổ CPU để chuyển sang chế độ “tắc nghẽn”.
“Trước khi đạt đến giới hạn này, tất cả người dùng có thể tự do giao dịch trên mạng vì nó không ở chế độ tắc nghẽn. Sau khi giới hạn này được thông qua, người dùng sẽ được điều chỉnh trở lại tỷ lệ pro-rata của họ trong tổng số giao dịch EOS được stake trên mỗi CPU”, tác giả giải thích.
Theo một bài viết khác của EOS Canada, là nhà sản xuất khối lớn trong mạng blockchain EOS, nếu có 1.000 token được stake cho CPU tại một thời điểm nhất định và một tài khoản có 20 token được stake thì tài khoản đó sẽ được đảm bảo 2% tổng dung lượng CPU của mạng.
Tuy nhiên, nếu mạng không đạt đến ngưỡng giới hạn tốc độ được kích hoạt (không ở chế độ tắc nghẹt), nó cho phép tài khoản đẩy các giao dịch vượt quá mức bảo đảm 2%. Khi đó, tài khoản không thể vượt quá mức phân bổ. Ngoài ra, trong giai đoạn “tắc nghẽn”, lượng CPU của mỗi người dùng bắt đầu giảm cho đến khi mọi bên tắc nghẽn hết CPU và ngừng thực hiện các hành động tiêu thụ CPU.
Daniel Larimer, đồng sáng lập của EOS và giám đốc công nghệ tại Block.one, đề cập đến cơ chế này như là “một lợi ích miễn phí” trên mạng.
Owning and staking #eos gives users a prorata share of available bandwidth. When people don’t use their share it is redirected to others on a prorata basis. During heavy use users no longer receive this free benefit.
— Daniel Larimer (@bytemaster7) 14 tháng 9, 2019
“Sở hữu và stake EOS cung cấp cho người dùng một phần pro-rata của băng thông có sẵn. Khi mọi người không sử dụng phần đó, nó được chuyển hướng đến những người khác trên cơ sở pro-rata. Trong quá trình sử dụng nhiều, người dùng không còn nhận được lợi ích miễn phí này”.
Vấn đề: Chế độ tắt nghẽn quá dễ kích hoạt
Theo Dexaran, vấn đề là chế độ tắc nghẽn quá dễ kích hoạt. Sau khi phân tích, nhà phát triển hợp đồng thông minh nhận thấy mức sử dụng CPU tăng mạnh vào đầu mỗi giờ được cho là do DApp cá cược có tên là EOSBetDice. Dexaran sau đó quyết định đánh giá cần bao nhiêu CPU để đẩy mạng vào tình trạng tắc nghẽn.
Để thử nghiệm, nhà phát triển stake 7.156 EOS cho CPU. Số lượng EOS đó có thể được vay từ các sàn giao dịch tài nguyên với chi phí thấp cho 2 EOS mỗi tháng (dưới 6 đô la). Theo đó, Dexaran sẽ biết được thử nghiệm ảnh hưởng đến người dùng mạng EOS trung bình như thế nào. Kỹ sư bảo mật đã chọn trước 3 tài khoản người dùng ngẫu nhiên đang chơi DApp EOSKnights ngay trước khi phiên bắt đầu.
Sau đó, nhà phát triển đã thực hiện một hợp đồng tạo ra rất nhiều giao dịch bị trì hoãn với độ trễ là 1 giây, mỗi giao dịch tiêu tốn “25 đến 27 ms CPU”. Sau khi sử dụng độc quyền CPU trong toàn bộ 1 phút, hợp đồng đã đẩy mạng EOS vào chế độ tắc nghẽn. Do đó, cả 3 tài khoản được chọn đều hết CPU và “bị đóng băng hoàn toàn”, có nghĩa là tất cả người dùng EOS bình thường không thể tham gia bất kỳ DApps nào trên mạng vào thời điểm đó.
2 phút sau, DApp EOSBetDice – khiến CPU tăng đột biến mỗi giờ như đã nói ở trên và không phụ thuộc vào thử nghiệm – bắt đầu hoạt động theo lịch trình. Bằng cách tiêu thụ nhiều CPU hơn từ mạng tại thời điểm quá tải, nó đã vô tình góp phần làm trầm trọng thêm sự tắc nghẽn do Dexaran khởi xướng. “Càng nhiều CPU được tiêu thụ liên tiếp, chế độ tắc nghẽn sẽ càng nghiêm trọng và càng mất nhiều thời gian để mạng khôi phục lại chế độ bình thường”, nhà phát triển lưu ý.
Kết quả là mạng EOS đã bị tắc nghẽn “sâu hơn” nữa và tính khả dụng của CPU giảm 35 lần cho tất cả người dùng EOS. “Cho dù bạn stake bao nhiêu EOS cho CPU – nếu đã sử dụng hơn 3% thì bạn sẽ bị đóng băng”, theo quan sát của Dexaran.
Sau khi hợp đồng của Dexaran và EOSBetDice gây áp lực cho mạng trong tổng cộng 5 phút, mạng dường như bị tê liệt trong 10 phút tiếp theo. Sau 6 phút trôi qua, nó đã phục hồi phần lớn, nhưng giá cho vay EOS tại các sàn giao dịch tài nguyên vẫn cao hơn khoảng 3 lần so với bình thường, cho thấy mạng yêu cầu số lượng token cao hơn được phân bổ trong CPU vào thời điểm đó do thử nghiệm căng thẳng.
Mạng đã khôi phục hoàn toàn chỉ 30 phút kể từ khi có hành động “gây hại” cuối cùng. Điều đó mang lại cho người dùng “một cửa sổ 25 phút cho đến phiên tắc nghẽn tiếp theo”, vì theo ước tính của nhà phát triển cuộc tấn công có thể được thực hiện mỗi giờ. Nhà nghiên cứu đã kết luận rằng “7000 EOS đủ để đẩy mạng EOS vào chế độ tắc nghẽn trong một khoảng thời gian hợp lý”.
“Phiên bản tắc nghẽn được mô tả sẽ chỉ gây ra sự cố cho (1) người dùng đã sử dụng một phần băng thông CPU nhất định của họ, (2) người dùng có băng thông CPU được stake rất thấp. Phiên tắc nghẽn được mô tả không ảnh hưởng đến (1) DApps nhiều CPU có sẵn, (2) người dùng không tham gia vào bất kỳ hoạt động nào và CPU của họ có sẵn (giả sử rằng những người dùng này có đủ CPU để tạo một tx).
Ngoài ra, Dexaran nhấn mạnh trong khi một số người dùng EOS có thể gọi anh ta là “hacker” do cố tình làm quá tải mạng thì “tôi đang làm điều ngược lại: Tôi đang bảo vệ các khoản đầu tư của tôi và của bạn”.
Đáng chú ý, một vài ngày trước khi thông báo về sự tắc nghẽn của EOS được phát hành, nhà phát triển Christoph Michel đã viết một bài đăng trên blog liên quan đến vụ hack sòng bạc EOSPlay gần đây gây tắc nghẽn mạng, từ đó cho thấy kẻ xấu có thể lợi dụng vấn đề mạng để kiếm tiền.
Theo Michel, kẻ tấn công đã thuê các token EOS từ REX, một thị trường cho thuê tài nguyên CPU và NET, sau đó xếp chúng để tăng cả CPU của mình và EOSPlay để đảm bảo sòng bạc hoạt động – do đó vẫn có thể thanh toán tiền cược của mình. Tiếp theo, tin tặc đã spam mạng với các giao dịch tương tự như Dexaran và chơi một số trò chơi súc sắc trên EOSPlay, đặt cược vào kết quả 50/50. Do EOSPlay nhìn vào hash khối của khối kết quả và lấy hai ký tự đầu tiên – bắt đầu từ bên phải và giữa 0 đến 9 – khi cuộn súc sắc, phải dự đoán hash khối của khối kết quả để giành chiến thắng trong trò chơi.
“Những dự đoán duy nhất chưa biết là các giao dịch được bao gồm trong các khối. Nhưng điều gì xảy ra nếu một người spam và làm nghẽn mạng để không ai khác có thể gửi giao dịch?”, Michel đặt vấn đề.
Theo nhà phát triển, đó chính xác là lý do tại sao kẻ tấn công đã mượn EOS để spam mạng: để có quyền kiểm soát mạng, do đó có thể dự đoán được hash khối và thắng hầu hết cá cược. Trong trường hợp dự đoán sai, kẻ tấn công có thể gửi một giao dịch ngẫu nhiên khác đến khối và do đó có thêm một lần lật đồng xu, cải thiện rất nhiều tỷ lệ cược.
Cuối cùng, tin tặc chỉ sử dụng 300 EOS, trị giá hơn 1.000 đô la, đã thuê với một vài đô la. Đổi lại, có thể mang về hơn 30.000 EOS, tương đương khoảng 110.000 đô la.
Các nhà phát triển của EOS đảm bảo mạng đang “hoạt động đúng quy cách”, không phải tất cả mọi người đều đồng ý với quan điểm này
Các thí nghiệm tắc nghẽn của Dexaran đã không bị chú ý vì một số người dùng đã báo cáo có vấn đề về CPU trên Twitter và Reddit.
Apparently, some Eos users are having some CPU problems
Anyone having similar issues?#eos @reddit_eos pic.twitter.com/w7UoODVgHm
— CryptoTim (@AusCryptoTim) 3 tháng 10, 2019
“Rõ ràng, một số người dùng EOS có vấn đề CPU.
Có ai bị giống vậy không?”
Giám đốc điều hành Denis Bredikhin của Graphene Lab, một nhóm các nhà phát triển hợp đồng thông minh, đã xác nhận người dùng stake EOS dựa trên poker cá cược của DApp cũng đã gặp sự cố trong những tuần qua, mặc dù bản thân ứng dụng không bị xâm phạm. Bredikhin nói:
“Ở lúc đỉnh cao spam, người chơi thậm chí stake 8-10 nghìn EOS phân bổ cho CPU nhưng không thể thực hiện bất kỳ hoạt động nào”.
Theo ông, bắt đầu từ ngày 1/10, người chơi phải phân bổ “lên đến 10.000 EOS” trong CPU để trò chơi không dừng lại trong các phiên spam. Trong khi đó, Lar Larimer của Block.one đã trấn an cộng đồng trên Twitter rằng EOS “đang hoạt động chính xác”.
#EOS is operating correctly. This is no different than when attackers flood eth or bitcoin with high fee transaction spam. The network didn’t freeze for token holders, there was just no extra bandwidth available for free usehttps://t.co/nZQmCTlXFa
— Daniel Larimer (@bytemaster7) 14 tháng 9, 2019
“EOS đang vận hành đúng quy cách. Điều này không khác gì khi kẻ tấn công tràn ngập ETH hoặc Bitcoin với thư rác giao dịch phí cao. Mạng đã không đóng băng cho các chủ sở hữu token, không có băng thông bổ sung có sẵn để sử dụng miễn phí”.
Tuy nhiên, một số thành viên cộng đồng có ý kiến khác nhau. Rob Finch, giám đốc điều hành của nhà sản xuất EOS Block có trụ sở tại Hoa Kỳ CypherGlass lập luận:
The difference between this attack on EOS and a high fee spam on BTC or ETH is you can still pay more to send a transaction on BTC or ETH
Many EOS users did not have enough CPU to rent more CPU so it did freeze for them
“Operating correctly” is not the best response IMO
— Rob Finch (@finchify) 15 tháng 9, 2019
“Sự khác biệt giữa cuộc tấn công vào EOS và spam có phí cao trên BTC hoặc ETH là bạn vẫn có thể trả nhiều tiền hơn để gửi giao dịch trên BTC hoặc ETH. Nhiều người dùng EOS không có đủ CPU để thuê thêm nên đã đóng băng chúng. “Hoạt động chính xác”, không phải là phản hồi tốt nhất IMO”.
Một người dùng EOS khác, doanh nhân blockchain, Jared Moore, đã xác nhận rằng mạng này không thể sử dụng được cho DApps hoặc ví của anh ta. Anh cũng tự hỏi liệu Block.one sẽ “giúp cộng đồng EOS xuất bản các hướng dẫn về cách ngăn chặn các cuộc tấn công REX”.
I agree with this but I also place heavy blame on B1 for guiding the community a solid 0% with this stuff.
The network wasn’t usable for dApps or my wallet, so yes it did freeze it. Or will B1 help the EOS community out and publish guidelines for how to prevent REX-attacks? https://t.co/E5pw2O5SiV
— ᴊᴀʀᴇᴅ ᴍᴏᴏʀᴇ (@MooreJared0) 14 tháng 9, 2019
“Tôi đồng ý với điều này nhưng tôi nghĩ do lỗi của B1 vì đã hướng dẫn cộng đồng 0% với công cụ này.
Mạng không thể sử dụng được cho dApps hoặc ví của tôi, vì vậy, nó đã bị đóng băng. Hoặc B1 sẽ giúp cộng đồng EOS xuất bản các hướng dẫn về cách ngăn chặn các cuộc tấn công REX?”
- Nhà phân tích cao cấp Mati Greenspan của eToro chuyển một phần lợi nhuận BNB sang EOS sau khi nhận ‘của trời cho’ từ SEC
- Block.One nộp 24 triệu đô tiền phạt ICO cho SEC, giá EOS nhảy vọt hơn 10%
Thùy Trang
Tạp chí Bitcoin | Cointelegraph