당신의 암호화폐 프로그램은 안전한가요?
Blog/외부 Blog

당신의 암호화폐 프로그램은 안전한가요?

※ 본 게시물은 'PLAINBIT' 재직 당시 작성한 블로그 글을 공유하는 것입니다.

원문 참고 : https://blog.plainbit.co.kr/your-cryptocurrency-wallet-software-is-safe/


1. 암호화폐 지갑 프로그램

암호화폐를 이용하는 사람들 중 대부분은 거래소를 이용해 자산을 관리하고 있을 것이다. 하지만 암호화폐를 관리하기 위한 목적으로 별도의 암호화폐 지갑 프로그램을 사용할 수도 있다. 암호화폐 지갑 프로그램은 형태에 따라 다음과 같이 구분할 수 있다.

  • 모바일 애플리케이션
  • 설치형 프로그램(Windows/Mac/Linux)
  • 웹 브라우저 확장 플러그인

암호화폐 지갑 프로그램은 어떤 아티팩트를 생성할까? 암호화폐 세계에서 주요 정보는 다음과 같다.

  • 니모닉 시드
  • 개인키
  • 공개키(주소)
  • 트랜잭션 ID/Hash

[그림 1] 암호화폐 주요 정보의 관계

주요 정보의 관계는 위 그림과 같이 표현해볼 수 있다. 니모닉 시드를 알면 개인키를 알 수 있고, 개인키를 알면 주소를 알 수 있다. 주소를 알면 그 주소를 포함하고 있는 트랜잭션 데이터를 조회할 수 있다.

따라서 니모닉 시드가 노출되면 시드에서 파생될 수 있는 모든 공개키와 개인키의 권한을 잃어버리는 것과 같다. 개인키가 노출되면 개인키에 매칭되는 공개키의 권한을 잃어버리는 것과 같다. 여기서 권한이라고 하는 것은 암호화폐에 대한 소유권을 의미한다. 공개키 또는 트랜잭션 ID가 노출되는 것으로는 암호화폐의 소유권에 영향을 주지 않는다.

[그림 2] Exodus 프로그램

위 그림은 암호화폐 지갑 프로그램 중 "Exodus" 라는 프로그램의 이더리움 지갑 화면을 캡처한 것이다. 화면을 보면 현재 이더리움 지갑의 잔액, 수신 트랜잭션 정보 등을 얻을 수 있다. 그리고 우측의 메뉴를 보면 개인키를 조회할 수 있는 "View Private Keys"라는 기능이 존재하는 것을 알 수 있다.

Exodus를 비롯한 많은 지갑 프로그램이 비수탁형이기 때문에 주요 데이터를 로컬 어딘가에 저장하고 있을 것이라는 것을 알 수 있다. 이는 암호화폐 지갑 프로그램의 아티팩트를 분석하면 이와 같은 데이터들을 획득할 수 있다는 의미와 같다.

비수탁형은 제3자가 아닌 암호화폐 소유주가 직접 키를 관리하는 방식이다.

약 20종의 지갑 프로그램 아티팩트를 분석해본 결과 대부분의 프로그램에서 암호화폐 주소, 트랜잭션 ID에 대한 정보는 어렵지 않게 획득할 수 있었다. 반면, 니모닉 시드, 개인키와 같은 중요 데이터는 사용자의 패스워드 값으로 암호화해서 저장하는 것을 확인했다. 지갑 데이터가 온전히 남아 있다면 사용자의 패스워드를 통해 지갑에 접근할 수 있기 때문에 사용자의 패스워드도 니모닉 시드 만큼이나 중요한 확보 대상이다. 패스워드를 알아야 니모닉 시드를 알 수 있기 때문에 가장 중요하다고도 볼 수 있다.

지갑 프로그램의 아티팩트를 분석할 때, 수사 관점에서 주요 데이터를 획득하려는 목적은 두 가지로 구분할 수 있으며 각각의 요소는 다음과 같다.

  • 암호화폐 몰수에 필요한 요소 : 니모닉 시드, 개인키, 사용자 패스워드
  • 트랜잭션 모니터링에 필요한 요소 : 니모닉 시드, 개인키, 사용자 패스워드, 암호화폐 주소, 트랜잭션 ID

2. 안전하지 못했던 암호화폐 지갑 프로그램

그렇다면 안전한 지갑 프로그램은 니모닉 시드, 개인키와 같은 중요 데이터를 로컬에 저장하되, 암호화해서 저장해 사용자의 패스워드를 통한 복호화 과정 없이는 그 내용을 알기 어려워야 한다고 볼 수 있다. 하지만 일부 지갑 프로그램에서 이와 같은 중요한 규칙이 한 동안 지켜지지 않았던 사실을 확인했다.

[그림 3] Blockstream Green의 로그 저장 경로

  • %UserProfile%\AppData\Local\Blockstream\Green\logs\[version].txt

"Blockstream Green"이라는 지갑 프로그램은 프로그램 사용 중 발생하는 로그를 위와 같은 경로에 저장하고 있다. 기존에는 프로그램 버전이 업데이트 되면 새 버전 값으로 로그 파일이 새로 생성되어 추가되는 형식으로 동작했다.

[그림 4] 로그 파일 중 일부1

"Blockstream Green" 1.1.x 버전 대에서는 위 그림과 같이 암호화폐 주소와 트랜잭션 ID값을 로그로 기록하고 있기 때문에 사용자의 패스워드 없이 획득할 수 있는 중요한 아티팩트 중 하나였다.

[그림 5] 로그 파일 중 일부2

그 외에도 사용자가 암호화폐 지갑에 접근하기 위해 로그인을 시도했다는 사실도 로그 파일에 기록하는 것을 알 수 있다.

[그림 6] Blockstream Green 1.2.0 버전 릴리즈 로그

- https://github.com/Blockstream/green_qt/releases?page=1

1.1.x 대 버전에서 1.2.0 버전으로 업데이트하는 과정에서 GUI와 관련해서 많은 업데이트가 이뤄졌는데, 여기서 큰 문제가 발생한다.


이어지는 내용은 회사 블로그를 참고해주세요^^