검수요청.png검수요청.png

"리플레이 공격"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
(사용)
9번째 줄: 9번째 줄:
  
 
===한계===
 
===한계===
이와 관련된 위험성에도 불구하고 해커가 리플레이 공격만으로 달성 할 수있는 것에는 한계가 있다. 공격자는 네트워크가 거부하지 않고 전송되는 데이터를 변경할 수 없으므로 과거 작업 반복의 공격의 효과가 확연히 떨어지게 된다. 따라서 이러한 공격들은 상대적으로 방어하기 쉬운데, 데이터 전송에 타임 스탬프를 추가하는 기본적인 방어정책 만으로도 리플레이 공격의 시도를 막을 수 있다. 또한 서버는 반복된 메시지를 캐시에 저장한 후 특정 반복 횟수를 제한하여 공격자가 빠르고 성공적인 리플레이 메시지를 통한 연속적인 공격 시도 횟수를 제한할 수 있다.  
+
이와 관련된 위험성에도 불구하고 해커가 리플레이 공격만으로 달성 할 수있는 것에는 한계가 있다. 공격자는 네트워크가 거부하지 않고 전송되는 데이터를 변경할 수 없으므로 과거 작업 반복의 공격의 효과가 확연히 떨어지게 된다. 따라서 이러한 공격들은 상대적으로 방어하기 쉬운데, 데이터 전송에 타임 스탬프를 추가하는 기본적인 방어정책 만으로도 리플레이 공격의 시도를 막을 수 있다. 또한 서버는 반복된 메시지를 캐시에 저장한 후 특정 반복 횟수를 제한하여 공격자가 빠르고 성공적인 리플레이 메시지를 통한 연속적인 공격 시도 횟수를 제한할 수 있다.
 +
 
 +
===문제점===
 +
중요한 결점이 되는 것은 아니지만, 리플레이 공격은 특히 암호화폐 거래 및 블록 체인 장부 환경과 관련이 있다. 그 이유는 블록체인 장부가 때때로 하드 포크 (hard forks)로 알려진 프로토콜 변경이나 업그레이드를 거쳐야하기 때문이다. 하드 포크를 진행하면 이전 장부는 소프트웨어의 이전 버전과 새로 업데이트된 버전으로 나누어져 분할된다. 일부 하드 포크는 장부를 업그레이드 하기위한 것이지만 다른 종류의 포크는 완전히 새로운 암호화폐를 발행하게 된다. 후자의 하드 포크 중 대표적인 사례 중 하나는 비트코인 캐쉬(Bitcoin Cash)가 2017 년 8월 1일, 대장격인 비트코인(Bitcoin) 장부로부터 포크를 할 수 있게 진행한 업그레이드 사례를 들 수 있다.
 +
 
 +
하드 포크가 진행되면 이론적으로 공격자가 블록체인 장부에 대한 리플레이 공격이 가능하게 된다. 하드 포크 이전에 유효했던 지갑을 가진 사람이 이전 장부에서 처리한 거래는 다른 장부에서도 유효하게되므로 이는 결과적으로 한 장부를 통해 다른 사람으로부터 일정량의 암호화폐를 받은 사람은 다른 장부로 전환해 거래를 복제한 후, 허위로 동일한 양의 암호화폐를 자신의 계정으로 두 번째 전송을 할 수 있게 된다. 자신의 지갑이 공유된 장부 기록이 아니기때문에 하드 포크가 발생한 후 블록 체인을 이용하는 사용자는 이러한 공격에 취약하지 않다.
  
 
==예방 및 대책==
 
==예방 및 대책==

2019년 8월 14일 (수) 15:09 판

리플레이 공격 또는 리플레이 어택(replay attack)이란 기존 코인과 하드포크로 인해 나오는 새로운 코인이 동일 인증키를 사용하기 때문에 한쪽 코인의 출금정보를 가지고 다른 쪽 코인 출금을 시도하는 행위이다. 즉, 개인 지갑에 저장된 암호화폐가 중복 출금되는 현상을 말한다.

개요

