Vụ WazirX Bị hack mất $230m USD – Phân tích từ góc nhìn của DEV

WazirX là một sàn giao dịch rất lớn của các anh Ấn Độ. Ngày 18 tháng 7 họ đã bị hack thẳng vào một ví chứa tài sản của sàn và lấy đi tổng giá trị 234 triệu đô la. Ví này sử dụng dịch vụ ví đa chữ ký (multisig wallet) của một bên khác tên là Liminal. Để rút tiền trong ví này họ cần sử dụng 3 trong tổng số 6 chữ ký mà WazirX nắm, sau đó còn cần xác thực lại bằng một chữ ký từ Liminal.

Để rút ra đã khoai, mà địa chỉ nhận tiền cũng phải nằm trong white list chứ không thể là bất khỳ ví nào. 

Hacker bằng cách thần kỳ nào đó đã thịt được 2 ví , và thịt luôn được cả Liminal để chế tạo 1 cái giao diện fake nhưng khả năng này thấp vì nếu Liminal bị hack thì có lẽ không chỉ có một vụ hack được.

Khả năng cao là máy tính xách tay của WazirX đã bị xâm nhập để lừa lấy chữ ký.

Thế là hacker dùng cái giao diện fake kia để lừa lấy được chữ ký của một trong 4 người còn lại. Mình thì cũng thấy khả năng này cũng thấp luôn 😛 .

Đến đây hacker vẫn chưa rút tiền ngay mặc dù có thể rút được.

Nhưng trong cái ví đấy có 1 mớ token , giờ mà chuyển ra thì sẽ tạo thành rất nhiều giao dịch , rất dễ bị lộ.

Ông thần này đã deploy 1 smartcontract trước đó 8 ngày 0xef279c2ab14960aa319008cbea384b9f8ac35fc6 tạm gọi là malicious contract.

Hacker sửa cái multi-sig wallet trỏ vào cái  malicious contract qua giao dịch này 0x48164d3adbab78c2cb9876f6e17f88e321097fcd14cadd57556866e4ef3e185d

Data truyền vào cái hàm 0x804e1f0a ( chưa decode được ) thế này :

0x804e1f0a000000000000000000000000ef279c2ab14960aa319008cbea384b9f8ac35fc6 

Bạn có thể thấy sau đoạn 0000 kia chính là cái địa chỉ ef279c

mục đích của việc này là thay đổi tham số “slot0” multisig proxy .

Đoạn tiếp theo thế này, Mỗi khi gọi đến  malicious contract được thiết kế để chuyển tài sản ra khỏi ví đa chữ ký. Mỗi giao dịch con tới ví đa chữ ký lại kích hoạt một lệnh gọi ủy quyền đến hợp đồng độc hại này, cho phép tiếp tục rút tiền.

Kết quả là ví multisig bị rút đến hết .

Có thể kết luận đây là một cuộc tấn công bài bản , đã được lên kịch bản trước , thậm chí thực hành nhiều lần. Ít nhất thì 8 ngày trước đó hacker cũng đã chuẩn bị cái contract lừa tình kia.

Bài học chỗ này ngoài việc bảo mật ví, máy tính cá nhân ra thì có vài chỗ liên quan đến smartcontract.

Việc upgrade cái ví đa chữ ký kia đáng lẽ phải có thêm điều kiện, nhiều lớp xác thực hơn. Đơn giản là để lấy 1 đồng tiền ra cho 1 giao dịch cần 3(4) chữ ký. Trong khi để upgrade contract thì cũng chỉ cần 3(4) chữ ký mà việc upgrade contract lại có thể lấy đi tất cả.

Cũng có thể cho việc upgrade contract này một thời gian trễ là 1 – 3 ngày thì mới kích hoạt được . Thêm hàm để hủy việc upgrade này đi nếu có biến .

Chắc còn nhiều thứ có thể rút ra được nhưng mình chỉ có thể nghĩ đến thế. Mọi người đóng góp thêm 

Leave a Reply

Your email address will not be published. Required fields are marked *