Loading
2023 KDFS DFC 풀이
Capture The Flag/CTF 풀이

2023 KDFS DFC 풀이

이번 게시글에서는 플레인비트에서 연구팀으로 근무할 때 출제했었던 2023년 (사)한국디지털포렌식학회 디지털포렌식 챌린지 문제의 풀이 과정을 다루면서, 출제 의도 및 관점에 대해서도 작성해보겠습니다.

당시 회사에서 암호화폐 온체인 추적 및 암호화폐 서비스 아티팩트 연구를 메인 업무로 담당하고 있었는데, 당시 공부했던 내용을 대회 문제에 녹여내어 보고 싶기도 했고 이전에 암호화폐를 메인으로 다루던 디지털포렌식 대회가 없었던 것 같아 겸사겸사 출제를 하게 됐습니다. 


1. 시나리오 분석

1-1) 배경

평소 주식 투자를 즐겨하던 프로그래머 출신 김영끌은 최근 코인 투자를 시작했다. 코인 투자에 대한 지식이 없는 상태 에서 주식 투자 경험만 믿고 공격적인 투자를 지속한 결과 큰 자금 손실을 경험하게 되었다. 이를 비관한 김영끌은 감정에 치우쳐 코인 관련 커뮤니티에 범죄 예고 글을 게시하였다.

1-2) 주요 쟁점

사이버 수사관은 김영끌이 올린 범죄 예고 글을 신고 받고 김영끌의 집을 압수수색하였다. 수사관은 김영끌의 PC를 이미징하고 현장 조사하는 과정에서 랜섬웨어 범죄와 관련한 정황을 추가로 확인해 별건 수사를 진행하게 되었다. 김영끌은 범죄 예고와 관련된 행위는 인정했지만, 랜섬웨어와 관련한 모든 내용은 전면 부인하고 있다. 아래의 수집된 자료를 분석해 김영끌의 범죄 혐의를 입증하고 추가 공모자가 있는지 확인하자.

(사)한국디지털포렌식학회의 디지털포렌식 챌린지 대회는 시나리오 형 문제입니다. 주어진 시나리오를 기반으로 이미지 파일을 분석해서 보고서를 작성해 제출하는 형식의 대회입니다. 시나리오(문제 지문)는 대회 문제 파일과 함께 제공됩니다.

위 시나리오 정보를 바탕으로 혐의자 김영끌의 최근 관심사가 코인 투자라는 것, 그리고 랜섬웨어 관련 범죄 혐의를 전면 부인하고 있기 때문에 이미지 파일을 분석해서 코인과 랜섬웨어와 관련된 정보를 찾아야 하는 것이 관건이라는 것을 알 수 있습니다.

함께 제공된 그림 파일(랜섬웨어 피해자의 바탕화면 촬영 사진)

김영끌의 PC 이미지 파일의 해시값

  • SHA1 : 39c4e63ecc0715d249f57f57caaef35e7004bfec

랜섬웨어 피해자의 바탕화면 촬영 사진의 해시값

  • SHA1 : e8d1754a67218bf7ae14a5fa7b45be4d8b747b37

피해자의 시스템에서 확보한 랜섬웨어 파일의 해시값

  • SHA1 : 0b88dd8519259f4afd15aeb376ccea9c27b2a253
그리고 이번 대회에서는 위와 같은 촬영 이미지와 함께 랜섬웨어 파일의 해시값이 함께 제공되었습니다. 바탕화면을 보면 흔히 랜섬웨어에 감염되었을 때 볼 수 있는 랜섬 메시지를 확인할 수 있으며 중요한 내용은 일부러 가려놓은 것을 알 수 있습니다. 이는 문제 풀이에 있어 중요한 단서가 되는 것으로 추측할 수 있습니다.

김영끌의 시스템에 다른 피해자의 시스템에서 발견된 랜섬웨어 파일의 해시값과 동일한 파일이 있고, 그 파일을 실행했을 때 위 그림과 같이 랜섬 메시지를 확인할 수 있다면 김영끌의 랜섬웨어 범죄 혐의를 입증할 수 있을 것입니다.

1-3) 서술형 문제

  • 이미지 분석을 통해 “확인한 근거”를 바탕으로, “본 사건에서“ 조사관이 추가로 해야 할 조치가 올바르게 제시되었는가?
    • 분석 결과를 바탕으로 조사관이 추가적으로 확보해야 하는 증거물
    • 공범의 신원 확보와 체포로 이어지도록 하기 위해 조사관이 해야 할 조치