리플레이 공격은 플레이백(playback) 공격이라고도 하며,블록체인 하드포크시 한쪽 블록체인의 트랜잭션 데이터를 다른쪽 블록체인에 그대로 복사 재전송해 다른쪽 블록체인에도 같은 트랜잭션이 기록되도록 하는 행위이다. 이로 인해 원하지 않는 트랜잭션이 일어나게 된다. 예를 들어, 하드포크 전 1000 이더를 보유한 A라는 사람이 있다. A는 이더리움ETCETH로 포크 된 뒤, 새로 생긴 ETC 1000개를 B라는 사람에게 ETH의 10분의 1 가격으로 팔았다. 그런데, 지갑을 열어보니, 남아있어야할 ETH가 모두 사라지고 없다. ETC 트랜잭션이 리플레이 돼 남아있어야 할 1000개의 ETH도 함께 B에게 전송된 것이다. A는 큰 손실을 본 것이고, B는 큰 이들을 본 것이다. 실제로 이 같은 일이 벌어지고 있어 거래소가 가장 큰 피해를 입고있다. 리플레이 어택은 해커의 소행이 아니라, 부실한 하드포크 코딩이 원인인 것으로 드러났다. 누군가 개입해 인위적으로 리플레이를 하는 것이 아니라, 하드포크가 불완전하게 이루어져, 한쪽 블록체인의 트랜잭션이 다른쪽 체인에도 자동으로 브로드캐스트 된다.[1]

사용

리플레이 공격은 겉보기에 유효한 자격 증명을 전달하여 보호된 네트워크의 저장된 정보에 액세스하는데 사용할 수 있다. 또한, 중복 거래를 하도록 금융기관을 속여 공격자가 공격대상의 계좌에서 직접 돈을 인출해낼 수 있다. 경우에 따라 해커는 서로 다른 암호화된 메시지의 일부를 결합하여 그 결과로 생긴 암호문을 네트워크에 전달하는데, 소위 '잘라내기-붙여넣기 공격'이라고 말한다. 이러한 공격에 대한 네트워크의 반응은 종종 해커에게 시스템을 악용하는데 사용할 수있는 유용한 정보를 제공하기도 한다.

한계

이와 관련된 위험성에도 불구하고 해커가 리플레이 공격만으로 달성 할 수있는 것에는 한계가 있다. 공격자는 네트워크가 거부하지 않고 전송되는 데이터를 변경할 수 없으므로 과거 작업 반복의 공격의 효과가 확연히 떨어지게 된다. 따라서 이러한 공격들은 상대적으로 방어하기 쉬운데, 데이터 전송에 타임 스탬프를 추가하는 기본적인 방어정책 만으로도 리플레이 공격의 시도를 막을 수 있다. 또한 서버는 반복된 메시지를 캐시에 저장한 후 특정 반복 횟수를 제한하여 공격자가 빠르고 성공적인 리플레이 메시지를 통한 연속적인 공격 시도 횟수를 제한할 수 있다.

문제점

중요한 결점이 되는 것은 아니지만, 리플레이 공격은 특히 암호화폐 거래 및 블록 체인 장부 환경과 관련이 있다. 그 이유는 블록체인 장부가 때때로 하드 포크 (hard forks)로 알려진 프로토콜 변경이나 업그레이드를 거쳐야하기 때문이다. 하드 포크를 진행하면 이전 장부는 소프트웨어의 이전 버전과 새로 업데이트된 버전으로 나누어져 분할된다. 일부 하드 포크는 장부를 업그레이드 하기위한 것이지만 다른 종류의 포크는 완전히 새로운 암호화폐를 발행하게 된다. 후자의 하드 포크 중 대표적인 사례 중 하나는 비트코인 캐쉬(Bitcoin Cash)가 2017 년 8월 1일, 대장격인 비트코인(Bitcoin) 장부로부터 포크를 할 수 있게 진행한 업그레이드 사례를 들 수 있다.

