Vào tháng 09/ 2022, những người sử dụng công cụ Profanity, một công cụ tạo địa chỉ hư ảo cho Ethereum, là mục tiêu của một cuộc tấn công. Những kẻ tấn công đã lợi dụng một điểm yếu trong quy trình tạo khóa của ví để truy cập và lấy đi 3,3 triệu đô la mã thông báo từ ví của người dùng. Bài viết này chúng ta đi sâu hơn về Profanity tool và vì sao nó gây ra vụ hack trên.
Tìm hiểu về công cụ Profanity
Thực tế thì mình mới biết đến công cụ này, công cụ này có mã nguồn trên mạng tại địa chỉ: https://github.com/johguse/profanity. Sau sự cố nêu trên, tác giả của công cụ cũng đã đăng cảnh báo mọi người trên Github của dự án.
Mình thì tò mò không biết thực sự thì công cụ này làm gì. Vì thế mình đã tiến hành lấy source code về build và dùng thử xem thế nào. Lệnh build như sau:
// Lấy source code về và thực hiện chỉnh sửa nhỏ git clone https://github.com/johguse/profanity.git cd profanity // Sửa tệp profanity.cpp một chút nano profanity.cpp // Thêm hai kí tự // vào dòng: // THIS LINE WILL LEAD TO A COMPILE ERROR. THIS TOOL SHOULD NOT BE USED, SEE README. // Để comment nó // Build sudo apt-get install build-essential opencl-headers ocl-icd-opencl-dev make // Sau khi build có tệp profanity.x64 // Để tiện sử dụng chuyển sang profanity cp profanity.x64 profanity
Sau khi build xong bạn được tệp profanity.x64
Mình chạy lệnh sau để xem hướng dẫn của nó:
./profanity.x64 –help
Bạn sẽ thấy hướng dẫn sử dụng công cụ như sau:
usage: ./profanity [OPTIONS]
Basic modes:
--benchmark Run without any scoring, a benchmark.
--zeros Score on zeros anywhere in hash.
--letters Score on letters anywhere in hash.
--numbers Score on numbers anywhere in hash.
--mirror Score on mirroring from center.
--leading-doubles Score on hashes leading with hexadecimal pairs
Modes with arguments:
--leading <single hex> Score on hashes leading with given hex character.
--matching <hex string> Score on hashes matching given hex string.
Advanced modes:
--contract Instead of account address, score the contract
address created by the account's zeroth transaction.
--leading-range Scores on hashes leading with characters within
given range.
--range Scores on hashes having characters within given
range anywhere.
Range:
-m, --min <0-15> Set range minimum (inclusive), 0 is '0' 15 is 'f'.
-M, --max <0-15> Set range maximum (inclusive), 0 is '0' 15 is 'f'.
Device control:
-s, --skip <index> Skip device given by index.
-n, --no-cache Don't load cached pre-compiled version of kernel.
Tweaking:
-w, --work <size> Set OpenCL local work size. [default = 64]
-W, --work-max <size> Set OpenCL maximum work size. [default = -i * -I]
-i, --inverse-size Set size of modular inverses to calculate in one
work item. [default = 255]
-I, --inverse-multiple Set how many above work items will run in
parallell. [default = 16384]
Examples:
./profanity --leading f
./profanity --matching dead
./profanity --matching badXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXbad
./profanity --leading-range -m 0 -M 1
./profanity --leading-range -m 10 -M 12
./profanity --range -m 0 -M 1
./profanity --contract --leading 0
About:
profanity is a vanity address generator for Ethereum that utilizes
computing power from GPUs using OpenCL.
Author: Johan Gustafsson <profanity@johgu.se>
Beer donations: 0x000dead000ae1c8e8ac27103e4ff65f42a4e9203
Disclaimer:
Always verify that a private key generated by this program corresponds to
the public key printed by importing it to a wallet of your choice. This
program like any software might contain bugs and it does by design cut
corners to improve overall performance.
Sau khi xem help này mình biết được rằng: Profanity là một công cụ sinh ra các địa chỉ hư ảo (Có thể gọi là các địa chỉ đẹp) sử dụng sức mạnh tính toán từ GPU sử dụng OpenCL. Như vậy bạn sẽ mong muốn tìm địa chỉ định dạng thế nào, công cụ sẽ giúp bạn, và mọi người thường tìm các địa chỉ đẹp. Địa chỉ này được tính toán bằng cách tính nhiều cặp khóa công khai / riêng tư khác nhau và tìm kiếm một cặp khóa đáp ứng được tiêu chí đưa ra. Nhưng có vấn đề là công cụ sử dụng vector 32 bit ngẫu nhiên để tạo ra khóa cá nhân 256 bit, điều này làm cho khóa rất dễ bị tấn công dạng brute-force . Nói chung nếu công cụ giúp bạn sinh địa chỉ đẹp đó thì nó cũng sẽ giúp người khác tìm ra trong thời gian tương tự. Đó chính là vấn đề lớn nhất của công cụ.
Công cụ này muốn chạy được thì bạn phải có GPU tức là card VGA, càng nhiều card càng tốt. Máy mình không có card VGA nên không chạy được.
Tìm hiểu chi tiết lỗ hổng gây ra cuộc tấn công $3.3M
Việc tạo các giá trị ngẫu nhiên, chẳng hạn như khóa riêng, thường được thực hiện bằng cách sử dụng trình tạo số giả ngẫu nhiên mật mã (CPRNG) được gieo với một giá trị ngẫu nhiên. Trong trường hợp này, Lời tục tĩu đã gieo CPRNG bằng một số nguyên không dấu, nghĩa là chỉ có 232 (khoảng 4,3 tỷ) khả thi.
Mặc dù số này có vẻ lớn, nhưng nó không đủ bảo mật để chống lại các cuộc tấn công b. Theo ước tính của một người trên Github đưa ra, một bộ 1000 GPU về mặt lý thuyết có thể tìm ra các Private Key của một địa chỉ sinh ra bởi công cụ Profanity trong vòng 50 ngày. Và trong khi hoạt động này sẽ tốn kém, lợi tức đầu tư có thể là đáng kể.
Các nhà nghiên cứu của 1inch ban đầu đã xác định và chia sẻ những phát hiện của họ về một lỗ hổng với Profanity vào đầu năm 2022. Gần đây, họ đã thu hút sự chú ý đến vấn đề này khi rõ ràng rằng những kẻ tấn công đã đánh cắp khoảng 3,3 triệu đô la mã thông báo và nhiều địa chỉ có nguy cơ hơn so với giả định trước đây. Sự phổ biến của công cụ Profanity có nghĩa là giá trị được giữ trong ví bằng cách sử dụng các địa chỉ hư ảo được tạo ra bằng công cụ này có thể lên tới hàng chục triệu hoặc hàng trăm triệu đô la.
Vụ hack $3.3M và vấn
Vào thứ Năm, 1inch đã tiết lộ sự thiếu an toàn trong việc sử dụng Profanity vì nó sử dụng một vectơ 32 bit ngẫu nhiên để tạo ra các khóa cá nhân 256 bit. Các cuộc điều tra sâu hơn đã chỉ ra sự không rõ ràng trong việc tạo ra các địa chỉ phù phiếm, cho thấy rằng ví tục tĩu đã bị tấn công bí mật. Cảnh báo đến dưới dạng một tweet, như hình dưới đây.
Một cuộc điều tra tiếp theo của nhà điều tra blockchain ZachXBT cho thấy việc khai thác thành công lỗ hổng đã cho phép tin tặc rút 3,3 triệu đô la tiền điện tử. Địa chỉ tin tặc: 0x6AE09AC63487FCf63117A6D6FAFa894473d47b93
Tham khảo:
Trả lời