Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/0x534a/dynmx
Dynamic Analysis (Sandboxing)Malware Analysis
GitHub0x534a/dynmx

dynmx

시그니처 기반 악성코드 특징 탐지 도구로, Windows API 호출 시퀀스를 기반으로 합니다. 샌드박스 API 추적을 위한 YARA와 같습니다!

저장소 보기
856583년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

dynmx 프로토타입

dynmx (발음: 다이내믹스)는 Windows API 호출 시퀀스를 기반으로 한 행위 기반 악성코드 특징 탐지 접근법입니다. 간단히 말해, dynmx는 악성코드 샌드박스에서 생성된 API 호출 추적(소위 함수 로그)을 위한 일종의 YARA로 생각할 수 있습니다. 따라서 탐지 접근법의 데이터 기반은 정적으로 분석되는 악성코드 샘플 자체가 아니라 악성코드 샌드박스에서 동적 분석 중 생성된 데이터입니다. 현재 dynmx는 다음 악성코드 샌드박스의 함수 로그를 지원합니다:

  • VMRay (함수 로그, 텍스트 및 XML 형식)
  • CAPEv2 (report.json 파일)
  • Cuckoo (report.json 파일)

탐지 접근법은 석사 논문 Signature-Based Detection of Behavioural Malware Features with Windows API Calls에서 자세히 설명되어 있습니다. 이 프로젝트는 해당 접근법의 프로토타입 구현이며 석사 논문 과정에서 개발되었습니다. 시그니처는 악성코드 분석가가 dynmx 시그니처 DSL에서 수동으로 정의하며, 이 도구를 통해 함수 로그에서 탐지할 수 있습니다. dynmx 시그니처 DSL의 기능과 구문은 석사 논문에서도 확인할 수 있습니다. 또한, 저장소 dynmx-signatures에서 샘플 dynmx 시그니처를 찾을 수 있습니다. API 호출 기반 악성코드 특징 탐지 외에도, dynmx는 악성코드가 사용하는 OS 리소스(소위 접근 활동 모델)를 추출할 수 있습니다. 이러한 리소스는 API 호출을 검사하고 OS 리소스에 대한 작업을 재구성하여 추출됩니다. 현재 모델에서는 파일 시스템, 레지스트리 및 네트워크 범주의 OS 리소스가 고려됩니다.

예제

다음 섹션에서는 악성코드 특징 탐지 및 리소스 추출에 대한 예제를 보여줍니다.

탐지

이 예제에서는 SHA-256 해시 합이 c0832b1008aa0fc828654f9762e37bda019080cbdd92bd2453a05cfb3b79abb3인 악성코드 샘플을 선택합니다. MalwareBazaar에 따르면, 해당 샘플은 악성코드 패밀리 Amadey에 속합니다. 이 샘플에 대한 공개 VMRay 분석 보고서가 있으며, VMRay가 추적한 함수 로그도 제공됩니다. 이 함수 로그가 탐지에 사용할 데이터 기반이 됩니다.

