맬웨어 분석

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

포렌식 치트시트

https://www.jaiminton.com/cheatsheet/DFIR/#

온라인 서비스

오프라인 안티바이러스 및 탐지 도구

Yara

설치

bash
sudo apt-get install -y yara

규칙 준비

Use this script to download and merge all the yara malware rules from github: https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9
Create the rules directory and execute it. This will create a file called malware_rules.yar which contains all the yara rules for malware.

bash
wget https://gist.githubusercontent.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9/raw/4ec711d37f1b428b63bed1f786b26a0654aa2f31/malware_yara_rules.py
mkdir rules
python malware_yara_rules.py

스캔

bash
yara -w malware_rules.yar image  #Scan 1 file
yara -w malware_rules.yar folder #Scan the whole folder

YaraGen: 악성코드 확인 및 규칙 생성

You can use the tool YaraGen to generate yara rules from a binary. Check out these tutorials: Part 1, Part 2, Part 3

bash
python3 yarGen.py --update
python3.exe yarGen.py --excludegood -m  ../../mals/

ClamAV

설치

sudo apt-get install -y clamav

스캔

bash
sudo freshclam      #Update rules
clamscan filepath   #Scan 1 file
clamscan folderpath #Scan the whole folder

Capa

Capa는 실행 파일에서 잠재적으로 악의적인 기능을 감지합니다: PE, ELF, .NET. 따라서 Att&ck 전술이나 다음과 같은 의심스러운 기능을 찾습니다:

  • OutputDebugString 오류 확인
  • 서비스로 실행
  • 프로세스 생성

Github repo에서 다운로드하세요.

IOCs

IOC는 침해 지표(Indicator Of Compromise)를 의미합니다. IOC는 잠재적으로 원치 않는 소프트웨어나 확인된 악성코드를 식별하는 조건의 집합입니다. 블루 팀은 이러한 정의를 사용하여 시스템네트워크에서 이러한 종류의 악성 파일을 검색합니다.
이러한 정의를 공유하는 것은 매우 유용합니다. 컴퓨터에서 악성코드가 식별되고 해당 악성코드에 대한 IOC가 생성되면, 다른 블루 팀이 이를 사용하여 악성코드를 더 빠르게 식별할 수 있습니다.

IOC를 생성하거나 수정하는 도구는 IOC Editor입니다.
Redline과 같은 도구를 사용하여 장치에서 정의된 IOC를 검색할 수 있습니다.

Loki

Loki는 간단한 침해 지표를 위한 스캐너입니다.
탐지는 네 가지 탐지 방법을 기반으로 합니다:

1. File Name IOC
Regex match on full file path/name

2. Yara Rule Check
Yara signature matches on file data and process memory

3. Hash Check
Compares known malicious hashes (MD5, SHA1, SHA256) with scanned files

4. C2 Back Connect Check
Compares process connection endpoints with C2 IOCs (new since version v.10)

Linux Malware Detect

Linux Malware Detect (LMD)는 GNU GPLv2 라이센스 하에 출시된 리눅스용 악성코드 스캐너로, 공유 호스팅 환경에서 직면하는 위협을 중심으로 설계되었습니다. 이 도구는 네트워크 엣지 침입 탐지 시스템의 위협 데이터를 사용하여 공격에 적극적으로 사용되는 악성코드를 추출하고 탐지를 위한 서명을 생성합니다. 또한, 위협 데이터는 LMD 체크아웃 기능과 악성코드 커뮤니티 리소스에서 사용자 제출을 통해 파생됩니다.

rkhunter

rkhunter와 같은 도구는 파일 시스템에서 가능한 루트킷과 악성코드를 확인하는 데 사용할 수 있습니다.

bash
sudo ./rkhunter --check -r / -l /tmp/rkhunter.log [--report-warnings-only] [--skip-keypress]

FLOSS

FLOSS는 다양한 기술을 사용하여 실행 파일 내에서 난독화된 문자열을 찾으려고 시도하는 도구입니다.

PEpper

PEpper는 실행 파일 내의 일부 기본 사항(바이너리 데이터, 엔트로피, URL 및 IP, 일부 yara 규칙)을 확인합니다.

PEstudio

PEstudio는 Windows 실행 파일에 대한 정보(수입, 수출, 헤더 등)를 얻을 수 있는 도구이며, 또한 바이러스 토탈을 확인하고 잠재적인 Att&ck 기술을 찾습니다.

Detect It Easy(DiE)

DiE는 파일이 암호화되어 있는지 감지하고 패커를 찾는 도구입니다.

NeoPI

NeoPI는 텍스트/스크립트 파일 내에서 난독화암호화된 콘텐츠를 감지하기 위해 다양한 통계적 방법을 사용하는 Python 스크립트입니다. NeoPI의 의도된 목적은 숨겨진 웹 셸 코드탐지를 돕는 것입니다.

php-malware-finder

