1. HWP 악성감염의 징후
- OLE 스트림을 포함하고, 실행파일을 포함하고 있다.
- BinData 스토리지에 OLE 확장자를 가지고 있는 스트림이 존재하는지 확인
- HWP 파일의 압축을 푼 후, 패턴매칭을 활용해 실행 파일을 포함하고 있는 스트림이 존재하는지 확인 - 포스트 스크립트를 포함한 스트림이 존재한다.
- PS또는 EPS(Encapsulated PostScript) 확장자를 가지고 있는 스트림이 존재하는지 확인
- 스트림 내용을 확인하여 정상적인 포스트 스크립트인지 확인 - 동일한 내용(사이즈)의 스트림이 다수 존재한다.
- 실행파일을 포함한 스트림이 존재한다.
- HWP 파일의 압축을 푼 후, 패턴 매칭을 활용해 실행 파일을 포함한 스트림이 있는지 확인 - 스크립트를 포함하고 있다.
- 스크립트 스토리지를 조사하여 스크립트를 포함하고 있는 스트림이 존재하는지 확인
우선 앞선 포스팅에서는 실행파일 즉 PE파일이 있는 유형을 살펴보았다면
이번엔 다른 유형에 대해 알아볼 것이다.
2. 악성 HWP의 분석
HWP의 징후 중 동일한 내용의 스트림이 다수 존재하는 경우를 살펴보자.
일반적인 문서의 섹션은 크게 1~2개 정도로 볼 수 있다.
하지만 다음의 사진을 보면
섹션이 7개나 있는 것을 알 수 있다. 이상징후로 의심이 된다.
위 사진은 oledump라는 도구를 이용해 hwp파일을 분석한 것이다.
특히 각 섹션 파일을 열어보면 모두 동일한 내용임이 보이는데
이렇게 세션이 비이상적으로 많은데 똑같기까지 한 것은 일반적으로 만들어지기 어렵다.
심지어 HxD를 통해 살펴보면 섹션의 해시값까지 같다.
명백하게 인위적으로 만들어진 파일들이다.
따라서 BodyText 폴더에 동일한 섹션이 많은 것, 이상징후다.
다음으로 살펴볼 것은 eps파일이 있는 경우다.
위 사진의 파일은 다른 이상징후는 보이지 않지만 .eps 확장자를 가진 파일이 보인다.
eps는 포스트스크립트로, eps파일이 존재하면 악성 파일일 확률이 높다.
먼저 oledump로 eps파일을 내려받고
zlib_decompress 도구를 이용해 디코딩해주면
디코딩된 결과를 볼 수 있는데, 여러 값들이 무작위로 들어있다.
원래 eps파일은 벡터 이미지를 나타내는 파일이라 객체와 좌표값이 들어있다.
하지만 이 경우 의심스러운 데이터가 나열되어있다.
따라서 이후 악성 파일 시그니처를 대조하는 형식으로 분석을 진행할 수 있다.
3. Post Script 분석 예제
Post Script
- 고스트 스크립트라는 인터프리터에 의해 해석되는 문법
고스트 스크립트를 통해 우선 해석을 해보자.
우선 고스트 스크립트는 위와같이 스택에 값을 넣고 확인이 가능하다.
위 사진을 보면 간단한 add연산이 나타나있다.
스택이므로 아래에서 위로 값이 쌓이며 add 연산은 스택의 맨 위 두 값을 더하거나
주어진 값을 더해서 스택을 갱신하는 모습을 볼 수 있다.
만약 한컴오피스에 악성 포스트 스크립트가 존재하면 이러한 연산들을 자동적으로 수행하게 된다.
앞서 디코딩한 포스트 스크립트를 살펴보자.
변수의 선언은 우선 다음과 같다.
/변수명 def # '/'는 변수를 선언할 때 사용, 선언이 끝날 시 def로 닫아준다.
다음으로 ar의 내용을 보면 엔트로피값이 굉장히 높고(무작위 문자들) 데이터가 길다.
--> 셸코드의 해시값이거나 인코딩된 포스트 스크립트일 가능성이 매우 높으므로 우선 추출해야 한다.
for문의 경우 스택에 0과 1을 삽입한 후 1바이트씩 이동하며,
xor연산을 통해 안의 내용이 하나하나 디코딩 되고, 이때 연산의 key값은 204가 되겠다.
이제 인코딩된 데이터값을 헥사 디코딩을 통해 binary로 만들어주고, xor을 실시해볼 것이다.
e3~6만 남긴 헥사 파일을 Hex2bin 툴을 통해 바이너리로 바꿔보자
이제 unxor.py를 사용해서 바이너리 파일을 디코딩해줄 것이다. 키값은 앞서 말했던 204(CC in Hex)이다.
이제 디코딩된 셸코드를 보면 909090 즉 노오퍼레이션 이후e8 호출 혹은 jump 하는 것을 볼 수 있다.
이제 위 헥사인코딩된 셸코드의 값을 hex2bin으로 다시 binary로 바꿔준다.
그 후 IDA를 통해 코드를 어셈블리 형태로 바꿔주고
어셈블리를 x32dbg로 가져가서 디코딩된 코드를 Dump 해주면 yara룰을 통해 API를 분석할 수 있다.
이후 strings -n 명령어를 통해 문자열 추출도 가능하고, type 명령어로 문자열 확인을 할 수도 있다.
셀코드를 x32dbg에서 디버깅할 때, 메모리주소를 옮겨줘야하는 경우도 있다.
'정보보안 > Spear-Phishing' 카테고리의 다른 글
[Spear-Phishing] Malicious HWP Document Exploit Analysis (0) | 2023.08.30 |
---|---|
[Spear-Phishing] Malicious HWP Document Macro Analysis (2) | 2023.08.29 |
[Spear-Phishing] Malicious HWP Document Analysis (0) | 2023.08.27 |
[Spear-Phishing] ShellCode Analysis (API Hash Pattern Matching) (0) | 2023.08.27 |
[Spear-Phishing] Malicious Document의 구성요소 (0) | 2023.08.27 |