메모리 상 로더, ScreenConnect 배포

Author Photo
SOC Prime Team linkedin icon 팔로우
메모리 상 로더, ScreenConnect 배포
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

ThreatLabz는 가짜 Adobe Acrobat Reader 다운로드에서 시작하여 최종적으로 합법적인 원격 액세스 도구 ScreenConnect의 배포로 끝나는 다단계 공격 체인을 식별했습니다. 이 작전은 강력히 난독화된 VBScript 로더에 의존하여 PowerShell 명령어를 실행하고, Google Drive에서 C# 소스 코드를 가져와 메모리 내에서 직접 컴파일하고, 최종 페이로드를 디스크에 떨어뜨리지 않고 .NET 로더를 시작합니다. 그 후 이 로더는 프로세스 가장을 적용하고, PEB 구조를 변경하며, 자동으로 상승된 COM 객체를 악용하여 더 높은 권한을 획득한 후 피해자 호스트에 ScreenConnect를 설치합니다.

조사

연구원들은 VBScript가 Chr() 난독화를 통해 명령을 조립하는 방법을 설명했으며, PowerShell은 디스크 아티팩트를 최소화하기 위해 페이로드를 메모리에 완전히 컴파일한다고 설명했습니다. 메모리 내 .NET 로더는 비반사를 활용하여 임베디드 어셈블리를 실행합니다. 추가 분석에서는 맬웨어가 NtAllocateVirtualMemory를 호출하고, winhlp32.exe로 가장하기 위해 PEB 필드를 변경하며, 사용자 계정 제어를 우회하여 권한 상승 후 실행을 지속하기 위해 COM 자동 상승을 이용하는 것을 보여주었습니다.

완화

수비자는 악성 다운로드 도메인에 대한 접근을 차단해야 하며, PowerShell과 VBScript 실행에 엄격한 제어를 적용해야 합니다. 보안 팀은 또한 수상한 COM 객체 생성, 예상치 못한 PEB 조작 및 메모리 내 실행 남용의 다른 징후를 모니터링해야 합니다. ScreenConnect와 같은 합법적인 원격 관리 도구의 접근은 승인된 사용자와 신뢰할 수 있는 워크플로우로 엄격히 제한하여 비인가 설치의 위험을 줄여야 합니다.

대응

이 활동이 감지될 경우 즉시 영향을 받은 시스템을 격리하고, 악성 프로세스를 중지하고, 침입의 일환으로 설치된 ScreenConnect 구성 요소를 제거하십시오. 볼래타일 메모리 아티팩트를 중심으로 포렌식 분석을 수행하여 파일리스 실행 체인의 증거를 복구하십시오. 잠재적으로 노출된 자격 증명을 재설정하고, COM 자동 상승 남용에 대한 로그를 검토하며, 감지된 명령 줄 패턴, 로더 행동 및 관련 파일 명명 관행을 식별하도록 감지를 업데이트하십시오.

graph TB classDef action fill:#99ccff classDef builtin fill:#ffcc99 classDef file fill:#ccffcc action_user_exec[“<b>행동</b> – T1204.002 사용자 실행: 악성 파일<br/>가짜 Adobe 사이트에서 VBScript 다운로드”] class action_user_exec action file_vbscript[“<b>파일</b> – Acrobat_Reader_V112_6971.vbs”] class file_vbscript file action_vbscript_interpret[“<b>행동</b> – T1059.005 VBScript 실행”] class action_vbscript_interpret action tool_powershell[“<b>도구</b> – PowerShell”] class tool_powershell builtin action_powershell_exec[“<b>행동</b> – T1059.001 PowerShell 실행”] class action_powershell_exec action file_staging[“<b>파일</b> – Google Drive”] class file_staging file action_reflective_loading[“<b>행동</b> – T1620 리플렉티브 로딩”] class action_reflective_loading action action_process_injection[“<b>행동</b> – T1055.002 프로세스 주입”] class action_process_injection action action_masquerade[“<b>행동</b> – T1564.010 프로세스 위장”] class action_masquerade action action_appdomain_hijack[“<b>행동</b> – T1574.014 AppDomain 하이재킹”] class action_appdomain_hijack action action_rat_install[“<b>행동</b> – T1219 RAT 설치”] class action_rat_install action tool_screenconnect[“<b>도구</b> – ScreenConnect”] class tool_screenconnect builtin action_user_exec –>|downloads| file_vbscript file_vbscript –>|executes| action_vbscript_interpret action_vbscript_interpret –>|launches| tool_powershell tool_powershell –>|executes| action_powershell_exec action_powershell_exec –>|downloads| file_staging action_powershell_exec –>|compiles| action_reflective_loading action_reflective_loading –>|loads| action_process_injection action_process_injection –>|modifies| action_masquerade action_masquerade –>|enables| action_appdomain_hijack action_appdomain_hijack –>|facilitates| action_rat_install action_rat_install –>|installs| tool_screenconnect

