작은 메모장

악성HWP문서 분석_익스플로잇 1 본문

KISA 사이버 보안 훈련/스피어피싱 대응 심화

악성HWP문서 분석_익스플로잇 1

으앙내눈 2023. 5. 30. 05:54

이번 목표인 hwp문서

 

분리된 환경임을 믿고 분석을 위해 한번 실행

정상적인 이력서 파일처럼 보이나, 한번 문서를 연것으로 이 환경은 감염됨

분석을 위해, WinPrefetchView프로그램을 사용해 HWP 프로세스와 동시에 실행된 프로세스를 탐색

HWP.exe 프로세스가 보임

이는 한글 프로그램으로 일반적인 문서 편집 프로그램임

이를 기준으로 의심스러운 프로그램이 실행되었는지 확인

gbb가 실행되었음

이는 ghostscript가 실행되었다는 것으로, 해당 문서에 PostScript가 실행되었음을 의미

실제로 제목 옆에 알아차리기 힘들게 조그마한 스크립트를 삽입한 것을 볼 수 있음

이를 통해 공격자가 악성 스크립트를 HWP 파일 안에 넣어 공격을 시도하였음을 알 수 있음

 

트리아지

PostScript가 주로 시행되는 곳은 BinData 스토리지

따라서 HWP 파일 스트림을 분석하여 BinData에 이상한 스크립트가 존재하는지 확인

BIN0001.eps가 발견됨

이는 평소에는 사용하지 않는 PostScript로, 악의적인 스크립트가 있다고 판단

분석을 위해 파일 형태로 복사

zlib으로 압축되어 있을 것이므로

압축 또한 해제

압축이 정상적으로 해제됨

 

스크립트 분석

압축을 푼 스크립트가 상당히 더러운 내용으로 되어있음

보기가 상당히 불편

PostScript에서 변수를 정의하는 def를 기준으로 줄바꿈을 시행

보기 좋게 정렬이 된 모습

위 취약점은 CVE-2017-8291 넘버를 받은 취약점으로

ghostScript를 익스플로잇한 취약점

 

중요한 부분만 살펴보면

Y77이라는 값에 엄청난 데이터를 집어넣는 모습

특이한 점은 데이터가 90으로 시작

이는 아무 의미없는 NULL값으로

시작 포인터가 악성 프로그램의 시작점에서 조금 앞으로 오더라도

공백값을 참조하게 해 악성 프로그램의 시작점으로 오게 만드려는 속셈

이를 NOP sled기법이라 함

 

이 데이터가 악성 프로그램이라 판단되므로

이를 파일화 하여 분석

cyberchef를 사용하여 데이터를 hex화

이를 디버거를 통해 분석

ghostscript가 32비트로 구동되기 때문에, 쉘코드 또한 32비트로 세팅

따라서 32비트 디버거를 실행

아무 파일이나 실행

위 경우 32비트 계산기를 실행

메모리 할당을 쉘코드보다 크게 잡는다

임의로 할당된 메모리에서 덤프에서 따라가기 선택

이동된 메모리 영역의 첫 부분에 크기를 무시하고 복사한 쉘코드를 붙여넣기

성공적으로 쉘코드가 삽입 되었으나, 프로그램의 시작 부분은 여전히 계산기의 시작점임

이걸 쉘코드의 시작점으로 변경하는 작업이 필요

쉘코드의 시작점을 디스어셈블러에서 따라가기

맨 꼭대기에 새 EIP를 설정하여 쉘코드 시작점을 설정

 

스크립트 코드 분석

코드를 보면 뭔가 계속 스택에 계속 밀어넣고 있음

이를 확인하기 위해 스택이 끝나는 지점에 중단점을 설정(F2)하고 실행해봄(F9)

뭔가 이상한 스택이 생성된 것을 확인할 수 있음

ESP는 스택 최상단을 가리키는 포인터

이를 쫓아가 봄

보라색 부분이 스택에 계속 밀어넣은 부분

Ctrl + E를 눌러 이를 자세히 분석

그럼 상단에 ASCII 값으로 특정 문자열이 생성된 것을 확인 가능함

해당 코드는 WinExec 함수를 통해 특정 주소에서 코드를 메모리에 다운받아 실행하는 코드

나머지 코드는 다운 받은 코드를 실행시키기 위해 필요한 API들을 바인딩하는 코드