SOC Prime Bias: High

21 Sep 2026 19:58 UTC

레지스트리에 저장된 PowerShell, 메모리 내 암호화폐 마이닝 실행

Author Photo
SOC Prime Team linkedin icon 팔로우
레지스트리에 저장된 PowerShell, 메모리 내 암호화폐 마이닝 실행
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

다단계 감염 체인은 고급 난독화 기술을 사용하여 암호화폐 채굴기를 배포합니다. 공격은 레지스트리에 페이로드를 저장하고 DNS TXT 레코드와 함께 PNG 및 WAV 파일의 스테가노그래피를 활용하여 후속 단계를 전달합니다. 최종 페이로드는 .NET 어셈블리를 메모리에 직접 로드하여 XMRig 에코시스템을 통해 암호화폐를 채굴합니다.

조사

분석가들은 반복되는 PowerShell 실행 경고를 조사하고 계층화된 페이로드 은폐 전략을 발견했습니다. 감염 체인은 이미지 픽셀 데이터 및 오디오 파일 니블과 같은 비전통적인 컨테이너에서 악성 콘텐츠를 재구성합니다. 실행은 레지스트리에 저장된 PowerShell 스크립트에서 여러 단계를 거쳐, 궁극적으로 .NET 암호화폐 채굴기를 메모리에 직접 로드하는 방식으로 진행됩니다.

완화

조직은 엄격한 PowerShell 실행 정책을 시행하고 페이로드 저장과 관련된 의심스러운 레지스트리 수정 사항을 모니터링해야 합니다. EDR 솔루션은 메모리 내 .NET 어셈블리 로딩 및 비정상적인 DNS TXT 레코드 쿼리를 감지해야 합니다. 또한 응용 프로그램 허용 목록을 구현하여 WinRing0.sys 와 같은 무단 커널 모드 드라이버의 로딩을 방지해야 합니다.

대응

악성 활동이 감지되면 영향을 받은 호스트는 즉시 격리하여 추가적인 C2 통신 및 암호화폐 채굴을 중단해야 합니다. 대응자는 무허가된 예약 작업, WMI 구독 및 Microsoft Defender 제외 항목에 대한 포렌식 검사를 수행해야 합니다. 또한 네트워크 로그를 검토하여 알려진 C2 도메인과 의심스러운 DNS-over-HTTPS 쿼리에 대한 연결을 확인해야 합니다.

공격 흐름

이 부분은 여전히 업데이트 중입니다.

탐지

의심스러운 PowerShell 문자열 (via powershell)

SOC Prime 팀
2026년 9월 21일

PowerShell에서 의심스러운 .NET 메소드를 호출 (via powershell)

SOC Prime 팀
2026년 9월 21일

의심스러운 프로세스에 의해 만들어진 이미지 파일 (via file_event)

SOC Prime 팀
2026년 9월 21일

DoH 및 DNS 명령과 제어 채널 (via proxy)

SOC Prime 팀
2026년 9월 21일

탐지할 IOCs (HashMd5): 레지스트리 저장 PowerShell에서 메모리 내 암호화폐 채굴로의 다단계 감염 체인

SOC Prime AI 규칙
2026년 9월 21일

탐지할 IOCs (SourceIP): 레지스트리 저장 PowerShell에서 메모리 내 암호화폐 채굴로의 다단계 감염 체인

SOC Prime AI 규칙
2026년 9월 21일

탐지할 IOCs (DestinationIP): 레지스트리 저장 PowerShell에서 메모리 내 암호화폐 채굴로의 다단계 감염 체인

SOC Prime AI 규칙
2026년 9월 21일

DNS-over-HTTPS 및 HTTP/HTTPS POST C2 통신 감지 [Windows 네트워크 연결]

SOC Prime AI 규칙
2026년 9월 21일

레지스트리 기반 PowerShell 실행을 위한 WMI 영구 이벤트 구독 [Windows 레지스트리 이벤트]

SOC Prime AI 규칙
2026년 9월 21일

PowerShell 난독화 및 비밀 실행 [Windows Powershell]

SOC Prime AI 규칙
2026년 9월 21일

