0. 개요

1. Inno Setup

2. NSIS ( NullSoft Install System )

3. msi ( Microsoft Installer )





0. 개요

  프로그램을 설치한다는 것은 단순히 내부에 압축된 파일을 풀고 특정 폴더에 위치시키는 것이 전부인 경우가 많을 것이다. 물론 이미 설치된 경우에는 지우는 기능이 추가되어 있을 수도 있고, 설치 파일에서 드랍하는 방식이 아니라 다운로드하는 방식일 수도 있다. 이러한 기능들 외에도 레지스트리를 등록하는 등의 추가적인 기능이 존재할 수 있다.


  바이너리를 분석하다 보면 설치 과정 중 크래시가 나는 경우라던지 아니면 실행시키지 않고 정적으로 분석하고 싶은 경우가 있을 수 있다. 이러한 경우에는 내부의 파일을 추출하는 기능이 있으면 편리하다. 꼭 파일 뿐만 아니라 다운로드하여 설치하는 인스톨러라면 그 스크립트를 추출할 수 있으면 굳이 직접 설치할 필요 없이 분석을 진행할 수 있다.


  대부분의 경우 그냥 설치한 후 설치된 파일을 가지고 분석하면 되겠지만 가끔씩 필요한 경우가 생기며 이 때 유용하게 사용할 수 있는 방식들을 정리하려고 한다.





1. Inno Setup

  대표적으로 많이 사용되는 인스톨러 프로그램 중 하나이다. 간단하게 InnoExtractor라는 툴 하나만 있으면 된다. 내부의 파일들 뿐만 아니라 설치 스크립트 파일까지 추출할 수 있다. 설치 스크립트는 .iss 확장자를 가진 텍스트 파일이다. 직과적이기 때문에 어떤 파일이 어디에 어떤 이름으로 위치하게 되는지 등의 정보를 확인할 수 있다.


  드래그 앤 드랍으로 설치 파일을 InnoExtractor에 드랍하면 많은 정보를 한 눈에 확인할 수 있다. 설치될 파일들은 "Application" 폴더에 존재하며, 설치 스크립트 파일은 "Script Files (Installer)" 폴더에서 확인할 수 있다. 장점으로 원하는 파일만 드래그 앤 드랍으로 추출할 수도 있다.


  간단하지만 암호가 걸린 경우도 있다. 이 때는 "Application" 폴더에 위치한 설치될 파일들을 추출할 때 암호가 필요한데, 굳이 이런 경우라면 그냥 설치하면 될 것이기 때문에 큰 상관은 없어보인다.


  앞에서도 언급했듯이 스크립트가 중요한 이유는 인스톨러가 다운로드 기능을 포함할 수 있기 때문이다. 기본적으로 제공되는 기능은 아닌것 같고 IsTools나 InnoTools Downloader라는 DLL로 제공되는 일종의 플러그인을 사용해야 한다. 물론 분석할 때는 간단하게 스크립트 파일에서 url만 확인하면 될 것이다.


  마지막으로 InnoExtractor 외에도 innounp라는 커맨드 라인 도구도 존재한다. 자동화를 하고자 할 때 이 커맨드 라인 프로그램을 이용하면 쉽게 자동화 스크립트를 작성할 수 있을 것이다.





