본문 바로가기

Analysis

22. Kimsuky's HWP malware

지난 10월 17일, Kimsuky 조직으로 추정되는 곳에서 한국의 통일연구원(KINU)를 사칭해 악성문서를 유포했다.

 

이 글은 해당 악성코드를 분석하고 정리한 글이다.

 

가장 먼저 한글 파일의 제목은 "KINU 전문가 자문회의 안내 및 요청사항"으로 되어있다. Author는 KINU이고 최종적으로 수정한 사람의 이름은 KNU로 되어있는 걸 볼 수 있다.

문서 속성

 

한글로 유포되는 악성코드의 경우에는 EPS(Encapsulated Post Script)를 통해서 악성행위가 이루어지기 때문에 EPS 부분을 긁어왔다. EPS 안에는 /ar <2F6C~ 식으로 코드가 저장되어있다. xor 과정이 있기는 하지만 00 과 xor하기 때문에 아래 헥스값 그대로 쉘코드가 된다.

한글 문서 내 EPS

 

위의 /ar <2F6C~ 부분에서 헥스값만 긁어오게되면 아래와 같이 한글파일을 exploit 하는 코드 + 쉘코드가 나타나게 된다.

헥스 값

 

위 /ar~ 영역을 지나고나면 아래와 같은 영역이 등장한다. 이 부분은 실제로 악성코드의 몸통이 되는 헥스값들이 xor 연산으로 암호화 된 상태이다. 두 개의 빨간 박스 중 처음에 해당하는 것은 시그니처 코드에 해당하고 다음 번 빨간 박스는 xor 연산에서 쓰이는 키 값이다. xor 연산에서 쓰이는 키 값 다음 4바이트는 복호화 크기인데, 어차피 저 부분부터 끝까지 다 복호화 한다.

시그니처 코드 : 0x0c790cbe

xor 키 : 0xF5

악성코드 몸통

 

그래서 0xF5와 xor 디코드 연산을 거치게되면 아래와 같은 헥스값들이 등장한다. 55 8B는 Push EBP를 뜻하는 헥스 값이기 때문에 이 코드를 통해서 무언가 악성행위를 할 것이라 예상할 수 있다.

디코딩 후 헥스값

 

위 코드를 올리디버거에 올려서 디버깅을 진행하다보면 xor 연산으로 어딘가를 또 복호화 하는 것을 볼 수 있다. 왼쪽 그림에 표시된 부분부터 복호화를 시작하게 되고, 첫 부분에서 'MZ' 시그니처가 나타나기 때문에 실행파일인 것을 알 수 있다.

xor 키 : 0x04c40b68

2차 복호화

 

복호화를 모두 끝내게 되면 아래 그림과 같이 'MZ' 시그니처를 가진 완전한 실행 파일이 나타난다.

복호화 완료

 

악성코드가 제일 먼저 하는 행위는 중복실행 방지를 위해서 뮤텍스를 생성하는 것이다.

뮤텍스 명 : clouds_xyz

뮤텍스 생성

 

이후에는 감염 PC 내에서 어떤 행위를 하던지 권한에 막히는 일이 없도록 해당 PC 내에서 악성코드의 권한을 상승시킨다.

권한 상승

 

한글 파일을 이용해 유포, 실행되는 악성코드이며 한글파일 내에서 코드를 실행시키기 위해서는 고스트스크립트가 필요하기 때문에 악성코드에서는 'gswin32c.exe' 라는 파일이 실행중인지를 찾는다.

gswin32c.exe 검색

 

이후 레지스트리키를 건드리게 되는데, 현재 악성코드가 동작하고 있는 환경이 가상환경인지 로컬환경인지 알아보기 위함이다. SystemProductName 키 값을 가져오고, 해당 키 값에 'Virtual'이라는 문자열이 존재하면 가상환경인 것으로 판단하고 악성코드를 종료시킨다.

가상환경 파악

 

위와 같이 기본 세팅을 끝마치면 실제 악성행위를 시작하게 된다. 해당 악성코드의 주 목표는 감염 PC의 정보탈취, C2서버로부터 추가 악성코드 다운로드인 것으로 보인다.

메인 함수

 

%APPDATA%\Microsoft\ 경로에 Network라는 폴더를 생성하게 된다. 이름은 Network이지만 사실 저장하는 것이나 쓰이는 용도는 이름과는 거리가 있다.

Network 폴더 생성

 

생성한 Network 폴더 내에 xyz, zyx.dll 과 같은 파일을 생성한다. 해당 파일은 감염 PC 내에서 명령어를 실행시키고 결과를 저장하는 파일이다.

파일 생성

 

명령줄을 이용하기 위해서 COMSPEC 값 또한 가져온다. COMSPEC은 command.exe 나 cmd.exe 를 실행하는데 필요하다.

COMSPEC

 

배치파일 a_[랜덤숫자4자리]를 'ab' 모드, 즉 바이너리 형태로 추가하는 모드로 파일을 생성한다.

a_[랜덤숫자4자리].bat 생성

 

a_[랜덤숫자4자리]는 아래와 같은 내용이 기록된다. 각각 내용은 명령이다. 디렉토리 에서 dir한 결과나 system에 대한 정보, 태스크 목록 등을 xyz 파일에 저장하고 최종적으로 배치파일을 삭제한다.

 

a_[랜덤숫자4자리] 파일

 

xyz 파일에는 아래와 같은 내용이 기록된다. 실제 a_[랜덤숫자4자리].bat 파일에서 수행한 명령 결과가 저장되고, dir 결과 등이 저장된다.

xyz 파일

 

거기에 더해서, 컴퓨터 명도 탈취한다.

컴퓨터명 탈취

 

이런 행위들이 다 끝나고나면 실제로 공격자의 C2서버에 접속을 위해서 헤더값을 설정하게 된다.

헤더값 설정

 

이후 'clouds.scienceontheweb.net' 이라는 곳에 'img/png/load.png/' 라던가 /button03 이라던가 하는 파라미터로 접근을 시도해서 추가 악성코드를 받아온다. (현재는 C2 서버에서 받아오는게 불가능하다.)

C2 연결
현재 접속 결과

반응형