악성코드 샘플이 Process Hollowing이라는 인젝션 기술을 사용하는지 확인하려면 함수 로그에서 다음 dynmx 시그니처를 탐지해 볼 수 있습니다.```yaml dynmx_signature: meta: name: process_hollow title: Process Hollowing description: Detection of Process hollowing malware feature detection: proc_hollow: # Create legit process in suspended mode - api_call: ["CreateProcess[AW]", "CreateProcessInternal[AW]"] with: - argument: "dwCreationFlags" operation: "flag is set" value: 0x4 - return_value: "return" operation: "is not" value: 0 store: - name: "hProcess" as: "proc_handle" - name: "hThread" as: "thread_handle" # Injection of malicious code into memory of previously created process - variant: - path: # Allocate memory with read, write, execute permission - api_call: ["VirtualAllocEx", "VirtualAlloc", "(Nt|Zw)AllocateVirtualMemory"] with: - argument: ["hProcess", "ProcessHandle"] operation: "is" value: "$(proc_handle)" - argument: ["flProtect", "Protect"] operation: "is" value: 0x40 - api_call: ["WriteProcessMemory"] with: - argument: "hProcess" operation: "is" value: "$(proc_handle)" - api_call: ["SetThreadContext", "(Nt|Zw)SetContextThread"] with: - argument: "hThread" operation: "is" value: "$(thread_handle)" - path: # Map memory section with read, write, execute permission - api_call: "(Nt|Zw)MapViewOfSection" with: - argument: "ProcessHandle" operation: "is" value: "$(proc_handle)" - argument: "AccessProtection" operation: "is" value: 0x40 # Resume thread to run injected malicious code - api_call: ["ResumeThread", "(Nt|Zw)ResumeThread"] with: - argument: ["hThread", "ThreadHandle"] operation: "is" value: "$(thread_handle)" condition: proc_hollow as sequence

root@kitploit:~
시그니처를 기반으로 *dynmx*를 강력하게 만드는 몇 가지 DSL 기능을 찾을 수 있습니다:
* 대체 경로가 있는 API 호출 시퀀스 정의
* 정규 표현식을 사용한 API 호출 함수 이름 매칭
* 여러 연산자를 사용한 인수 및 반환 값 매칭
* 변수 저장, 예: API 호출 시퀀스에서 핸들 추적을 위해
* 부울 연산자(`AND`, `OR`, `NOT`)를 사용한 탐지 조건 정의

위에 표시된 시그니처를 사용하여 샘플 `c0832b1008aa0fc828654f9762e37bda019080cbdd92bd2453a05cfb3b79abb3`의 함수에 대해 *dynmx*를 실행하면 시그니처가 탐지되었음을 나타내는 다음 출력이 표시됩니다.```
$ python3 dynmx.py detect -i 601941f00b194587c9e57c5fabaf1ef11596179bea007df9bdcdaa10f162cac9.json -s process_hollow.yml


    |
  __|         _  _    _  _  _
 /  |  |   | / |/ |  / |/ |/ |  /\/
 \_/|_/ \_/|/  |  |_/  |  |  |_/ /\_/
          /|
          \|
            
 Ver. 0.5 (PoC), by 0x534a


[+] Parsing 1 function log(s)
[+] Loaded 1 dynmx signature(s)
[+] Starting detection process with 1 worker(s). This probably takes some time...

[+] Result
process_hollow	c0832b1008aa0fc828654f9762e37bda019080cbdd92bd2453a05cfb3b79abb3.txt

출력 형식을 detail로 설정하면 더 자세한 내용을 볼 수 있습니다. 이제 함수 로그에서 감지된 정확한 API 호출 시퀀스를 확인할 수 있습니다. 또한 서명이 프로세스 51f0.exe에서 감지되었음을 확인할 수 있습니다.``` $ python3 dynmx.py -f detail detect -i 601941f00b194587c9e57c5fabaf1ef11596179bea007df9bdcdaa10f162cac9.json -s process_hollow.yml

root@kitploit:~
|

__| _ _ _ _ _ / | | | / |/ | / |/ |/ | // _/|/ _/|/ | |/ | | |_/ /_/ /| |

Ver. 0.5 (PoC), by 0x534a

[+] Parsing 1 function log(s) [+] Loaded 1 dynmx signature(s) [+] Starting detection process with 1 worker(s). This probably takes some time...

[+] Result Function log: c0832b1008aa0fc828654f9762e37bda019080cbdd92bd2453a05cfb3b79abb3.txt Signature: process_hollow Process: 51f0.exe (PID: 3768) Number of Findings: 1 Finding 0 proc_hollow : API Call CreateProcessA (Function log line 20560, index 938) proc_hollow : API Call VirtualAllocEx (Function log line 20566, index 944) proc_hollow : API Call WriteProcessMemory (Function log line 20573, index 951) proc_hollow : API Call SetThreadContext (Function log line 20574, index 952) proc_hollow : API Call ResumeThread (Function log line 20575, index 953)

root@kitploit:~
### 리소스
함수 로그에서 접근된 OS 리소스를 추출하려면, 함수 로그에 대해 *dynmx* 명령어 `resources`를 간단히 실행하면 됩니다. 아래는 SHA-256 해시 합계가 `601941f00b194587c9e57c5fabaf1ef11596179bea007df9bdcdaa10f162cac9`인 샘플에 대한 자세한 출력 예시입니다. 이는 [Avast-CTU Public CAPEv2 Dataset](https://github.com/avast/avast-ctu-cape-dataset)의 일부인 CAPE 샌드박스 보고서입니다.```
$ python3 dynmx.py -f detail resources --input 601941f00b194587c9e57c5fabaf1ef11596179bea007df9bdcdaa10f162cac9.json


    |
  __|         _  _    _  _  _
 /  |  |   | / |/ |  / |/ |/ |  /\/
 \_/|_/ \_/|/  |  |_/  |  |  |_/ /\_/
          /|
          \|

 Ver. 0.5 (PoC), by 0x534a


