일렉트럼 지갑, 악성 서버가 거래 바꿔치기…4.8.3 긴급 패치

일렉트럼, 10월 24일 보안 업데이트 4.8.3 배포하고 취약점 공개
악성 서버가 받는 주소를 바꾼 가짜 거래를 보여 주고 수수료 올리기(RBF)를 유도
실제로 이 공격을 하는 서버가 있다고 밝혀…가짜 거래 수수료를 올린 1명이 손실
비트코인 소프트웨어 지갑 일렉트럼(Electrum)이 10월 24일 보안 업데이트 4.8.3을 내놓고, 악성 서버가 사용자의 송금을 가로챌 수 있던 취약점을 공개했다. 개발진은 GitHub 보안 권고에서 "일부 서버가 실제로 이 공격을 하고 있다"며 업데이트를 당부했다. 심각도는 '높음(high)'으로 매겼고, 4.8.3보다 낮은 모든 버전이 영향을 받는다.
보낸 거래는 사라지고 가짜가 '대기 중'으로
일렉트럼은 비트코인 전체 장부를 내려받지 않는 가벼운 지갑이다. 대신 일렉트럼 서버에 접속해 내 주소의 거래 내역을 받아 온다. 블록에 담긴 거래는 지갑이 직접 검증하지만, 아직 블록에 들어가지 않은 '미확인 거래'는 서버가 알려 주는 대로 믿는 구조다. 개발진은 이 점을 공식 FAQ에 "서버는 미확인 거래에 대해 신뢰받는다"고 적어 왔다.
공식 FAQ에 따르면 일렉트럼은 평소 서버 10곳 안팎에 동시에 접속하지만, 대부분은 블록 정보와 수수료 추정치를 받는 데만 쓴다. 내 주소의 거래 내역을 받아 오고 내가 만든 거래를 네트워크에 내보내는 일은 그중 임의로 고른 '주 서버' 한 곳이 맡는다. 이 주 서버가 악의를 품으면 송금과 내역 표시를 모두 쥐게 된다.
공격은 이 틈을 노렸다. 사용자가 송금을 보내면 악성 서버는 그 거래를 비트코인 네트워크로 퍼뜨리지 않고 붙잡아 둔다. 그리고 받는 주소만 공격자 주소로 바꾼 가짜 거래를 사용자의 지갑 내역에 띄운다. 가짜 거래는 서명이 맞지 않아 실제로는 쓸 수 없지만, 지갑은 이를 검사하지 않고 '미확인' 상태로 보여 줬다. 원래 보낸 거래는 화면에서 사라진다.
수수료를 올리는 순간 진짜 서명이 붙는다
문제는 그다음이다. 거래가 계속 미확인으로 남아 있으면 사용자는 보통 수수료를 올려 거래를 다시 보내는 기능(RBF, Replace-by-Fee)을 누른다. 이때 일렉트럼은 화면에 떠 있는 가짜 거래를 바탕으로 새 거래를 만들고, 이번에는 사용자의 키로 올바르게 서명한다. 수수료만 올렸다고 생각한 사용자의 코인이 공격자 주소로 가는 진짜 거래가 되는 셈이다.
신고자 두 명은 공격자 주소의 끝 네 글자가 원래 받는 주소와 같았다고 전했다. 주소 끝자리만 보고 확인하는 습관을 노린 것이다. 손실을 본 사용자의 경우 서버가 만든 가짜 거래는 수수료가 0이었다. 개발진은 사용자가 수수료를 올리도록 일부러 그렇게 만든 것으로 추정했다. 손실 규모와 공격 서버의 주소는 밝히지 않았다.
첫 신고자는 원래 보낸 거래가 비트코인 네트워크에 전혀 퍼지지 않았다고 알렸다. 서버가 거래를 붙잡고 있었다는 뜻이다. 코인데스크에 따르면 이 사용자는 트레저 하드웨어 지갑 두 대를 묶은 2-of-3 멀티시그(서명 3개 중 2개가 있어야 출금되는 방식) 지갑을 쓰고 있었고, 손실을 신고하지는 않았다.
- 첫 신고. 송금 직후 지갑 내역에 다른 거래가 떠 있다는 내용으로, 이때는 수수료 올리기를 통한 탈취 경로까지는 파악하지 못했다
- 두 번째 신고. 가짜 거래의 수수료를 올렸다가 돈을 잃었다는 사용자(Raju-K12)의 비공개 제보
- 수정 코드를 반영한 4.8.3 태그 생성
- 4.8.3 설치 파일 배포와 함께 보안 권고 공개
패치 뒤에도 남는 빈칸
4.8.3부터 일렉트럼은 내 주소에서 돈이 나가는 미확인 거래를 내역에 넣기 전에 서명을 검사한다. 서명이 맞지 않는 가짜 거래는 더 이상 지갑에 표시되지 않는다. 다만 개발진은 검사 대상이 '내 주소에서 나가는 거래'뿐이라고 밝혔다. 남이 나에게 보내는, 아직 블록에 들어가지 않은 입금 거래는 여전히 검증하지 않는다. 블록에 담긴 거래는 기존처럼 지갑이 직접 확인한다.
4.8.3은 윈도·맥·리눅스용과 안드로이드용 설치 파일이 함께 나왔다. 직전 버전 4.8.2는 9월 12일 배포됐다. 릴리스 노트는 4.8.3을 '보안 업데이트'로 분류했고, Raju-K12를 포함한 보안 제보자 네 명의 이름을 올렸다. 다만 이 가운데 따로 공개된 보안 권고는 이번 건 하나다. 업데이트에는 이 밖에도 플러그인 정보 검증 강화, 라이트닝 인보이스 해석을 더 엄격하게 바꾼 수정, 이중 지불로 미확인 거래를 취소하는 명령(dscancel) 추가 등이 함께 담겼다.
일렉트럼 사용자가 할 일
개발진은 4.8.3으로 업데이트하라고 권고했다. 바로 업데이트할 수 없다면 수수료 올리기를 포함해 어떤 거래든 서명하기 전에 받는 주소와 금액이 맞는지 처음부터 끝까지 확인해야 한다고 밝혔다. 직접 운영하는 서버처럼 믿을 수 있는 서버에만 접속하는 사용자는 이번 공격의 영향을 받지 않는다.