안녕하세요. Latte_ 입니다. 지난 포스팅에는 Day1의 Hard_Training Lv.1을 함께해봤습니다.

Hard_Training 문제 관련해서는 현재까지는 배포가 불가하니 양해부탁드리며, '이런식으로 문제를 푸는구나..' 정도로만 읽고 넘어가시면 되겠습니다.

또 지난 Lv.1에서 분명히 확인이 안됐던 파일은 총 3개였는데 왜 Where_am_I 파일만 분석했는지 궁금하신 분도 계실거로 생각합니다. 사실 제가 문제풀이를 하던 분석단계에서는 저도 엄청난 삽질을 경험했습니다. 그동안은 그 삽질들을 거의 다 여과없이 넣거나 하는 방식으로 진행했었으나, Hard_Training의 경우 그렇게 진행할 경우 분량조절의 상당한 어려움이 있을것이라 두 파일에 대한 분석은 추가하지 않았습니다.(실제로도 아무 의미 없기에..)


모든 CTF 문제가 그렇듯이, 포레식의 경우도 '보고서를 작성하는' 경우가 아니라면 Key값을 찾는 방식으로 진행됩니다. 이 Hard_Training의 경우도 그런 Case 입니다. 그럼 지금부터 Lv.2 문제를 풀어보도록 하겠습니다.


[그림 1. Lv.1에서 확인한 두번째 파티션의 Start LBA Addr]

Lv.1에서 Lv.2의 Start LBA Addr을 찾아냈다고 하더라도, 아직 우리가 보기에 두번째 파티션은 열려있지 않습니다. [그림 1]에서 볼 수 있는 것처럼 Start LBA만 들어가 있을 뿐 가장 중요한 Partition Type이 지정되지 않았기 때문입니다. 자 그러면 파티션 타입을 확인하기 위해 Start LBA Addr로 이동해보도록 하겠습니다.


[그림 2. 두번째 파티션의 Start LBA Addr 영역]

[그림 2]만 놓고보면 이 파티션의 타입은 FAT32 로 보입니다. 이제 아실분들은 다 아시겠지만 바로 다음 Sector를 보면 이 파티션 타입이 FAT32 라는것을 알아채셨을 겁니다. (FAT32 에서 BR영역 바로 뒤는 예약영역으로 비어있습니다.) 그러나 우리는 확실히 알아보기 위해 FAT32 의 백업 영역으로 이동해 보도록 하겠습니다.

- FAT32 백업역영 : Boot Record + Offset 6


[그림 3. 2번째 File System 의 Backup Area]

[그림 3]을 보면 [그림 2]와 같은 것을 볼 수 있습니다.(물론 세세한건 하나하나 까 봐야겠지만..) 백업 영역에도 FAT32 가 존재한다면 이 파티션은 FAT32 File System Format을 가지고 있다고 확신 할 수 있겠습니다. 이제 Master Boot Record 로 돌아가서 2번째 파티션의 타입을 FAT32를 의미하는 0x0B(혹은 0x0C)로 변경해 주도록 하겠습니다.


[그림 4. 두번째 파티션 확인 및 내부 파일들]

[그림 3]까지 확인하는 과정동안 우리가 정상적으로 값을 찾고 복구를 했다면 [그림 4]처럼 나와야 합니다. 아무래도 정확히 복구하는데 성공한것 같습니다. 아무래도 느낌상 이 파티션에서 정보를 찾아 세번째 파티션을 찾는게 목적인 듯 하네요. 한번 가 보도록 하겠습니다.


[그림 5. Lv.2 문제를 보여주는 2.txt]

Lv.1 에서는 친구가 참석한 세미나실의 위도 경도, 지번의 위치를 구해서 계산하라더니.. 이번에는 사진속 PC방의 정보를 구하라고 하는 문제입니다. 자, 그럼 문제도 있으니 실제로 그 사진을 찾아보도록 하겠습니다.


[그림 6. Where_this_PC_Room 파일의 헤더]

[그림 5]에서 출제자는 우리에게 한가지 힌트를 주었습니다. 문제와 함께 'Where_this_PC_Room.jpg' 라는 파일명을 남겨주었습니다. 그런데 [그림 6]을 자세히보면 무언가 조금 이상한 점을 찾을 수 있었습니다. 여러분은 발견하셨나요?


[그림 7. JPG 파일 확장자의 File Signature]

[그림 7]은 우리가 흔히 그림파일을 저장하는 JPG 확장자의 FIle Signature를 담고 있습니다. 보통 FF D8 FF Ex(0,1, 8)로 시작하는 파일들 입니다. 그런데 [그림 6]에서는 어느 무엇도 그렇게 시작하지 않습니다. 실제로 [그림 6]의 파일의 확장자를 .jpg 로 변경해도 그림이 제대로 열리지 않는 것을 확인 할 수 있습니다. 그러면 일단 앞에 알 수 없는 헤더부분을 날려버리고 JPG 파일 확장자 Signature가 가장 앞에 오도록 해 보겠습니다.


[그림 8. 수정한 헤더 값 및 복구한 jpg 이미지]

[그림 8]에서 가장 왼쪽에 보이는것과 같이 JPG 헤더를 정상적으로 수정하고 JPG 파일로 저장하면 오른쪽 아래 같은 사진이 나오게 됩니다. 잠시만요.. 출제자 양반.. 지금 저 사진 하나만으로 PC방의 위도, 경도, 지번을 찾으라고 주신건 아니겠죠??  이미지 그림을 조금 자세히 봐보도록 하겠습니다.


