출처: https://m.blog.naver.com/snova84/223655287055?recommendTrackingCode=2
이번 챕터부터는 멀웨어분석에 앞서 알고 있어야 하는 기본 개념적인 내용이 시작되었습니다.
가장 먼저 시작되는 부분으로 파일에 대한 형식 식별/구분과 관련한 내용입니다.
파일식별
기본적으로 컴퓨터가 이해하는 모든 것(파일)은 바이너리 2진수입니다.
궁극적으로 0 또는 1로 표시되는 비트로 변환되어 컴퓨터에 입력이 됩니다.
예를 들면
메모장에 Hello Malware를 작성후 파일로 만들어 봅니다.

그 파일을 HEX 에디터로 열어 보게 되면
숫자와 문자로 이루어진 16진수와 텍스트 문자열이 있는 것을 볼 수 있습니다.

바이너리(2진수)가 없는 이유는 2진수로 작성될 경우 그 값들이 너무 길어져 사용자에게 가독성을 제공해 주지 않기 때문입니다. 하지만 컴퓨터가 해당 내용을 사용할 때에는 2진수로 변환되어 사용되게 됩니다.
그럼 여러 파일들이 서로 같거나 다른지 어떻게 구분을 할까요?
바로 해시라는 기술을 통해서 멀웨어 분석시 각 파일(샘플)이 기존에 존재하던 멀웨어 샘플인지 아니면 새로운 파일인지를 식별하는 데 사용합니다.
이러한 헤시는 단, 1비트만 변경돼도 파일에 대한 새로운 해시가 생선 됩니다.
해시의 종류로는 여러 가지가 있을 수 있는데 최근에는 SHA256, 512를 많이 사용하고 기타 MD5, SHA1을 사용하기도 하지만 해당 해시는 Crack 해독이 가능하여 추천하지 않습니다.
Hash 생성 실습
메모장(텍스트) 파일에 'Hello Malware'라고 작성한 파일을 만들어 Hash 값을 확인해 줍니다.

HashCalc 프로그램을 활용하여 Hash 값을 생성해 주었습니다.

이번에는 단순히 파일의 이름을 변경하였을 때 해시값을 확인해보면 해시값이 변경되지 않는 것을 확인할 수 있습니다.

하지만 메모 내용 중 일부를 수정하여 다시 한번 해시값을 확인해 보면

메모장에 2단어만 변경(넣어)주었을 뿐인데
해시값이 달라진 것을 볼 수 있습니다.

이 처럼 파일의 변경이 있으면 Hash 값은 당연히 변경이 됩니다.
혹시, 만약 툴이 없다면 윈도우 기본 프로그램인 피워 쉘을 통해서 확인할 수도 있습니다.

그리고 한 번에 여러 파일에 대한 해시값을 확인하려면
폴더 내 모든 파일 해시값 확인을 하면 되겠습니다.
이러한 방법으로 파일의 동일성을 확인해 줄 수 있습니다.
파일 확장자 식별
다음은 파일의 고유성을 식별했으면
이번에는 파일이 어떠한 프로그램에서 활용되는지 유형을 식별해야 합니다.
파일 유형의 식별은 파일 확장자와, 파일 형식을 통해 확인을 할 수 있다.
파일 확장자는 OS가 파일을 식별하는 주된 방법 중에 하나입니다.
대표적으로 파일 이름의 접미사로 (.) 마침표 뒤에 파일 유형을 나타내는 글자가 따라옵니다.
* txt, hwp, ppt, show 등등
파일 탐색기를 열어보게 되면 처음에는 확장자가 보이지 않지만
1장에 기초 설정을 하였다면 그림과 같이 파일 확장자가 확인됩니다.
그럼 확장자 숨기기를 왜 사용할까요
확장자를 위조하기 위해서입니다.
상반기 보안트렌드.pdf.exe로 만들어 확장자 숨김으로 만들면 언뜻 보면 pdf 파일로 보이지만 실제로는 실행파일인 것입니다.
그래서 사용자가 PDF파일인지 알고 클릭을 유도할 수 있습니다.

pdf 형식으로 보이는 아이콘이 아니기 때문에 클릭을 하지 않을 것이라는 생각도 하지만 섬네일(아이콘)을 위조까지 해준다면 더 쉽게 클릭을 유도할 수 있습니다.
실제 확장자는 exe 파일이지만 pdf로 보이게 하는 가짜 섬네일을 추가하고 확장자 숨기기 기능을 활성화하면 PDF 파일로 속일 수 있습니다.
썸네일(아이콘) 변경하기
Resource Hacker라는 도구를 통해서 기존 Icon을 지우고 새로운 아이콘을 넣어줄 수 있습니다.
아래는 Regshot 실행파일을 Resource Hcker를 통해 열어준 화면입니다.
기존의 ICON을 볼 수 있는데 해당 아이콘을 변경해 줄 수 있습니다.