2. NSIS ( NullSoft Install System )

  널소프트 인스톨러는 7z 같은 압축 프로그램으로 간단하게 압축을 해제할 수 있다. 압축을 해제한 후 내부 폴더를 보면 $PLUGINSDIR 등의 폴더와 설치될 파일들을 확인할 수 있다. 참고로 이 내부에 system.dll을 거의 항상 볼 수 있을 것이다.


  스크립트 파일은 .nsi 확장자를 가진 텍스트 파일이다. 널소프트의 경우도 Inno Setup 처럼 다운로더 기능을 가질 수 있다. 그렇기 때문에 스크립트가 중요하다. 과거에는 7-zip을 이용하여 압축 해제 시에 딱히 .nsi 스크립트 파일을 확인할 수 없어서 불가능한 것으로 알고 있었지만, 7-zip의 버전 9.34 부터 15.06 까지는 이 .nsi 스크립트도 압축 해제할 수 있다는 것을 알게 되었다. 즉 과거의 특정 버전부터 특정 버전들 사이에 .nsi 스크립트 해제 기능이 존재했었다는 것이다. 해당 버전을 설치하고 압축 해제를 진행해보니 이전에 사용했던 것과는 다르게 "[NSIS].nsi" 파일이 추가적으로 압축 해제가 가능했다. 


  결론적으로 v9.34 - v15.06 사이의 7-zip을 설치하면 이것도 InnoSetup과 같이 스크립트 추출이 가능하다.


  NSIS는 악성코드에서도 자주 사용된다. system.dll을 보면 Call() 함수를 Export하는 것을 확인할 수 있는데 스크립트에서 이 함수를 이용해 kernel32.dll 같은 dll의 함수를 이용할 수 있다고 한다. 사실 복잡하게 해당 함수들을 이용해 코딩하는 수준 까지는 확인하지 못했다. 몇 개의 악성코드들을 확인한 결과 쓰레기 파일들과 함께 인코딩된 데이터, 실제 악성 행위를 하는 dll 파일을 드랍한 후 Call() 함수를 이용해 해당 DLL을 로드하거나 (DllMain()에 악성 루틴이 있는 경우) 아니면 해당 DLL이 export하는 특정 함수를 호출하면 이곳에 악성 루틴이 존재하여 인코딩된 데이터 파일을 읽은 후 이를 복호화하여 인젝션하는 등의 방식이었다.


  사실 실질적인 루틴은 드랍되는 dll에 있긴 하지만 그래도 디버깅을 통해 이러한 방식이라는 점을 확인하는 것 보다는 간단하게 .nsi 스크립트를 읽어와 쓰레기 파일과 실제 필요한 파일을 구분하고, 어떤 메커니즘으로 동작하는 가를 확인하는 것이 더 정확하고 빠른 분석이 가능하다고 생각한다.





3. msi ( Microsoft Installer )

  널소프트 인스톨러처럼 압축 프로그램을 이용하여 내부의 파일들을 추출할 수 있다. 확장자가 나와 있지는 않지만 어차피 크기만 보고도 PE인지 확인할 수 있을 것이다.


  특이점은 msi의 경우 파일의 시그니처가 doc, xls 같이 "D0 CF"로 시작한다는 점이다. 즉 msi 파일은 위의 다른 인스톨러들처럼 실행 파일이 아니라 데이터 파일이다. msi 파일을 실행할 경우 msiexec.exe라는 프로그램이 자동으로 이 msi 파일을 가지고 설치를 진행한다.


  msi 파일을 더블 클릭하면 다음과 같이 msiexec.exe가 msi를 인자로 받고 실행된다. 참고로 /i 인자는 install 즉 설치를 의미한다.

> msiexec.exe /i "$PATH\aaa.msi"


  중요한 점은 msiexec.exe가 msi 파일을 받을 때 현재 로컬에 있는 경우 뿐만 아니라 web에서도 받아와서 설치할 수 있다는 것이다. 즉 특정 주소에 msi 파일을 올려놓은 후 인자로 해당 msi 파일을 포함한 URL 주소를 넣고 msiexec.exe를 실행시킬 경우 다운로드 및 설치가 진행된다.

> msiexec.exe /i "http://www.aaa.co.kr/data/aaa.msi"


  msi 파일은 분석용으로 "jsMSIx.exe"라는 프로그램이 가장 괜찮아 보인다. 7z로 압축을 푸는 경우에는 설치될 exe 파일만 확인할 수 있겠지만 이 툴로 푸는 경우 exe 파일이 어느 디렉터리에 설치될지에 따라 해당 위치에 대한 디렉터리들까지 생성하여 exe를 위치시키기 때문에 더 많은 정보를 확인할 수 있다. (물론 실제 위치는 아니고 결과 폴더 내부에 적절하게 위치된다) 또한 msi 파일의 경우 파일 설치 외에도 레지스트리를 설정하는 것도 가능한데 jsMSIx.exe는 결과 폴더에 같이 생성되는 "MSI Unpack.log" 파일을 통해 어느 레지스트리 키가 생성되는지 또한 어느 값이 설정되는지도 동시에 파악할 수 있다. 즉 직접 설치하지 않고 어느 폴더에 어느 파일이 생성되며 어느 레지스트리 키가 생성되는지 등의 정보를 확인할 수 있는 것이다.



'악성코드 분석' 카테고리의 다른 글

파워셸(PowerShell)과 악성코드  (0) 2019.01.31
Access Token 및 권한과 Integirity Level에 대한 정리  (0) 2019.01.27
악성코드 지속 메커니즘  (0) 2018.12.16
TotalCommand 자동화  (0) 2018.12.16
x64dbg 분석 팁  (0) 2018.12.15
Posted by SanseoLab

블로그 이미지
Malware Analyst
SanseoLab

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.3
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
31

최근에 올라온 글

최근에 달린 댓글

글 보관함