Forensic Analysis of the ChatSecure Instant Messaging Application on Android Smartphones

Hunjison·2022년 1월 3일
0

Reading Papers

목록 보기
3/18

(간략하게 읽은 논문)

평가

지금에서 보면 별거 아닌 내용을 주저리주저리 길게도 써놨다,, 라는 생각이 들지만 이 연구가 2016년에(딱 핫할 타이밍에) 진행되었다는 점에서 가치가 있다. 내가 2021년에 수행했던 연구와 거의 유사한 것이 2016년에 수행되었다는 것만으로도 가치가 있다.

연구 방법과 결과, 난이도는 사실 별거 없다. 에뮬레이터 환경에서 수행하였으며, 따라서 루팅도 필요 없었다. ChatSecure는 오픈소스였기 때문에 동적 분석 없이 코드 읽기로만 데이터베이스 암호화를 파악한 것으로 보인다. 메모리 분석은 LiME과 Volatility 도구를 이용하여 수행하였는데, 그마저도 실제 디바이스에서 LiME이 동작하지 않아 검증을 수행하지 않았다. 연구를 너무 쉽게 하려고 했던 것은 아닌지,, 그래도 실제 디바이스를 위해서 Cellebrite 등의 도구를 이용하여 검증한 점은 칭찬할 만하다.

특이했던 점은 ChatSecure가 데이터베이스에 모든 멀티미디어 파일을 다 때려넣는 구조였다는 것이다(보통 이렇게하면 DB가 너무 커지기 때문에 별도 암호화를 한다). 따라서 DB 암호화만 분석하면 모든 사용자 데이터에 대한 원본 파일을 획득할 수 있었다.

0. Abstract

안드로이드 스마트폰에서 ChatSecure라는 메신저를 대상으로 포렌식 분석을 하였음. ChatSecure가 주고 받은 메시지와 파일들을 2개의 AES-256으로 암호화된 데이터베이스에 저장하는 것을 발견하였고, 유저가 초기에 설정한 패스워드를 알고 있을 때에 그것을 복호화하기 위한 기법을 고안하였다.
게다가 우리는 디바이스의 volatile 메모리로부터 패스워드를 식별하고 추출하는 방법을 보여주었다, 그것은 유저가 (애플리케이션에) 접근한 이후에 ChatSecure의 실행 시간 동안에 지속된다. 그러므로 패스워드가 공개되지 않을 때에도 복호화를 수행할 수 있다.
마지막으로 우리는 ChatSecure의 데이터베이스에 저장된 데이터를 어떻게 분석하고 연관지을지를 논의하였다, 메신저 계정에서 유저와 그의 친구들을 식별하기 위한 목적으로. 또한 주고 받은 메세지와 파일들의 내용을 시간 순서대로 재구축하기 위한 목적으로.
우리의 스터디는 에뮬레이트 디바이스에서 실험 방법을 이용하였는데, 이것이 결과의 재생산 가능성을 제공하며, 이 결과를 실제 스마트폰에서도 검증하였다.

1. Introduction

[ChatSecure에 대해서 유저 패스워드를 알고 있을 때에 DB 복호화 가능, volatile memory 분석을 통해 유저 패스워드 복구 방법을 발견하였음. DB 데이터에 대해서 시간적 재배열, 계정간 연관 짓기 등 사용 방법도 연구함.]
Instant Messaging 애플리케이션 굉장히 유명하고 많이 사용, 불법 행위도 많이 저지른다. 범죄자들도 범죄에 IM을 많이 사용한다. 포렌식 분석은 아티팩트들에 얼마나 접근 가능하냐에 달려있는데, 이것의 위치를 특정하고, 추출하고, 분석함으로써 많은 양의 증거들을 복구할 수 있다.
그러나 상황이 변화하고 있다. IM 통신이 전달되는 과정에서 서비스 제공자로부터 도청될 수 있다는 경각심이 증가하면서, '안전한' IM 애플리케이션에 대한 수요가 증가하였다. 이러한 애플리케이션들은 개인정보-보호적인 기능들을 지원하는데, 전송되는 데이터와 로컬 저장 데이터에 대한 강력한 암호화, 안전한 유저 인증, 그럴듯한 거부능력, forward secrecy 등등. '안전한' IM 메신저들은 포렌식 분석가에게 새로운 도전을 가져왔다, 개인정보-보호 특징이 가져오는 이슈들을 적절히 대응해야 한다는.
...(쓸모없는 이야기들)

