Phân tích chi tiết vụ khai thác Binance Bridge

Trong bài viết này, chúng ta sẽ phân tích về cách khai thác được sử dụng trong vụ khai thác Binance Bridge và đề xuất các bản sửa lỗi.

10357Total views
Phan tich chi tiet vu khai thac Binance Bridge - anh 1
Phân tích chi tiết vụ khai thác Binance Bridge

Binance Chain bị tấn công

Vào ngày 7 tháng 10 năm 2022, Binance Chain đã bị tấn công với gần 600 triệu USD, với khoảng 90 triệu USD được chuyển ra khỏi hệ sinh thái Binance. Vụ hack được thực hiện trong một giao dịch mà Binance Bridge gửi một phần lớn token gốc BNB.

Phan tich chi tiet vu khai thac Binance Bridge - anh 2

Đội ngũ của Verichains đã điều tra nguyên nhân gốc rễ của vụ tấn công và tìm ra cách vụ khai thác hoạt động sau 2 giờ xem xét việc triển khai các đoạn mã code liên quan. Bài viết đã được gửi đến nhóm Binance và đội ngũ Verichains đang làm việc với BNB Chain để khắc phục sự cố.

Verichains xác nhận rằng việc khai thác không chỉ xảy ra trên Binance Chain. Tin tặc đã khai thác lỗi IAVL Proof trong Tendermint Core và bất kỳ chuỗi nào sử dụng Tendermint Core, cụ thể là IAVL Proof, đều bị tấn công.

Sơ bộ

Giao tiếp Cross-chain từ Binance Chain đến Binance Smart Chain dựa trên kỹ thuật light client technique. Một hợp đồng thông minh được triển khai trên BSC để theo dõi trạng thái đồng thuận của Binance bao gồm appHash (tương tự như stateRoot của Ethereum), về cơ bản là gốc của kho lưu trữ key-value có thể xác minh được thực hiện dưới dạng AVL tree. Tin nhắn đến từ Binance Chain sẽ được xác minh dựa trên appHash để có thể đảm bảo tính toàn vẹn của chúng.

Store cho phép các cặp key-value liên tiếp được chứng minh hàng loạt (hiệu suất tốt hơn chứng minh từng cặp riêng lẻ). Tuy nhiên, logic xác minh bằng chứng phạm vi của nó chứa một lỗi nghiêm trọng có thể được khai thác để chứng minh tư cách thành viên của các cặp key-value tùy ý do kẻ tấn công chọn.

IAVL Proof

Kẻ tấn công đã khai thác bằng chứng phạm vi của IAVL Proof (tương tự như Merkel Proof). Một giao dịch hợp lệ phải gửi bằng chứng có chứa verification path, một danh sách leaves và một danh sách của InnerNodes. Một giao dịch được xác minh nếu:

  • Giá trị băm gốc (được tính từ bằng chứng) bằng với giá trị băm gốc trên chuỗi.
  • Tất cả các kiểm tra đệ quy đều hợp lệ.

Verification path (đường dẫn xác minh) là một mảng có hai trường (left, right), mỗi trường là 32 byte. Leaf có thể băm, các InnerNodes tương tự như các đường dẫn xác minh nhưng để kiểm tra đệ quy.

Bây giờ chúng ta học cách tính toán băm gốc từ một đường dẫn và leaf.

The root (gốc) được tính bằng cách băm nhiều lần (giống như Merkel proof) như trong đoạn code bên dưới:

Text  Description automatically generated
Text  Description automatically generated

Độc giả có thể đã thấy logic lỗi ở đây: “Điều gì sẽ xảy ra nếu cả left và right đều tồn tại?”. Nếu tồn tại cả left và right, thông báo sẽ bỏ qua trường right. Do đó, nếu đường dẫn xác minh chứa tất cả các mục có cả left và right, thì gốc sẽ không thay đổi với bất kỳ giá trị right tùy ý nào (sử dụng cùng một leaf). Đây là một yếu tố bị  khai thác.

Một yếu tố khác nằm trong việc kiểm tra đệ quy. Hãy bắt đầu giải thích từ khi bắt đầu quy trình xác minh.

Giả sử chúng ta có một cây có 4 lá, lá 1, lá 2, lá 3, lá 4. Và chúng ta muốn thực hiện một chứng minh phạm vi cho lá 2 và lá 3. Bắt đầu bằng tính toán root. Sau đó, nó đi lên từ lá 2 cho đến khi right tồn tại và bắt đầu tính toán đệ quy giá trị băm gốc của cây có gốc bên phải. Trong hình minh họa, A.right giữ gốc của cây mới chứa lá 3. Đối với lá 3, nó tính toán root hash và chỉ xác thực nếu nó bằng A.right.

Phan tich chi tiet vu khai thac Binance Bridge - anh 3

Vậy điều gì có thể xảy ra trong các lần kiểm tra đệ quy này? Bản thân nó không sai. Nhưng nếu chúng ta kết hợp điều này với yếu tố trên trong đó các giá trị right hoàn toàn không được sử dụng khi tính toán băm gốc, nó sẽ trở thành một vấn đề nghiêm trọng và khiến cuộc tấn công có thể xảy ra.

Lỗi phần mềm

Đối với bất kỳ bằng chứng nào, bằng cách giữ các left values trong đường dẫn xác minh và genuine first leaf. Chúng ta có thể đưa vào nút lá thỏa mãn việc xác minh miễn là chúng ta có kiểm tra đệ quy với một InnerNodes bằng giá trị bên phải tại một số điểm trong đường dẫn xác minh. Như đã nêu ở trên, root không thay đổi khi các giá trị right được thay đổi. Vì vậy, chúng tôi có thể thay đổi các giá trị right thỏa mãn lá mới được chèn vào. Kẻ tấn công đã sử dụng InnerNodes = {} [nil]. Điều này là để làm cho giá trị phù hợp dễ dàng sửa đổi hơn như là root hash cho các InnerNodes, leaf is hash (leaf).

Phan tich chi tiet vu khai thac Binance Bridge - anh 4

Đề xuất cho các bản sửa lỗi

Cách khắc phục đơn giản nhất là loại bỏ tất cả các bằng chứng bao gồm bất kỳ mục nào tồn tại cả giá trị left và right. Xác nhận chỉ đủ điều kiện (nil, right) hoặc (left, nil). Ngoài ra, thiết kế có thể được thay đổi để sử dụng hết các giá trị bên trái và bên phải để tạo ra root hash.

Text  Description automatically generated

Kết luận

Vụ tấn công vào Binance Chain là một tổn thất nghiêm trọng khác đối với các nhà phát triển chuỗi và Binance. Điều nguy hiểm hơn nữa là việc khai thác nằm trong Tendermint Core, được sử dụng trong nhiều chuỗi trong hệ sinh thái Cosmos. Verichains khuyên tất cả các chuỗi sử dụng Tendermint nên kiểm tra sơ bộ và áp dụng cách khắc phục đơn giản để ngăn chặn cuộc tấn công n-day.

Nguồn: Verichains