LapTrinhBlockchain

Chia sẻ kiến thức về Lập Trình Blockchain

An toàn Bảo mật, Lập trình Blockchain

Profanity tool là gì? Làm thế nào nó gây ra vụ hack lên đến $3.3M

Profanity tool là gì? Làm sao nó gây ra vụ hack lên đến $3.3M

Profanity tool là gì? Làm sao nó gây ra vụ hack lên đến $3.3M

Chia sẻ bài viết
5
(6)

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

Tệp profanity.x64 sinh ra sau khi build
Tệp profanity.x64 sinh ra sau khi build

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:

Bài viết này có hữu ích với bạn?

Kích vào một biểu tượng ngôi sao để đánh giá bài viết!

Xếp hạng trung bình 5 / 5. Số phiếu: 6

Bài viết chưa có đánh giá! Hãy là người đầu tiên đánh giá bài viết này.

Trả lời

Giao diện bởi Anders Norén