Contribution

  • ChatSecure이 모든 메시지와 파일들의 사본을 로컬 저장소에 두 개의 암호화된 SQLite v.3 데이터베이스에 저장한다는 것을 밝혀내었다.
  • 데이터베이스들의 암호화 절차를 분석하였고, 유저에 의해 설정된 패스워드를 사용하여 데이터베이스를 복호화하는 알고리즘을 구현하였다.
  • 패스워드를 안드로이드 디바이스의 volatilie memory로부터 복구하는 방법을 발견하였다.
  • ChatSecure에서 생성된 아티팩트들을 해석하는 방법에 대해 논의하였으며, 이 아티팩트들이 포렌식적 재구축(시간적 재배열, 계정간 연관짓기)에서 어떻게 연관지어질지에 대해 밝혀내었다.
  • ChatSecure에서 삭제된 데이터는 SQLCipher와 IOCipher에서의 안전한 삭제 기술로 인해 복구가 불가능하다는 것을 밝혀내었다.
  • 에뮬레이트된 디바이스에서 실험하는 방법을 고안하였으며, 이것이 재생산 가능성을 높여주며, 실제 스마트폰에서도 이 결과를 검증하였다.

2. Related Works

생략

3. Analysis methodology and tools

[1) 2) 3)의 이유로 에뮬레이터에서 분석을 수행하였음.]
연구는 통제된 실험을 통해 수행되었는데, 각각의 실험은 1-1 대화, 그룹 대화, 파일 전송 등 특별한 시나리오를 나타낸다. 각각의 실험 이후에는 보낸 디바이스와 받은 디바이스의 내부 메모리를 조사하여, 데이터 식별, 해독, 분석을 수행하였다. ChatSecure v14.2.3을 사용하였다.
ChatSecure에서 사용된 데이터는 일반적으로 유저에게 접근이 불가능하다. UFED, XRY, Oxygen Forensics Detective와 같은 도구를 사용하는 것은 이러한 획득을 포렌식적으로-올바른 방법으로 수행할 수 있다. 그러나 이러한 접근은 한계를 가진다

1) 제한된 일반화가능성 : 결과의 일반화를 자신있게 하기 위해서는 많은 수의 디바이스와 안드로이드 버전이 실험에 사용되어야 한다. 그러나 이것은 높은 비용과 많은 시간을 걸리게 하기 때문에, 실용적으로 디바이스에 사용된 디바이스를 제한하고, 잠재적으로 결과의 일반성에 의문을 가지게 될 수 있다.
2) 제한된 재생산성 : 결과를 재생산하고 싶은 누군가는 동일한 세트의 디바이스, OS 버전, 포렌식 도구를 사용하여야 하는데, 이것이 디바이스 접근 가능성과, 포렌식 도구의 비용 측면에서 문제가 있을 수 있다.
3) 제한된 통제성 : 스마트폰은 복잡한 디바이스이고, 여러 개의 애플리케이션과 서비스가 실행되기 때문에, 각 실험에서 순간의 정확한 조건을 재생산하기 힘들 뿐만 아니라, 다른 애플리케이션에 의한 오염의 가능성을 확실히 배제할 수가 없다.(volatile 메모리 분석 때문에 이런 얘기를 하는 것 같음)