[+] Parsing 1 function log(s)
[+] Processing function log(s) with the command 'resources'...

[+] Result
Function log: 601941f00b194587c9e57c5fabaf1ef11596179bea007df9bdcdaa10f162cac9.json (/Users/sijansen/Documents/dev/dynmx_flogs/cape/Public_Avast_CTU_CAPEv2_Dataset_Full/extracted/601941f00b194587c9e57c5fabaf1ef11596179bea007df9bdcdaa10f162cac9.json)
	Process: 601941F00B194587C9E5.exe (PID: 2008)
		Filesystem:
			C:\Windows\SysWOW64\en-US\SETUPAPI.dll.mui (CREATE)
			API-MS-Win-Core-LocalRegistry-L1-1-0.dll (EXECUTE)
			C:\Windows\SysWOW64\ntdll.dll (READ)
			USER32.dll (EXECUTE)
			KERNEL32.dll (EXECUTE)
			C:\Windows\Globalization\Sorting\sortdefault.nls (CREATE)
		Registry:
			HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLEAUT (READ)
			HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup (READ)
			HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup\SourcePath (READ)
			HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion (READ)
			HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\DevicePath (READ)
			HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Internet Settings (READ)
			HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Internet Settings\DisableImprovedZoneCheck (READ)
			HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings (READ)
			HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\Security_HKLM_only (READ)
	Process: 601941F00B194587C9E5.exe (PID: 1800)
		Filesystem:
			C:\Windows\SysWOW64\en-US\SETUPAPI.dll.mui (CREATE)
			API-MS-Win-Core-LocalRegistry-L1-1-0.dll (EXECUTE)
			C:\Windows\SysWOW64\ntdll.dll (READ)
			USER32.dll (EXECUTE)
			KERNEL32.dll (EXECUTE)
			[...]
			C:\Users\comp\AppData\Local\vscmouse (READ)
			C:\Users\comp\AppData\Local\vscmouse\vscmouse.exe:Zone.Identifier (DELETE)
		Registry:
			HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLEAUT (READ)
			HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup (READ)
			[...]
	Process: vscmouse.exe (PID: 900)
		Filesystem:
			C:\Windows\SysWOW64\en-US\SETUPAPI.dll.mui (CREATE)
			API-MS-Win-Core-LocalRegistry-L1-1-0.dll (EXECUTE)
			C:\Windows\SysWOW64\ntdll.dll (READ)
			USER32.dll (EXECUTE)
			KERNEL32.dll (EXECUTE)
			C:\Windows\Globalization\Sorting\sortdefault.nls (CREATE)
		Registry:
			HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLEAUT (READ)
			HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup (READ)
			HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup\SourcePath (READ)
			HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion (READ)
			HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\DevicePath (READ)
			HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Internet Settings (READ)
			HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Internet Settings\DisableImprovedZoneCheck (READ)
			HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings (READ)
			HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\Security_HKLM_only (READ)
	Process: vscmouse.exe (PID: 3036)
		Filesystem:
			C:\Windows\SysWOW64\en-US\SETUPAPI.dll.mui (CREATE)
			API-MS-Win-Core-LocalRegistry-L1-1-0.dll (EXECUTE)
			C:\Windows\SysWOW64\ntdll.dll (READ)
			USER32.dll (EXECUTE)
			KERNEL32.dll (EXECUTE)
			C:\Windows\Globalization\Sorting\sortdefault.nls (CREATE)
			C:\ (READ)
			C:\Windows\System32\uxtheme.dll (EXECUTE)
			dwmapi.dll (EXECUTE)
			advapi32.dll (EXECUTE)
			shell32.dll (EXECUTE)
			C:\Users\comp\AppData\Local\vscmouse\vscmouse.exe (CREATE,READ)
			C:\Users\comp\AppData\Local\iproppass\iproppass.exe (DELETE)
			crypt32.dll (EXECUTE)
			urlmon.dll (EXECUTE)
			userenv.dll (EXECUTE)
			wininet.dll (EXECUTE)
			wtsapi32.dll (EXECUTE)
			CRYPTSP.dll (EXECUTE)
			CRYPTBASE.dll (EXECUTE)
			ole32.dll (EXECUTE)
			OLEAUT32.dll (EXECUTE)
			C:\Windows\SysWOW64\oleaut32.dll (EXECUTE)
			IPHLPAPI.DLL (EXECUTE)
			DHCPCSVC.DLL (EXECUTE)
			C:\Users\comp\AppData\Roaming\Microsoft\Network\Connections\Pbk\_hiddenPbk\ (CREATE)
			C:\Users\comp\AppData\Roaming\Microsoft\Network\Connections\Pbk\_hiddenPbk\rasphone.pbk (CREATE,READ)
		Registry:
			HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLEAUT (READ)
			HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup (READ)
			[...]
		Network:
			24.151.31.150:465 (READ)
			http://24.151.31.150:465 (READ,WRITE)
			107.10.49.252:80 (READ)
			http://107.10.49.252:80 (READ,WRITE)

