지금까지 FAT 파일시스템에 대해 살펴보았다. FAT 파일시스템은 파일시스템의 구조 상 몇몇의 낭비되는 공간을 가지게 된다. 이러한 영역은 운영체제나 해당 어플리케이션에서 따로 접근하지 않기 때문에 악의 적인 목적으로 사용될 수 있다. 실제로 현재에도 운영체제 수준의 바이러스 탐지를 회피하기 위해 낭비되는 공간을 사용하는 악성코드가 많이 나오고 있다. 

낭비되는 공간은 파일시스템 수준의 낭비와 파일의 할당, 비할당에 따라 낭비되는 공간이 있을 수 있다. 이렇게 낭비되는 공간에 대해 간단히 살펴보자.

 

MBR과 예약된 영역간의 낭비되는 공간 

MBR은 한 섹터(512 바이트)로 구성된다. 일반적으로 디스크는 트랙 당 63섹터를 사용한다. 이는 ZBR(Zone Bit Recording)이나 메모리 기반의 저장매체로 넘어오면서 고정된 값이라고 말하기는 어렵지만 아직도 파일시스템을 생성하는데에는 이 값이 사용된다.

MBR과 파일시스템 영역은 별도의 목적을 가지고 있으며, 별개의 동작을 수행하기 때문에 파일시스템이 생성되기 전에 MBR을 위해 한 트랙을 할당한다. 결국, 파일시스템 생성을 위해 포맷을 하면 첫 트랙(63 섹터) 이후인 두 번째 트랙부터 생성이 되는 것이다. 따라서 첫 트랙의 나머지 62 섹터는 물리적으로 비어 있어 사용되지않는 공간이다.

다음은 EnCase를 통해 저장매체의 물리적인 섹터를 살펴본 것이다. 각 사각형은 하나의 섹터를 나타낸다. 맨 처음의 붉은 사각형은 MBR 영역이고, 64 번째의 붉은 색 섹터 8개는 NTFS의 VBR 영역이다. 중간의 62 섹터의 초록색 영역이 낭비되는 영역이 된다. 궂이 이름을 붙이자면 MBR 슬랙(Slack)이라고 부를 수 있겠다.

 

예약된 영역 내의 낭비되는 섹터

앞서 FAT 파일시스템은 FAT12/16의 경우 예약된 영역으로 한 섹터를 사용하고, FAT32의 경우 32 섹터를 사용한다고 언급했다.

32 섹터는 일반적으로 부트 섹터(0, 6번째 섹터), FSINFO 영역(1, 7번 섹터), 추가적인 부트 코드(2, 8번 섹터)의 6섹터를 제외하고는 사용되지 않는다. 따라서 나머지 26개 섹터는 비어있어 낭비되는 공간이 되며, 이는 특별히 프로그래밍 하지 않는 이상 운영체제는 이 영역을 접근하지 않는다. 따라서, 해당 영역에 악성코드를 숨긴 후 물리적으로 장치를 열어 접근할 수 있다.

 

FSINFO 섹터의 사용되지 않는 영역

예약된 영역에서 1, 7번 섹터를 사용하는 FSINFO 섹터 역시 512 바이트 중 20바이트만 사용하고 나머지 영역은 사용되지 않는다. 따라서 나머지 영역도 별도의 코드가 삽입되어 있는지 확인해야 한다. 

 

예약된 영역의 추가적인 부트 코드(Bootstrap code) 영역

예약된 영역에서 추가적인 부트 코드 저장을 위해 사용하는 2, 8번 섹터 역시 일반적으로는 0으로 초기화되어 있다. 특별히 부팅 과정에서 수행할 일이 없는 이상(노트북이나 컴퓨터 제조 벤더에 의해 삽입되지 않는 이상) 항상 0으로 사용되지 않기 때문에 해당 영역에 삽입된 코드가 있는지 확인해야 한다.

 

슬랙 영역

앞서 언급한 슬랙 영역(램 슬랙, 드라이브 슬랙, 파일시스템 슬랙, 볼륨 슬랙) 역시 최근에 악성코드에서 많이 사용되는 영역이다. 따라서 해당 영역에 악의적인 코드가 삽입되어 있는지 확인할 필요가 있다.

 

최근에는 실제로 파일시스템 슬랙이나 볼륨 슬랙을 이용한 악성코드들이 많이 나오고 있다. 그리고 MBR의 부트 코드를 수정하여 운영체제가 로드되기 전에 특정 작업을 수행하는 MBR 루트킷과 같은 악성코드들도 있다. 악성코드 탐지를 위해서라면 위의 낭비되는 영역에서 시그니처를 조사하는 방안도 고려되야 하지 않을까 생각해본다. 물론, 이러한 도구는 별도의 독립적인 엔진으로 배포가 되야 하므로 서비스하는데 많은 제약이 있다.

Tagged with: