SOC Prime Bias: 중간

05 1월 2026 19:10

새로운 VVS 스틸러 악성코드, 난독화된 파이썬 코드로 디스코드 계정 타겟팅

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon 팔로우
새로운 VVS 스틸러 악성코드, 난독화된 파이썬 코드로 디스코드 계정 타겟팅
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

VVS Stealer는 Telegram에서 판매되는 새로 관찰된 Python 기반 정보 스틸러입니다. Pyarmor로 난독화되었으며, PyInstaller로 패키징되고 Windows 시작 폴더를 통해 지속성을 유지합니다. 이 악성 코드는 Discord 토큰, 브라우저 자격 증명, 쿠키, 기록, 비밀번호 및 스크린샷을 수집합니다. 또한 활성 Discord 세션을 가로채기 위해 악성 JavaScript 페이로드를 주입할 수 있습니다.

조사

Palo Alto Networks Unit 42가 이 악성 코드를 공개하며, 2025년 4월부터 판매되고 있음을 언급했습니다. 연구원들은 난독화 기술, 배포 모델, 자격 증명 탈취 및 Discord 주입을 포함한 기능을 설명했습니다. 보고서는 이 도구가 스틸러에 중점을 둔 Telegram 그룹에서 활동 중인 프랑스어를 사용하는 위협 행위자와 관련이 있다고 연결합니다.

완화

조직은 알 수 없는 PyInstaller 실행 파일과 시작 폴더의 예상치 못한 바로 가기를 모니터링해야 합니다. 난독화된 Python 스크립트와 의심스러운 JavaScript 페이로드에 대한 엔드포인트 감지 규칙을 배포하십시오. Discord 및 브라우저 계정에 대한 다중 인증을 실행하고 자격 증명 수집에 악용될 수 있는 관리자 권한을 제한하십시오.

응답

VVS Stealer가 감지되면 영향을 받은 엔드포인트를 격리하고 메모리 및 파일 아티팩트를 수집한 후 IOC를 추출합니다. 악성 시작 항목을 제거하고 주입된 Discord 프로세스를 종료하며, 손상된 계정에 대해 비밀번호 재설정을 강제합니다. 추가 도난 자격 증명을 찾고 원격 C2 인프라가 차단되었는지 확인하기 위해 전체 포렌식 조사를 수행합니다.