[그림 9. Where_that_PC_Room.jpg 파일의 확대 모습]

[그림 9]를 아무리 뚫어져라 살펴봐도 지역이 어디인지 나올만한 단서는 보이질 않습니다. 그런데 사진의 오른쪽 구석을 보면 'Code is Uuencode' 라고 쓰여있는 문구를 확인 할 수 있습니다. 그런데 말입니다.. 저 문구 어디서 보신것 같지 않으신가요? 그렇습니다. 우리는 저 문장을 Lv.1에서도 비슷하게 보았습니다. 바로 'code is ascii' 라는 문장으로 말입니다.

지난 Lv.1 문장에서 'code is ascii' 라는 문장을 보고나서, 그리고 문제를 풀어가면 갈수록 우리는 위도, 경도, 지번이 아무런 의미가 없는 함정이라는 것을 알았습니다. Lv.2도 과연 그런 방식일까요? 그것을 확인하려면 Uuencode가 무엇인지 확인해야 합니다.


Uuencode는 주로 Mail에서 Binary나 ascii 파일전송을 위해 사용되는 인코딩 입니다. Uuencode는 Unix - to - Unix Encoding의 약자로 과거 유닉스 시스템 사용자들간에 사용에서 비롯된 내용입니다. 그러나 현재는 모든 시스템에서 사용 할 수 있는 프로그램입니다.

이 Uuencode라는게 어디에 어떻게 숨어있는 걸까요? 그러고보니 Lv.1 에서는 HxD 에서 풀어봤을 떄 가장 위쪽에 위치하고 있었던 것으로 기억합니다. 과연 Lv.2 에서는 어떨까요?

기억하실지 모르겠지만, 처음 우리가 2번째 파티션을 열었을 때 Where_that_PC_Room은 어떠한 확장자도 가지고 있지 않은 파일이었습니다. 2.txt에서 .jpg 라는 힌트를 얻어서 확장자를 넣어주었지만 그것또한 맞지 않았습니다. 바로 시작 Signature가 맞지 않았기 때문이었는데요. 그럼 우리가 [그림 9]를 복구하기 위해 지웠던 내용은 무엇이었을까요?


[그림 6]이 바로 지우기 전의 원본입니다. 우리가 지워버린 저 부분이.. 바로 Uuencode 부분이네요! 자.. Lv.1 에서는 Ascii code 였기에 직접 대입이 가능했습니다. 근데 저 Uuencode는 도저히 직접 대입하고 싶지 않는 상황입니다. 그래서! 저는! Google 검색찬스를 사용하기로 했습니다.(왜 Naver 가 아니냐고 물으시면.. 할말 없습니다.. 그냥 Google 이 더 익숙합니다.)


[그림 10. Uuencode decoder에 대한 Google 검색 결과]

지금 우리가 원하는 정보는 저 uuencode 로 변환된 정보를 decode 하는 방법 혹은 decode 해주는 Site를 찾는 것 입니다. 그래서 Google에 검색을 해보니 상당히 많은 주소가 나오는걸 알 수 있습니다. 저는 그중에 가장 첫번째로 검색 된 Site에 접속해보았습니다.


이 Site는 UuenCode 뿐 아니라 아래 그림과 같은 여러 종류의 Encode/Decode를 사용하도록 되어있습니다.

[그림. 11. Encode/Decode Tool 종류]

또한 사용 방식도 Text를 입력하거나 File을 올리면 자동으로 분석해 주는 방식으로 되어있습니다.

[그림 12. Input Type 설정]

어떤 방법을 써도 상관은 없습니다. 제가 이 문제를 처음 풀어낼때는 파일을 복사해서 분석하는 방법을 사용했으나, 풀이작성을 위해 다시 풀 때에는 Text 방식을 사용했기에 이번에는 Text 방식으로 설명하도록 하겠습니다.


[그림 13. 파일 내 Uuencode로 Encoding 된 부분]

[그림 13]에 빨간 테두리가 되어있는 부분이 우리에게 필요한 Uuencode 입니다. Hex 부분이 아닌 Text 부분을 드래그해서 복사해서 Site에 붙여넣으면 깔끔하게 Text만 복사되는데요. 그 뒤에 Decode 버튼을 누르고 가만히 기다려 주시면 됩니다.


[그림 14. Decode 완료 된 UuenCode]

길지않은 시간(길어봐야.. 2초 이내 정도입니다. 그정도 인내심은 다들 있으시겠죠)이 지나면 Decode가 끝나고 우리가 알 수 있는 문자로 나타납니다. 우리 앞에 나타난 내용은 다음 Partition LBA를 나타내주고 있습니다.


이 3번째 파티션의 LBA을 찾음으로써 Day1_Hard_Training(Lv.2)를 완료하였습니다.

다음 포스팅은 Day1_Hard_Training(Lv.3)를 통해 찾아뵙겠습니다.

'보안 > Forensics_In_DMA' 카테고리의 다른 글

Day1 Hard_Training(Lv.1)  (0) 2016.03.16
Day1 Training 풀이  (0) 2016.03.07
Day1 Warming_Up 풀이  (0) 2016.03.06
스터디 1일차(Day1)  (0) 2016.03.02
본 디렉토리에 대하여..  (0) 2016.03.02
Posted by Latte_
,