SOC Prime Bias: 중간

10 2월 2026 17:20

RenEngine 로더 및 HijackLoader: 정보 탈취 캠페인을 강화하는 이중 단계 공격 체인

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
RenEngine 로더 및 HijackLoader: 정보 탈취 캠페인을 강화하는 이중 단계 공격 체인
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

2025년 4월 이후, 연구원들은 2단계 로더 체인을 기반으로 한 대규모 탈취기 작전을 추적했습니다. 첫 번째 단계인 RenEngine 로더는 합법적인 Ren’Py 게임 런처에 내장되어 있으며, HijackLoader라는 후속 로더를 해독합니다. 그런 다음 HijackLoader는 DLL 사이드 로딩 및 프로세스 도플갱잉을 악용하여 30개 이상의 헬퍼 모듈을 단계적으로 배치하고 궁극적으로 ACR 탈취기 페이로드를 전달하는 모듈식 프레임워크를 사용합니다. 이 활동은 해적판 게임 설치 파일을 통해 배포되며, 전 세계 수십만 명의 피해자에게 영향을 미치고 있습니다.

조사

Howler 셀 팀은 전체 실행 체인을 재구성하고 RenEngine Python 로직을 리버스 엔지니어링하여 구성 아티팩트를 추출하고, 스테이징에 사용되는 XOR 암호화 아카이브를 식별했습니다. 그들의 HijackLoader 분석은 안티-VM 검사, UAC 우회, 예약 작업 지속성, 역쉘 기능을 포함한 38개 모듈을 작성했습니다. 인프라 분석은 캠페인을 단일 공개 C2 엔드포인트 78.40.193.126과 초기 설치 프로그램 다운로드를 시드하기 위해 사용된 전달 도메인 dodi-repacks.site와 연결했습니다.

대응 방안

특히 d3dx9_43.dll 같은 일반 파일 이름의 DLL 사이드 로딩과 결합되는 경우 이상한 Ren’Py 런처 실행을 모니터링하세요. %ProgramData% 및 %AppData% 아래에서의 의심스러운 디렉토리 생성, 특히 broker_crypt_v4_i386이라는 경로 이름을 사냥하세요. 샌드박스 우회 루틴, 프로세스 도플갱잉 및 가상 머신 아티팩트 체크와 관련된 비정상적인 레지스트리 액세스 패턴에 대한 행동 감지를 추가하세요. 웹 게이트웨이에서 알려진 해적판 배포 도메인을 차단하고, 사용자 쓰기 가능 위치에서 게임 런처 및 서명되지 않은 “설치 프로그램” 실행 파일의 실행을 제한하도록 애플리케이션 허용 목록을 적용하세요.

대응

탐지 시, 엔드포인트를 고립시키고, 증거(메모리 덤프, 암호화된 아카이브, 로더 아티팩트)를 보존하며, 식별된 모듈과 드롭된 파일을 환경에서 휩쓸어야 합니다. 78.40.193.126 및 dodi-repacks.site를 경계 컨트롤에서 즉시 차단하세요. 브라우저 비밀번호, 세션 쿠키 및 암호화 지갑에 초점을 맞춘 자격 증명 노출 트라이에이지를 수행한 다음, 영향을 받은 계정 및 토큰을 회전하세요. 공격자 지속성을 제거하고(특히 예약된 작업), 악성 파일을 제거한 후, 해적판 소프트웨어 설치와 연관된 재감염 경로를 계속 모니터링하세요.

