
PoC, охватывающий проблему манипуляции временем транзакций (CVE-2024-45244) в блокчейне Hyperledger Fabric.
HLF_TxTime_spoofing — PoC, описывающий проблему манипуляции временем транзакции (с использованием GetTxTimestamp() или GetHistoryForKey()) в блокчейне Hyperledger Fabric. Протестировано на версиях 2.5.5 и 3.0.0-beta.
Проект состоит из нескольких частей:
Дополнительные функции для понимания работы бизнес-логики: CalcDividents() — возвращает дивиденды, накопленные за заданное количество дней, и начальную сумму депозита. subtractTimestamp() — возвращает разницу между текущим временем и временем первоначального депозита.
Вызовите Stake_insecure() для добавления депозита с начальной суммой. Вызовите CheckDividents_insecure(), чтобы убедиться, что сумма депозита не изменилась. Измените локальное время на клиенте и снова вызовите CheckDividents_insecure().
Финансовая атака: перевод времени на 1 год вперёд позволял получить 20% годовых.
Успешная финансовая атака
Аналогичным образом мы убеждаемся, что временем транзакции можно манипулировать в GetHistoryForKey().
В этом варианте цепного кода мы проверяем время транзакции по времени, полученному от NTP-сервера (Network Time Protocol) (с использованием пакета ntp client). Каждый цепной код имеет свой собственный адрес NTP-сервера (т.е. разные пакеты цепного кода) для распространения. В случае отклонения времени будет отображена ошибка: «неверное время». Обратите внимание, что трафик NTP может быть подделан (данные передаются в открытом виде).
Неуспешная финансовая атака
В этом варианте цепного кода мы проверяем время транзакции по времени, полученному от NTS-сервера (Network Time Security) (с использованием пакета nts client). Каждый цепной код имеет свой собственный адрес NTS-сервера (т.е. разные пакеты цепного кода) для распространения. В случае отклонения времени будет отображена ошибка: «неверное время».
Неуспешная финансовая атака
В этом варианте цепного кода мы проверяем время транзакции по локальному времени (т.е. времени на узле-пире). В случае отклонения времени будет отображена ошибка: «неверное время». Обратите внимание, что на всех узлах-пирах требуется корректное время.
Неуспешная финансовая атака
hlf-time-oracle — это цепной код для блокчейна Hyperledger Fabric, предоставляющий точное время другим цепным кодам. hlf-time-oracle основан на пакетах ntp и nts. Таким образом решается проблема безопасности, связанная с возможной манипуляцией временем транзакции со стороны клиента блокчейна. Цепной код предоставляет функции GetTimeNtp() и GetTimeNts(). Вызов этих функций создаёт запрос к серверам NTP (Network Time Protocol) и NTS (Network Time Security). Время, полученное от любого из этих серверов, может использоваться для проверки корректности времени транзакции, заданного на стороне клиента. Разработчики цепных кодов для блокчейна могут использовать hlf-time-oracle вместо самостоятельного написания кода взаимодействия с NTP и NTS серверами. hlf-time-oracle не сохраняет никаких данных в блокчейне во время своей работы.