“graph TB %% Class definitions classDef action fill:#99ccff classDef malware fill:#ff9999 classDef tool fill:#cccccc classDef technique fill:#ffff99 %% Nodes mal_vvs_stealer[“<b>멀웨어</b> – <b>VVS Stealer</b><br/><b>설명</b>: PyInstaller로 패키징되고 PyArmor로 난독화된 정보 탈취 파일.”] class mal_vvs_stealer malware tool_pyinstaller[“<b>도구</b> – <b>PyInstaller</b><br/><b>설명</b>: 파이썬 애플리케이션을 독립 실행 파일로 번들링합니다.”] class tool_pyinstaller tool tool_pyarmor[“<b>도구</b> – <b>PyArmor</b><br/><b>설명</b>: 악성 논리를 숨기기 위해 파이썬 바이트코드를 난독화합니다.”] class tool_pyarmor tool tech_T1027[“<b>기술</b> – <b>T1027 난독화된 파일 또는 정보</b><br/><b>설명</b>: 적이 악성 코드를 숨기기 위해 난독화를 사용합니다.”] class tech_T1027 technique action_download_js[“<b>행동</b> – 추가 JavaScript 페이로드 다운로드”] class action_download_js action tech_T1027_006[“<b>기술</b> – <b>T1027.006 HTML 은닉</b><br/><b>설명</b>: 방어를 피하기 위해 HTML에 악성 코드를 삽입합니다.”] class tech_T1027_006 technique tech_T1505[“<b>기술</b> – <b>T1505 서버 소프트웨어 구성 요소</b><br/><b>설명</b>: 악성 활동을 지원하기 위해 추가 서버 측 구성 요소를 설치합니다.”] class tech_T1505 technique action_persistence[“<b>행동</b> – 시작 프로그램 폴더를 통해 지속성 확립”] class action_persistence action tech_T1037_005[“<b>기술</b> – <b>T1037.005 시작 항목</b><br/><b>설명</b>: 사용자의 시작 폴더에 실행 파일을 배치하여 로그온 시 실행하도록 합니다.”] class tech_T1037_005 technique tech_T1547[“<b>기술</b> – <b>T1547 부팅 또는 로그온 자동 시작 실행</b><br/><b>설명</b>: 부팅 또는 로그온 시 자동으로 실행되도록 프로그램을 등록합니다.”] class tech_T1547 technique action_fake_error[“<b>행동</b> – 가짜 치명적 오류 팝업 표시”] class action_fake_error action tech_T1562_011[“<b>기술</b> – <b>T1562.011 보안 경고 스푸핑</b><br/><b>설명</b>: 사용자를 속이기 위해 가짜 보안 경고를 표시합니다.”] class tech_T1562_011 technique action_screenshot[“<b>행동</b> – 화면 캡처”] class action_screenshot action tech_T1113[“<b>기술</b> – <b>T1113 화면 캡처</b><br/><b>설명</b>: 피해자의 데스크톱 스크린샷을 기록합니다.”] class tech_T1113 technique action_browser_harvest[“<b>행동</b> – 브라우저 데이터 수확 (쿠키, 비밀번호, 기록)”] class action_browser_harvest action tech_T1555_003[“<b>기술</b> – <b>T1555.003 웹 브라우저의 자격 증명</b><br/><b>설명</b>: 브라우저에서 저장된 자격 증명 및 쿠키를 추출합니다.”] class tech_T1555_003 technique action_discord_hijack[“<b>행동</b> – Discord 클라이언트를 종료하고 악성 JavaScript 삽입”] class action_discord_hijack action tech_T1539[“<b>기술</b> – <b>T1539 웹 세션 쿠키 탈취</b><br/><b>설명</b>: 브라우저에서 활성 웹 세션 쿠키를 획득합니다.”] class tech_T1539 technique tech_T1134_003[“<b>기술</b> – <b>T1134.003 액세스 토큰 조작</b><br/><b>설명</b>: 인증 토큰을 훔치거나 가장합니다.”] class tech_T1134_003 technique action_c2_exfil[“<b>행동</b> – 웹 기반 C2를 통해 데이터 유출”] class action_c2_exfil action tech_T1071_001[“<b>기술</b> – <b>T1071.001 애플리케이션 계층 프로토콜: 웹 프로토콜</b><br/><b>설명</b>: 명령 및 제어를 위한 표준 웹 트래픽을 사용합니다.”] class tech_T1071_001 technique tech_T1102[“<b>기술</b> – <b>T1102 웹 서비스</b><br/><b>설명</b>: 데이터 유출을 위해 웹 서비스를 통해 원격 서버와 통신합니다.”] class tech_T1102 technique %% Connections mal_vvs_stealer u002du002d>|uses| tech_T1027 mal_vvs_stealer u002du002d>|packaged with| tool_pyinstaller mal_vvs_stealer u002du002d>|obfuscated with| tool_pyarmor mal_vvs_stealer u002du002d>|downloads| action_download_js action_download_js u002du002d>|uses| tech_T1027_006 action_download_js u002du002d>|uses| tech_T1505 action_download_js u002du002d>|establishes persistence via| action_persistence action_persistence u002du002d>|uses| tech_T1037_005 action_persistence u002du002d>|leverages| tech_T1547 action_persistence u002du002d>|displays| action_fake_error action_fake_error u002du002d>|uses| tech_T1562_011 action_fake_error u002du002d>|captures| action_screenshot action_screenshot u002du002d>|uses| tech_T1113 action_screenshot u002du002d>|harvests| action_browser_harvest action_browser_harvest u002du002d>|uses| tech_T1555_003 action_browser_harvest u002du002d>|targets Discord and injects JS| action_discord_hijack action_discord_hijack u002du002d>|uses| tech_T1539 action_discord_hijack u002du002d>|uses| tech_T1134_003 action_discord_hijack u002du002d>|exfiltrates via| action_c2_exfil action_c2_exfil u002du002d>|uses| tech_T1071_001 action_c2_exfil u002du002d>|uses| tech_T1102 “

공격 흐름

시뮬레이션 실행

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

