KakaoTalk Decrypt
이번에 멀웨어 분석 프로젝트 도중 카카오톡 복호화 기능을 알게 되었는데 이 내용을 바탕으로 포렌식 문제도 만들어봤다
"우리 서버에 저장된 중요한 고객 데이터가 손상된 상황입니다 이를 해결하기 위해 회사 서버에 접근해야 하는데, 지난주에 개발팀이 카카오톡으로 서버 접속키를 보내준 기억이 납니다 그러나 현재 휴대폰이 고장 나서 PC 카카오톡에서 대화 내용을 확인하려고 했으나, 실수로 대화방을 나가버렸습니다 어쩔 수 없이 PC에 카카오톡 대화 내용이 있는 데이터를 확인하는데 맙소사..데이터가 암호화가 되어있다.. 이후에 카카오톡 복호화 방법을 찾다가 어떤 한 논문을 알게 되었습니다
제가 첨부한 파일은 %LocalAppData%\Kakao\KakaoTalk\users 폴더 입니다"
Fig. 1.과 같이 대화 기록 데이터베이스를 복호화하기 위해서는 key, iv 쌍을 생성해야 한다. pragma와 userId를 512바이트가 될 때까지 반복하여 연접한 후 MD5 해싱을 수행하면 key가 된다. key에 대해 Base64 인코딩 수행 후 MD5 해싱을 수행하면 iv가 된다. 구체적인 알고리즘은 Fig. 2와 같다.
이 논문에서 제시한 대화 내용이 저장된 데이터베이스를 복호화하기 위해 key와 iv 쌍을 생성해야 한다고 합니다
pragma = 'b2WmF9Q5h7RzN0dT8p1Xj6Lk3VvYeH4zJsA/q9TgErI0aO5yCwLkM2oFb7ZpC=='
여기서 pragma는 b2WmF9Q5h7RzN0dT8p1Xj6Lk3VvYeH4zJsA/q9TgErI0aO5yCwLkM2oFb7ZpC== 해당 값으로 찾아냈는데 userID는 어디서 찾아야 할지 모르겠다 첨부한 users 폴더에 userID가 있을 텐데 그걸 찾아서 위에서 제시한 알고리즘을 구현해주세요"
"마지막으로, key와 iv 값을 생성한 후에는 암호화된 chatLogs 파일을 복호화하여 원래의 대화 내용이 저장된 데이터베이스로 복구할 수 있습니다 이 방법을 토대로 실제 users 폴더에 있는 암호화된 데이터베이스를 복호화 해주세요"
찾은 flag 즉 접속키 값은 MS{~}로 시작한다
포렌식 문제는 처음 만들어보는데 잘 만든 건지 모르겠다..?
논문에서 제시한 복호화 과정은 똑같지만 복호화에 필요한 pragma와 userID만 다른게 설정했습니다
[ 참고 자료 ]
[ KakaoTalk Decrypt Write-Up ]