"graph TB %% Class definitions classDef action fill:#99ccff classDef file fill:#ffcc99 classDef process fill:#ff9966 classDef malware fill:#ff6666 classDef network fill:#ccccff %% Step 1 u2013 User Execution step1_user_exec["<b>기법</b> – <b>T1204.002 사용자 실행: 악성 파일</b><br/><b>설명</b>: 사용자가 해적판 게임 설치 파일과 같은 악성 파일을 실행하도록 유도됩니다.<br/><b>아티팩트</b>: Instaler.exe"] class step1_user_exec action file_installer["<b>파일</b> – Instaler.exe<br/>정상적으로 보이지만 악성 페이로드를 포함함"] class file_installer file step1_user_exec –>|실행됨| file_installer %% Step 2 u2013 Python Interpreter step2_python["<b>기법</b> – <b>T1059.006 명령 및 스크립트 인터프리터: Python</b><br/><b>설명</b>: Ren’Py 런처를 통해 archive.rpa에서 악성 Python 코드를 실행합니다."] class step2_python action file_archive["<b>파일</b> – archive.rpa<br/>악성 Python 스크립트 포함"] class file_archive file file_installer –>|실행됨| step2_python step2_python –>|로드됨| file_archive %% Step 3 u2013 난독화 된 페이로드 step3_obfusc["<b>기법</b> – <b>T1027 난독화된 파일 또는 정보</b><br/><b>설명</b>: 페이로드는 Base64 인코딩, XOR 암호화를 사용하여 숨겨지고 아카이브에 압축됩니다."] class step3_obfusc action file_obf_payload["<b>파일</b> – obfuscated_payload.bin<br/>압축 및 암호화된 페이로드"] class file_obf_payload file file_archive –>|포함됨| file_obf_payload file_obf_payload –>|디코딩 및 복호화 됨| step3_obfusc %% Step 4 u2013 샌드박스 회피 step4_sandbox["<b>기법</b> – <b>T1497 가상화/샌드박스 회피</b><br/><b>서브-기법</b> – <b>T1497.002 사용자 활동 기반 체크</b><br/><b>설명</b>: 로더는 광범위한 VM 및 샌드박스 체크(RAM, CPU, 레지스트리)를 수행하고 분석 환경이 감지되면 중단합니다."] class step4_sandbox action step3_obfusc –>|코드 제공| step4_sandbox %% Step 5 u2013 프로세스 인젝션 step5_injection["<b>기법</b> – <b>T1055 프로세스 인젝션</b><br/><b>서브-기법</b> – <b>T1055.002 휴대용 실행 파일 인젝션</b><br/><b>설명</b>: HijackLoader는 합법적인 시스템 DLL rasapi32.dll에 악성 코드를 주입하여 쉘코드를 실행합니다."] class step5_injection action process_rasapi["<b>프로세스</b> – rasapi32.dll<br/>PE 인젝션 대상"] class process_rasapi process step4_sandbox –>|로드됨| step5_injection step5_injection –>|인젝션됨| process_rasapi %% Step 6 u2013 AppInit DLL 사이드로딩 step6_appinit["<b>기법</b> – <b>T1546.010 이벤트 기반 실행: AppInit DLLs</b><br/><b>설명</b>: 악성 DLL(d3dx9_43.dll, VSDebugScriptAgent170.dll)은 지속성을 위해 신뢰할 수 있는 설치 프로그램 실행 파일을 통해 사이드로딩됩니다."] class step6_appinit action file_d3dx9["<b>파일</b> – d3dx9_43.dll<br/>악성 사이드로딩 DLL"] class file_d3dx9 file file_vsddebug["<b>파일</b> – VSDebugScriptAgent170.dll<br/>악성 사이드로딩 DLL"] class file_vsddebug file process_rasapi –>|로딩 트리거| file_d3dx9 process_rasapi –>|로딩 트리거| file_vsddebug file_d3dx9 –>|사용됨| step6_appinit file_vsddebug –>|사용됨| step6_appinit %% Step 7 u2013 UAC 우회 step7_uac["<b>기법</b> – <b>T1548.002 권한 상승 메커니즘 악용: 사용자 계정 컨트롤 우회</b><br/><b>설명</b>: 로더는 UAC를 우회하여 높은 권한을 얻으려고 시도합니다."] class step7_uac action step6_appinit –>|승격 시도| step7_uac %% Step 8 u2013 예약 작업 지속성 step8_task["<b>기법</b> – <b>T1053 예약 작업/잡</b><br/><b>설명</b>: 페이로드를 유지하고 재실행하기 위해 예약 작업이 생성됩니다."] class step8_task action step7_uac –>|생성됨| step8_task %% Step 9 u2013 자격 증명 수집 step9_cred["<b>기법</b> – <b>T1555.003 자격 증명 저장소의 자격 증명: 웹 브라우저의 자격 증명</b> 및 <b>T1550.004 대체 인증 자료 사용: 웹 세션 쿠키</b><br/><b>설명</b>: 최종 ACR 탈취기는 브라우저 비밀번호, 쿠키, 암호화 지갑 및 기타 자격 증명 데이터를 수집합니다."] class step9_cred action step8_task –>|실행됨| step9_cred %% Step 10 u2013 정보 유출 step10_exfil["<b>기법</b> – <b>T1041 C2 채널을 통한 정보 유출</b><br/><b>설명</b>: 수집된 데이터는 78.40.193.126의 공격자 C2 서버로 전송됩니다."] class step10_exfil action network_c2["<b>네트워크</b> – C2 서버 78.40.193.126"] class network_c2 network step9_cred –>|데이터 유출| network_c2 network_c2 –>|데이터 수신| step10_exfil "

