안녕하세요. Latte_ 입니다.

지난번에는 Day1 Warming_Up 문제로 여러분들과 함께 했었습니다.

어떻게.. 도움은 많이들 되셨는지요?

오늘 할 내용은 동일한 Day1 중 Recovery Training 문제를 풀어보겠습니다.

 * 실습 환경은 개인마다 다를 수 있습니다. 필자는 Widow XP SP3 를 베이스로 작업을 하고 있습니다. 기타 다른 OS에서 실습중이시라면 해당 환경에 맞춰 주시기 바랍니다.

실습 및 풀이에 필요한 PPT는 아래 적어드린 Eniac님의 블로그에서 받아주시기 바랍니다.

http://eniac-security.tistory.com/83


FS_Day1_Training_Disk.z01


FS_Day1_Training_Disk.z02


FS_Day1_Training_Disk.z03


FS_Day1_Training_Disk.zip


Disk FIle 삽입방법은 지난번 Warming_Up 풀이과정 때 이야기 해 드렸습니다. 

혹시 기억이 나지 않는 분들은 잠시 뒤로 돌아가셔서 보고 오시기 바랍니다.


Disk가 제대로 올라갔는지 확인하려면 Disk 삽입 후 diskmgmt.msc 에 들어가서 [그림 1]과 같이 되어있는지 확인 해 봅시다.

[그림 1. Disk 삽입 확인(디스크2)]


디스크 관리창의 아래쪽에 디스크 상태를 보면 이번에 새로 삽입한 디스크(디스크 2)는 총 3개의 파티션이 존재할 것으로 예상이됩니다. 그리고 2개의 파티션이 각각의 파일시스템으로 존재하고 있습니다. 남은 하나를 찾는게 문제일지도 모르겠네요.


그러면 HxD로 새 하드디스크를 분석해 보도록 하겠습니다.

[그림 2. 새 하드디스크의 Master Boot Record]

[그림 2]는 지난번 Warming_Up에서 봤던 하드디스크의 MBR과 비슷한 모양임을 알 수 있습니다. 앞쪽에 446 Byte의 Boot Code 부분을 제외하고 64 Byte의 Primary Partition Table을 분석 해 보도록 하겠습니다.

우선 파티션은 아래 [그림 3]과 같이 총 3개가 존재하는것을 확인 할 수 있습니다.

이것으로 문제 1번의 답을 확인 할 수 있겠습니다.

[그림 3. 새 하드디스크의 Primary Partition Table 정보]

파티션 테이블에서 각 파티션을 분석할 때 중요 한 4가지는 Boot Flag, Partition Type, Start LBA Addr, 마지막으로 Size of Sector 입니다. 지난 Warming_Up 실습때도 한번 올려드렸는데 이번에도 풀이하면서 참고하시라고 한번 더 올려드리도록 하겠습니다.


[그림 4. Partition Table에서 위치에 따른 확인 가능 정보]

[그림 3]과 [그림4]를 참고하여 각각의 파티션을 하나하나 풀어보도록 하겠습니다.

가장 먼저 분석해 볼 내용은 당연히 순서대로 첫번째 파티션입니다. 먼저 Boot Flag는 0x00 입니다. 즉, 이 첫번째 파티션으로는 OS 부팅을 할 수 없다는 의미입니다. 그 다음으로 보셔야 할 내용은 Partition Type 입니다. 보이는 값은 0x0B로 FAT32 파일시스템임을 나타내고 있습니다. 그러나 이는 수동으로 변경을 하면 충분히 변조가 가능한 부분이기 때문에 실제 파티션의 BR영역을 확인 해야 합니다.

파티션의 BR 영역은 항상 그 파티션의 시작섹터에 존재합니다. 따라서 Start LBA Addr 을 확인하면 실제 파티션 타입 정보를 확인 할 수 있습니다. 첫번째 파티션의 Start LBA Addr은 0x800(Intel은 Little Endian 방식을 사용하고 있기 때문에 실제 입력값의 역순으로 출력된다.)로 10진수로 변환하면 2048이 된다.

 * 여기서 잠깐, 지난번 Warming_Up 풀이를 하면서 Window XP의 경우 첫번째 파티션의 BR이 주로 0x3F, 즉 63에 위치한다고 설명했다. 그리고 Window 7의 경우 2048 Sector에서 주로 시작한다고 설명했다. 그럼 이 Hard Disk는 Window 7에서 만들어진 것인가?

   사실 그것은 알 수 없다. 보편적으로 그렇게 사용 될 뿐이지, 실제로 Start LBA Addr과 내부 데이터를 수작업으로 변경하면 충분히 첫번째 파티션의 BR 위치를 변경 할 수있다.


자, 그러면 실제로 2048 Sector로 이동하여 첫번째 파티션의 타입이 FAT32가 맞는지 확인해 보도록 하자.

