Cảnh báo rủi ro: Đề phòng huy động vốn bất hợp pháp dưới danh nghĩa 'tiền điện tử' và 'blockchain'. — Năm cơ quan bao gồm Ủy ban Giám sát Ngân hàng và Bảo hiểm
Tìm kiếm
Đăng nhập
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
Xem thị trường
"Lừa đảo cấp tiền giấy" trong EOS: EOS giả và các cuộc tấn công biến thể của nó
成都链安
特邀专栏作者
2019-09-29 03:04
Bài viết này có khoảng 3322 từ, đọc toàn bộ bài viết mất khoảng 5 phút
Tiền giả DApp gây hiểu lầm và việc phát hiện chức năng chuyển tiền là cẩu thả.

Để đối phó với các vấn đề bảo mật chuỗi khối, nhóm Beosin (Chengdu Lianan) sẽ phân tích và sắp xếp các lỗ hổng bảo mật của hợp đồng thông minh hàng tuần, với hy vọng giúp các lập trình viên viết hợp đồng an toàn và chắc chắn hơn để ngăn chặn sự cố trước khi chúng xảy ra.

Tóm tắt lại

Tóm tắt lại

Trong cuốn sách trước, các trò chơi EOS đã bị tấn công nhiều lần và các lỗ hổng số ngẫu nhiên đã bị cấm nhiều lần.

Các chủ đề của vấn đề này

Các chủ đề của vấn đề này

Tiền giả DApp gây hiểu lầm, thiếu sót phát hiện chức năng chuyển tiền là cẩu thả

Nói đến những bộ phim nội địa ăn khách hơn trong năm nay, "Wu Shuang" của Châu Nhuận Phát nhất định phải có chỗ đứng, công nghệ sản xuất những tờ đô la Mỹ giả trong phim thật đáng kinh ngạc, còn suy ra một màn "lừa dối ở cấp độ tiền giấy" tàn khốc .

tiêu đề phụ

Mở đường cho kiến ​​thức cơ bản

Kiến trúc của Hợp đồng thông minh EOS

Hợp đồng thông minh của EOS bao gồm một loạt các hành động, mỗi hành động đại diện cho một điều khoản hợp đồng để thực hiện các quy tắc cụ thể trong điều khoản. Việc thực thi hợp đồng thông minh của EOS được chia thành ba phần: tạo, triển khai và gọi.

Trong số đó, trong bước triển khai hợp đồng thông minh, mỗi hợp đồng thông minh của EOS phải triển khai chức năng apply(), được sử dụng để ánh xạ yêu cầu hành động tới một chức năng xử lý cụ thể. Chi tiết triển khai cụ thể được gói gọn trong macro EOSIO_ABI. Thiết kế này cho phép các nhà phát triển chỉ tập trung vào phát triển logic nghiệp vụ mà không cần phải chú ý đến công nghệ cơ bản, giúp đơn giản hóa quá trình phát triển. Ví dụ về chức năng áp dụng:

 Cuộc tấn công chuyển EOS giả mạo

Những sự kiện mang tính lịch sử:

EOSBet nổi tiếng đã mất khoảng 42.000 EOS vào ngày 12 tháng 9, bắt đầu một đợt bùng phát tin tặc sử dụng mã thông báo EOS giả để tấn công, tiếp theo là eoswindice và sàn giao dịch phi tập trung newdex, tất cả đều bị tin tặc chiếm giữ.

Phân tích tấn công:

Mã thông báo phổ biến trên chuỗi EOS là mã thông báo EOS, được tạo bởi hợp đồng eosio.token do EOSIO triển khai, nhưng mã eosio.token là mã nguồn mở, bất kỳ tài khoản eos nào cũng có thể tự triển khai hợp đồng eosio.token và phát hành tên viết tắt Đó là mã thông báo của EOS, như trong hình, chúng ta có thể thấy một số lượng lớn EOS giả vô giá trị:

Làm cách nào để xác định tính xác thực của EOS? Máy dò tiền? Tất nhiên là không, tên đầy đủ của token sẽ được hiển thị trên trình duyệt eosflare Có sự khác biệt giữa tên đầy đủ của EOS thật và EOS giả:

Có thể thấy từ bức ảnh rằng một cái là EOS và không có lời giải thích nào khác đằng sau nó, và cái còn lại là EOS (ví tiền hoàn lại) giả mạo của ví tiền hoàn lại.

Trong trình duyệt, chúng ta có thể xem chi tiết giao dịch để đánh giá xem mã thông báo EOS được sử dụng cho giao dịch là đúng hay sai, vậy nếu nó được đặt trong hợp đồng thông minh thì sao?

Ví dụ, hợp đồng trường hợp:

