ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Telegram Extractor (텔레그램 대화내용 추출)
    Issue 2020. 3. 25. 02:52

     

     

    '텔레그램'하면 제일 먼저 떠오르는게 'Private' ,'Secure'일 것이다.

    텔레그램에서도 이 부분을 가장 강조하고 있으며, 지속적인 업데이트로 더욱 더 견고해지고 있다.

    또한, 모든 소스코드를 오픈소스로 공개하여 암호화를 크래킹하면 보상을 지급하는 CryptoContest도 진행하고 있다.

     

    https://github.com/telegramdesktop/tdesktop - Telegram Desktop Github
    https://telegram.org/blog/cryptocontest - Telegram Crypto Contest

     

    요즘 말이 많은 '그 사건'에서 많은 메신저들 중 텔레그램을 선택한 이유도 위와 같은 'Private한 성격' 때문일 것이다.

    그러라고 만든게 아닐텐데 말이다.

     

    이런 사건에서 가장 중요한 것이 바로 '사용자 데이터'이다.

    메신저에서 언제, 누구와, 어떤 대화들이 오갔는지를 확인할 수 있는 데이터, 즉 증거물을 의미한다.

    이제는 대중들에게 많이 익숙해진 '디지털 포렌식'에서 이러한 데이터 획득에 대한 연구가 꾸준히 진행되고 있다.

     

    마침 이번에 '텔레그램 데이터 획득 연구'를 진행했었고, 그에 대한 결과를 기록하고자 이 글을 작성하려고 한다.

     

     


    Telegram

     

     

     

    먼저 텔레그램은 Cloud-Based 서비스로, 사용자들의 데이터들을 클라우드 서버에 저장해 놓는다.

    사용자가 새로운 기기에서 로그인을 하면 API를 이용하여 기존 대화 내용들을 복원하는 형태로 프로그램이 동작한다.

    그렇기 때문에 사용자 기기에는 캐시데이터를 제외한 대화내용들이 따로 저장되지 않는다.

     

    즉, 텔레그램 클라우드 서버말고는 그 어디에도 대화내용이 남지 않는다는 것이다.

     

     

    Telegram UserData (좌: Telegram Desktop, 우: Telegram Android)

     

    텔레그램을 설치하면 각 플랫폼마다 해당 디렉터리에 사용자 데이터가 생성된다.

    위 그림을 보면 사용자 데이터는 설치한 뒤에 생성되는 캐시 데이터만 저장되어 있는 것을 확인할 수 있다.

     

     


    Telegram User Data Extractor

     

    그럼 어떻게 사용자 데이터를 가져올 수 있을까?

    위에서 사용자 데이터를 가져올 때 'API'를 사용해서 가져온다고 했다.

     

    텔레그램과 Cloud서버간에 API통신을 분석해서 요청포맷을 그대로 맞춰주기만 한다면, 텔레그램에서 데이터를 가져오는 것처럼 우리 로컬저장소에도 데이터를 가져올 수 있다.

     

    물론, API를 요청하기 위해서는 사용자마다 고유한 User Credential이 필요하다.

     

     

    Telegram User Credential Encrypt

     

     

    User Credential은 사용자가 텔레그램에 로그인하게 되면 위와 같이 로컬에 파일로 생성된다.

    해당 파일은 'TDF$'라는 텔레그램 고유 파일헤더를 가지고 있으며, 암호화되어 있는 상태로 저장된다.

    그렇기 때문에 암호화를 평문으로 만들어주는 복호화 작업이 필요하다.

     

     

    Telegram User Credential Decrypt

     

    위와 같이 복호화 스크립트를 통해 User Credential를 얻어내면 클라우드에 있는 해당 계정에 접근할 수 있게된다.

     

     

    Telegram 대화

     

    이렇게 1:1대화를 나누면 대화 내용은 클라우드에 실시간으로 저장되고 API로 모든 대화내용을 가져올 수 있게 된다.

     

     

    Telegram Backup - Text Message

     

    위와 같이 스크립트를 실행하면 클라우드에 저장된 사용자의 대화내용들을 가져올 수 있다.

     

     

    Telegram Backup - Text Message 결과

     

    이렇게 사용자가 나눈 대화내용들을 로컬에 저장할 수 있다.

     

     

    Telegram Backup - Media

     

    이번엔 대화내용 중 Media파일들을 가져와보자

     

     

    Telegram Backup - Media 결과

     

    파일이름은 대화방에 올라왔던 그대로 저장되며, 정상적으로 파일이 다운로드된 것을 확인할 수 있다.

     

     


    Conclusion

    이번 글은 뭐 정리 목적도 있지만 텔레그램 관련된 최근 이슈가 글을 쓰게된 가장 큰 동기가 되었다.

     

    이런 사건들이 발생하면 '디지털포렌식'이라는 과정을 거치게 되는데. 이 과정이 '실제로 어떻게 연구되어서, 어떤식으로 진행되는가'에 대해서 한번 다뤄보고 싶었다.

     

    본문의 내용들로 모든 과정들을 말할 수는 없겠지만 어느정도 맛보기로는 충분하다고 생각된다.

    디지털 포렌식 연구에 관심있는 분들에게 해당 글이 도움 되었길 바라며 이만 글을 마치도록 하겠다.

    'Issue' 카테고리의 다른 글

    MS, 오픈소스 코드 검사도구 '소나' 공개  (0) 2017.10.28

    댓글

Designed by Tistory.