논문 리뷰 - (4) 비트코인 지갑의 아티팩트 분석 연구
리뷰/논문 리뷰

논문 리뷰 - (4) 비트코인 지갑의 아티팩트 분석 연구

고려대학교 정보보호학과 대학원생이 작성한 "비트코인 지갑의 아티팩트 분석 연구" 논문을 읽어봤습니다.

keyword : 비트코인, 가상화폐, 지갑, 클라이언트, 포렌식

 

비트코인 지갑의 아티팩트 분석 연구

 

요약

가상화폐가 불법 약물 거래 및 개인 자금 세탁을 목적으로 하는 범죄 행위에 빈번하게 사용되고 있지만, 블록체인 기반 거래의 특성 상 이에 대한 원점 추적이 어려우며 다크웹 등의 추가적인 은닉 수단을 활용하는 경우가 많아 범죄 수사에 제한이 있습니다. 본 논문에서는 가상화페 지갑 서비스 아티팩트를 분석하였으며, 지갑 사용자의 거래 행위와 관련한 데이터가 분석 대상 기기의 파일시스템 및 메모리에 저장되는 구조를 식별하고 추출하는 스크립트를 제작하였습니다. 이를 활용하면 Windows 10 운영체제 환경에서 별도로 설치하여 사용 가능한 4가지 지갑 서비스(Bitcoin Core, Bither, Bitpay, Electrum)를 대상으로, 각 서비스 내에서 거래 주소의 생성 및 관리, 발생한 거래 내역 등에 관한 데이터를 추출할 수 있습니다. 이러한 결과를 통해 수사 과정에서 확보한 디지털 기기에서 특정 가상화폐 거래가 실제로 발생하였음을 입증하고, 범죄 목적의 거래 주체를 특정할 수 있는 것을 목표로 합니다.

 

서론

가상화폐는 개인 단위의 결제 수단으로 활용되는 등 그 활용과 범위가 넓어지고 있습니다. 이와 함께 범죄 목적으로 사용되는 사례도 꾸준히 증가하고 있습니다. 토르 브라우저를 사용하는 등 범죄자들은 가상화폐 추적을 어렵게 하고 있습니다. 하지만 특정 거래에 대한 실 주체를 식별하기 위해 IP 및 네트워크 노드 등의 경로 데이터를 통해 추적하는 것 외에, 클라이언트 차원에서 PC나 디지털 기기 분석을 통해 해당 거래의 발생을 입증할 수 있습니다. 압수수색 과정에서 디지털 기기를 획득하였을 때, 기기 내 설치된 지갑 서비스 프로그램과 그에 저장된 가상화폐 주소, 거래 내역 등의 정보로부터 거래 주체를 특정할 수 있으며, 이를 통해 추후 범죄 규모 및 관련 대상을 추적하는 데 활용할 수 있을 것입니다.

본 논문에서는 PC 내 설치된 4가지 가상화폐 지갑 서비스를 통한 사용자의 행위 데이터와 관련한 아티팩트를 분석했습니다. 웹 서비스의 형태가 아닌 로컬 환경 내 실행 파일로 구동하는 방식의 지갑 서비스를 통해 실험을 진행하였으며, 분석에 활용한 가상화폐의 종류는 비트코인(BTC)으로 선정했습니다. 분석한 아티팩트 결과를 바탕으로 최종적으로 Python 기반의 WalletExtractor 프로그램을 제작했습니다.

 

기존에 진행된 연구

블록체인 데이터에서 확인할 수 있는 공개키를 기반으로, Meiklejohn 등은 동일 사용자로부터 사용된 각 데이터를 연결하여 주소별 군집화를 시도했습니다.

Spagnuolo 등은 사용자 및 거래 주소에 대한 분류를 수행하는 도구를 제작하여, 실제 블랙마켓에서 사용되는 주소들과 유명한 Mining pool에 대한 해킹 사례를 대상으로 성능 검증을 진행했습니다.

Gurkok 등은 OS X 환경에서의 가상화폐 클라이언트 서비스인 MultiBit의 아티팩트 분석을 위한 Volatility 플러그인을 개발했습니다.