void transfer(const account_name& from,

                            const account_name& to,

                            const asset& quantity,

                            const string& memo)`

Đây là một chức năng được sử dụng để nhận một cuộc gọi lại, khi một EOS giả được thông qua, chức năng này không có cách nào để phân biệt tính xác thực. Nếu EOS không được phát hiện trước trong quá trình đăng ký, điều đó sẽ khiến hợp đồng nhận EOS giả và thực thi logic kinh doanh thông thường. Nếu tài khoản độc hại triển khai hợp đồng phát hành mã thông báo EOS, nó có thể nhận ra con sói trắng trắng tay và đổi tiền giấy giả lấy tiền thật.

Sửa lỗi:

Để xác minh rằng nhà phát hành EOS có phải là eosio hay không, cần phải thêm mã == eosio.token vào apply() để phán đoán.

tiêu đề phụ

Biến thể 1: Tấn công cuộc gọi trực tiếp vào hàm truyền

Phân tích lỗ hổng:

Sau khi thêm các phán đoán có liên quan theo các phương pháp sửa chữa lỗ hổng nêu trên, nhiều bên tham gia dự án đã thở phào nhẹ nhõm, nhưng mã lỗ hổng gây ra sự cố EOSBet không dễ sửa chữa như vậy. Bởi vì, khi sử dụng áp dụng đã đề cập ở trên để phát hiện cuộc gọi mã, sẽ có một tình huống bỏ qua khác, nếu điều kiện phát hiện chỉ là:

if( code == self || code==N(eosio.token) ||action == N(onerror))

Sau đó, điều kiện phát hiện này chỉ xử lý hai phát hiện: lệnh gọi hành động của chính chức năng và lệnh gọi hành động từ eosio.token. Người gọi hành động chuyển mà không cần xác minh phải là eosio.token hoặc hợp đồng của chính nó.

Điều này sẽ dẫn đến việc chuyển khoản theo tài khoản hợp đồng có thể được gọi trực tiếp.

Ví dụ: người dùng A ban đầu gọi eosio.token để chuyển 1 EOS cho người dùng B, sau đó eosio.token đã gửi biên lai chuyển tiền để gọi chức năng chuyển của hợp đồng B để thực thi logic nghiệp vụ. Bây giờ, chức năng chuyển của hợp đồng B có thể được gọi trực tiếp và from được chỉ định trong đó. Sửa các tham số như to, value, v.v., trực tiếp thực hiện logic nghiệp vụ của hợp đồng B mà không cần chuyển tiền. Do đó, kẻ tấn công đã tấn công EOSBet đã bỏ qua hoàn toàn chức năng eosio.token->transfer, được gọi trực tiếp là eosbetdice11->transfer với các tham số chính xác và thực thi logic kinh doanh của hợp đồng mà không chuyển EOS sang hợp đồng.

Sửa lỗi:

Phương pháp phòng thủ cho kiểu tấn công này là phát hiện hành động và mã cùng một lúc, nghĩa là khi

tiêu đề phụ

if (code == N(eosio.token) && action == N(transfer))                     

        {                                                                                }  

Biến thể 2 Cuộc tấn công hóa đơn giả EOS

Những sự kiện mang tính lịch sử:

Sau sự cố vào ngày 14 tháng 9, EOSBet cũng đã đưa ra một tuyên bố chính thức đề cập đến tầm quan trọng của họ đối với bảo mật mã.

Nhưng chỉ một tháng sau, vào ngày 15 tháng 10, EOSBet lại bị hack, mất gần 140.000 EOS.

Phân tích lỗ hổng:

Lý do của lỗ hổng là do thiếu phán đoán trong chức năng chuyển nhượng của logic xử lý hợp đồng thông minh: nếu thiếu phán đoán, hợp đồng không thể phán xét liệu chính nó có nhận được chuyển nhượng hay không và có thể tiếp tục thực hiện chức năng logic mà không nhận được chuyển Giả sử kẻ tấn công Có hai tài khoản AB, c là tài khoản hợp đồng trò chơi, kẻ tấn công có thể gọi eosio.token thông qua tài khoản A để chuyển EOS sang tài khoản B, sau đó triển khai hợp đồng trong tài khoản A hoặc B, và gọi lại require_recipient(N(XXXXXX) trong quá trình chuyển khoản gọi lại ); Gửi thông báo chuyển khoản tới tài khoản hợp đồng trò chơi C để có thể bỏ qua việc xác minh code==N(eosio.token)&&action==transfer và tương ứng logic kinh doanh có thể được thực thi.

Sửa lỗi:

void transfer(const account_name& from,

                            const account_name& to,

                            const asset& quantity,

                            const string& memo) {

tiêu đề phụ

         return;

     }

Mã bảo mật là màu đen và trắng

Sau một loạt sự cố bảo mật và sửa chữa mã, cuối cùng nhân viên chính thức của trò chơi bị tấn công đã giải quyết được một lỗ hổng dường như không thể tin được. Có thể thấy rằng bảo mật chuỗi khối là một công nghệ cực kỳ nghiêm ngặt và xứng đáng, và những va chạm trong hai năm qua đã khiến nó trở thành một chủ đề rất nặng nề. Có một câu trong "Wu Shuang", "Những người chỉ nhìn thấy trắng và đen sẽ luôn là kẻ thua cuộc." Câu này không áp dụng được trong lĩnh vực blockchain. Nếu bạn không tin tôi, hãy xem đoạn kết của nhân vật chính trong bộ phim.

Trích dẫn:

Trích dẫn:

[1]: Lại tấn công EOS giả nâng cấp: EOSCast bị hacker tấn công "biến thể chuyển EOS giả" và mất hơn 60.000 EOS

[2]: Toàn cảnh BET bị hacker tấn công, chiếc búa thật dựng lại hiện trường vụ án và phương thức tấn công

[3]: Sốc! EOSBet lại bị tấn công. Thiệt hại lên đến 5 triệu. Đây có phải là phương pháp tấn công?

[4]: How EOSBET attacked by aabbccddeefg

[5]: EOSBet Transfer Hack Statement

智能合约
安全
Chào mừng tham gia cộng đồng chính thức của Odaily
Nhóm đăng ký
https://t.me/Odaily_News
Tài khoản chính thức
https://twitter.com/OdailyChina