작은 메모장
악성HWP문서 분석_익스플로잇 1 본문
이번 목표인 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들을 바인딩하는 코드
'KISA 사이버 보안 훈련 > 스피어피싱 대응 심화' 카테고리의 다른 글
악성HWP문서 분석_익스플로잇 3 (0) | 2023.05.30 |
---|---|
악성HWP문서 분석_익스플로잇 2 (0) | 2023.05.30 |
악성HWP문서 분석_Macro 2 (0) | 2023.05.30 |
악성HWP문서 분석_Macro 1 (0) | 2023.05.30 |
악성HWP문서 분석_PostScript 2,3 (0) | 2023.05.30 |