공격 흐름

시뮬레이션 실행

전제 조건: Telemetry & Baseline Pre-flight Check가 통과했어야 합니다.

이유: 이 섹션은 탐지 규칙을 트리거하기 위해 설계된 적대 기술 실행을 자세히 설명합니다(TTP). 명령어 및 설명은 식별된 TTP를 직접 반영하고 탐지 논리에 의해 예상되는 정확한 테러메트리를 생성해야 합니다.

  • 공격 내러티브 및 명령어:
    적은 ScreenConnect MSI를 획득했으며 종종 피싱 첨부파일을 통해 제공합니다. 사용자 상호 작용을 피하기 위해, 신뢰할 수 있는 msiexec.exe 바이너리를 사용하여 무음 설치를 수행합니다. 그들은 또한 대안인 ShellExec.exe 프록시를 보여주는데, 이는 단순히 인수를 msiexec로 전달합니다. 두 명령은 모두 ‘ScreenConnect’라는 문자열을 명령줄에 포함하여 규칙의 조건을 만족합니다.

    1. MSI를 피해자 호스트로 복사 (T1025를 시뮬레이션).

    2. 다음 명령을 통해 조용한 설치를 수행 msiexec:

       msiexec.exe /i "C:TempScreenConnect.msi" /quiet /norestart
    3. 호스트에 존재할 경우, 동일한 설치를 진행하세요: ShellExec.exe 이러한 작업은 Windows Event 4688 엔트리를 생성하며, 해당 엔트리에서

       이러한 작업은 Windows Event 4688 엔트리를 생성하며, 해당 엔트리에서

    These actions generate Windows Event 4688 entries where 이미지 is *msiexec.exe or *ShellExec.exe and 명령줄 이 “ScreenConnect”를 포함하여 Sigma 규칙이 발동됩니다.

  • 회귀 테스트 스크립트:

    #=============================================================
    # ScreenConnect 설치 시뮬레이션 – Sigma 규칙을 트리거합니다
    #=============================================================
    $msiPath = "C:TempScreenConnect.msi"
    
    # MSI 존재 여부 확인 (자리 표시자 – 실제 테스트에서는 먼저 파일을 드롭)
    if (-Not (Test-Path $msiPath)) {
        Write-Error "ScreenConnect MSI를 $msiPath에서 찾을 수 없습니다."
        exit 1
    }
    
    # 1. msiexec을 사용한 무음 설치
    Write-Host "[*] msiexec를 통한 ScreenConnect 설치 중..."
    Start-Process -FilePath "$env:SystemRootSystem32msiexec.exe" `
                  -ArgumentList "/i `"$msiPath`" /quiet /norestart" `
                  -Wait -NoNewWindow
    
    # 2. ShellExec을 사용한 무음 설치 (존재 시)
    $shellExec = "$env:ProgramFilesScreenConnectShellExec.exe"
    if (Test-Path $shellExec) {
        Write-Host "[*] ShellExec를 통한 ScreenConnect 설치 중..."
        Start-Process -FilePath $shellExec `
                      -ArgumentList "/i `"$msiPath`" /quiet /norestart" `
                      -Wait -NoNewWindow
    } else {
        Write-Warning "ShellExec.exe를 찾을 수 없습니다. 두 번째 설치를 건너뜁니다."
    }
    
    Write-Host "[+] 시뮬레이션 완료. SIEM에서 경고를 확인하십시오."
  • 정리 명령어:

    # ScreenConnect 제거 (등록된 제품 GUID 사용; 필요에 따라 조정)
    $productGuid = (Get-ItemProperty "HKLM:SoftwareMicrosoftWindowsCurrentVersionUninstall*" |
                    Where-Object { $_.DisplayName -like "*ScreenConnect*" }).PSChildName
    
    if ($productGuid) {
        Write-Host "[*] ScreenConnect를 제거 중입니다 (GUID: $productGuid)..."
        & "$env:SystemRootSystem32msiexec.exe" /x $productGuid /quiet /norestart
    } else {
        Write-Warning "ScreenConnect 제품 GUID를 찾을 수 없습니다. 수동 정리가 필요할 수 있습니다."
    }
    
    # 복사된 MSI 파일 제거
    Remove-Item -Path "C:TempScreenConnect.msi" -Force -ErrorAction SilentlyContinue
    Write-Host "[+] 정리 완료."