SOC Prime Bias: 중간

29 1월 2026 18:23

PyRAT 코드: 파이썬 기반 RAT의 내부

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
PyRAT 코드: 파이썬 기반 RAT의 내부
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

이 기사는 PyInstaller를 사용하여 ELF 바이너리로 패키지된 Python 기반 원격 접근 트로이 목마인 PyRAT를 다룹니다. 이 프로그램은 Linux와 Windows 모두에서 실행되며, 암호화되지 않은 HTTP를 통해 C2 서버와 통신하고, 명령 실행, 파일 유출, 스크린샷 캡처, 자체 삭제 루틴을 지원합니다. 지속성은 Linux에서는 XDG autostart를 통해, Windows에서는 실행 레지스트리 키를 통해 구현됩니다. 보고서는 이 도구가 얼마나 가볍고 사이버 범죄자들에게 얼마나 쉽게 전용될 수 있는지를 강조합니다.

조사

연구자들은 pyinstxtractor로 내장된 Python 바이트코드를 추출하고 모듈을 디컴파일하여 호스트 지문 생성, UID 생성, 스레드 관리, C2 조정을 수행하는 기본 Agent 클래스를 식별했습니다. 정적 분석을 통해 주요 가져오기, 파일 이름, 레지스트리 상호작용, 비콘에 사용되는 HTTP POST 엔드포인트를 표면화했습니다. 행동 테스트는 지속성 생성, 명령 실행, 파일 열거, 업로드/다운로드 작업, ZIP 아카이브 생성, 스크린샷 캡처 및 선택적 유물 정리를 포함한 전체 워크플로를 보여주었습니다.

완화

사용자 프로필에서 생성된 의심스러운 자동 시작 .desktop 파일 및 익숙하지 않은 실행 파일 이름을 사용하는 HKCURun 레지스트리 키의 추가 사항을 모니터링하십시오. 네트워크 레이어에서는 /api/{uid}/hello 엔드포인트를 대상으로 하는 미지의 호스트로의 HTTP POST 트래픽을 주시하십시오. 엔드포인트에서는 내장된 Python 콘텐츠와 비정상적인 프로세스 동작, 예를 들어 잦은 하위 프로세스 실행을 포함하는 알려지지 않은 ELF 바이너리를 플래그로 설정하십시오.

응답

탐지된 경우, 시스템을 격리하고 ELF 샘플 및 관련 .desktop 파일을 수집하고 관련된 레지스트리 상태를 보존하십시오. 포렌식의 일부로 UID, C2 주소 및 실행 중 전송된 파일을 추출하십시오. 식별된 C2 인프라를 차단하고 지속성을 제거하며 완전한 정리를 완료하십시오. 노출되었을 수도 있는 계정의 자격 증명을 교체하십시오.

graph TB %% Class Definitions classDef malware fill:#ff9999 classDef technique fill:#99ccff classDef action fill:#ccffcc classDef persistence fill:#ffcc99 classDef cleanup fill:#dddddd %% Node Definitions malware_pyrat[“<b>악성코드</b> – <b>이름</b>: PyRAT ELF<br/><b>설명</b>: ELF 바이너리로 실행되는 Linux/Windows RAT”] class malware_pyrat malware tech_system_info[“<b>기법</b> – <b>T1082 시스템 정보 탐색</b><br/>OS 버전, 호스트 이름 및 하드웨어 정보를 수집”] class tech_system_info technique tech_user_discovery[“<b>기법</b> – <b>T1033 시스템 소유자/사용자 탐색</b><br/>로그인된 사용자 및 계정 정보를 열거”] class tech_user_discovery technique action_establish_c2[“<b>행동</b> – 암호화되지 않은 HTTP POST를 통한 C2 설정”] class action_establish_c2 action tech_web_service[“<b>기법</b> – <b>T1102.003 웹 서비스: 단방향 통신</b><br/>HTTP POST를 사용하여 원격 서버로 데이터 전송”] class tech_web_service technique tech_exfil_unenc[“<b>기법</b> – <b>T1048.003 암호화되지 않은 비-C2 프로토콜을 통한 유출</b><br/>암호화 없이 데이터 전송”] class tech_exfil_unenc technique tech_data_encoding[“<b>기법</b> – <b>T1132.002 데이터 인코딩: 비표준 인코딩</b><br/>전송 전에 사용자 정의 인코딩 적용”] class tech_data_encoding technique action_execute_cmd[“<b>행동</b> – 명령 실행”] class action_execute_cmd action tech_windows_shell[“<b>기법</b> – <b>T1059.003 Windows 명령 셸</b><br/>cmd.exe를 통해 명령 실행”] class tech_windows_shell technique tech_unix_shell[“<b>기법</b> – <b>T1059.004 Unix 셸</b><br/>/bin/sh를 통해 명령 실행”] class tech_unix_shell technique action_collect_files[“<b>행동</b> – 파일 수집 및 파일 시스템 열거”] class action_collect_files action tech_archive[“<b>기법</b> – <b>T1560.002 수집된 데이터 아카이브: 라이브러리 사용</b><br/>ZIP 라이브러리를 사용하여 데이터 압축”] class tech_archive technique tech_screenshot[“<b>기법</b> – <b>T1113 화면 캡처</b><br/>데스크톱 이미지를 캡처”] class tech_screenshot technique tech_persist_linux[“<b>기법</b> – <b>T1547.013 XDG 자동 시작</b><br/>사용자 자동 시작 디렉터리에 .desktop 항목 추가”] class tech_persist_linux persistence tech_persist_windows[“<b>기법</b> – <b>T1547.014 레지스트리 Run 키 / 시작 폴더</b><br/>HKCU\\Run에 지속성 항목 생성”] class tech_persist_windows persistence tech_cleanup[“<b>기법</b> – <b>T1070.009 지표 제거: 지속성 정리</b><br/>지속성 아티팩트 및 로그 삭제”] class tech_cleanup cleanup %% Connections malware_pyrat –>|이어짐| tech_system_info malware_pyrat –>|이어짐| tech_user_discovery tech_system_info –>|정보 제공| action_establish_c2 tech_user_discovery –>|정보 제공| action_establish_c2 action_establish_c2 –>|사용| tech_web_service action_establish_c2 –>|사용| tech_exfil_unenc action_establish_c2 –>|사용| tech_data_encoding action_establish_c2 –>|활성화| action_execute_cmd action_execute_cmd –>|사용| tech_windows_shell action_execute_cmd –>|사용| tech_unix_shell action_execute_cmd –>|이어짐| action_collect_files action_collect_files –>|이어짐| tech_archive tech_archive –>|이어짐| tech_screenshot tech_screenshot –>|활성화| tech_persist_linux tech_screenshot –>|활성화| tech_persist_windows tech_persist_linux –>|이후 이어짐| tech_cleanup tech_persist_windows –>|이후 이어짐| tech_cleanup

