
CVE-2023-38831 - WinRAR
이 저장소는 CVE-2023-38831 (WinRAR ZIP 파일 스푸핑 / 이중 확장자 익스플로잇)에 대한 탐지 로직을 원시 쿼리 / 코드 블록과 ETW 관련 공급자 이름 + 이벤트 ID와 함께 제공합니다. 대상 시스템에 취약한 버전의 WinRAR (< 6.23)이 있어야 합니다.
CVE-2023-38831은 다음 경우에 악용됩니다:
사용자가 WinRAR에서 악성 ZIP 파일을 엽니다.
아카이브에 다음이 포함되어 있습니다:
● 속임수 파일 (예: invoice.pdf )
● 같은 이름의 디렉토리 (예: invoice.pdf )
● 디렉토리 안에는 같은 이름이지만 약간 다른 이름을 가진 '두' 개의 파일이 있습니다. (첫 번째 파일은 공백으로 끝나며 확장자가 없고, 두 번째 파일은 "invoice.pdf .cmd"와 같은 스크립트 또는 실행 파일입니다.)
WinRAR이 문서("PDF") 대신 스크립트나 실행 파일을 실행합니다.
이 실행은 ShellExecuteExW 함수를 호출하여 파일을 실행하며, shExecInfo(Explorer를 통한 ShellExecute)를 전달합니다.
WinRAR이 자식 프로세스(cmd, powershell, mshta, wscript, exe 및 폴더 내에 있는 모든 것)를 생성합니다.
실행은 주로 Temp/AppData/추출 경로에서 발생합니다.
흐름 요약 사용자가 아카이브를 엽니다.
↓
WinRAR이 속임수 파일을 표시합니다.
↓
사용자가 문서를 더블 클릭합니다.
↓
WinRAR이 같은 이름의 디렉토리를 추출합니다.
↓
실행 파일이 *.pdf\*.pdf .exe로 기록됩니다.
↓
Explorer를 통한 ShellExecute
↓
실행 파일의 ImageLoad
↓
페이로드 실행
이 흐름이 탐지에 중요한 이유
● 매크로 사용 없음
● 프로세스 생성 의존성 없음
● 익스플로잇은 파일 시스템 위장에 의존함
● 높은 신뢰도, 낮은 노이즈 신호
중요 기술 세부 사항
파일은 특별한 구조로 기록됩니다.
예를 들어, 같은 이름을 가진 두 개의 객체(파일/디렉토리)가 있고, 아카이브 파일에서 임시로 파일을 열려고 열린 아카이브에서 해당 파일(대상 파일)을 더블 클릭하면 WinRAR이 이 파일을 추출하고, 대상 파일과 같은 이름을 가진 모든 파일도 추출합니다. 모든 파일은 %tmp% 경로의 임시 디렉토리에 기록됩니다.
| 파일/디렉토리 이름 | 추출 경로 |
| ------------------------------------------------------ | --------------------------------------------------------------------------------- |
| CLASSIFIED_DOCUMENTS.txt <– 클릭된 대상 파일 | `C:\Users\UsersName\AppData\Loca\Temp\Rar$DIa8432.13968\CLASSIFIED_DOCUMENTS.txt\`|
| CLASSIFIED_DOCUMENTS.txt .cmd <– 디렉토리 안의 파일 | `C:\Users\UsersName\AppData\Loca\Temp\Rar$DIa8432.13968\CLASSIFIED_DOCUMENTS.txt\`|
임시(압축 해제) 디렉토리에 같은 이름이지만 크기가 다른 두 개의 파일(예: 20k와 12k)이 있고, 아카이브를 열어 첫 번째 파일(1.txt, 20k)을 열면 WinRAR이 두 번째 파일(1.txt, 10K)로 교체할지 묻습니다. "예"를 클릭하면 두 번째 파일(1.txt)만 열립니다. 이 조건은 제외 항목에 추가할 수 있습니다.
탐지 로직의 중요한 포인트
ZIP 추출 경로 또는 임시 디렉토리에서 프로세스 실행이 트리거되며, 오해를 불러일으키는 확장자 또는 파일로 위장한 폴더가 있음
WinRAR이 임시 디렉토리에 압축 해제를 위해 파일을 풀 때, 같은 이름이지만 약간 다른 이름(공백으로 끝나며 확장자가 없는)을 가진 두 개의 파일이 포함되어야 합니다. 예를 들어, 주 파일 이름 끝에 공백(" ")이 있는 (CLASSIFIED_DOCUMENTS.pdf )와 그 뒤에 ".cmd"가 붙은 (CLASSIFIED_DOCUMENTS.pdf .cmd)와 같습니다.
WinRAR이 DLL을 로드하고 ShellExecuteExA 함수를 호출할 때, 매개 변수 "pExecInfo"에는 공백이 포함되고 확장자로 끝나는 경로(예: "CLASSIFIED_DOCUMENTS.pdf .cmd")가 있습니다.
ETW 공급자 및 탐지 철학 (ETW 전용) ETW 공급자
| 목적 | ETW 공급자 |
| -------------------------- | ------------------------------------- |
| 프로세스 생성 | `Microsoft-Windows-Kernel-Process` |
| 명령줄 가시성 | `Microsoft-Windows-Security-Auditing` |
| 파일 작업 (선택 사항) | `Microsoft-Windows-Kernel-File` |
탐지는 다음에 의존합니다 (ProcessStart, CreateProcess 또는 EDR 스타일의 부모/자식 로직이 없는 경우):
● 파일 시스템 ETW
● 셸 / Explorer ETW
● 이미지 로드 ETW (선택 사항, 생성 아님)
● 명령줄 ETW (선택 사항)
핵심 ETW 공급자
| 목적 | ETW 공급자 |
| -------------------------- | ------------------------------------- |
| 디렉토리 생성 | `Microsoft-Windows-Kernel-File` |
| EXE 생성 | `Microsoft-Windows-Kernel-File` |
| 셸 실행 | `Microsoft.Windows.ShellExecute` |
| 이미지 로드 | `Microsoft-Windows-Kernel-Image` |
| Explorer | `Microsoft-Windows-Explorer` |
| 셸 | `Microsoft-Windows-Shell-Core` |
원시 탐지 로직
높은 수준에서 이 로직은 다음을 탐지합니다:
● WinRAR.exe가 파일 쓰기를 시작함
● 같은 기본 이름을 가진 디렉토리와 파일의 생성
● 이름 변경 또는 덮어쓰기 후 실행 파일 확장자가 나타남
● 짧은 시간 창(<2s) 내에 발생하는 시퀀스
이 패턴은 정상적인 워크플로에서는 극히 드물지만 익스플로잇의 실행 경로에서 핵심입니다.
● 이 규칙은 의도적으로 다음을 피합니다:
● 명령줄 검사
● 자식 프로세스 추적
● 전체 파일 해싱
핵심 로직 탐지는 아래에 신뢰도 수준과 간략한 설명과 함께 나열되어 있습니다.
1. 이미지 로드 (실행 확인)
이유: 프로세스 생성 텔레메트리 없이 실제 실행을 확인합니다.
탐지 로직 :
Windows 로더:
● Invoice.pdf .exe를 메모리에 매핑
ETW 신호:
● ImageLoad
● 이미지 경로:
● *.pdf\*.pdf .exe
2. 탐지 규칙 (API ShellExecuteExA) - 고정밀 규칙 로직
아래 텔레메트리를 기반으로 한 일반 탐지 규칙:
● WinRar.exe에 의한 파일 생성 이벤트
● WinRar.exe가 Shell32.dll DLL을 로드하고 API(ShellExecuteExA|W)를 매개 변수와 함께 사용하기 시작하는 이미지 로드 이벤트
● 이 함수는 SHELLEXECUTEINFO라는 구조체 인수를 받습니다. 이 구조체에는 많은 필드가 있지만, 그중 두 가지인 lpVerb와 lpFile이 중요합니다.
● lpVerb - LpVerb를 NULL로 설정하면 ShellExecuteExA|W는 사용 가능한 경우 기본 동사를 사용하고, 그렇지 않으면 "open" 동사를 수행합니다. "open" 동사는 파일을 열거나 실행합니다.
● lpFile - lpFile은 ShellExecuteExA에서 동사를 수행하는 데 사용되는 파일의 경로입니다. 여기서 파일 경로 끝의 공백 문자(0x20)에 주목해야 합니다.
참고:
1- Shell32.dll: ShellExecuteExA가 정의된 곳입니다. SHELLEXECUTEINFO 구조체를 구문 분석하고 요청을 처리하는 방법(예: 문서 열기, EXE 실행, 속성 대화 상자 표시)을 결정하는 로직이 포함되어 있습니다.
2- 취약점이 작동하는 방식: 취약점은 바로 여기에 있습니다. WinRAR은 파일을 쓸 때 파일 이름에서 공백을 제거했지만, 이 변경 사항을 추출 목록에 반영하는 것을 잊었습니다. 따라서 대상 파일 이름은 변경되지 않았고 파일 이름에 공백이 그대로 남아 있습니다. 또한 ShellExecuteExA는 "CLASSIFIED_DOCUMENTS.pdf .cmd" 파일을 엽니다. ShellExecuteExA에게 ".cmd"는 중요하지 않으며, 해당 경로에서 "CLASSIFIED_DOCUMENTS.pdf "라는 이름의 파일을 그냥 실행합니다.
탐지 로직 (고정밀 규칙 로직):
● SQL-Based :\\Detection_Logic\\SQL-based-ShellExecute.txt
● KQL (ProcessCommandLine):\\Detection_Logic\\KQL-API-ProcessCommandLine.txt
● Pseudocode Detection Logic :\\Detection_Logic\\SQL-API-ShellExecute.txt
참고: 위 기준에 따라 탐지 로직을 만들 수 있습니다. 탐지 규칙 작성에 도움이 되는 이벤트를 얻기 위한 간단한 Python 스크립트도 추가했습니다. 또한 ETW 기반 규칙을 만들 때 유용한 것도 추가했습니다.
| Provider | Event ID | Event ID / Task |
| ------------------------------------- | ----------------------------------------- | --------------------------- |
| `Microsoft-Windows-Shell-Core` | {30336983-0362-4540-9E69-14844E6A3B7A} | Event ID 1 (Execute) |
| `Microsoft-Windows-Kernel-Process` | {22FB2AD3-E163-4078-8C2A-801648437D2D} | Image Load / Process Start |
3. WinRAR CVE-2023-38831 악용에 대한 고정밀 규칙 로직
- 이유: 이름이 문서 확장자로 끝나는 디렉토리에서 실행 파일이 생성되거나 로드되고, Explorer/Shell API를 통해 실행이 시작될 때 경고합니다.
- Pseudocode Detection Logic (High-Fidelity Rule Logic)- \\Detection_Logic\\WinRAR-CVE-2023-38831-Exploitation.txt
4. EDR 탐지 규칙 (ETW 기반)
아래 텔레메트리를 기반으로 한 일반 EDR 탐지 규칙:
● 파일 생성 이벤트
● 셸 실행 / Explorer 호출
● 이미지 로드 이벤트 (선택 사항이지만 강력함)
Detection Logic : \\Detection_Logic\\EDR-Detection-ETW-based.txt
5. DeviceProcessEvents를 사용하지 않는 KQL 쿼리 (엔드포인트가 지원하는 경우)
이유: 이 버전은 DeviceProcessEvents에 의존하지 않고 작동합니다.
Detection Logic : \\Detection_Logic\\KQL-Detection-without-DeviceProcessEvents.txt
6. 셸 실행 신호 (활성화되고 지원되는 경우)
이유: 파일 생성과 상관 관계를 맺을 때 신뢰도를 높입니다.
Detection Logic : \\Detection_Logic\\Shell-Execution-Signal.txt
7. SOC 친화적 (분류 흐름)
이유: 이 규칙은 공격 중 발견된 각 단계에 대해 생성되었습니다.
Detection Logic : \\Detection_Logic\\SOC-Friendly.txt
(경고 / ProcessStart, CreateProcess 또는 EDR 스타일의 부모/자식 로직이 포함된 경우)
1. winrar.exe가 의심스러운 디렉토리/파일을 생성할 때 탐지 (특히 임시 또는 아카이브 추출 경로에서) 및 취약한 버전의 WinRAR을 사용하여 생성된 의심 파일 실행
이유: 제품이 처리하는 이벤트(액세스, 이벤트, 클라우드 기반 등)에 따라 규칙을 생성합니다.
Detection Logic:\\Detection_Logic\\Gen-Pseudocode-Detection-Logic.txt
2. winrar.exe가 의심스러운 자식 프로세스를 생성할 때 탐지 (특히 임시 또는 아카이브 추출 경로에서)
Detection Logic :
EndPonit : \\Detection_Logic\\winrar-spawns-suspicious-child-process.txt
Sigma Rule : \\Detection_Logic\\Sigma-Rule-WinRAR Exploit.txt
3. ETW 공급자 기반 경고 (프로세스 생성)
| Provider | Event ID |
| ------------------------------------- | --------------------------- |
| `Microsoft-Windows-Security-Auditing` | 4688 (Process Creation) |
Detection Logic
● Parent Process = winrar.exe
● New Process = scripting engine or executable
● CommandLine includes Temp/AppData
4. DeviceProcessEvents를 사용하는 KQL 쿼리 (엔드포인트가 지원하는 경우)
이유: DeviceProcessEvents를 사용하여 개발하려는 경우
Detection Logic : \\Detection_Logic\\KQL-Detection-with-DeviceProcessEvents.txt
5. 공격 지표 (높은 신뢰도의 경고 추가 가능)
아래 조건을 충족하면 IOA 또는 감시 목록 규칙을 경고에 추가할 수 있습니다.
| 지표 | 신뢰도 |
| ---------------------------------- | ---------- |
| winrar.exe가 cmd/powershell 생성 | 높음 |
| Temp/AppData에서 실행 | 높음 |
| `.cmd/.bat /.exe ` 실행 | 높음 |
| 이중 확장자 ZIP 열림 | 중간 |
취약한 버전의 WinRAR (< 6.23)이 생성한 디렉토리에서 같은 이름을 가진 두 개의 파일에 대한 감시 목록을 만듭니다:
디렉토리에는 같은 이름을 가진 두 개의 파일이 있을 수 없습니다. 또한, 디렉토리와 파일이 같은 이름을 가질 수도 없습니다.
그러나 WinRAR/7zip과 같은 압축 소프트웨어에서는 이것이 가능합니다. 압축 파일에서는 같은 이름의 파일이 있든 없든, 파일은 특별한 구조로 기록됩니다.
따라서 ZIP/RAR 파일에는 같은 이름을 가진 두 개의 객체(파일/디렉토리)가 있을 수 있습니다.
Likely legitimate triggers
● 7-Zip/WinRAR 자체 추출 설치 프로그램에 의해 생성된 cmd.exe
● RAR에 패키징된 엔터프라이즈 소프트웨어 업데이터에 의해 실행된 powershell.exe
● 프린터 드라이버 또는 GPU 드라이버 설치 프로그램에 사용된 rundll32.exe
제외 로직 (예시)
AND NOT (
ChildImage IN (cmd.exe, powershell.exe, rundll32.exe)
AND
CommandLine CONTAINS (
"setup.exe",
"install.cmd",
"driverinstall",
"vendorupdate"
)
)
이렇게 하면 알려진 설치 프로그램 동작을 억제하면서 익스플로잇 탐지를 유지합니다. 아카이브 파일 텔레메트리(파일 시스템 이벤트) — 이 규칙을 RAR/ZIP 추출 활동(예: 실행 직전에 생성된 .cmd/.bat/.exe 파일, 특히 Rar$EX*와 같은 WinRAR 추출 디렉토리)과 상호 연관시키면 실행이 아카이브 추출 직후에 발생했음을 증명함으로써 신뢰도를 크게 높이고 오탐을 줄일 수 있습니다.
T1204.002 – 사용자 실행: 악성 파일
T1059 – 명령 및 스크립팅 인터프리터
T1036 – 위장 (이중 확장자)
This detection code is for educational and authorized testing purposes only.
Do not use it on systems you do not own or have explicit permission to test.