이번 대회에서는 통상적인 분석 보고서와 별도로 서술형 문제도 포함되어 있었습니다. 서술형 문제를 통해 얻을 수 있는 정보는 공범이 존재한다는 점과, 조사관이 놓친 증거물을 식별하는 것이 필요하다는 사실입니다.

2. 이미지 파일 분석

지금부터는 문제 풀이에 필요한 핵심적인 내용만 짚고 넘어가겠습니다.

C:\Users\souldrag\Desktop\#BTC매매일지.xlsx

시나리오의 앞 부분에서 확인한 바와 같이 김영끌의 코인 거래 장부 파일을 통해 초기 자금(약 4억)에서 3억 원 이상의 큰 금액을 손해본 것을 알 수 있습니다.


2-1) 메일 분석

C:\Users\souldrag\AppData\Local\Microsoft\Outlook

\souldrag576@gmail.com.ost

  • 분석 도구 : Kernel OST Viewer

김영끌의 시스템에는 MS Outlook이 설치되어 있습니다. 김영끌이 사용한 계정 중 souldrag@gmail.com의 메일 내역을 보면 BM Company라는 곳으로부터 채무 협박에 시달리고 있는 것을 알 수 있습니다.

이와 같은 정보를 바탕으로 김영끌은 빚을 지고 있었음을 알 수 있고 채무에 시달리고 있어 결정적인 범행 동기가 된 것을 추측할 수 있습니다. 또한 다른 메일을 보면 디스코드 사용 내역 또한 확인할 수 있습니다.

C:\Users\souldrag\AppData\Local\Microsoft\Outlook

\everyrecover56@gmail.com.ost

함께 발견된 everyrecover56@gmail.com 계정에는 비트코인을 지불했으니 복호화 프로그램을 달라는 요청 메일 2건이 수신되어 있는 것을 알 수 있습니다.

메일에 첨부된 캡처 이미지

식별된 비트코인 주소 : bc1q7ng04nqppjf6cf3296q4l56h9pxg3suzltud4e

피해자로 추정되는 인물들이 보낸 메일에 첨부된 캡처 이미지를 보면 수신 주소로 동일한 비트코인 주소를 확인할 수 있습니다. 또한 0.003 BTC가 전송되었는데, 경찰이 입수한 피해자의 랜섬 메시지에서 일부 확인된 정보와 동일한 것을 알 수 있습니다.


2-2) 웹 방문 기록 분석

C:\Users\souldrag\AppData\Local\Google\Chrome\User Data\Default\History

  • 분석 도구 : BrowsingHistoryView

김영끌은 평소 경제, 코인, 주식 등의 주제로 유투브 시청 기록이 많이 있으며, 채무 독촉 메일을 받은 19일 이후에는 사채 관련 글을 검색하며 상당히 불안에 시달리고 있었다는 것을 확인할 수 있습니다.

C:\Users\souldrag\AppData\Local\Google\Chrome\User Data\Default\History

그리고 중요한 점으로 21일부터 랜섬웨어와 관련해 검색을 했으며, 디스코드 채팅을 이용한 사실을 확인할 수 있습니다.

추가로, 크롬 확장 프로그램인 Metamask 검색 내역을 확인할 수 있습니다. Metamask는 암호화폐 지갑 프로그램으로 널리 알려져 있습니다.

또한, 파일 공유 사이트인 gofile.io에 접근해 어떤 파일을 업로드한 것을 추측할 수 있습니다.

그리고 23일에는 랜섬웨어와 관련된 뉴스 기사를 검색한 사실을 확인할 수 있습니다. 이는 김영끌이 랜섬웨어 공격을 수행한 뒤 피해 소식을 검색한 것으로 추측할 수 있습니다.


2-3) 디스코드 채팅 분석

C:\Users\souldrag\AppData\Local\Google\Chrome\User Data\Default\Local Storage\leveldb

디스코드는 사용자의 토큰 값을 이용해 로그인할 수 있습니다. 따라서 김영끌의 디스코드 대화 내역을 확인하기 위해서는 김영끌의 web discord 토큰 값 획득이 필요합니다. 이 토큰 값은 위 경로의 *.ldb 파일과 *.log 파일에서 획득할 수 있습니다.