하드 포크가 진행되면 이론적으로 공격자가 블록체인 장부에 대한 리플레이 공격이 가능하게 된다. 하드 포크 이전에 유효했던 지갑을 가진 사람이 이전 장부에서 처리한 거래는 다른 장부에서도 유효하게되므로 이는 결과적으로 한 장부를 통해 다른 사람으로부터 일정량의 암호화폐를 받은 사람은 다른 장부로 전환해 거래를 복제한 후, 허위로 동일한 양의 암호화폐를 자신의 계정으로 두 번째 전송을 할 수 있게 된다. 자신의 지갑이 공유된 장부 기록이 아니기때문에 하드 포크가 발생한 후 블록 체인을 이용하는 사용자는 이러한 공격에 취약하지 않다.

예방 및 대책

모든 리플레이 어택에 대한 일반적인 대책

세션 ID와 구성요소 번호로 암호화된 각 구성요소에 태그를 지정하면 리플레이 어택을 방지할 수 있다. 이 솔루션 조합을 사용하면 서로 상호 의존적 인 것은 사용하지 않는다. 상호 의존성이 없기 때문에 취약점이 줄어 든다. 이것은 프로그램의 각 실행에 대해 고유한 임의의 세션 ID가 생성되기 때문에 이전 실행이 복제하기가 더 어려워지므로 효과가 있다. 이 경우 새 실행시 세션 ID가 변경되었기 때문에 공격자가 재생을 수행 할 수 없다.

세션 식별자에 추가

세션 토큰이라고도하는 세션 ID는 리플레이 어택을 피하는 데 사용할 수 있는 메커니즘 중 하나다.

  1. A는 B에게 일회용 토큰을 보내는데, B는 암호를 변환하고 결과를 A에게 보낸다. 예를 들어, 토큰을 사용하여 세션 토큰의 해시 함수를 계산하고 사용할 암호에 추가한다.
  2. A는 세션 토큰으로 동일한 계산을 수행한다.
  3. B와 A의 값이 모두 일치하는 경우에만 로그인에 성공한다.
  4. 이제 공격자 C가이 값을 캡처하여 다른 세션에서 사용하려고한다고 가정했을때, A는 다른 세션 토큰을 보내며 C가 캡처 된 값으로 응답하면 A의 계산과 다르므로 B가 아니라는 것을 알게된다.

세션 토큰은 무작위 프로세스로 선택해야한다. 그렇지 않으면 C는 A로 위장하여 미래의 예측 토큰을 제시하고 B가 해당 토큰을 변환에 사용하도록 설득 할 수 있다. 그런 다음 C는 나중에 회신을 재생할 수 있으며 A은 인증 을 수락 한다.

일회성 비밀번호

일회용 암호는 사용 후 또는 매우 짧은 시간 후에 암호가 만료된다는 점에서 세션 토큰과 유사하다. 세션 외에도 개별 트랜잭션을 인증하는 데 사용할 수 있다. 또한 인증 프로세스 중에 서로 통신하는 두 당사자 간의 신뢰를 설정하는 데 사용될 수 있다.

Nonces와 MAC

A은 nonces 를 보낼 수도 있지만 B가 확인해야하는 메시지 인증 코드 (MAC)를 포함해야한다.

타임 스탬프

타임 스탬프는 리플레이 어택을 방지하는 또 다른 방법이다. 보안 프로토콜을 사용하여 동기화를 수행 해야한다. 예를 들어 A는 주기적으로 시계와 함께 시간을 MAC과 함께 브로드 캐스트한다. B는 A에게 메시지를 보내려고 할 때 자신의 메시지에 자신의 시계에 대한 예상 시간을 포함시켜 인증한다. A은 타임 스탬프가 적절한 허용 범위 내에있는 메시지만 수락한다. 이 체계의 장점은 A가 난수를 생성 할 필요가없고 B가 A에게 난수를 요구할 필요가 없다는 것이다. 단방향 네트워크또는 단방향에 가까운 경우 이점이 될 수 있다. 리플레이 어택이 충분히 빠르게 수행된다면,합리적' 한계 내에서 성공할 수 있다는 것이 단점이다.[2]

각주

  1. 비트공자, 〈부실한 하드포크 코딩이 초래한 재난, 리플레이 어택(replay attack)/Seoul Bitcoin Forum〉, 《서울비트코인포럼》, 2016-07-31
  2. Replay attack〉, 《위키피디아》

참고자료

같이보기


  검수요청.png검수요청.png 이 리플레이 공격 문서는 보안에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.