스테가노그래피 비밀: 평범한 곳에 숨겨진 멀웨어
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
위협 행위자들은 점점 더 이미지 호스팅 및 파일 공유 서비스를 남용하여 악성 페이로드를 겉보기에는 무해한 PNG 및 JPEG 파일에 숨겨서 배포하고 있습니다. 이러한 이미지는 Base64로 인코딩된 DLL을 포함하고 있으며, 이것은 JavaScript 드로퍼에 의해 추출되어 메모리에 직접 로드되어 Remcos RAT 같은 원격 접근 악성 소프트웨어를 시작할 수 있습니다. 디스크에 명백한 아티팩트를 남기지 않고 파일 없는 실행에 의존하기 때문에 이 기술은 많은 전통적인 엔드포인트 방어를 우회할 수 있습니다. 캠페인은 주로 금융 관련 주제를 사용하여 맞춤형 피싱 이메일을 통해 피해자를 목표로 삼습니다.
조사
Cofense는 JavaScript 기반의 드로퍼를 배포하는 가짜 구매 주문 서류를 중심으로 구성된 피싱 이메일 그룹을 분석했습니다. 이 드로퍼는 남용된 도메인에서 스테가노그래피 이미지 하나를 가져와 Base64로 인코딩된 .NET 로더 DLL을 디코드하고, 이를 통해 합법적인 프로세스에 Remcos RAT을 주입했습니다. 관찰된 공격 중 27%는 Remcos RAT을 전달했고, 21%는 Agent Tesla, 18%는 XWorm RAT을 전달했음을 보여주는 캠페인 통계가 있습니다. 이 보고서는 또한 많이 남용된 호스팅 플랫폼으로 uploaddeimagens.com.br and archive.org.
완화
조직은 이메일 첨부 파일 스캔을 강화하고 신뢰할 수 없는 JavaScript 파일의 실행을 차단해야 합니다. 알려진 이미지 호스팅 플랫폼으로의 아웃바운드 트래픽을 모니터링하면 페이로드 전달 단계가 나타날 수 있습니다. 프로세스 주입과 서명되지 않은 DLL의 메모리만 로딩을 감지하기 위해 행동 분석도 사용해야 합니다. 방어자는 파일 없는 지속성 시도를 식별하기 위해 레지스트리 자동 실행 위치 및 예약된 작업을 추가로 모니터링해야 합니다.
대응
악성 스테가노그래피 이미지가 의심될 경우, 영향을 받은 엔드포인트를 즉시 격리하고 포렌식 분석을 위해 메모리를 수집해야 합니다. 조사관은 .NET 로더 DLL과 주입된 Remcos 구성 요소를 호스팅할 수 있는 모든 합법적인 프로세스를 검색해야 합니다. 로더에 의해 생성된 비승인 자동 실행 레지스트리 항목 및 예약된 작업은 제거해야 합니다. 침입 중 잠재적으로 노출된 모든 계정은 전체 자격 증명 재설정을 받아야 합니다.
"graph TB %% 클래스 정의 classDef action fill:#99ccff classDef malware fill:#ff9999 classDef persistence fill:#ffcc99 classDef privilege fill:#ffb3b3 %% 노드 정의 action_phishing["<b>행동</b> – <b>T1566.001 피싱</b><br/>스피어 피싱 첨부 파일: 공격자가 금융 테마의 이메일과 함께 악성 JavaScript 드로퍼 첨부 파일을 보냅니다."] class action_phishing action action_user_execution["<b>행동</b> – <b>T1204.003 사용자 실행</b><br/>악성 이미지: 피해자가 JavaScript 드로퍼를 열어 공공 호스팅 사이트에서 악성 이미지를 다운로드합니다."] class action_user_execution action action_steganography["<b>행동</b> – <b>T1027.003 파일 또는 정보 난독화</b><br/>스테가노그래피: 다운로드된 이미지에 스테가노그래피로 숨겨진 Base64 인코딩 된 .NET 로더 DLL이 포함되어 있습니다."] class action_steganography action action_process_injection["<b>행동</b> – <b>T1055 프로세스 인젝션</b><br/>로더가 합법적인 프로세스의 메모리에 Remcos RAT을 주입합니다, 예를 들어 explorer.exe와 같은."] class action_process_injection action action_privilege_escalation["<b>행동</b> – <b>T1548 특권 상승 메커니즘 남용</b><br/>로더가 페이로드를 실행하기 전에 관리 권한을 얻기 위해 특권을 상승시킵니다."] class action_privilege_escalation privilege persistence_appcert["<b>지속성</b> – <b>T1546.009 이벤트 기 triggered 실행</b><br/>AppCert DLLs: 부팅 시 악의적인 DLL을 로드하도록 작성된 레지스트리 엔트리 (파일 없는 지속성)."] class persistence_appcert persistence persistence_activesetup["<b>지속성</b> – <b>T1547.014 부팅 또는 로그온 자동 시작 실행</b><br/>활성 설정: 지속성을 위해 추가된 자동 시작 레지스트리 키."] class persistence_activesetup persistence malware_remcos_rat["<b>악성코드</b> – <b>T1219 원격 액세스 도구</b><br/>Remcos RAT은 공격자를 위한 명령 및 제어 능력을 제공합니다."] class malware_remcos_rat malware action_lateral_movement["<b>행동</b> – <b>T1021 원격 서비스</b><br/>RAT이 네트워크를 가로질러 이동하기 위해 원격 서비스를 사용합니다."] class action_lateral_movement action %% 연결 action_phishing –>|전달| action_user_execution action_user_execution –>|실행| action_steganography action_steganography –>|포함| action_process_injection action_process_injection –>|주입| malware_remcos_rat malware_remcos_rat –>|활성화| action_privilege_escalation action_privilege_escalation –>|생성| persistence_appcert persistence_appcert –>|추가| persistence_activesetup malware_remcos_rat –>|촉진| action_lateral_movement "
공격 플로우
시뮬레이션 실행
선행 조건: 텔레메트리 & 베이스라인 프리플라이트 체크가 통과되어야 함.
목적: 이 섹션은 탐지 규칙을 트리거하도록 설계된 적수 기술(TTP)의 정확한 실행을 자세히 설명합니다. 명령과 내러티브는 식별된 TTP를 직접 반영하고 탐지 로직에 의해 기대되는 정확한 텔레메트리를 생성해야 합니다.
-
공격 내러티브 & 명령:
-
준비 – 스테가노그래픽 페이로드:
공격자는 맞춤형 도구를 사용하여 무해한 JPEG에 컴파일된 Remcos RAT DLL을 임베드합니다 (StegoEmbed.exe). 결과 파일 (malicious.jpg)은 픽셀 데이터에 악성 페이로드를 탑재합니다. -
전달 – DotNET 로더의 실행:
공격자는 스테고 이미지와 인수dotnet.exe을 참조하는 .NET 기반 로더 (Loader)를 실행합니다. 로더는 이미지를 읽어 임베드된 DLL을 추출하고 디스크에 쓰지 않고 메모리에 직접 로드하여 (인 메모리 실행) Exploit (T1068) 통해 특권 상승을 달성합니다. -
결과 – RAT 비콘:
메모리에 들어가면, Remcos RAT은 C2 서버에 네트워크 연결을 설정합니다.
생성된 중요한 텔레메트리는 프로세스 생성 이벤트 이며:
이미지(프로세스 이름)은 DotNET (dotnet.exe).명령줄에 포함된 문자렬 Loader.
이 Sigma 룰의
선택_dotnet_loader. -
-
회귀 테스트 스크립트:
# --------------------------------------------------------- # 시뮬레이션 스크립트 – 스테가노그래피를 사용한 DotNET 로더 (T1027.003) # --------------------------------------------------------- # 1. 더미 스테고 이미지를 생성 (실제 임베드 필요 없음) $stegoPath = "$env:TEMPmalicious.jpg" Copy-Item "$env:SystemRootWebWallpaperWindowsimg0.jpg" $stegoPath -Force # 2. 요구 플래그를 사용하여 .NET 로더 실행 # “DotNET” 이미지 이름을 모방하기 위해 합법적인 dotnet.exe를 사용. # Sigma 규칙을 트리거하는 인수 “Loader”. $loaderArgs = "`"$stegoPath`" Loader" Write-Host "[*] 인수와 함께 dotnet 로더를 실행: $loaderArgs" Start-Process -FilePath "dotnet.exe" -ArgumentList $loaderArgs -NoNewWindow # 3. 프로세스가 Sysmon에 의해 캡쳐되도록 잠시 대기 Start-Sleep -Seconds 5 # 4. 옵션: RAT 비콘 시뮬레이션 (네트워크 트래픽) – 규칙 테스트에는 필요 없음 # --------------------------------------------------------- Write-Host "[*] 시뮬레이션 완료. SIEM에서 경고 확인." -
정리 명령:
# --------------------------------------------------------- # 정리 – 임시 스테고 이미지 제거 및 남아있는 로더 프로세스 중지 # --------------------------------------------------------- $stegoPath = "$env:TEMPmalicious.jpg" # 임시 이미지 제거 if (Test-Path $stegoPath) { Remove-Item $stegoPath -Force Write-Host "[*] $stegoPath 삭제됨" } # 이 스크립트에 의해 시작된 모든 dotnet 프로세스 중지 ("Loader" 인수로 식별) Get-Process -Name dotnet -ErrorAction SilentlyContinue | Where-Object { $_.Path -like "*dotnet.exe*" -and $_.StartInfo.Arguments -match "Loader" } | ForEach-Object { $_.Kill() Write-Host "[*] 프로세스 ID $($_.Id) 종료됨" } # ---------------------------------------------------------