Haigh 등은 안드로이드 환경의 서로 다른 7가지 서비스를 대상으로 서비스 아티팩트를 분석했습니다.

Montanez는 두 가지 운영체제 모두에서 분석했습니다. 이는 서비스 구매 내역 및 서비스를 통해 수행한 행위별 시각 데이터를 추출하였으나, .log 파일 등의 관련 데이터에서 확인할 수 있는 readable text 데이터에만 초점을 맞추어 진행했습니다.

Van Der Horst 등은 Windows 환경에서 2가지 지갑 서비스(Bitcoin Core 및 Electrum)를 대상으로 메모리 아티팩트를 분석했습니다.

Zollner 등은 해당 두 가지 서비스를 포함한 다양한 서비스별 중요 데이터 파일의 경로를 식별하고, 이를 수집하는 도구를 개발했습니다.

이러한 선행 연구에서는 Transaction ID, passphrase, address 등 다양한 아티팩트에 대해서 접근했지만, Timestamp에 관한 데이터 분석은 진행하지 않았습니다. 본 논문에서는 총 4가지 가상화폐 지갑 서비스에 대하여, 거래 주소 생성 및 거래 시각 등의 Timestamp를 포함한 아티팩트를 분석했습니다.

Tyler Thomas 등은 가상화폐 하드웨어 지갑에 대한 메모리 아티팩트 분석 및 시각화를 위한 Volatility 플러그인을 개발했습니다. 메모리 내 식별 가능한 지갑 서비스 프로세스 정보 및 하드웨어 정보, 거래 내역 정보를 포함한 아티팩트 분석 상세 결과를 제공합니다.

 

본문

비트코인을 예시로 살펴보면, 주소 포맷은 크게 P2PKH(Pay to Pubkey Hash), P2SH(Pay to Script Hash), P2WPKH(Pay to Witness Public Key Hash)로 분류됩니다. 각 비트코인 주소는 거래에 활용되는 특정한 Public Key, Private Key 쌍을 가지며, Public Key의 해싱 값을 기반으로 몇 가지 추가 변환 과정을 통해 생성됩니다. 3가지 주소 포맷은 각각 서로 다른 특성을 가집니다. P2PKH와 P2SH 포맷은 비트코인의 표준 스크립트 입니다. 이들의 비트코인 주소 값은 "1", "3" 으로 시작합니다. P2WPKH는 가장 최근에 등장한 포맷이며 기존의 base58 인코딩을 활용한 것과 달리 base32 인코딩 방식을 기반으로 하여, 주소의 가장 앞부분을 통해 메인넷(bc)과 테스트넷(tb) 환경을 구분할 수 있습니다.

위와 같은 정보는 메모리에서 데이터를 추출할 때, 정규표현식 작성에 도움이 될 것입니다.

암호화 기능을 선택할 수 있는 경우에는 암호화를 수행한 지갑 하나, 암호화를 수행하지 않은 지갑 하나를 생성하여 테스트했으며, 암호화 기능을 선택할 수 없는 경우에는 하나의 지갑을 생성해서 진행했습니다. 또한 모든 지갑 서비스 내에서 테스트넷이 아닌 메인넷 환경으로 실거래를 발생시켰으며, 각 거래의 발생 여부를 분석하기 위한 목적이므로 입금과 출금 행위를 구분하지 않았습니다.

지갑 서비스는 거래 주소 생성 및 거래 발생 등의 이벤트에 관련한 데이터를 %APPDATA% 경로 하위 디렉토리에 저장합니다. 서비스를 실행시켜 UI를 통해 확인 가능한 주소 생성 이력과 시각, 거래 내역 등은 모두 해당 서비스가 설치된 기기의 파일 시스템에 저장되어, 이후 서비스 프로세스에 의해 해석되어 보여집니다.

