본문 바로가기
분석 정보/악성코드 분석 정보

PyPI mistralai 패키지 공급망 침해 분석

by TACHYON & ISARC 2026. 5. 19.

지난 달, 잉카 인터넷 AX Security LabTeamPCP 그룹의 LiteLLM 패키지 공격에 대해 소개한 바 있다. 해당 공격이 일어난 후에도 TeamPCP의 공격은 사그라들지 않은 채 계속돼 PyPI, npm 생태계의 패키지를 이용하는 많은 사용자들의 안전을 위협하고 있다. 이번에 발견된 침해 공격은 PyPI mistralai 패키지의 2.4.6 버전이다. 공격자가 유포한 스크립트에는 기존에 발견된 것과 유사한 정보 탈취 기능뿐만 아니라 지리적 정보가 특정 국가에 속할 경우 시스템을 파괴하는 기능이 추가됐다.

 

해당 패키지 페이지는 문제가 발견된 당일 빠르게 격리됐고, 현재는 문제가 된 버전(2.4.6)의 이전 버전을 배포하며 격리 조치를 해제했다.

 

[그림 1] 격리 조치된 mistralai 패키지 페이지

 

이번 공격에 사용된 악성 패키지는 다음과 같은 흐름으로 공격이 진행된다.

 

[그림 2] 침해된 mistralai 패키지 공격 흐름

 

일련의 공격은 악성 스크립트가 삽입된 mistralai 2.4.6 버전 패키지의 /client/__init__.py 파일로부터 시작된다. 이 스크립트는 client 모듈이 로딩되면 자동으로 실행돼 실행 환경이 리눅스 시스템인지, MISTRAL_INIT 환경 변수가 존재하지 않는지 검증한다. 두 조건을 모두 만족하면 MISTRAL_INIT 환경 변수 값을 설정해 중복 실행을 방지하고 curl 명령어를 사용해 공격자 서버로부터 transformers.pyz 파일을 다운로드하고 실행한다.

 

[그림 3] __init__.py 파일 스크립트

 

transformers.pyz 파일은 정보 탈취, 추가 페이로드 다운로드 기능을 가진 여러 파이썬 스크립트를 압축한 Python Zip Application 이다. 가장 먼저 실행되는 __main__.py 파일은 시스템이 리눅스가 아니거나, 시스템 언어 관련 환경 변수가 러시아어(ru)로 설정됐거나, CPU 개수가 2개 이하면 악성 행위 없이 종료된다.

 

[그림 4] __main__.py 악성 행위 실행 조건 코드

 

 

정보 탈취

악성 행위 실행 조건 검증 후 __main__.py 에 의해 실행된 entrypoint.py collectors 폴더 내 정보 탈취 파이썬 스크립트를 실행하는 스레드를 각각 생성한다. 각 파이썬 스크립트 파일에 따른 탈취 대상은 다음 표와 같다.

 

[표 1] 정보 탈취 대상 및 수집 정보

 

수집한 데이터는 압축, 암호화해 공격자 서버로 전송한다. 만약 미리 지정된 공격자 서버 주소로 접속할 수 없다면 GitHub Commit Search API를 이용해 최근 커밋된 메시지 중 FIRESCALE 문자열이 포함된 특정 정규표현식 패턴 메시지를 찾는다. 이 메시지는 공격자가 GitHub 의 정상적인 서비스를 이용해 암호화된 서버 주소를 저장하는 용도로 사용된다. 조건에 맞는 메시지를 발견하면 복호화하고 새로운 공격자 서버 주소로 사용해 탈취한 정보를 전송한다.

 

[그림 5] GitHub Commit Search API 를 이용한 공격자 서버 주소 생성 코드

 

만약 Commit Search API 서비스를 통해서도 공격자 서버 주소를 생성하지 못하면 피해자 시스템으로부터 수집한 정보 중 GitHub 토큰 정보를 활용해 피해자 계정에 새로운 저장소를 생성, 수집한 데이터를 새로 생성한 저장소에 업로드한다.

 

[그림 6] 피해자 GitHub 토큰을 이용한 저장소 생성 코드

 

 

시스템 파괴 및 지속성 유지

__main__.py 는 정보 탈취 스레드를 생성한 후 공격자 서버로부터 또 다른 Base64 인코딩된 데이터를 다운로드한다.

 

[그림 7] Base64 디코딩된 추가 페이로드 스크립트

 

다운로드한 데이터를 디코딩하기에 앞서 roulette.py 파일은 현재 실행 시스템의 타임존, 로케일 정보를 근거로 지리적 정보가 이스라엘 혹은 이란인지 검증한다. 두 국가 중 하나에 속하면 1/6 확률로 rm rf /* 명령어를 실행해 시스템 내 모든 파일 삭제를 시도한다.

 

[그림 8] 시스템 내 모든 파일 삭제 코드

 

지리적 정보가 두 국가에 속하지 않으면 앞서 다운로드한 Base64 데이터를 디코딩해 pgmonitor.py 파일을 생성하고, 이를 실행하는 pgsql-monitor.service 서비스를 생성해 악성 행위의 지속성을 유지한다. pgmonitor.py roulette.py와 마찬가지로 이스라엘 혹은 이란이면 시스템 내 모든 파일을 삭제하고, 공격자 서버로부터 또 다른 Base64 인코딩 페이로드를 다운로드해 실행한다. 현재 시점에서 추가 페이로드는 다운로드할 수 없다.

 

[그림 9] 악성 행위 지속성 유지를 위한 서비스 생성 코드

 

 

TeamPCP 그룹은 npm, PyPI와 같이 대중적으로 사용되는 패키지 저장소를 공격해 민감한 정보를 탈취하는 것으로 악명을 떨치고 있었지만 이번에 발견된 공격 스크립트를 보면 알 수 있듯이 언제든지 파괴형, 랜섬웨어 페이로드를 추가해 정보 탈취 이상의 피해로 이어질 수 있음을 보여줬다. 이런 식의 공급망 공격은 평소 사용하던 패키지를 업데이트한 것만으로도 공격받을 수 있기 때문에 항상 정보 보안 관련 소식에 귀를 기울여 침해 사고를 인지하고 신속히 대응해 피해를 최소화해야 한다.

 

상기 악성코드는 잉카인터넷 안티바이러스 제품 TACHYON Internet Security 6.0에서 진단 및 치료가 가능하다.

 

[그림 10] TACHYON Internet Security 6.0 진단 및 치료 화면