0. 개요

1. PE의 특징

2. Manual Extracting





0. 개요


VBScript

Scripting Engine [VBScript.dll] not registered

Scripting Engine [VBScript.dll] not started

Scripting Engine Parser not available

Could not host scripting site

...


  악성코드를 분석하다 보면 위와 같은 문자열들을 가진 바이너리를 볼 수 있다. 내용을 보고 추측해 봤을 때 AutoIt이나 AutoHotKey 등 처럼 VBScript를 컴파일하여 바이너리 형태로 변환한 것이라는 생각이 들어 더 찾아보게 되었다.


  이것들은 대부분의 경우 VbsEdit [ http://www.vbsedit.com ] 이라는 VBS 에디터 프로그램의 추가 기능을 이용한 방식으로 생성된 것으로 보인다. 이 기능은 내부적으로 script2exe라는 프로그램을 사용한다.


  생성 주체는 찾았고 이제 AutoIt 처럼 스크립트를 추출할 수 있는 방법을 알아내던 중 다음 링크를 찾을 수 있었다. 첫 번째 링크는 이렇게 만들어진 PE의 특징부터 디컴파일하는 과정에 대해 정리된 글이며, 두 번째 링크는 이 과정 즉 스크립트 추출을 자동화해 주는 IDA Pro 파이썬 스크립트이다.


[ https://www.politoinc.com/single-post/2017/11/03/Unpacking-script2exe-Malware ]

[ https://github.com/PolitoInc/script2exe_dumper ]


  하지만 직접 사용했을 때 특정 분기문에서 이 스크립트가 전제로 하는 부분이 실행되지 않아 항상 결과를 반환하지는 않는다는 것을 확인하였다. 또한 IDA Pro가 필요하며 디버깅을 전제로 하기 때문에 동적으로 실행될 위험이 존재한다는 단점도 있다. 물론 어쩔 수 없는 경우라면 이 스크립트를 수정하여 처리해야 하겠지만 뒤에서 살펴보듯이 RC4 암호화에 사용되는 키가 항상 같다는 특징을 이용해서 충분히 자동화 스크립트를 제작할 수 있다.


  여기에서는 차례대로 생성된 PE의 특징과 직접 스크립트를 추출하는 방식을 설명한다. 자동화 스크립트 개발 시 개인적으로 사용했던 부분들도 중간 중간에 들어갈 것이다.





1. PE의 특징

  Resource Hacker나 PEview 등의 도구를 통해 리소스 섹션 내부에 129번 (0x81) "Bitmap" 타입이 포함되어 있는 것을 확인할 수 있다. 이것은 VBS가 RC4 암호화 알고리즘으로 인코딩되어 저장된 것이다.


  이 특징은 자동화에 쉽게 사용될 수 있는데 해당 Bitmap을 PE 섹션에서 찾아서 추출하는 스크립트를 짤 수도 있을 것이고, 더 간단하게 7zip 같은 압축 프로그램을 이용해 PE 압축 해제 시 결과로 받는 129.bmp 파일을 이용할 수도 있다. 물론 매뉴얼하게 Resource Hacker를 이용해 해당 부분을 추출할 수도 있다. 참고로 리소스 섹션에 위치하던 Bitmap 파일로 존재하던 두 형태에 대한 구조를 알아야 크기 및 오프셋을 확인하고 추출할 수 있다.


  다음 특징으로 pdb 문자열이 있다. 최신 버전에서는 이것을 확인할 수 없지만 과거 버전에서는 변환 시 다음과 같은 문자열이 pdb 관련해 항상 PE에 저장되었던 것으로 추정된다.


"C:\\Projets\\vbsedit_source\\script2exe\\Release\\mywscript.pdb"





2. Manual Extracting

  RC4 암호화 알고리즘으로 인코딩된 데이터는 확인하였으니 이제 키 값만 구하면 해당 스크립트를 완벽하게 추출할 수 있다. 위의 참고 자료를 보면 IDA Pro 파이썬 스크립트를 사용하여 키 값을 구할 때까지 디버깅을 진행한 후 이 키를 이용해 복호화를 진행하는 방식을 사용한다.


  정확히는 IDA Pro를 이용해 "_rand" 함수를 구하고 이 함수를 참조하는 루틴을 찾았을 때 ( Cross Reference ) 특정 루프문을 볼 수 있다. 이것은 바이트 연산 후 저장하는 행위를 반복하여 결국 0x20 크기의 키를 생성하는 역할을 한다. 이 루프문이 끝나면 저장된 버퍼에서 0x20 크기의 키를 획득할 수 있다.


  문제는 현재 구할 수 있는 이 VbsEdit 프로그램은 모두 같은 RC4 키를 사용한다는 점이다. 이를 통해 디컴파일 과정을 디버깅 필요 없이 간단하게 진행할 수 있다. 먼저 PE에서 인코딩된 VBScript를 추출한 후 다음의 RC4 키를 이용하는 복호화 알고리즘을 사용하면 된다.


[ AgyUouKrxGu0q4lFjxxbWR4agvL7xFR0 ]


  참고로 RC4 알고리즘의 경우 파이썬으로도 많이 나와 있지만 문제는 스트링에 대한 것들이 대부분이고 파일을 대상으로 하는 코드는 찾기 힘든 편이다. 스트링을 대상으로 하는 코드를 사용하면 0x00 같은 값을 인식하지 못해 이 부분까지만 복호화가 진행된다. 그래서 개인적으로 참조했던 오픈 소스를 여기에 올리기로 한다.


[ https://github.com/g2jun/RC4-Python ]



Posted by SanseoLab

블로그 이미지
Malware Analyst
SanseoLab

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

최근에 올라온 글

최근에 달린 댓글

글 보관함