SOC Prime Bias: 높음

31 3월 2026 17:23

Pay2Key 내부 분석: 리눅스 랜섬웨어 변종의 기술 분석

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
Pay2Key 내부 분석: 리눅스 랜섬웨어 변종의 기술 분석
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

Pay2Key는 2025년 8월 말에 리눅스 변종을 도입한 이란 연관 랜섬웨어 작전입니다. 이 악성 코드는 루트 권한으로 실행되며, 보안 보호 장치를 끄고 ChaCha20으로 파일을 암호화합니다. 그 동작은 구성 파일에 의해 구동되며, 전체 파일과 부분 암호화 모드를 지원합니다. 분석은 운영자의 기술과 리눅스 특정 랜섬웨어 방어의 증가하는 필요성을 강조합니다.

조사

Morphisec 위협 연구소는 Pay2Key 리눅스 샘플의 역엔지니어링 검토를 수행했습니다. 연구원들은 권한 검증, JSON 구성 분석, 다음을 통해 파일 시스템 발견을 문서화했습니다 /proc/mounts, 서비스 종료, SELinux 및 AppArmor 비활성화, 크론 기반 지속성, 파일 당 키가 숨겨진 메타데이터 블록 안에 저장된 ChaCha20 암호화. 샘플은 네트워크 C2 트래픽 또는 데이터 탈취의 증거를 보이지 않았습니다.

완화

보고서는 암호화가 시작되기 전에 실행을 중지할 수 있고, 이동 표적 방어를 지원하며, 런타임 무결성 보호를 유지할 수 있는 리눅스 중심의 안티 랜섬웨어 도구를 배포할 것을 권장합니다. 불필요한 서비스를 비활성화하고 SELinux/AppArmor 정책을 강화하여 공격 표면을 줄이는 것도 추천됩니다. 비정상적인 권한 프로세스 활동을 추적하는 엔드포인트 보호는 탄력성을 더욱 향상시킬 수 있습니다.

대응

Pay2Key가 감지되면 시스템을 격리하고, 악성 프로세스를 중지하고, 크론 지속성 항목을 삭제하십시오. 파일 권한이 온전한지 확인하고 백업에서 암호화된 데이터를 복구하십시오. 그런 다음 관련 IOC를 캡처하고 관련 활동에 대한 더 넓은 환경을 점검하는 포렌식 조사를 수행해야 합니다.

"graph TB %% Class definitions classDef technique fill:#ffcc99 classDef operator fill:#ff9900 %% Nodes representing each ATT&CK technique persistence_cron["<b>기술</b> – <b>T1053.003 예약된 작업/작업: 크론</b><br/> 시스템 재부팅 후 실행을 보장하기 위해 크론 작업을 생성하거나 수정"] class persistence_cron technique defense_impair["<b>기술</b> – <b>T1562 방어 약화</b><br/> 호스트 보호 메커니즘 약화를 위해 SELinux 및 AppArmor를 비활성화"] class defense_impair technique indicator_removal["<b>기술</b> – <b>T1027.005 도구에서 인디케이터 제거</b><br/> 탐지를 피하기 위해 보안 도구 인디케이터 제거"] class indicator_removal technique discovery_mounts["<b>기술</b> – <b>T1083 파일 및 디렉토리 발견</b><br/> /proc/mounts를 읽고, 의사 파일 시스템을 필터링하고 타겟 선택을 위해 마운트를 분류"] class discovery_mounts technique obfuscation_storage["<b>기술</b> – <b>T1027 난독화된 파일 또는 정보</b><br/> 하드코딩 문자열을 사용하여 암호화 메타데이터 저장하고 페이로드 난독화"] class obfuscation_storage technique deobfuscate["<b>기술</b> – <b>T1140 파일 또는 정보 복호화/디코드</b><br/> 처리 중 난독화된 페이로드 복호화"] class deobfuscate technique impact_encryption["<b>기술</b> – <b>T1486 영향을 위한 데이터 암호화</b><br/> 파일당 ChaCha20 키를 생성하고 데이터를 암호화하여 몸값을 요구하는 파일 생성"] class impact_encryption technique %% Flow connections persistence_cron –>|leads_to| defense_impair defense_impair –>|leads_to| indicator_removal indicator_removal –>|leads_to| discovery_mounts discovery_mounts –>|leads_to| obfuscation_storage obfuscation_storage –>|leads_to| deobfuscate deobfuscate –>|leads_to| impact_encryption "

공격 흐름

시뮬레이션 실행

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

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

  • 공격 서사 및 명령:

    시뮬레이션된 공격자는 이미 리눅스 호스트에 발판을 마련했으며 랜섬웨어 배포를 위한 환경을 준비하고자 합니다. 우선 루트 권한으로 작동하고 있는지 확인한 후 암호화 도중 방해를 피하기 위해 보안 제어 장치를 비활성화하고 중요 서비스를 중지합니다. 이 단계에서는 규칙의 부정 절조를 만족시키기 위해 크론 항목을 생성하지 않습니다.

    1. 권한 확인 – 공격자가 id -u 를 실행하고 UID 0이 존재하는지 확인하여 UID가 명령어 라인에 ‘루트’로 표시되는지 확인합니다.
    2. 서비스 중단systemctl stop 를 사용하여 원격 간섭을 방지하기 위해 ssh 서비스를 중지합니다.
    3. 프로세스 중단 – 공격자는 저우선 순위 백그라운드 프로세스 (sleep 300 &)를 종료하여 kill 패턴을 보여줍니다.
    4. 방어 비활성화 – SELinux가 허용으로 설정되고 (setenforce 0) AppArmor가 비활성화됩니다 (aa-disable).

    이 단계들은 execve 이벤트를 생성하며 이들은 selection1 (‘루트’를 포함)과 selection2/selection3 (중지/kill 또는 비활성화 명령을 포함) 조건을 만족하면서도 crontab은 생략되어 Sigma 규칙이 트리거됩니다.

  • 회귀 테스트 스크립트:

    #!/usr/bin/env bash
    set -e
    
    echo "[*] 1단계 – 루트 권한 확인 ('root' 포함)"
    id -u | grep ^0 && echo "루트 권한 확인됨"
    
    echo "[*] 2단계 – 서비스 중지 (systemctl stop sshd)"
    sudo systemctl stop sshd || true
    
    echo "[*] 3단계 – 더미 프로세스 생성 및 종료"
    sleep 300 &
    DUMMY_PID=$!
    sudo kill -9 $DUMMY_PID || true
    
    echo "[*] 4단계 – SELinux 및 AppArmor 비활성화"
    sudo setenforce 0 || true
    sudo aa-disable || true
    
    echo "[+] 시뮬레이션 완료 – 탐지가 발동되었어야 합니다."
  • 정리 명령:

    #!/usr/bin/env bash
    set -e
    
    echo "[*] 서비스 복원"
    sudo systemctl start sshd || true
    
    echo "[*] SELinux(강제) 및 AppArmor 재활성화"
    sudo setenforce 1 || true
    sudo aa-enable || true
    
    echo "[*] 남아 있는 프로세스가 없는지 확인"
    pkill -f "sleep 300" || true
    
    echo "[+] 정리 완료."