이러한 한계를 극복하기 위해서, 에뮬레이터를 사용한다. 1) 에뮬레이터는 서로 다른 버전을 테스트해도 비용적으로 부담이 없기 때문에 일반화를 더욱 잘할 수 있다. 2) 재생산성도 높은데, 제3자가 동일한 실험 환경을 마련하기에 어려움이 없기 때문이다. 3) 통제성도 높아지는데, Android Device Monitor(AVD)를 사용하면 에뮬레이트 디바이스를 완전한 통제 하에 둘 수 있기 때문이다.
AVD로 모든 실험을 진행하였고, 실험이 끝난 후에 AVD에서 제공하는 pull 기능을 이용하여 모든 폴더와 파일을 추출하였다. 대체적으로 ADB를 이용할 수도 있다.
결과를 검증하기 위해 실제 디바이스에서의 결과와 비교하였다. ...(생략)

[메모리 분석은 에뮬레이트 환경에서만 수행하였고, LiME으로 덤프하고 Volatility로 분석하였음.]
volatile 메모리에 대해서도 조사를 하였는데, 4.7에서 설명할 것 처럼 LiME이라는 도구를 이용하여 덤프를 수행하였고, Volatility라는 도구로 분석을 수행하였다. 오로지 ARM 아키텍쳐에서만 분석을 수행하였는데, LiME라는 도구가 ARM 아키텍쳐만 지원하기 때문이었다. LiME은 디바이스 루팅을 요구했는데, AVD 환경에서는 루트를 지원하기 때문에 크게 문제되지 않았다.
실제 디바이스를 대상으로는 메모리 분석을 검증하지 않았는데, LiME가 동적으로 모듈을 로딩하는 안드로이드 커널 지원이 되지 않기 때문이다. ... 하는 다양한 이유로 LiME을 이용하여 검증하지 못했다.
ChatSecure에 대한 소스 코드도 검사하였다, 우리가 관찰한 행동을 검증하기 위해서 혹은 데이터의 생성 과정을 이해하기 위해서. (아니 애초에 실험보다 소스코드를 읽는게 더 빠른거 아닌가? ㅋㅋ)

4. Forensic analysis of ChatSecure

ChatSecure가 이러이러한 기능을 지원해요... (생략)

진행 순서는,
(4.2)ChatSecure가 생성하는 artifacts, 저장 위치에 대한 나열
(4.3)유저 데이터에 대한 재구축
(4.4)친구 데이터에 대한 재구축
(4.5)시간적 재배열, 주고받은 메시지의 내용.
(4.6)파일들.
(4.7)암호화된 파일에 대한 복호화 문제.
(4.8)삭제된 데이터에 대한 복구 불가능성

4.2 ~ 4.6 생략

4.7. Dealing with encryption

ChatSecure은 SQLCipher을 기반으로, impsenc.db, media.db 두개의 데이터베이스에 대해서 AES-256 암호화를 수행한다. SQLCipher에서 사용한 암호화 키는 절대 노출되지 않으며, 내부 메모리에 저장되어 데이터베이스 복호화에 사용될 수 있도록 한다. 상대방이 데이터베이스를 저장된 키로 열 수 없게 하기 위해서, CacheWord라는 라이브러리를 이용하여, 유저가 지정한 비밀 패스워드로 암호화하여, 그것을 info.guardianproject.cacheword.prefs.xml 이라는 XML 파일(shared_pref 폴더 내부)에 저장한다. 이 암호화 키를 복호화하기 위해서는 유저에 의해 설정된 패스워드가 ChatSecure이 시작될 때마다 입력되어야 한다.

이후 내용 간단 요약.
xml 파일에 저장되어 있는 텍스트는 IC, salt, IV, base64Encode(encryptedSecretKey) 가 결합되어 있는 것으로 각각의 바이트에 맞게 잘라내어 유저 패스워드와 함께 AES-256 복호화를 하면 secretKey를 구할 수 있다.

이후에는,,
암호화 어떻게 어떻게 하는지에 대한 분석.. -> 복호화 어떻게 어떻게 하는지에 대한 분석 -> 데이터베이스 복호화(SQLCipher 사용) -> volatile memory 에서 패스워드 추출

profile
비전공자 출신 화이트햇 해커

0개의 댓글