[그림 5. 첫번째 파티션의 BR 영역]

[그림 5] 의 가장 앞부분을 보면 우리가 확인할 수 있는 가장 간단한 문구인 MSDOS5.0이 보인다. 보통 FAT32 파일시스템의 OEM Name으로 잘 나오는 이름이지만, 실제로 OEM Name은 참조하지 않으니 그냥 참고만 하고 넘어가도록 하자.

지난번 실습 풀이를 기억하고 있는 분들이라면 FAT32인지 확인하는 방법을 이미 알고 있을 것이다. 크게 두가지로 확인이 가능한데, 가장 확실한 방법은 백업 영역을 확인하는 것이다. 두번째 방법은 바로 다음 Sector를 확인하는 것이다. NTFS와 FAT32의 가장큰 차이점이 바로 BR영역 바로 다음 Sector 인데 FAT32의 경우 BR 영역 바로 다음이 예약 영역으로 항상 비어있다. 첫번째 방법보다는 두번째 방법이 더 쉽게 확인이 가능한 방법이긴 하지만 정확한 방법은 백업 영역을 확인하는 것이다.


그러면 정석적인 방법인 Backup Area를 확인해 보도록 하겠습니다.

[그림 6. 첫번째 파티션의 BR Backup Area]

FAT32 파일시스템의 경우 Backup Area는 Start LBA Addr + offset 6 이다. 이를 기준으로 값을 대입 해 계산하면 2048 + 6 = 2054 가 나옵니다. [그림 6] 처럼 2054 Sector로 이동하면 [그림 5]에서 본 값과 동일 한 내용이 위치하는 것을 볼 수 있습니다. 그렇다면 첫번째 파티션은 [그림 3]에 표시 된 것처럼 0x0B 즉, FAT32 파일시스템임을 확인 할 수 있습니다.

 * 사실 첫번째 파티션과 두번째 파티션 타입은 HxD 이전에 diskmgmt.msc에서도 확인이 가능합니다. 만약 파티션이 잘못되었거나, 변조되었다면 디스크 관리 창에서 제대로 나오지 않을 것이기 때문입니다. 그러나 본 풀이의 목표는 실제 실습에 있기 때문에 하나하나 다 해보는 것임을 참고하시기 바랍니다.


마지막으로 첫번째 파티션의 전체 Size를 확인해 보도록 하겠습니다. [그림 3]과 [그림 4]를 참고하면 첫번째 파티션의 사이즈를 구할 수 있습니다, 첫번째 파티션의 Size of Sector는 아래와 같습니다.

[그림 7. 첫번째 파티션의 Size in Sector]

글을 쓰면서 생각해보니 지난번 Warming_Up 문제 풀이 때 '파티션의 사이즈는 Size in Sector 다' 라고만 알려드리고 실제 계산하는 방법을 알려드리진 않았던것 같습니다.

사실 파티션을 제대로 복구 했다면 내 컴퓨터나 디스크 관리에서 디스크의 크기를 확인 할 수 있습니다. 하지만 지금 설명드릴 방법은 저 Size in Sector 값을 이용한 계산을 통해 디스크 크기를 확인하는 방법을 알려드리겠습니다. 디스크의 크기를 구하는 공식은 아래와 같습니다.

Size in Sector(Dec) * 512 / 1024 / 1024 / 1024 = ? GB

하나하나 설명드리도록 하겠습니다. Size in Sector는 섹터의 수 입니다. 즉, 파티션의 데이터 영역의 전체 섹터 수를 나타냅니다. 그리고 한 섹터는 512 Byte의 크기를 가지기 때문에 512를 곱해서 전체 영역을 구해 줍니다.

 * 여기서 한가지 알고가야 할 부분이 있습니다. 모든 파티션이 한 섹터의 크기가 512 byte가 되는것은 아닙니다. 최초 하드를 포멧할 때(우리가 분석할 떄가 아닌) 한 섹터의 사이즈를 가변적으로 변경할 수 있습니다. 다만 기본값이 512 Byte이기 때문에 그렇게 계산하는 것입니다. 

* 단, 한 섹터의 Default Size의 경우 FAT32 파일시스템이 512 byte 이며 NTFS 파일시스템의   경우 2048 byte가 한 섹터의 Default Size 입니다.

 * 여기서 한 섹터의 크기가 가변적인 것은 'Data Area'에 국한된 부분입니다. 아무리 초기 설정에서 한 섹터의 사이즈를 가변적으로 변경한다 하더라도 'System Area' 부분의 Size는 512 byte로 고정됩니다.

이렇게 계산을 하고나면 디스크 사이즈의 byte 크기가 나옵니다. 이를 1024로 3번 나눔으로 인해서 우리가 알기 쉬운 GB 단위까지 가는것입니다.