지갑이 암호화되었을 경우에는 파일시스템에서의 아티팩트 분석이 불가능하고, 메모리 덤프를 활용하는 방안으로 접근해야 합니다. 본 연구에서 메모리 분석은 지갑 서비스 프로세스가 파일시스템 상의 지갑 데이터를 읽어들이는 것을 확인한 후에, .vmem 파일을 확보하여 진행했습니다. 암호화되지 않은 지갑의 경우에는 파일시스템에 저장되는 평문 데이터 구조를 확인하여 메모리 덤프 내에서의 패턴 기반 탐색을 진행했으며, 파일시스템 상에서 아티팩트 데이터의 평문 구조를 확인할 수 없는 경우에는 확보한 메모리 덤프 내에서 관련 데이터의 저장 패턴을 직접 분석했습니다. 암호화가 되지 않은 지갑을 생성한 후에 지갑 데이터의 평문 저장 패턴을 분석하여 메모리 덤프 상에서 검색한 결과, 암호화된 지갑의 데이터를 동일한 구조의 평문 형태로 모두 식별했다고 합니다.

본 연구에서는 실제 생성된 거래 주소에 초점을 두어 분석하였으나, Electrum 서비스의 경우에는 사용자에게 순차적으로 발급될 주소 30개를 미리 생성하여 관리합니다.

각 서비스를 통해 실제 사용자가 생성한 주소를 식별하면, 이와 동일한 데이터 블록에서 주소별 생성 시각을 확인할 수 있습니다. 모든 서비스에서 생성 시각은 Unix Time 포맷으로 저장되어 있습니다. 이와 더불어 Bither 및 Electrum 서비스의 경우에는 거래 주소의 경우와 유사하게, 해당 데이터 블록에서 생성 시각을 식별하기 위한 다른 특정 문자열들이 존재합니다. Bitcoin Core 서비스는, 별도의 문자열 없이 지갑 데이터 파일에서 거래 주소의 위치보다 4byte 이전에 16진수의 Little Endian 방식으로 시각 데이터(4byte)를 저장하며, Bitpay 서비스는 특정 주소에 대한 생성 시각을 별도로 관리하지 않습니다.

특정 지갑 내 거래 주소를 기반으로 발생시킨 입출금 거래에 관한 데이터는, 해당 지갑 데이터 파일에 함께 저장되는 경우와 별도의 거래 데이터 파일로 존재하는 경우로 나뉩니다. Bitpay 및 Electurm 서비스의 경우에는, 지갑 데이터 파일 내에서 거래 정보를 식별할 수 있는 특정 문자열과 함께 저장됩니다. Bither 서비스는 별도의 .db 파일에 거래 내역 및 시각 등의 정보를 저장하며, Bitcoin Core 서비스는 블록체인 데이터를 블록 단위 (blk.dat)로 저장 및 관리합니다. 또한 발생한 거래와 관련하여 저장되는 정보 유형은 모든 서비스에서 거의 동일하였으며, 거래 해시 및 거래 시각은 공통적으로 포함되어 있습니다.

Bitcoin Core를 제외한 모든 서비스는 파일시스템 내에서 거래 해시 또는 시각을 식별하기 위한 특수 문자열이 존재하였으나, 해당 서비스가 관리하는 블록 데이터 단위에서는 이를 확인할 수 없었습니다. 하지만 메모리 덤프에서는 TXID와 시각 정보가 각각 "Transaction ID", "Date" 의 문자열과 함께 존재했으며, 유니코드 문자열의 형태로 저장되었습니다. 기타 모든 서비스는 거래 시각이 모두 Unix Time 포맷으로 파일 시스템에 존재합니다. Electrum 서비스는 기타 서비스들과 다르게, 거래 시각에 대한 값이 지갑 데이터 파일에 기록됩니다.

 

그 외 지갑 별칭 데이터 확인 방법과 WalletExtractor 도구 개발에 대한 내용이 포함되어 있으나 생략하도록 하겠습니다.

 

사실 이번 논문은 제가 곧 작성해야 할 논문 주제와 상당히 근접한 내용의 논문입니다. 본 논문의 연구의 배경이 된 사업에 저도 참여중이기 때문인데요, 이번 논문을 읽어보면서 연구적인 관점의 조금 더 개선할 수 있는 부분을 고민하고 정리해서 제 논문에 반영해봐야겠습니다.