시뮬레이션 실행

  • 공격 서술 및 명령: 공격자는 손상된 호스트에서 장기 지속성을 유지하려고 합니다. 일반적인 ‘Run’ 키 대신, 더 은밀한 WMI 영구 이벤트 구독을 선택합니다. 공격자는 WMI CommandLineEventConsumer를 생성합니다. 이 소비자는 powershell.exe를 실행하도록 구성됩니다. 명령줄의 정적 분석을 피하기 위해 실제 악성 페이로드나 구성은 비표준 레지스트리 경로에 저장됩니다: HKLM:Softwareuf42a9660377vstdfehzr입니다. WMI 이벤트가 발생하면(여기서는 시스템 이벤트로 시뮬레이션), PowerShell 프로세스가 특정 레지스트리 키를 참조하여 시작하여 탐지 규칙을 트리거합니다.

  • 회귀 테스트 스크립트:

    # 시뮬레이션 스크립트: 레지스트리 기반 PowerShell 실행
    # 이 스크립트는 규칙을 트리거하기 위해 필요한 특정 레지스트리 키와 WMI 구독을 생성합니다.
    
    $regPath = "HKLM:Softwareuf42a9660377"
    $regValueName = "vstdfehzr"
    $regValueData = "Invoke-Expression (Get-ItemProperty -Path '$regPath$regValueName').Payload"
    
    # 1. 의심스러운 레지스트리 키와 값 생성
    if (-not (Test-Path $regPath)) {
        New-Item -Path $regPath -Force | Out-Null
    }
    New-ItemProperty -Path $regPath -Name $regValueName -Value "Write-Host 'Malicious Payload Triggered!'" -PropertyType String -Force | Out-Null
    
    # 2. WMI 영구 이벤트 구독 생성
    # 우리는 공통 이벤트 (예: 시스템 가동 시간/시작)에서 트리거하는 필터를 사용하거나 소비자 생성을 통해 시뮬레이션합니다
    $filterName = "Win32_LocalTimeFilter"
    $consumerName = "Win32_CommandLineConsumer"
    $subscriptionName = "WmiPersistenceSubscription"
    
    # 필터 생성 (시뮬레이션 목적으로 매분 트리거됩니다)
    $filterArgs = @{
        Name = $filterName
        QueryLanguage = "WQL"
        Query = "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_LocalTime'"
    }
    $filter = Set-WmiInstance -Class __EventFilter -Arguments $filterArgs
    
    # 소비자 생성 (특정 레지스트리 경로를 참조하는 PowerShell 명령)
    $commandLine = "powershell.exe -Command `"$regValueData`""
    $consumerArgs = @{
        Name = $consumerName
        CommandLineTemplate = $commandLine
    }
    $consumer = Set-WmiInstance -Class CommandLineEventConsumer -Arguments $consumerArgs
    
    # 필터와 소비자 바인딩
    Set-WmiInstance -Class __FilterToConsumerBinding -Arguments @{
        Filter = $filter
        Consumer = $consumer
    }
    
    Write-Host "[+] 시뮬레이션: WMI 구독과 레지스트리 키가 성공적으로 생성되었습니다."
    Write-Host "[+] WMI 이벤트가 PowerShell 실행을 트리거하기를 기다리는 중..."
    # 주의: 실제 환경에서는 이벤트를 기다립니다. 
    # 테스트 목적을 위해, 규칙은 종종 *생성*거나 *이벤트 트리거*를 찾습니다.
  • 정리 명령어:

    # 정리 스크립트
    Write-Host "[!] 시뮬레이션 아티팩트를 정리 중입니다..."
    
    # 1. WMI 구독 제거
    Get-WmiObject -Namespace rootsubscription -Class __EventFilter -Filter "Name='Win32_LocalTimeFilter'" | Remove-WmiObject
    Get-WmiObject -Namespace rootsubscription -Class CommandLineEventConsumer -Filter "Name='Win32_CommandLineConsumer'" | Remove-WmiObject
    Get-WmiObject -Namespace rootsubscription -Class __FilterToConsumerBinding | Where-Object { $_.Filter -match "Win32_LocalTimeFilter" } | Remove-WmiObject
    
    # 2. 레지스트리 키 제거
    Remove-Item -Path "HKLM:Softwareuf42a9660377" -Recurse -Force
    
    Write-Host "[+] 정리가 완료되었습니다."