Blockchain - 리플레이 공격(Replay Attack)

김도영·2022년 12월 27일
2

리플레이 공격(Replay attack)

리플레이 공격(Replay attack)이란?

리플레이 공격은 공격자가 보안 네트워크 통신을 가로채고, 해당 통신의 수신자로 하여금 공격자가 원하는 작업을 수행하도록 하기 위해 통신을 지연시키거나 재전송하는 방식이다. 리플레이 공격은 해커가 네트워크에서 메시지를 가로챈 후 메시지를 복호화 하기 위한 별도의 과정이 필요하지 않고, 메시지를 포함한 통신 전체를 다시 전송하는 것으로도 공격에 성공할 수 있다.

블록체인에서 리플레이 공격이 위험한 이유

블록체인에서 리플레이 공격은 하드 포크시 이전에 생긴 트랜잭션 데이터를 포크 이후 블록체인에 그대로 복사하고 재전송하여 동일한 트랜잭션이 두 번 발생하도록 하는 것이다. 즉, 이중 지불 문제로 이어질 수 있다.

예를 들어, 다음과 같은 시나리오로 발생한다.

  1. 비트코인에서 비트코인과 비트코인 캐시로 하드포크가 일어난다.
  2. 엘리스는 밥에게 100BCH를 보낸다.
  3. 밥은 악의적인 사용자이기 때문에, '엘리스가 밥에게 100BCH를 보냄'이라는 트랜잭션을 비트코인 네트워크에 브로드캐스팅 한다.
  4. 비트코인 네트워크에서도 비트코인 캐시의 트랜잭션을 유효하게 처리할 수 있으며, 이 체인에서는 아직 트랜잭션이 처리되지 않았기 때문에 트랜잭션이 블록에 들어가 처리된다.
  5. 엘리스의 지갑에서는 100BCH만 빠져나가는게 아니라, 100BTC도 빠져나가게 된다.

100BCH를 보내는 트랜잭션이 리플레이 되어, 비트코인 체인에서도 해당 트랜잭션이 실행되므로 비트코인 네트워크에서 사용하는 100BTC가 전송되는 것이다.

리플레이 공격 대안

  • 세션 식별자 추가: 통신 당사자간 일회용 토큰을 해싱한 값을 공유하여 리플레이 어택을 피한다.
  1. 엘리스가 밥에게 일회용 토큰을 보낸다.
  2. 밥은 토큰을 암호화여 엘리스에게 보낸다.
  3. 엘리스는 밥과 동일한 방식으로 토큰을 암호화하고, 그 값이 밥으로부터 값과 같은 경우, 통신을 진행한다.
  4. 공격자가 이 암호화된 값을 가로채고 다른 통신에서 사용하려고 해도, 엘리스가 밥에게 다른 일회용 토큰을 보내면 다른 암호화된 값이 나올 것이기 때문에 공격자가 가로챈 값은 사용할 수 없게 된다.
  • 일회용 비밀번호: 아주 짧은 세션 기간을 가진 비밀번호를 두 통신자가 공유하여, 공격자가 가로채 재사용하지 못하도록 한다.

  • 타임 스탬프: 엘리스가 네트워크에 MAC과 함께 브로드캐스트한다. 밥은 엘리스에게 통신을 요청할 때, 자신의 통신 메시지에 엘리스가 브로드캐스트한 시간을 기준으로 예상 시간을 포함해 인증을 진행한다. 엘리스는 타임 스탬프가 예상 시간 범위 내에 있는 메시지만 수락한다.

profile
Blockchain Developer

0개의 댓글