김영끌의 디스코드 대화방 목록

  • 분석 도구 : DiscordChatExporter

김영끌의 디스코드에는 1:1 대화방 3개를 확인할 수 있으며 그 중 범죄와 관련된 대화방은 CyberNinja 대화방입니다.

CyberNinja와의 대화내역 중 일부

대화내역을 보면 김영끌이 CyberNinja에게 공범으로 삼기 위해 포섭을 시도하고 있는 것을 알 수 있습니다. 범죄 성공 한 건당 인센티브를 제공하는 것으로 합의가 되었으며, 0.0085 wBTC를 지불하는 것으로 범죄가 착수되었습니다. 또한 웹 방문 내역에서 확인한 gofile.io 서비스를 통해 랜섬웨어 파일을 전송한 사실도 확인 가능합니다.


2-4) 암호화폐 지갑 프로그램 분석 (Ledger Live)

김영끌의 디스코드 대화 내역을 바탕으로 코인을 전송한 사실을 알 수 있기 때문에 시스템에 설치된 암호화폐 지갑 프로그램에 대한 아티팩트 분석이 필요해진 상황입니다.

C:\Users\souldrag\AppData\Roaming\Ledger Live\app.json

김영끌의 시스템에는 Ledger Live라는 프로그램이 설치되어 있습니다. 해당 프로그램은 하드웨어 지갑인 Ledger를 컴퓨터에 연동하여 사용할 수 있도록 지원하는 프로그램입니다. 이 프로그램은 사용자의 코인과 관련된 정보를 app.json이라는 파일에 기록합니다. 여기서 김영끌의 Ledger 모델은 nano S Plus 인 것을 확인할 수 있습니다.

C:\Users\souldrag\AppData\Roaming\Ledger Live\app.json

또한 김영끌의 Ledger BTC, ETH 주소를 확인할 수 있으며, 이는 Outlook 메일에서 확인한 것과 동일한 주소입니다.

  • BTC(Ledger) : bc1q7ng04nqppjf6cf3296q4l56h9pxg3suzltud4e
  • ETH (Ledger) : 0x88e0e062325b2C8e5D161745C9C0ec09f4140027

C:\Users\souldrag\AppData\Roaming\Ledger Live\app.json

또한 김영끌이 수행한 트랜잭션 내역, 어느 주소에서 어느 주소로 얼마를 보냈는지도 확인할 수 있습니다.

C:\Users\souldrag\AppData\Roaming\Ledger Live\app.json

Swap 내역도 확인할 수 있습니다. Swap이란 특정 암호화폐를 다른 종류의 암호화폐로 교환하는 것을 의미합니다. 여기서 김영끌은 비트코인을 이더리움으로 스왑한 사실을 알 수 있습니다. 왜냐하면, 공범이 wBTC(ERC-20)를 요구했는데, 본인은 BTC 밖에 없기 때문입니다. BTC -> ETH -> wBTC로 전환할 수 있습니다.(물론 중간 과정을 거치지 않고 다이렉트로 스왑해주는 서비스도 있습니다.)

wBTC는 이더리움 환경에서 비트코인의 가치와 동일한 토큰을 이용하기 위한 목적으로 사용되는 토큰입니다. 즉, 1wBTC = 1BTC 입니다.

2-5) 암호화폐 지갑 프로그램 분석 (Metamask)

C:\Users\souldrag\AppData\Local\Google\Chrome\User Data\Default\Cache\Cache_Data

  • 분석 도구 : ChromeCacheView

크롬 브라우저의 캐시 데이터에서 메타마스크 앱에서 사용한 암호화폐 주소와 생성된 트랜잭션 등의 정보를 확인할 수 있습니다.

  • ETH(Metamask) : 0x5a6bF322C916c1a5E6Dc6A4284c7d4B20d79E617

2-6) 온-체인(On-Chain) 분석

지금 부터는 온-체인 분석입니다. 온-체인 분석은 시스템에 저장된 데이터가 아닌, 암호화폐 네트워크 상의 데이터를 조회해 분석하는 것을 의미합니다.

https://www.blockchain.com/explorer/transactions/eth/0xa45364dc20493dded53bac86e920c55f0a9d69c7f78898e4dd9fb4193c4724d0