Action에서 Replace Icon을 통해 변경해 줄 수 있습니다.


파일시그니처 분석
종합해 보면 파일을 확장자로만 확인하는 것은 부정확할 수 있다는 것입니다.
그렇다면 어떻게 파일을 구분할까요?
여러 종류의 파일을 준비해서(hwp, doc, hwpx, docx, jpeg, zip 등)
각 파일을 HEX 파일에 넣어 보면 16진수를 확인할 수 있습니다.
이중 앞부분을 보게 되면 해당 부분에 파일 헤더가 존재하는데
데이터가 어떻게 파일에 저장되는지를 정의하는 형식이며
여기서 파일의 종류를 확인할 수 있습니다.
PE Signature이 보이는데요 해당 부분이 실행파일이라는 것을 나타내는 구문입니다.
PDF 파일을 확인해 보면 PDF라는 signature를 확인할 수 있습니다.

준비된 파일들을 HEX 에디터로 열어보면
각자 다른 Header 값을 확인할 수 있습니다.
주요 파일의 확장자 매직 바이트 + ascii 코드는 아래와 같습니다.
파일 형식
|
파일 확장자
|
파일 시그니처 (Hex)
|
설명
|
HWP
|
.hwp
|
50 4B 03 04
|
한글 파일 (HWP)
|
HWPX
|
.hwpx
|
50 4B 03 04
|
XML 기반 한글 파일 (HWPX)
|
DOC
|
.doc
|
D0 CF 11 E0 A1 B1 1A E1
|
MS Word 문서 (구 버전)
|
DOCX
|
.docx
|
50 4B 03 04
|
MS Word 문서 (XML 기반)
|
JPG (JPEG)
|
.jpg, .jpeg
|
FF D8 FF E0 또는 FF D8 FF E1
|
JPEG 이미지 파일
|
WAVE
|
.wav
|
52 49 46 46
|
WAVE 오디오 파일
|
PNG
|
.png
|
89 50 4E 47 0D 0A 1A 0A
|
PNG 이미지 파일
|
GIF
|
.gif
|
47 49 46 38 39 61
|
GIF 이미지 파일
|
PDF
|
.pdf
|
25 50 44 46 2D
|
PDF 문서 파일
|
ZIP
|
.zip
|
50 4B 03 04
|
압축 파일 (ZIP)
|
RAR
|
.rar
|
52 61 72 21 1A 07 00
|
압축 파일 (RAR)
|
MP3
|
.mp3
|
FF FB 또는 ID3
|
MP3 오디오 파일
|
MP4
|
.mp4
|
00 00 00 18 66 74 79 70 69 73 6F 6D
|
MP4 비디오 파일
|
EXE
|
.exe
|
4D 5A
|
실행 파일 (Windows)
|
DLL
|
.dll
|
4D 5A
|
동적 라이브러리 파일
|
파일 포맷 식별 도구 : TriDNet
파일포멧을 HxD로 수시로 확인할 수 있지만 할 때마다 파일시그니처를 비교하기 힘들죠 그래서 시그니처를 자동으로 분석해주는 도구를 사용할 수 있습니다.
바로 TriD의 GUI 버전입니다.

해당 링크를 따라 들어가서 2가지 파일을 모두 같은 폴더에 넣어 줍니다.
그리고 파일을 실행하면 자동으로 NET Framework를 설치되는 것을 볼 수 있습니다.


프로그램을 실행한 후
PDF로 위장한 EXE 파일을 넣어보면
100% PDF 파일로 식별하는 것을 확인할 수 있습니다.

이렇게 자동으로도 분류를 해주지만
그래도~ 수동으로도 식별할 수 있는 능력이 있어야 합니다.
왜냐하면 HTTP 패킷 등 다양한 곳에서 파일 형식을 볼 수 있기 때문입니다.
파일로 드롭되지 않은 쉘코드에서도 파일 유형을 식별해야 할 수도 있습니다
그렇기 때문에 분석하고자 하는 분들의 경우는 파일 유형을 식별할 수 있어야 한다고 생각됩니다.
이번 글은 여기까지 마무리 하겠습니다 ^^