자 그러면, 위의 공식을 바탕으로 첫번째 파티션의 사이즈를 확인 해 보고, 실제로 계산한 크기와 시스템상에 나타난 크기가 맞는지 [그림 1]과 비교해보도록 하겠습니다.

첫번 째 파티션의 Size in Sector의 Hex 값은 0x200000 입니다. 이를 Dec값, 즉 10진수로 바꿔주면 2097152 가 나옵니다. 이를 512와 곱하면 1073741824가 되겠네요. 이를 1024로 3번 나눠보도록 하겠습니다. 그렇게 나누면 딱 1이라는 값이 나옵니다. 즉, 1GB 라는 뜻입니다. 자 그럼 [그림 1]과 비교해서 계산한 값이 맞는지 확인해보고 오시기 바랍니다.

Primary Partition Type를 통한 첫번째 파티션 분석은 이것으로 마무리 되었습니다. 이제부터는 두번째 파티션을 분석 해 보도록 하겠습니다.


[그림 8. Partition Table에서 확인 한 두번째 파티션 정보]

[그림 8]은 두번째 파티션의 정보입니다. 이를 토대로 다시 하나 하나 분석 해 보도록 하겠습니다. 먼저 이 파티션의 Boot Flag는 0x00 즉, 부팅 불가 입니다. 그럼 그 다음으로 봐야할 Partition Type을 보죠. Partition Type은 0x07, 즉 NTFS임을 나타내고 있습니다.

과연 정말 NTFS일까요? 확인해봐야겠습니다. 실제로 확인해보기 위해서는 Start LBA Addr을 찾아서 Boot Record 영역을 확인해봐야 합니다.

눈에 보이는 Start LBA Addr 은 0x200800 입니다. 이를 10진수로 바꿔주면 2099200 이 됩니다. 한번 실제로 가서 2번쨰 파티션의 Boot Record가 존재하는지 확인해 보도록 하겠습니다.


[그림 9. 2번째 파티션의 Start LBA Addr 영역에 있는 Boot Record 정보]

일단 육안상으로는 정말로 NTFS Boot Record가 보이는 듯하다. OEM Name에 NTFS라는 명칭도 그렇고, Boot Record 영역 다음 Sector가 예약 영역으로 비어있지 않는걸로 봐서는 말이다. 보통은 여기서 NTFS 임을 확인 할 수도 있지만 필자는 교육을 위함이기에 Backup Area도 확인 해 보도록 하겠다.

NTFS의 Backup Area는 전에도 설명했듯이 BR + Offset T.S(Total Sector) 이다. BR 영역은 [그림 8]에서 확인 할 수 있듯이 0x200800, 즉 2099200 이며 Total Sector에 해당하는 Size in Sector는 0x400000, 즉 4194304이 된다. 

여기서 중요한 점. BR + Offset T.S 는 NTFS 파티션의 가장 마지막에 위치한다. 그러나 지금 계산 한 BR + Size in Sector를 하면 NTFS 백업 영역이 나오지 않는다. 왜냐.. Offset T.S 라는건 현재 위치에서 Total Sector 만큼 더 가라는 의미이다. 문제는.. 컴퓨터는 항상 0부터 시작한다. 즉 현재 위치하는 BR 영역이 0이나 다름 없다는 의미이다. 죽 실제로 계산을 할 때는 BR + Size in Sector -1을 해야만이 제대로 된 백업 파티션이 나타난다는 의미이다.

[그림 10. 2번째 파티션의 NTFS Backup Area 확인] 

이제 백업 영역까지 확인을 했으니 두번째 파티션의 마지막 분석과정인 Size in Sector를 확인해보도록 하겠습니다. Size in Sector는 0x400000, 즉 4194304이 나옵니다. 이를 가지고 용량을 계산해보면 4194304 * 512 / 1024 / 1024 / 1024 = 2GB가 나옵니다. 실제로 용량을 확인해 보면 얼마가 나오는지는 스스로 확인해보시기 바랍니다.

이것으로 두번째 파티션의 간단한 분석까지 마무리가 되었다. 이제 세번째 파티션 정보를 간략히 분석해 보도록 하겠다.


[그림 11. Partition Table 상의 세번째 파티션 정보]

위 [그림 11]은 세번째 파티션의 정보를 가지고 있는 구간입니다. 그리고 우리가 확인해야 할 마지막 파티션이기도 합니다. 하나하나 확인 해 보도록 하겠습니다.

먼저 맨 처음에 오는 Boot Flag 값은 0x00, 즉 '이 파티션으로는 부팅할 수 없음'을 나타냅니다. 그 다음으로 봐야할 부분은 바로 Partition Type 입니다. 어라?? 근데 뭔가 이상합니다. 우리가 배운 Partition Type은 0x0B, 0x0C(이상 FAT32), 그리고 0x07(NTFS)뿐이 없습니다. 그런데 지금은 0x00인걸 봐서는 누군가가 MBR 영역에서 이 부분을 일부러 수정한 것으로 추정됩니다.