0x5a6bF322C916c1a5E6Dc6A4284c7d4B20d79E617 주소에서 0.15 ETH를 0.00892858 wBTC로 스왑한 것을 알 수 있습니다. 그 후, 스왑한 wBTC 중 약속한 금액인 0.0085 wBTC를 공범(takemejail.eth) 주소로 전송한 것을 알 수 있습니다.

takemejail.eth 프로필 정보

ENS는 Ethereum Name Service의 약자입니다. DNS와 유사한 성격으로, 이더리움 주소를 외우기 쉽도록 부여할 수 있는 고유한 별칭 주소 서비스 입니다.

2-7) 공범 자금 추적

https://etherscan.io/address/0xF5F53280aE3555A629c2e5F4E6bCf3A38FD49a4e#tokentxns

공범은 김영끌로부터 받은 0.0085 wBTC를 0x4C666B763A54e6eAD70786039a6704738a93Dc0b 주소로 전송했습니다.

https://etherscan.io/address/0x4C666B763A54e6eAD70786039a6704738a93Dc0b#tokentxns

이후, wBTC를 전송하고나서 SWINGBY 토큰을 수신한 것을 알 수 있습니다.

https://swingby.network/

Swingby는 wBTC와 BTC를 교환할 수 있는 사이트입니다. 공범이 wBTC를 전송하고 Swingby Token을 수신한 것으로 보아 Swingby 서비스를 이용했을 것으로 판단할 수 있습니다. Swingby는 트랜잭션 내역을 조회할 수 있습니다.

0x42a285edd7b606ab2300c2f286b8c9dc727dcb2761a24980f12dfe940c9a826a 트랜잭션 조회 결과

익스플로어 페이지에서 트랜잭션을 조회한 결과 수신 비트코인 주소(bc1qpd2k6rguqsqe7wk4f8kq59yyl7mm8pg6f745q4)를 확인할 수 있습니다.

해당 비트코인 주소를 조회하면 Binance로 식별되는 주소에 0.0003 BTC를 보낸 사실을 확인할 수 있습니다. 이와 같은 사실을 바탕으로, Binance 거래소의 협조를 통해 공범의 신원을 확보할 수 있는 가능성이 생기게 됩니다.


2-8) 랜섬웨어 분석

  • C:\Users\souldrag\Pictures\ransom\ransom.exe

위 경로의 파일을 실행하면 바탕화면이 변경되고, 랜섬 메시지를 확인할 수 있습니다. 해당 파일의 해시값과 문제에서 제시한 다른 피해자의 시스템에서 발견된 파일의 해시값이 동일한지 검증할 필요가 있습니다. 랜섬 메시지의 내용은 다음과 같습니다.

1.    0.003 btc를 [김영끌 Ledger BTC 주소]로 전송해라.
2.    everyrecover56@gmail.com 으로 이메일 보내라.
3.    트랜잭션 캡처 이미지를 포함해라.
4.    그러면 복구 도구를 줄것이다.

C:\Windows\System32\winevt\Logs\System.evtx

  • 분석 도구 : EventViewer

이벤트 로그를 통해 23.09.21 14:50:15 시각에 SanDisk USB 연결 이력 사실을 확인할 수 있습니다.

김영끌 시스템에서 발견된 C:\Users\souldrag\Pictures\ransom.zip 파일의 생성시각이 23.09.21 14:50:49 이므로 USB에서 가져온 파일임을 추측할 수 있습니다.

김영끌 BTC 주소로 수신된 트랜잭션
이미지 파일 정보

김영끌의 랜섬 주소로 0.003 BTC가 전송된 트랜잭션은 총 3건 입니다. 하지만 Outlook 메일에서 확인한 복구 요청 메일은 2건이었습니다. 마지막 피해자의 수신 트랜잭션이 9월 26일이며, 이미징 날짜가 9월 23일 입니다. 최신 메일이 OST 파일에 동기화 되지 못한 채로 이미징을 했기 때문으로 추측할 수 있습니다. 따라서 범죄 수익을 계산할 때 총 3건의 트랜잭션이 모두 포함되어야 합니다.

이는 주요한 출제 포인트 중 하나였습니다. 암호화폐 거래라는 것은 언제 어디서나 수행될 수 있기 때문에 시스템을 이미징하고 접근하지 못하게 하더라도 자금이 움직일 수 있다는 점을 일러주고 싶은 의도가 담긴 문항입니다.

https://etherscan.io/address/0x88e0e062325b2C8e5D161745C9C0ec09f4140027

