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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
yara-ttd — Time Travel Debugging 트레이스에서 YARA 규칙 사용 | Kitploit
도구/GitHubGitHub/airbus-cert/yara-ttd
Dynamic Analysis (Sandboxing)Memory ForensicsReverse EngineeringShellcodeMalware AnalysisBinary Analysis
GitHubairbus-cert/yara-ttd

yara-ttd

Time Travel Debugging 트레이스에서 YARA 규칙 사용

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

yara-ttd - 궁극의 패커 천적

Time Travel Debugging 트레이스에서 YARA 규칙 사용

  1. 데모
  2. 동기
  3. 설치
  4. 사용법
  5. 향후 기능

데모

UPX로 패킹된 바이너리

calc.exe를 실행하는 간단한 바이너리로, UPX로 패킹되어 있습니다. yara-ttd 는 스레드 생성 중 모듈 메모리에서 calc.exe 문자열을 찾습니다.

Upx 데모

calc.exe를 실행하는 간단한 난독화된 셸코드

테스트한 바이너리는 셸코드를 복호화한 후 새 스레드에서 실행합니다. yara-ttd 는 ntdll!NtCreateThreadEx 함수에 후킹하여 힙에서 calc.exe 문자열을 찾아냅니다.

셸코드 데모

동기

YARA

YARA는 바이너리를 위한 강력한 패턴 매칭 도구입니다.

YARA는 맬웨어 연구원이 맬웨어 샘플을 식별하고 분류하는 데 도움을 주기 위한(그리고 그 외에도 사용할 수 있는) 도구입니다. YARA를 사용하면 텍스트 또는 바이너리 패턴을 기반으로 맬웨어 패밀리(또는 설명하고 싶은 모든 것)에 대한 설명을 만들 수 있습니다.

-- YARA 문서

YARA 덕분에 맬웨어 샘플을 분석하기 전에 파이프라인에서 자동으로 분류하여 많은 시간을 절약할 수 있습니다.

패커(Packers)

안타깝게도 대부분의 맬웨어 샘플은 다양한 종류의 패커로 보호됩니다. UPX나 VMProtect 같은 전형적인 런타임 패커 방식은 난독화되고 때로는 암호화된 코드를 자체적으로 압축 해제하여 실행합니다. 따라서 YARA는 패킹된 코드에서 어떤 매치도 찾지 못하기 때문에 패킹된 바이너리를 처리할 수 없습니다.

Time Travel Debugging

Time Travel Debugging - 즉 TTD - 은 Windows 네이티브 디버거인 WinDbg의 기능입니다.

Time Travel Debugging은 프로세스가 실행되는 동안 트레이스를 캡처한 후 나중에 앞뒤로 재생할 수 있게 해주는 도구입니다. Time Travel Debugging(TTD)은 버그를 찾을 때까지 문제를 재현하는 대신 디버거 세션을 "되감기"할 수 있게 해주어 더 쉽게 디버깅할 수 있게 도와줍니다.

-- Microsoft 문서

맬웨어 분석에 있어 TTD는 샌드박스에서 맬웨어의 트레이스를 기록할 수 있게 해주므로 강력한 도구입니다. 따라서 샌드박스 외부에서 기록 파일을 안전하게 재생하고 공유하여 맬웨어를 분석할 수 있습니다. 또한 TTD는 디버거가 아니므로 PEB.BeingDebugged 같은 전형적인 안티 디버깅 기술에 탐지되지 않습니다. 보안 관점에서 TTD를 더 깊이 분석하려면 이 문서를 확인하세요: TTD 생태계 심층 분석

물론 TTD는 독점 소프트웨어이며, 이 작업은 commial이 개발한 ttd-bindings 없이는 존재할 수 없습니다.

yara-ttd

yara-ttd의 아이디어는 TTD로 기록된 트레이스 파일을 yara 자체와 함께 사용하여 패커를 무력화하는 것입니다.

yara는 패킹된 바이너리 자체를 스캔할 수 없기 때문에, yara-ttd는 언패킹 과정을 포함한 모든 런타임 정보가 담긴 트레이스 파일을 분석하는 방법을 제공합니다.

yara-ttd를 사용하면 트레이스 파일에서 yara 규칙으로 메모리를 스캔하려는 위치 집합을 선택할 수 있습니다. 따라서 패킹된 바이너리의 원하는 위치에서 yara 규칙을 후킹할 수 있습니다!

yara-ttd는 모듈이 로드될 때 또는 가상 메모리가 할당될 때와 같은 여러 메모리 스캔 전략을 제공합니다. 이러한 시점은 언패킹된 맬웨어 코드가 저장되는 데 자주 사용됩니다.

설치

현재 yara-ttd는 TTD API와 상호작용해야 하므로 Windows만 지원합니다.

먼저 프로젝트를 빌드하세요:

root@kitploit:~
mkdir build
cd build
cmake ..
cmake --build .

