
Hyperledger Fabric 블록체인의 트랜잭션 시간 조작 문제(CVE-2024-45244)를 다루는 PoC
HLF_TxTime_spoofing - Hyperledger Fabric 블록체인에서 트랜잭션 시간 조작(GetTxTimestamp() 또는 GetHistoryForKey() 사용) 문제를 다루는 PoC입니다. v 2.5.5 및 v3.0.0-beta에서 테스트되었습니다.
프로젝트는 여러 부분으로 구성됩니다:
비즈니스 로직의 동작을 이해하는 데 도움이 되는 추가 함수: CalcDividents() - 주어진 일수와 초기 예치 금액에 대해 누적된 배당금을 반환합니다 subtractTimestamp() - 현재 시간과 초기 예치 시점 간의 차이를 반환합니다
Stake_insecure()를 호출하여 초기 예치 금액으로 예치금을 추가합니다. CheckDividents_insecure()를 호출하여 예치 금액이 변경되지 않았는지 확인합니다. 클라이언트에서 로컬 시간을 변경한 후 CheckDividents_insecure()를 다시 호출합니다.
금융 공격: 시간을 1년 앞으로 옮기면 연 20%의 이자를 얻을 수 있었습니다.
성공적인 금융 공격
동일한 방식으로 GetHistoryForKey()에서도 트랜잭션 시간이 조작될 수 있음을 확인할 수 있습니다.
이 체인코드 변형에서는 트랜잭션 시간을 NTP(Network Time Protocol) 서버에서 수신한 시간과 대조합니다(ntp 클라이언트 패키지 사용). 각 체인코드는 배포를 위해 자체 NTP 서버 주소를 가집니다(즉, 서로 다른 체인코드 패키지). 시간 편차가 발생하면 "wrong time" 오류가 표시됩니다. NTP 트래픽 데이터는 스푸핑될 수 있습니다(데이터가 평문으로 전송됨).
실패한 금융 공격
이 체인코드 변형에서는 트랜잭션 시간을 NTS(Network Time Security) 서버에서 수신한 시간과 대조합니다(nts 클라이언트 패키지 사용). 각 체인코드는 배포를 위해 자체 NTS 서버 주소를 가집니다(즉, 서로 다른 체인코드 패키지). 시간 편차가 발생하면 "wrong time" 오류가 표시됩니다.
실패한 금융 공격
이 체인코드 변형에서는 트랜잭션 시간을 로컬타임(localtime, 즉 피어 노드의 시간)과 대조합니다. 시간 편차가 발생하면 "wrong time" 오류가 표시됩니다. 모든 피어 노드에서 정확한 시간이 필요하다는 점에 유의하세요.
실패한 금융 공격
hlf-time-oracle은 Hyperledger Fabric 블록체인을 위한 체인코드로, 다른 체인코드에 정확한 시간을 제공합니다. hlf-time-oracle은 ntp 패키지와 nts 패키지를 기반으로 합니다. 따라서 블록체인 클라이언트에 의한 트랜잭션 시간 조작 가능성과 관련된 보안 문제를 해결합니다. 이 체인코드는 GetTimeNtp() 및 GetTimeNts() 함수를 제공합니다. 이 함수들을 호출하면 NTP(Network Time Protocol) 및 NTS(Network Time Security) 서버를 호출하게 됩니다. 이 서버들 중 하나에서 수신한 시간은 클라이언트 측에서 정의된 트랜잭션 시간의 정확성을 검증하는 데 사용할 수 있습니다. 블록체인 체인코드 개발자는 NTP 및 NTS 서버와 상호 작용하는 코드를 직접 작성하는 대신 hlf-time-oracle을 사용할 수 있습니다. hlf-time-oracle은 작동 중 블록체인에 어떠한 데이터도 저장하지 않습니다.