공격 흐름

시뮬레이션 실행

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

이유: 이 섹션에서는 탐지 규칙을 트리거하기 위해 고안된 적대적 기법(TTP)의 정확한 실행을 자세히 설명합니다. 명령어와 내러티브는 반드시 식별된 TTP를 직접 반영하고 탐지 논리에서 예상하는 정확한 텔레메트리를 생성할 것을 목표로 해야 합니다.

  • 공격 서술 및 명령어:

    공격자는 일반 사용자에 대한 SSH 자격 증명을 탈취했습니다. 로그인 후, 그들은 land에서 살아남기 스크립트를 실행합니다.

    1. 악성 ELF 페이로드를 작성합니다 (agent-svc.pyc)는 사용자의 홈 디렉토리에 Python 바이트코드 파일로 위장하여 저장되며 실제로는 ELF 바이너리입니다.
    2. 마스킹된 Debian 패키지 도구를 복사합니다 칭하여 dpkgn 로 이동 /usr/local/bin에 배치하고, 실행 권한을 부여합니다. 이 도구는 ELF 페이로드를 단순히 실행하는 얇은 래퍼에 불과합니다.
    3. 자동 시작 데스크탑 항목을 설치합니다 (dpkgn.desktop)은 ~/.config/autostart 에 설치하여 페이로드가 모든 그래픽 세션 시작 시 실행되도록 합니다.
    4. 적절한 권한을 설정합니다 즉각적인 의심을 피하기 위해.

    결합된 파일 이벤트(agent-svc.pyc and dpkgn) 규칙의 첫 번째 조건을 충족시키며, .desktop 파일은 두 번째 조건을 충족시킵니다.

  • 회귀 테스트 스크립트:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # 1. 악성 ELF를 .pyc로 위장하여 배포
    MALWARE_PATH="$HOME/agent-svc.pyc"
    echo "가짜 ELF 페이로드(더미 바이너리) 생성 중 ..."
    dd if=/dev/zero bs=1 count=1024 of="$MALWARE_PATH" status=none
    chmod +x "$MALWARE_PATH"
    
    # 2. dpkgn이라는 가짜 Debian 도구 배포
    FAKE_TOOL="/usr/local/bin/dpkgn"
    echo "#!/usr/bin/env bash" | sudo tee "$FAKE_TOOL" > /dev/null
    echo "exec "$MALWARE_PATH" "$@"" | sudo tee -a "$FAKE_TOOL" > /dev/null
    sudo chmod +x "$FAKE_TOOL"
    
    # 3. 자동 시작 데스크탑 항목 생성
    AUTOSTART_DIR="$HOME/.config/autostart"
    mkdir -p "$AUTOSTART_DIR"
    DESKTOP_FILE="$AUTOSTART_DIR/dpkgn.desktop"
    cat > "$DESKTOP_FILE" <<EOF
    [Desktop Entry]
    Type=Application
    Exec=$FAKE_TOOL
    Hidden=false
    NoDisplay=false
    X-GNOME-Autostart-enabled=true
    Name=Package Manager
    Comment=System Update Service
    EOF
    
    echo "PyRAT 지속성 아티팩트 배포됨."
  • 정리 명령:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # 악성 ELF 제거
    rm -f "$HOME/agent-svc.pyc"
    
    # 가짜 툴 제거
    sudo rm -f /usr/local/bin/dpkgn
    
    # 자동 시작 항목 제거
    rm -f "$HOME/.config/autostart/dpkgn.desktop"
    
    echo "정리 완료."