그런 다음 TTDReplay.dll 및 TTDReplayCPU.dll 파일을 실행 파일과 같은 디렉터리에 추가하세요. 이 DLL 파일들은 %LocalAppData%\Microsoft\WindowsApps\Microsoft.WinDbg_X\TTD에서 찾을 수 있습니다.

사용법

먼저 프로그램의 트레이스(.run 파일)를 기록해야 합니다. TTD 트레이스를 기록하는 방법에 대한 자세한 도움말은 이 튜토리얼을 참조하세요.

그런 다음 다음을 실행하면 됩니다:

root@kitploit:~
.\yara-ttd path\to\rule path\to\trace\file

메모리 모드

메모리를 스캔하는 모드는 세 가지가 있습니다:

  • 모드 0 (기본값): 로드된 모듈 메모리
  • 모드 1: 가상 할당 메모리 + 로드된 모듈 메모리
  • 모드 2: 전체 메모리 (매우 오래 걸릴 수 있음)

-m으로 모드를 선택할 수 있습니다:

root@kitploit:~
.\yara-ttd -m 1 path\to\rule path\to\trace\file

공식 yara CLI와 마찬가지로 -s 플래그를 사용하여 메모리 주소와 정확히 매치된 하위 규칙 같은 매치 세부 정보를 출력할 수 있습니다.

가상 할당 모드 참고 사항:

TTD는 메모리 구조를 저장하지 않기 때문에 yara-ttd는 스캔 전에 각 시간 위치에 대한 힙 주소 구조를 계산합니다. 힙 구조를 저장하기 위해 트레이스 파일과 같은 경로에 .tmp 확장자를 가진 캐시 파일을 생성합니다. 트레이스에서 yara-ttd를 다시 실행하고 생성된 캐시 파일에서 힙 구조를 로드하려면 다음을 실행하면 됩니다:

root@kitploit:~
.\yara-ttd -m 1 --cache=path\to\cache\file path\to\rule path\to\trace\file
전체 메모리 모드 참고 사항:

TTD를 사용하면 프로세스의 전체 메모리 범위에 접근할 수 있으며, 이는 GetSystemInfo가 반환하는 최소 및 최대 주소에 해당합니다. 그럼에도 불구하고 대부분의 경우 이 범위는 최적화 없이 스캔하기에는 너무 큽니다.

시간 모드

기본적으로 스캔되는 시간 위치는 다음과 같습니다:

  • 예외 이벤트
  • 모듈 로드 이벤트
  • 스레드 생성 이벤트

-t 및 -f 플래그를 사용하여 다른 위치나 함수 호출을 선택하여 스캔할 수 있습니다:

root@kitploit:~
.\yara-ttd -m 1 -t 3C1:A -t 5FF:22 -f ntdll!FreeVirtualMemory -f ntdll!NtCreateThreadEx path\to\rule path\to\trace\file

-t 플래그는 major:minor 형식의 TTD 위치를 기대합니다 (둘 다 16진수이며 0x 없이). -f 플래그는 module_name!function_name 형식의 문자열을 기대합니다.

후킹하려는 모든 함수를 파일에 추가할 수도 있습니다:

root@kitploit:~
> cat .\functions.txt
ntdll!FreeVirtualMemory
ntdll!NtCreateThreadEx

> .\yara-ttd -m 1 -F functions.txt path\to\rule path\to\trace\file

여러 트레이스 파일 스캔

yara-ttd로 스캔할 파일이 여러 개 있다면 전체 디렉터리를 스캔할 수도 있습니다. yara-ttd는 폴더에서 다음 확장자를 모두 무시합니다:

  • .tmp (yara-ttd가 생성한 캐시 파일)
  • .idx (ttd가 생성한 인덱스 파일)
  • .err (ttd가 생성한 오류 파일)
  • .out (ttd가 생성한 로그 파일)

다음 예제에서 yara-ttd는 trace01.run 및 trace02.run 파일만 스캔합니다.

root@kitploit:~
> dir .\traces
trace01.run
trace01.out
trace01.idx
trace02.run
trace01.run.err
trace01.tmp

> .\yara-ttd path\to\rule .\traces

또는 스캔하려는 모든 트레이스를 파일에 지정하고 --scan-list 또는 -l 플래그를 사용할 수 있습니다. 그러면 한 줄에 하나씩 나열된 파일을 스캔합니다:

root@kitploit:~
> cat .\scan_me.txt
.\traces\trace01.run
.\traces\trace02.run

> .\yara-ttd -l path\to\rule .\scan_me.txt

여러 파일을 스캔할 때 yara-ttd는 원본 yara cli처럼 스레드를 사용해 동시에 스캔하지 않고 하나씩 순차적으로 스캔합니다.

향후 기능

  • Python 바인딩을 포함한 libyarattd
  • ttddbg 및 IDA와의 연동: 스캔이 끝나면 시간 및 메모리상의 매치 위치에 IDA를 로드하는 기능
  • TTD: 프로세스 분기 시 자식 프로세스 따라가기
도구 다운로드