표시된 출력과 접근한 리소스를 기반으로 몇 가지 멀웨어 기능을 추론할 수 있습니다:

  • 프로세스 601941F00B194587C9E5.exe (PID 1800) 내에서 파일 C:\Users\comp\AppData\Local\vscmouse\vscmouse.exe의 Zone Identifier가 삭제됩니다
  • 일부 DLL이 동적으로 로드됩니다
  • 프로세스 vscmouse.exe (PID: 3036)가 네트워크 엔드포인트 http://24.151.31.150:465 및 http://107.10.49.252:80에 연결합니다

접근한 리소스는 호스트 기반 및 네트워크 기반 탐지 지표를 식별하는 데 유용합니다. 또한 리소스는 dynmx 시그니처에 사용될 수 있습니다. 대표적인 예로 레지스트리에서 지속성 메커니즘을 탐지하는 것이 있습니다.``` dynmx_signature: meta: name: run_keys_persistence title: Run Keys Persistence description: Detection of persistence based on Registry Run Keys detection: run_keys: - resource: category: "registry" access_operations: ["write"] with: - attribute: "location" operation: "regex" value: "^(HKEY_CURRENT_USER|HKEY_LOCAL_MACHINE)\\Software\\Microsoft\\Windows\\CurrentVersion\\(Run|RunOnce|RunOnceEx)\\" startup_folders_keys: - resource: category: "registry" access_operations: ["write"] with: - attribute: "location" operation: "regex" value: "^(HKEY_CURRENT_USER|HKEY_LOCAL_MACHINE)\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\(Shell Folders|User Shell Folders)\\" condition: run_keys as simple or startup_folders_keys as simple

root@kitploit:~
## Installation
소프트웨어를 사용하려면 대상 시스템에 Python 3.9가 설치되어 있어야 합니다. 또한, 다음 Python 패키지들을 설치해야 합니다:
* `anytree`,* `lxml`,* `pyparsing`,* `PyYAML`,* `six` and* `stringcase`

패키지를 설치하려면 아래 표시된 `pip3` 명령어를 실행하세요. 시스템 전체에 패키지를 설치하는 대신 Python 가상 환경을 사용하는 것이 좋습니다.```
pip3 install -r requirements.txt

사용법

프로토타입을 사용하려면 메인 진입점 dynmx.py를 실행하기만 하면 됩니다. 사용 정보는 아래와 같이 -h 명령줄 매개변수로 확인할 수 있습니다.``` $ python3 dynmx.py -h usage: dynmx.py [-h] [--format {overview,detail}] [--show-log] [--log LOG] [--log-level {debug,info,error}] [--worker N] {detect,check,convert,stats,resources} ...

Detect dynmx signatures in dynamic program execution information (function logs)

optional arguments: -h, --help show this help message and exit --format {overview,detail}, -f {overview,detail} Output format --show-log Show all log output on stdout --log LOG, -l LOG log file --log-level {debug,info,error} Log level (default: info) --worker N, -w N Number of workers to spawn (default: number of processors - 2)

sub-commands: task to perform

{detect,check,convert,stats,resources} detect Detects a dynmx signature check Checks the syntax of dynmx signature(s) convert Converts function logs to the dynmx generic function log format stats Statistics of function logs resources Resource activity derived from function log

root@kitploit:~
일반적으로, 출력에 표시된 대로 로그 처리, 결과 출력 형식 또는 멀티프로세싱과 관련된 여러 명령줄 매개변수를 정의할 수 있습니다. 또한 특정 작업을 실행하기 위해 명령을 선택해야 합니다. 작업자 수는 멀티프로세싱을 사용하는 명령에만 영향을 미친다는 점에 유의하십시오. 현재 이러한 명령은 `detect`와 `convert`입니다.

명령에는 특정 명령줄 매개변수가 있으며, 명령에 `-h` 매개변수를 지정하여 확인할 수 있습니다. 예를 들어 아래와 같이 `detect` 명령의 경우입니다.```
$ python3 dynmx.py detect -h
usage: dynmx.py detect [-h] --sig SIG [SIG ...] --input INPUT [INPUT ...] [--recursive] [--json-result JSON_RESULT] [--runtime-result RUNTIME_RESULT] [--detect-all]