PHP-malware-finder난독화된/의심스러운 코드악성코드/웹 셸에서 자주 사용되는 PHP 함수를 사용하는 파일을 감지하기 위해 최선을 다합니다.

Apple Binary Signatures

일부 악성코드 샘플을 확인할 때는 항상 바이너리의 서명을 확인해야 하며, 서명한 개발자가 이미 악성코드관련되어 있을 수 있습니다.

bash
#Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"

#Check if the app’s contents have been modified
codesign --verify --verbose /Applications/Safari.app

#Check if the signature is valid
spctl --assess --verbose /Applications/Safari.app

탐지 기술

파일 스태킹

웹 서버의 파일이 포함된 폴더가 마지막으로 업데이트된 날짜를 알고 있다면, 웹 서버의 모든 파일생성 및 수정된 날짜확인하고, 어떤 날짜가 의심스럽다면, 해당 파일을 확인하세요.

기준선

폴더의 파일이 수정되지 않아야 한다면, 폴더의 원본 파일해시를 계산하고 현재 파일과 비교할 수 있습니다. 수정된 것은 의심스럽습니다.

통계 분석

정보가 로그에 저장될 때, 각 웹 서버의 파일이 얼마나 자주 접근되었는지와 같은 통계를 확인할 수 있습니다. 웹 셸이 가장 많이 접근될 수 있습니다.


동적 제어 흐름 디오브스큐레이션 해제 (JMP/CALL RAX 디스패처)

현대의 악성코드 패밀리는 제어 흐름 그래프 (CFG) 난독화를 심각하게 악용합니다: 직접적인 점프/호출 대신 런타임에 목적지를 계산하고 jmp rax 또는 call rax를 실행합니다. 작은 디스패처 (일반적으로 아홉 개의 명령어)는 CPU의 ZF/CF 플래그에 따라 최종 대상을 설정하여 정적 CFG 복구를 완전히 방해합니다.

이 기술은 SLOW#TEMPEST 로더에 의해 보여지며, IDAPython과 Unicorn CPU 에뮬레이터에만 의존하는 세 단계의 워크플로우로 무력화할 수 있습니다.

1. 모든 간접 점프 / 호출 찾기

python
import idautils, idc

for ea in idautils.FunctionItems(idc.here()):
mnem = idc.print_insn_mnem(ea)
if mnem in ("jmp", "call") and idc.print_operand(ea, 0) == "rax":
print(f"[+] Dispatcher found @ {ea:X}")

2. 디스패처 바이트 코드 추출

python
import idc

def get_dispatcher_start(jmp_ea, count=9):
s = jmp_ea
for _ in range(count):
s = idc.prev_head(s, 0)
return s

start = get_dispatcher_start(jmp_ea)
size  = jmp_ea + idc.get_item_size(jmp_ea) - start
code  = idc.get_bytes(start, size)
open(f"{start:X}.bin", "wb").write(code)

3. Unicorn으로 두 번 에뮬레이트하기

python
from unicorn import *
from unicorn.x86_const import *
import struct

def run(code, zf=0, cf=0):
BASE = 0x1000
mu = Uc(UC_ARCH_X86, UC_MODE_64)
mu.mem_map(BASE, 0x1000)
mu.mem_write(BASE, code)
mu.reg_write(UC_X86_REG_RFLAGS, (zf << 6) | cf)
mu.reg_write(UC_X86_REG_RAX, 0)
mu.emu_start(BASE, BASE+len(code))
return mu.reg_read(UC_X86_REG_RAX)

run(code,0,0)run(code,1,1)을 실행하여 falsetrue 분기 대상을 얻습니다.

4. 직접 점프 / 호출 패치하기

python
import struct, ida_bytes

def patch_direct(ea, target, is_call=False):
op   = 0xE8 if is_call else 0xE9           # CALL rel32 or JMP rel32
disp = target - (ea + 5) & 0xFFFFFFFF
ida_bytes.patch_bytes(ea, bytes([op]) + struct.pack('<I', disp))

패치 후, IDA가 함수를 다시 분석하도록 강제하여 전체 CFG와 Hex-Rays 출력을 복원합니다:

python
import ida_auto, idaapi
idaapi.reanalyze_function(idc.get_func_attr(ea, idc.FUNCATTR_START))

5. 간접 API 호출 레이블 지정

모든 call rax의 실제 목적지가 알려지면 IDA에 그것이 무엇인지 알려줄 수 있으므로 매개변수 유형 및 변수 이름이 자동으로 복구됩니다:

python
idc.set_callee_name(call_ea, resolved_addr, 0)  # IDA 8.3+

Practical benefits

  • 실제 CFG를 복원 → 디컴파일이 10 줄에서 수천 줄로 증가합니다.
  • 문자열 교차 참조 및 xrefs를 가능하게 하여 행동 재구성이 간단해집니다.
  • 스크립트는 재사용 가능: 동일한 트릭으로 보호된 로더에 드롭할 수 있습니다.

References

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기