cmd.exe 악용, 71개 APT 그룹의 선택 이유는? | T1059.003
MITRE T1059.003 Windows Command Shell 공격 기법의 동작 원리와 71개 APT 그룹이 cmd.exe를 선택하는 이유를 분석합니다. 난독화, 하이재킹 등 실제 공격 사례와 방어 방법을 확인하세요.
MITRE T1059.003 Windows Command Shell 공격 기법의 동작 원리와 71개 APT 그룹이 cmd.exe를 선택하는 이유를 분석합니다. 난독화, 하이재킹 등 실제 공격 사례와 방어 방법을 확인하세요.
MITRE ATT&CK 프레임워크에 등록된 T1059.003 기법은 71개 APT 그룹과 악성코드에서 활용되고 있다. 이는 단순한 명령 프롬프트가 아닌, 공격자에게 시스템 전체를 제어할 수 있는 강력한 도구로 인식되고 있다는 의미이다.
Windows 초기부터 존재해온 cmd.exe가 현재까지도 사이버 공격의 핵심 도구로 사용되는 이유는 무엇일까? 그리고 공격자들은 이를 어떻게 악용하여 시스템을 장악하고 있을까?
1980년대 초 개인용 컴퓨터가 보급되기 시작할 때, 사용자들은 그래픽 인터페이스 없이 텍스트 기반 명령어로만 컴퓨터를 조작해야 했다. 파일을 복사하려면 마우스로 드래그하는 것이 아니라 copy 명령어를 직접 입력해야 했고, 프로그램을 실행하려면 실행 파일명을 정확히 타이핑해야 했다.
Microsoft가 Windows를 개발하면서도 이러한 명령줄 인터페이스를 완전히 제거하지 않은 이유는 자동화와 배치 작업의 필요성 때문이었다. 그래픽 인터페이스로는 수백 개의 파일을 일괄 처리하거나, 시스템 관리 작업을 자동화하기 어려웠기 때문이다.
cmd.exe는 Windows NT 3.1부터 도입된 명령 인터프리터다. 시스템의 거의 모든 기능에 접근할 수 있는 강력한 인터페이스를 제공한다.
T1059.003은 공격자가 Windows 명령 셸(cmd.exe)을 악용하여 명령어와 페이로드를 실행하는 공격 기법이다.
Adversaries may abuse the Windows command shell for execution. The Windows command shell (cmd) is the primary command prompt on Windows systems. Windows systems have two primary command shells, the Command shell (i.e. cmd) and PowerShell, which can be used to perform various actions. — MITRE ATT&CK T1059.003
위 정의에 따르면, cmd.exe는 Windows의 주요 명령 프롬프트로서 다양한 작업을 수행할 수 있으며, 공격자들이 이를 악용하여 시스템을 제어한다는 것이다.
T1059.003 기법의 핵심 구성 요소는 다음과 같다:
/c, /k 등의 실행 옵션.bat, .cmd 확장자를 가진 명령 집합| 용어 | 설명 |
|---|---|
| cmd.exe | 역할: Windows 명령 인터프리터 / 특징: 기본 명령어 실행, 배치 파일 처리 / 파일 확장자: .bat, .cmd |
| PowerShell | 역할: 고급 명령 셸 / 특징: 객체 기반, .NET 통합 / 파일 확장자: .ps1 |
| Command Prompt | 역할: 사용자 인터페이스 / 특징: cmd.exe를 실행하는 창 / 파일 확장자: - |
| Batch File | 역할: 명령어 스크립트 / 특징: 여러 명령어를 순차 실행 / 파일 확장자: .bat, .cmd |
| DOS Commands | 역할: 레거시 명령어 / 특징: 하위 호환성 유지 / 파일 확장자: - |
cmd.exe의 동작 과정을 단계별로 살펴보면 다음과 같다:
1단계: 명령어 접수 및 파싱
cmd.exe는 사용자로부터 명령어를 받으면 먼저 명령줄 파싱 과정을 거친다:
cmd.exe /c "ping 127.0.0.1 && calc.exe"
이 명령어에서 cmd.exe는:
/c 매개변수를 인식하여 명령 실행 후 종료 모드로 설정"ping 127.0.0.1 && calc.exe"를 하나의 명령 문자열로 파싱&& 연산자를 통해 첫 번째 명령 성공 시 두 번째 명령 실행2단계: 명령어 해석 및 검증
cmd.exe는 파싱된 명령어를 해석하여 다음을 결정한다:
3단계: 시스템 API 호출
해석된 명령어에 따라 적절한 Windows API를 호출한다:
// CreateProcess API 호출 예시 (내부 동작)
CreateProcess(
NULL, // 실행 파일명
"ping 127.0.0.1", // 명령줄 인수
NULL, // 프로세스 보안 속성
NULL, // 스레드 보안 속성
FALSE, // 핸들 상속 여부
0, // 생성 플래그
NULL, // 환경 변수
NULL, // 현재 디렉토리
&si, // 시작 정보
&pi // 프로세스 정보
);
4단계: 결과 처리 및 출력
실행된 명령어의 결과를 받아 사용자에게 표시한다. 이 과정에서 표준 출력(stdout), 표준 에러(stderr), 종료 코드(exit code) 를 처리한다.
공격자들은 cmd.exe의 정상적인 동작 원리를 악용하여 다음과 같은 방식으로 시스템을 조작한다:
Living off the Land 기법
cmd.exe는 Windows에 기본적으로 설치된 도구이므로, 공격자가 별도의 악성 파일을 업로드하지 않고도 시스템을 제어할 수 있다. 이는 마치 도둑이 집주인의 도구를 사용해서 금고를 여는 것과 같다.
# 시스템 정보 수집
cmd.exe /c "systeminfo > %temp%\sys.txt"
# 네트워크 연결 상태 확인
cmd.exe /c "netstat -an | findstr ESTABLISHED"
# 사용자 계정 정보 탈취
cmd.exe /c "net user administrator"
명령어 체이닝 (Command Chaining)
여러 명령어를 연결하여 복잡한 공격을 수행한다:
cmd.exe /c "whoami && ipconfig && dir c:\ && net user"
이 명령은 순차적으로:
파일리스 공격 (Fileless Attack)
cmd.exe를 통해 메모리상에서만 동작하는 공격을 수행한다:
cmd.exe /c "powershell -enc <base64_encoded_payload>"
공격자들은 탐지를 피하기 위해 다양한 난독화 기법을 사용한다:
캐럿(^) 문자를 이용한 난독화
# 원본 명령어
calc.exe
# 난독화된 명령어
c^a^l^c.e^x^e
cmd.exe는 캐럿 문자를 이스케이프 문자로 인식하여 무시하므로, 위 두 명령어는 동일하게 동작한다.
쉼표(,) 구분자 활용
# 공백 대신 쉼표 사용
cmd,/c,calc.exe
환경변수를 이용한 난독화
# 환경변수 설정
set x=calc
set y=.exe
# 난독화된 실행
%x%%y%
공격자 입장에서 cmd.exe는 이상적인 공격 도구이다. 그 이유는:
시나리오 1: 초기 침투 후 정찰
공격자가 피싱 이메일을 통해 시스템에 접근한 후, cmd.exe를 사용하여 시스템 정보를 수집한다:
# 1. 시스템 기본 정보 수집
cmd.exe /c "systeminfo | findstr /B /C:\"OS Name\" /C:\"OS Version\""
# 2. 설치된 소프트웨어 확인
cmd.exe /c "wmic product get name,version"
# 3. 네트워크 설정 확인
cmd.exe /c "ipconfig /all"
# 4. 도메인 정보 수집
cmd.exe /c "net config workstation"
시나리오 2: Command Injection 취약점 악용
웹 애플리케이션의 Command Injection 취약점을 통해 cmd.exe를 실행하는 경우:
# 취약한 웹 애플리케이션에서
ping 127.0.0.1; cmd.exe /c "net user hacker password123 /add"
이 명령은 ping 실행 후 새로운 사용자 계정을 생성한다.
시나리오 3: Cmd 하이재킹 (BatBadBut 취약점)
경로 순회 시퀀스를 사용한 명령 하이재킹:
cmd.exe /c "ping 127.0.0.1/../../../../../../../../../../windows/system32/calc.exe"
이 명령은 ping.exe 대신 calc.exe를 실행한다. 공격자는 이를 악용하여:
APT 그룹의 cmd.exe 활용
Lazarus 그룹은 2019년 암호화폐 거래소 공격에서 cmd.exe를 다음과 같이 활용했다:
cmd.exe /c "tasklist | findstr explorer.exe"
cmd.exe /c "wmic process call create \"rundll32.exe shell32.dll,ShellExec_RunDLL\""
이를 통해:
랜섬웨어의 cmd.exe 남용
WannaCry 랜섬웨어는 감염 후 다음 명령어들을 실행했다:
cmd.exe /c "vssadmin delete shadows /all /quiet"
cmd.exe /c "wmic shadowcopy delete"
cmd.exe /c "bcdedit /set {default} bootstatuspolicy ignoreallfailures"
이 명령어들의 목적:
프로세스 모니터링
Windows Event Log 4688 (Process Creation) 이벤트를 활성화하여 cmd.exe 실행을 모니터링한다:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<EventID>4688</EventID>
<Task>13312</Task>
</System>
<EventData>
<Data Name="NewProcessName">C:\Windows\System32\cmd.exe</Data>
<Data Name="CommandLine">cmd.exe /c "systeminfo"</Data>
</EventData>
</Event>
의심스러운 패턴 탐지
다음과 같은 패턴을 탐지하여 악의적 활동을 식별한다:
Attack Surface Reduction (ASR) 규칙
Windows Defender에서 제공하는 ASR 규칙을 활성화한다:
# Office 애플리케이션이 자식 프로세스 생성 차단
Add-MpPreference -AttackSurfaceReductionRules_Ids D4F940AB-401B-4EFC-AADC-AD5F3C50688A -AttackSurfaceReductionRules_Actions Enabled
# 스크립트가 난독화된 PowerShell 명령 실행 차단
Add-MpPreference -AttackSurfaceReductionRules_Ids 5BEB7EFE-FD9A-4556-801D-275E5FFC04CC -AttackSurfaceReductionRules_Actions Enabled
Application Control 정책
Windows의 Application Control을 통해 cmd.exe 실행을 제한한다:
<Allow ID="ID_ALLOW_CMD" FriendlyName="Allow cmd.exe for administrators">
<Conditions>
<FilePublisher>
<BinaryName Name="cmd.exe" />
<BinaryVersion Min="*" />
</FilePublisher>
<UserWriteableRule />
</Conditions>
</Allow>
T1059.003 Windows Command Shell 공격 기법은 Windows의 기본 도구인 cmd.exe를 악용하여 시스템을 제어하는 공격 방식이다. 71개 APT 그룹이 이 기법을 선택하는 이유는 높은 접근성, 강력한 기능. 그리고 탐지 회피 가능성 때문이다.
공격자들은 단순한 명령 실행을 넘어 난독화, 체이닝, 하이재킹 등의 고도화된 기법을 통해 cmd.exe를 무기화하고 있다. 방어자 입장에서는 프로세스 모니터링, 패턴 탐지, ASR 규칙 적용을 통해 이러한 공격을 탐지하고 차단해야 한다.
관련된 다른 스크립트 기반 공격 기법들을 더 자세히 알아보고 싶다면, T1059.001 PowerShell 악성코드: 추정 10개 APT가 난독화로 숨기는 기법과 T1059 스크립트 기반 공격: APT 그룹이 선택한 실행 기법의 원리를 참고할 수 있다.
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.