본문 바로가기

[+] Forensic

바로가기(LNK) 파일

윈도우에는 다른 OS와 차별화된 '바로가기' 라는 기능의 파일이 존재한다.

다른 OS에는 비슷한 기능으로 심볼릭 링크가 존재한다.

대부분의 사람들이 이 두 기능을 같은 기능으로 보고 있지만, 분명히 다른 기능이다.

윈도우의 바로가기 기능은 OS 차원의 기능이고, 심볼릭 링크는 파일시스템 차원의 기능이어서 그 기능의 동작방식부터가 다르다.

윈도우의 바로가기 기능의 경우 바로가기 파일을 통해 실현 가능한데, 이 파일은 일반 파일과 동일하게 메타데이터와 MFT 엔트리를 가지고 있고 심볼릭 링크의 경우 원본 파일을 가리키고 있는 것은 파일이 아닌 것으로 파일시스템이 인식하기 때문에 이 두기능이 다르다고 할 수 있다.

그럼 윈도우에서 바로가기가 어떤 경우에 생성되는지 알아보자.

[바로가기 생성]
1. 윈도우 설치 시
    - 윈도우에서 기본적으로 지원하는 '내 컴퓨터', '작업 표시줄 아이콘' 등도 모두 바로가기 파일이다.
2. 윈도우 설치 후
    - 대표적으로 '내 최근 문서' 폴더의 문서 목록들이 있다.
3. 어플리케이션 설치 시
    - 어플리케이션 설치 중 '바탕화면에 바로가기 아이콘을 생성 하시겠습니까?' 라는 메시지를 보았을 것이다.
4. 사용자 임의 생성
    - 파일을 마우스 오른쪽 클릭 후 생성 하는 것들 


바로가기는 일반 사용자가 보기에는 일반적인 파일로 보일지 모르지만 조사관의 입장에서는 시스템 조사 시 유용한 정보들을 많이 지니고 있는 파일로 취급 될 수 있다.

대부분 포렌식 통합 분석 도구에는 바로가기 분석 도구도 내장되어 있어 간편하게 바로가기 파일을 분석 할 수 있지만, 어느정도 구조를 알고 분석한다면 시간과 획득하는 정보의 양질적 면이 높아지니 구조를 한번 살펴보자.

바로가기 정보는 일부는 속성창에서 얻을 수 있다. 

[그림 1 - 바로가기 속성 창]

하지만 이 정보는 바로가기 정보들 중 아주 극히 일부분에 지나지 않는다.

이러한 정보를 알기 위해서 구조를 분석하는 것이 아니니 조금 더 깊숙히 보도록 하겠다.

바로가기는 아래와 같은 영역들이 있다.

[바로가기 영역 구분]
1. SHELL_LINK_HEADER
    - 식별정보, 타임스탬프, 선택 가능한 영역의 유무 표시 플래그 정보를 저장하고 있다.
2. LINKTARGET_DILIST
    - 원본 정보를 포함하고 있다.
3. LINKINFO
    - 원본의 위치를 찾을 때 필요한 정보를 저장하고 있다.
4. STRING_DATA
    - 사용자 인터페이스나 경로 식별 정보를 저장하고 있다. 
5. EXTRA_DATA
    - 기타 정보를 저장하고 있다. 

 

각 영역이 저장하는 정보를 간략하게 알아 봤으니 이제 각 영역을 세분화 하여 알아볼 차례이다.

[SHELL_LINK_HEADER]
식별정보, 타임스탬프, 선택 가능한 영역의 유무 표시 플래그 정보를 저장하고 있는 영역이다.
오프셋 별로 저장하고 있는 정보가 다른데 아래 이미지에 각 오프셋에 대해서 표시 해 두었다.

[그림 2 - SHELL_LINK_HEADER offset]

Link Flag의 경우 많은 양의 여러가지 값이 있어 일일이 설명하지는 못하니 MS-SHLLINK.pdf(p12)를 참조하기 바란다.


[LINKTARGET_IDLIST]
다른 파일에서는 선택 항목이지만 바로가기에서만큼은 필수항목인 영역이다. 
다음은 이 영역의 오프셋을 표시한 이미지이다.

 

[그림 3 - LINKTARGET_IDLIST]

위에 IDList가 표시되지 않았는데 그 이유는 ItemIDList와 시작 오프셋이 같기 때문에 체크 박스가 겹쳐 표시하지 않았다.

IDList 마지막에는 TerminalID라고 하는 예양영역이 있는데 이 영역은 모두 0으로 설정되어 있다. 


[LINKINFO]
바로가기 파일에서 필수적인 요소이며 원본 파일이 정해진 위치에 없는 경우 원본 파일을 찾기 위한 필수 정보들을 가지고 있다.
오프셋을 표시하려고 했으나 오프셋 위치가 정확하게 찾아지지 않아 MS 문서를 참고하여 아래와 같은 목록을 작성하였다.

[그림 4 - LINKINFO offset]

LINKINFO Flag의 경우 특이하게도 전체 32비트 중 좌측 2비트만 사용한다.
 - 10000000~ 일 경우: VolumeID와 LocalBasePath 필드에 오프셋 값이 들어감 
 - 01000000~ 일 경우 : Network Volume Info 필드에 오프셋 값이 들어감 


VolumeID 필드는 바로가기가 생성될 당시 원본이 있던 Volume 데이터를 저장하고 있다.
VolumeID 필드의 오프셋은 다음과 같다.

[그림 5 - VolumeID 필드 Offset]

VolumeID 필드의 DriveType은 아래와 같은 값들을 가질 수 있다.

[그림 6 - DriveType]

LINKINFO offset 중 Network Volume Info 필드가 속해 있는데 이 필드의 오프셋은 다음과 같다.

 

[그림 7 - Network Volume Info]

해당 필드의 Flag도 VolumeID의 플래그와 같은 방식이며 의미는 다음과 같다.
 - 1000000~ : DeviceName 필드가 존재함
 - 0100000~ : NetProviderType 필드가 존재함 

 
* 참고 : NetName은 원본이 있는 공유된 네트워크의 이름을 뜻 함 


[STRING_DATA]
사용자 인터페이스와 경로 식별자를알려주는 일련의 문자열로 구성되어 있는 영역이다.
이 영역에 올수 있는 문자열의 종류는 LinkFlags에 따라 결정되며 가능한 문자열은 아래와 같다.
 

[그림 8 - STRING_DATA 문자열 종류]


[포렌식관점에서의 바로가기]
각 영역에서의 포렌식적 의미를 가지는 부분들을 나열해 보면 다음과 같다.
1. SHELL_LINK_HEADER
   - 원본파일의 속성 정보
   - 원본 파일의 생성, 접근, 수정 시간
2. LINKINFO
   - 원본파일의 크기
   - 원본파일이 위치한 VolumeID
   - 원본파일이 위치한 VolumeID의 시리얼 번호
   - 원본파일의 경로
3. EXTRA_DATA
   - NetBios 이름
   - MAC 주소 


EXTRA_DATA는 원본에 대한 추가 정보를 가지고 있지만 대부분의 정보가 포렌식 관점에서는 필요하지 않은 정보이기 때문에 생략하도록 하겠다.

EXTRA_DATA 영역이 궁금하다면 MS-SHLLINK.pdf(p26)을 참조하기 바란다.



'[+] Forensic' 카테고리의 다른 글

썸네일(Thumbnail) 파일 분석  (2) 2012.01.12
프리/슈퍼패치 파일  (0) 2012.01.12
이벤트 로그  (1) 2012.01.11
휴지통 분석  (0) 2012.01.10