근거: 이 섹션은 탐지 규칙을 트리거하기 위해 설계된 적대자 기술(TTP)의 정확한 실행을 자세히 설명합니다. 명령과 내러티브는 식별된 TTP를 직접 반영해야 하며 탐지 로직에 의해 예상되는 정확한 텔레메트리를 생성하는 것을 목표로 해야 합니다. 추상적이거나 관련 없는 예는 오진으로 이어질 것입니다.

  • 공격 설명 및 명령:
    적대자는 Windows 워크스테이션에서 낮은 권한의 사용자 계정을 타겟으로 했습니다. PowerShell 드로퍼를 사용하여 악성 PyInstaller로 패키징된 실행 파일 (VVS_Stealer.exe)을 실행하여 먼저 “PyInstaller” 문자열이 포함된 명령어를 가진 프로세스를 생성합니다. 페이로드는 그런 다음 토큰 탈취 주입 단계를 준비하기 위해 실행 중인 Discord 클라이언트를 강제 종료합니다. 모든 작업은 현재 사용자 컨텍스트에서 발생하며 규칙의 기준에 맞는 단일 프로세스 생성 이벤트를 생성합니다.

    단계별:

    1. 악성 PyInstaller 번들을 %TEMP%.
    2. 에 복사하십시오.
    3. “PyInstaller”라는 단어가 포함된 명령어로 실행하십시오. 악성 바이너리는 내부적으로 악성 바이너리는 내부적으로
    4. 를 호출하여 Discord를 종료합니다. 프로세스 생성이미지 필드가 Discord 실행 파일 경로(C:Users<user>AppDataLocalDiscordapp-... Discord.exe)로 해석되며 원본 스폰 명령줄에 여전히 “PyInstaller”가 포함되어 있습니다.
  • 회귀 테스트 스크립트: 다음 PowerShell 스크립트는 탐지 규칙을 트리거하는 데 필요한 정확한 텔레메트리를 재생성합니다. 실제 악성 페이로드를 의도적으로 피하며, 대신 무해한 notepad.exe 프로세스를 시작하지만 명령줄에 키워드를 포함시켜 PyInstaller로 패키징된 실행 파일인 척 가장합니다. 또한 “이미지가 Discord.exe로 끝나는” 조건을 반영하기 위해 실행 중인 Discord 프로세스를 종료합니다.

    # -------------------------------------------------
    # 시뮬레이션 스크립트 – Sigma 규칙 #f63685c4‑feea‑431b‑a749‑55cf8661e6ac 트리거
    # -------------------------------------------------
    
    # 1. Discord가 실행 중인지 확인(optional, 종료 보장 위해)
    $discordPath = "$env:LOCALAPPDATADiscordapp-1.0.9005Discord.exe"
    if (-Not (Get-Process -Name "Discord" -ErrorAction SilentlyContinue)) {
        Start-Process -FilePath $discordPath -WindowStyle Hidden
        Start-Sleep -Seconds 5
    }
    
    # 2. 명령줄에 "PyInstaller"가 포함된 더미 프로세스를 실행하십시오.
    #    악의적인 자리를 신뢰할 수 있는 notepad.exe를 사용합니다.
    $dummyCmd = "C:WindowsSystem32notepad.exe"
    $cmdLine = "PyInstaller_dummy_execution -run $dummyCmd"
    Start-Process -FilePath $dummyCmd -ArgumentList $cmdLine -WindowStyle Hidden
    Write-Host "[+] PyInstaller 키워드를 사용하여 더미 프로세스를 시작했습니다."
    
    # 3. Discord.exe 이미지 이벤트를 생성하기 위해 Discord를 즉시 종료하십시오.
    if (Get-Process -Name "Discord" -ErrorAction SilentlyContinue) {
        Stop-Process -Name "Discord" -Force
        Write-Host "[+] Discord.exe 종료."
    }
    
    # 4. Optional: 짧은 지연 후 더미 notepad 창을 정리하십시오.
    Start-Sleep -Seconds 8
    Get-Process -Name "notepad" -ErrorAction SilentlyContinue | Stop-Process -Force
    Write-Host "[+] 정리 완료."
  • 정리 명령: 잔여 프로세스가 남아 있지 않도록 하십시오.

    # 남아 있는 더미 notepad 프로세스를 제거하십시오
    Get-Process -Name "notepad" -ErrorAction SilentlyContinue | Stop-Process -Force
    
    # 테스트 후 정상 운영을 위해 Discord를 다시 시작합니다
    $discordPath = "$env:LOCALAPPDATADiscordapp-1.0.9005Discord.exe"
    if (-Not (Get-Process -Name "Discord" -ErrorAction SilentlyContinue)) {
        Start-Process -FilePath $discordPath
        Write-Host "[+] 정상 운영을 위해 Discord가 다시 시작되었습니다."
    }