optional arguments:
  -h, --help            show this help message and exit
  --recursive, -r       Search for input files recursively
  --json-result JSON_RESULT
                        JSON formatted result file
  --runtime-result RUNTIME_RESULT
                        Runtime statistics file formatted in CSV
  --detect-all          Detect signature in all processes and do not stop after the first detection

required arguments:
  --sig SIG [SIG ...], -s SIG [SIG ...]
                        dynmx signature(s) to detect
  --input INPUT [INPUT ...], -i INPUT [INPUT ...]
                        Input files

dynmx 사용자는 출력 구조를 결정할 수 있습니다. --show-log 매개변수를 정의하여 콘솔에 로그를 표시하도록 선택하면 출력은 두 섹션(아래 목록 참조)으로 구성됩니다. 로그가 먼저 표시되고 그 다음에 사용된 명령의 결과가 표시됩니다. 기본적으로 로그는 콘솔에 표시되지 않으며 로그 파일(--log 매개변수를 사용하여 정의 가능)에도 기록되지 않습니다. 멀티프로세싱으로 인해 로그 파일의 항목이 반드시 시간 순서대로 정렬되지는 않습니다.```

root@kitploit:~
|

__| _ _ _ _ _ / | | | / |/ | / |/ |/ | // _/|/ _/|/ | |/ | | |_/ /_/ /| |

Ver. 0.5 (PoC), by 0x534a

[+] Log output 2023-06-27 19:07:38,068+0000 [INFO] (main) [PID: 13315] []: Start of dynmx run [...] [+] End of log output

[+] Result [...]

root@kitploit:~
결과 출력의 세부 수준은 명령줄 매개변수 `--output-format`으로 정의할 수 있으며, 개괄적인 결과를 보려면 `overview`로, 자세한 결과를 보려면 `detail`로 설정할 수 있습니다. 예를 들어, 출력 형식을 `detail`로 설정하면 콘솔에 표시되는 탐지 결과에는 탐지를 유발한 정확한 API 호출과 리소스가 포함됩니다. 개요 출력 형식은 어떤 함수 로그에서 어떤 시그니처가 탐지되었는지만 표시합니다.

## 예제 명령줄
단일 작업자 프로세스로 함수 로그에서 *dynmx* 시그니처 탐지```
python3 dynmx.py -w 1 detect -i "flog.txt" -s dynmx_signature.yml

함수 로그를 dynmx 일반 함수 로그 형식으로 변환``` python3 dynmx.py convert -i "flog.txt" -o /tmp/

root@kitploit:~
서명 확인 (기본적인 무결성 검사만 수행)```
python3 dynmx.py check -s dynmx_signature.yml

악성 샘플이 사용한 리소스의 상세 목록을 함수 로그(액세스 활동 모델)를 기반으로 가져옵니다.``` python3 dynmx.py -f detail resources -i "flog.txt"

root@kitploit:~
## 문제 해결
이 도구는 석사 논문을 작성하는 과정에서 개발된 개념 증명(proof-of-concept)임을 양해 부탁드립니다. 따라서 코드 품질이 항상 최상은 아니며 버그나 오류가 있을 수 있습니다. 주어진 시간 내에서 가능한 한 견고하게 도구를 만들기 위해 노력했습니다.

오류를 해결하는 가장 좋은 방법은 로깅(콘솔 및/또는 로그 파일)을 활성화하고 로그 레벨을 `debug`로 설정하는 것입니다. 예외 처리기는 상세한 오류를 로그에 기록하여 문제 해결에 도움을 줄 수 있습니다.
도구 다운로드