지금은 저 값을 바로 확인 할 수 없으니 다음 분석인 Start LBA Addr로 넘어가도록 하겠습니다. Start LBA Addr로 가면 BR영역을 확인 할 수 있으니 저 Partition Type도 확인 할 수 있을것입니다. Start LBA Addr은 0x600800, 즉 6293504 입니다. 한번 실제로 이동해 보도록 하겠습니다. 이제 BR 영역을 확인 할 수 있을것입니다.


[그림 12. 세번째 파티션의 Start LBA Addr 모습]

여기서 우리는 두번째 난관이 부딧칩니다. 아까는 Partition Type이 보이지 않더니 이번에는 BR영역에 있어야 할 내용이 아무것도 보이지를 않는 상황입니다. (눈치빠른 사람들은 이미 눈치 챘을겁니다.) 보통은 여기에 FAT32 BR이든 NTFS의 BR이든 무엇이든 보여야 할텐데 지금 이 부분은 텅 비어있습니다. 어차피 FAT32가 아니면 NTFS일테니 우선 FAT32 인지부터 확인 해 보도록 하겠습니다.


[그림 13. Start LBA Addr로부터 Offset 6 만큼의 Sector의 내용]

기존에 설명드릴 때 FAT32 File System의 백업 영역은 BR로부터 Offset 6만큼의 위치에 있다고 말씀드렸습니다. [그림 13]은 정확히 그 만큼의 위치이기도 합니다. 그러면 이게 세번째 파티션 파일시스템의 백업 영역이란 소리네요. 이 섹터의 내용을 복사해서 [그림 12]에 붙여넣도록 하겠습니다. 그리고 난 후에 MBR 영역으로 돌아가서 세번째 파티션의 Partition Type도 0x0B로 변경해 주도록 하겠습니다.

 * BR영역 바로 아래를 보고도 FAT32임을 유추해 낼 수 있습니다. 다만 그것도 확실한 정답은 아닐 수 있기 떄문에 실제로 확인하는 과정이 필요합니다.

Window를 재부팅하기 전에 마지막으로 확인해야 할 과정이 남아있습니다. 바로 Size in Sector 값을 구하는 것인데요. [그림 11]에서 세번째 파티션의 Size in Sector는 0x5FE800, 즉 6285312가 나오게 됩니다. 

마지막으로 방금 구한 SIze in Sector를 활용하여 세번째 파티션의 용량을 확인 해 보도록 하겠습니다. 구하는 공식은 Size in Sector(Dec) * 512 / 1024 / 1024 / 1024 입니다. 이를 계산해주면 2.997GB, 약 3GB가 나오게 됩니다,


Window XP를 재부팅과정까지 거쳤다면 방금전까지는 없었던 새로운 파티션이 하나 생겨납니다. 바로 훼손되어있던 Patition이 복구 된 모습입니다. 그 안에 들어가서 어떤 파일이 숨어있는지 확인 해 보겠습니다.

[그림 14. 복구 된 세번째 파티션의 FIle]

복원한 파티션 안에는 'Read me' 파일이 있고 파일을 열면 Good Job!!! 이라고 우리를 칭찬하는 문구가 보이네요. 축하드립니다. 여러분은 세번째 파티션을 복구했고 안에 있는 파일을 찾아냈습니다. 그리고 이것을 마지막으로 본 Recovery Training 문제를 클리어 하셨습니다.


마지막으로 문제의 전체 답을 풀어보도록 하겠습니다.

1. 파티션의 총 개수는? : 3개

2..각 파티션의 파티션 타입은(낮은 순으로) ? : FAT32, NTFS, FAT32

3. 손상된 파티션 테이블을 복구하라 : 세번째 파티션을 복구하는 과정입니다.

4. 각 파티션의 Start LBA Addr 은?(낮은섹터순, 단위 : 섹터(10진수) : 2097152, 4194304, 6285312

5. 각 파티션의 용량은 ? : 1GB, 2GB, 3GB

6. FAT32 포멧일 경우 해당 FAT32의 Backup BR 영역의 위치는?(낮은 섹터순, 단위 = 섹터 : 10진수) : 2054, 6293510

7. BR 영역이 손상된 파티션은 몇번째 파티션? : 3번째 파티션

8. 손상된 파티션에 들어있는 파일과 내용은? : Read_me.txt, Good Job!!! Part of the Partition table you've got it right!


이것으로 Day1 Recovery Training 풀이를 마치겠습니다.

다음은 Day1의 마지막 문제인 Hard Training 문제로 찾아뵙겠습니다.

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

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