김영끌이 공범에게 지급한 인센티브 (0.005 ETH) 2건이 존재합니다. 23일 이미징이 이뤄지고 수사를 받고 있었기 때문에 3번째 인센티브를 전송하지 못한 것으로 추측할 수 있습니다.


2-9) 분석 요약

김영끌의 범죄 행위 흐름도 (출처 : 정소민진짜예쁘더라 팀)

  • 김영끌은 평소 Ledger Nano S Plus 모델을 사용
  • 암호화폐 투자로 큰 손해를 입자 랜섬웨어 범죄 계획
  • 웹 디스코드 채팅을 통해 공범 섭외
  • 범죄 착수금 지급을 위해 BTC ➔ ETH ➔ wBTC 스왑
    • Ledger ➔ Metamask ➔ 공범
  • SanDisk USB로부터 랜섬웨어 파일 가져온 뒤,
    • gofile 서비스 이용해 공범에게 공유
  • 공범은 Swingby Bridge를 이용해 wBTC ➔ BTC 스왑
    • BTC 중 일부를 Binance 거래소로 전송
  • 랜섬웨어 피해자는 총 3명
  • 김영끌은 공범에게 인센티브 2 회 전송

3. 채점 기준

20개 이상의 세부 채점 항목이 존재했습니다. 그 중 핵심은 다음과 같습니다.

  • 김영끌의 범죄 동기 / 범죄 행위 검색
  • Ledger 하드웨어 월렛 사용 식별 (하드웨어 모델 식별, 주소 식별, 트랜잭션 식별, Swap 식별)
  • Metamask 지갑 사용 식별 (주소 식별, 트랜잭션 식별, Swap 식별)
  • 공범에게 전송한 자금 이동 경로 식별
  • 랜섬웨어 파일 입수 경로, 잔존 경로, 유포 경로, 동일성 입증
  • 랜섬웨어 피해자 정보 및 규모와 피해 금액 식별
  • 추가 피해자 식별
  • 김영끌 범죄 수익 및 공범 인센티브 식별

4. 서술형 답안

  • 이미지 분석을 통해 “확인한 근거”를 바탕으로, “본 사건에서“ 조사관이 추가로 해야 할 조치가 올바르게 제시되었는가?
    • 분석 결과를 바탕으로 조사관이 추가적으로 확보해야 하는 증거물
      ✓  SanDisk Cruzer Blade 언급
      ✓  Ledger Nano S Plus 언급
    • 공범의 신원 확보와 체포로 이어지도록 하기 위해 조사관이 해야 할 조치
      ✓  공범 자금 추적 결과 최종적으로 Binance 거래소로 자금 중 일부가 전송되었다는 사실 언급
      ✓  Binance 거래소 협조를 통해 공범 신원 확보 시도 언급

서술형 답안의 경우 위 4가지 항목에 대해 적절한 근거를 들어 설명했으면 문제 없습니다.


5. 마치며...

5-1) 출제 의도 / 출제 목표

  • 암호화폐가 사회적 이슈가 된 지는 꽤 오랜 시간이 지났는데, 암호화폐를 메인 테마로 한 대회 문제가 출제되지 않았습니다.
    그래서 암호화폐 연구 내용을 바탕으로 대회 문제를 만들어보게 되었습니다.
  • 대회 참가자들이 로컬 아티팩트 분석과 온 체인 분석을 모두 경험해볼 수 있도록 시나리오를 설계했습니다.
    • 단순 전송 뿐만 아니라 크로스 체인 서비스 추적도 경험해볼 수 있도록 작성했습니다.
  • 블록체인 특성을 활용해보고 싶었습니다.
    • 대부분의 블록체인은 누구나 조회할 수 있도록 오픈되어 있습니다.
      • 이미지 파일 내부에서는 해결할 수 없는 문제를 이미지 파일 외적으로 해결할 수 있도록 유도했습니다.
  • 시나리오는 최대한 실감나고 몰입할 수 있게 만들었습니다.
    • 김영끌이 처한 상황과 심경이 참가자에게 잘 느껴질 수 있도록 백그라운드 데이터 생성에 신경을 썼습니다.
    • 주고 받은 메일과 디스코드 채팅 내용은 최대한 현실감 있게 작성해보려고 했습니다.

참여하신 분들 모두 고생 많으셨습니다. 대회에 참여하면서 즐거우셨길 바랍니다!🤟