공격 흐름

시뮬레이션 실행

전제 조건: 텔레메트리 및 기준선 사전 비행 검사가 통과되어야 합니다.

이유: 이 섹션은 탐지 규칙을 트리거하도록 설계된 상대 기술(TTP)의 정확한 실행을 자세히 설명합니다. 명령 및 서사는 식별된 TTP를 직접 반영하고 탐지 로직에 의해 예상되는 정확한 텔레메트리를 생성하는 것을 목표로 해야 합니다.

  • 공격 서사 및 명령:
    공격자는 악성 Ren’Py 게임 설치 파일을 얻습니다 (Installer.exe) 숨겨진 Python 페이로드를 포함하도록 다시 패키징되었습니다. 희생자가 설치 프로그램을 실행하면, 2차 로더 (W8CPbGQI.exe)를 생성합니다. 그 로더는 3단계 바이너리 (ZoneInd.exe)를 풀어 프로세스 인젝션, 자격 증명 덤프 및 HTTP를 통한 C2 채널을 수립합니다. 공격자는 규칙의 제외 조항을 만족시키기 위해 어떤 하위 프로세스도 명명하지 않으려고 합니다 chime.exe ) 명명하지 않으려고 합니다.

    감염된 호스트에서 수행된 단계:

    1. 손상된 Ren’Py 설치 프로그램을 시작합니다.
      Installer.exe 가 부모 프로세스로 실행됩니다.
    2. 첫 번째 악성 로더를 스폰합니다.
      Installer.exe (프로세스 생성 이벤트 – 일치 W8CPbGQI.exe 대상 이미지 )를 생성합니다).
    3. 2단계 페이로드를 스폰합니다.
      W8CPbGQI.exe 가 실행합니다 ZoneInd.exe (또 다른 프로세스 생성 이벤트 – 또한 일치 )를 생성합니다).
    4. 악성 행동을 수행합니다 (프로세스 인젝션, 자격 증명 덤프, C2).

    이 행동들은 Sigma 규칙이 모니터링하는 정확한 텔레메트리를 생성합니다: 와 동일한 프로세스 이미지=*Installer.exe 는 자식과 함께 생성됩니다 대상 이미지=*W8CPbGQI.exe or *ZoneInd.exe, 제외 없이 *chime.exe.

  • 회귀 테스트 스크립트:
    아래 스크립트는 더미 실행 파일(데모를 위한 단순 PowerShell 스크립트를 .exe via 로 저장합니다) 생성되고 체인을 구성합니다. 승격된 PowerShell 프롬프트에서 실행하세요. # ————————————————- # 회귀 테스트 스크립트 – 악성 체인 시뮬레이트 # ————————————————- # 1. 플레이스홀더 바이너리 생성(모의 실행 파일) $binPath = “$env:TEMPRenPyChain” New-Item -ItemType Directory -Path $binPath -Force | Out-Null # 간단히 대기하는 경량 exe 생성 보조기(쉼표에 PowerShell의 .exe shim 사용) function New-StubExe($name) { $script = “Start-Sleep -Seconds 30” $ps1 = “$binPath$name.ps1” $exe = “$binPath$name.exe” Set-Content -Path $ps1 -Value $script -Encoding UTF8 # PowerShell의 내장 PS2EXE(또는 exe 래퍼) 사용 – 여기서 모방은 PowerShell -File 사용 # 간단히 하기 위해 ps1을 실행하는 예약 작업을 생성합니다.; .exe 경로는 플레이스홀더입니다. New-Item -ItemType File -Path $exe -Force | Out-Null } # 스텁 실행 파일 생성 New-StubExe “Installer” New-StubExe “W8CPbGQI” New-StubExe “ZoneInd” # 2. 체인 실행 Write-Host “`n[+] Installer.exe(상위) 실행 중…” Start-Process -FilePath “$binPathInstaller.exe” -NoNewWindow # 로그에 상위 프로세스가 나타나도록 작은 지연 Start-Sleep -Seconds 2 Write-Host “[+] Installer.exe가 W8CPbGQI.exe를 스폰합니다…” Start-Process -FilePath “$binPathW8CPbGQI.exe” -NoNewWindow Start-Sleep -Seconds 1 Write-Host “[+] W8CPbGQI.exe가 ZoneInd.exe를 스폰합니다…” Start-Process -FilePath “$binPathZoneInd.exe” -NoNewWindow Write-Host “`n[+] 체인 실행됨. SIEM에서 탐지를 확인하세요.” # ————————————————-

    # -------------------------------------------------
    # Regression Test Script – Simulate Malicious Chain
    # -------------------------------------------------
    
    # 1. Create placeholder binaries (simulated executables)
    $binPath = "$env:TEMPRenPyChain"
    New-Item -ItemType Directory -Path $binPath -Force | Out-Null
    
    # Helper to create a lightweight exe that simply sleeps (use PowerShell's .exe shim)
    function New-StubExe($name) {
        $script = "Start-Sleep -Seconds 30"
        $ps1 = "$binPath$name.ps1"
        $exe = "$binPath$name.exe"
        Set-Content -Path $ps1 -Value $script -Encoding UTF8
        # Use PowerShell's built‑in PS2EXE (or any exe wrapper) – here we mimic with PowerShell -File
        # For simplicity, we just create a scheduled task that runs the ps1; the .exe path is a placeholder.
        New-Item -ItemType File -Path $exe -Force | Out-Null
    }
    
    # Create stub executables
    New-StubExe "Installer"
    New-StubExe "W8CPbGQI"
    New-StubExe "ZoneInd"
    
    # 2. Execute the chain
    Write-Host "`n[+] Launching Installer.exe (parent)..."
    Start-Process -FilePath "$binPathInstaller.exe" -NoNewWindow
    
    # Small delay to ensure parent process appears in logs
    Start-Sleep -Seconds 2
    
    Write-Host "[+] Installer.exe spawning W8CPbGQI.exe..."
    Start-Process -FilePath "$binPathW8CPbGQI.exe" -NoNewWindow
    
    Start-Sleep -Seconds 1
    
    Write-Host "[+] W8CPbGQI.exe spawning ZoneInd.exe..."
    Start-Process -FilePath "$binPathZoneInd.exe" -NoNewWindow
    
    Write-Host "`n[+] Chain executed. Verify detection in your SIEM."
    # -------------------------------------------------
  • 정리 명령:
    임시 파일을 제거하고 남아 있는 수면 프로세스를 종료합니다.

    # 스텁 실행 파일 및 디렉토리 정리
    $binPath = "$env:TEMPRenPyChain"
    Write-Host "`n[+] 남아 있는 스텁 프로세스를 중지 중..."
    Get-Process -Name "Installer","W8CPbGQI","ZoneInd" -ErrorAction SilentlyContinue | Stop-Process -Force
    
    Write-Host "[+] 임시 파일 제거 중..."
    Remove-Item -Path $binPath -Recurse -Force
    
    Write-Host "[+] 정리 완료."