목차
PyPi에서의 악성코드 패키지 유포
PyPi는 무엇인가?
파이썬(Python)은 기본적으로 다양한 패키지들을 내장(Battery included)해 배포한다. 기본 패키지들에서도 많은 기능을 지원하지만, 전 세계 다수 파이썬 개발자들이 공개한 패키지들을 추가해서 더 다양하고 강력한 기능을 간단하게 사용할 수 있다. 이렇게 개별로 개발된 파이썬 패키지를 커뮤니티와 공유하기 위한 인덱스 서비스가 바로 PyPI
(Python Package Index)다.
PyPI
(pypi.org
), 파이썬 패키지 인덱스(Python Package Index)는 pip
명령 사용 시 패키지 탐색 및 다운로드를 위해 사용된다. PyPI
에는 전 세계 사용자들이 참여해 데이터 분석, 웹 개발, 머신 러닝 등 다양한 목적 과 기능의 패키지 및 프레임워크 등을 등록하고 공유한다.
이 저장소는 파이썬 개발자는 물론, 파이썬 기반으로 제작된 소프트웨어나 어플리케이션 사용자 등 다수의 사람들이 전 세계에서 지속적이고 반복적으로 접근, 사용하는 필수적인 자원이다. 파이썬 생태계에서 핵심적인 역할을 한다고 할 수 있다.
리포지토리 대상 공격
유명 프로그램이나 라이브러리의 저장소는 전 세계적으로 수많은 시스템에 포함되며 지속적으로 다운로드, 설치, 업데이트 되기 때문에 악성코드 유포 목적으로 공격 대상이 된 사례가 적지 않다. 이런 사례는 파이썬 언어에 국한되지 않는다. npm1이나 github에 등록된 프로젝트들 역시 공격 대상이 된다.
보통 해당 프로젝트나 라이브러리의 커뮤니티 참여자들에 의해 코드 리뷰 등의 과정을 거치면서 오류나 악의적인 내용은 걸러지는 것이 일반적이지만, 관리자 계정 또는 서버/서비스의 직접적인 침해, 유사한 이름의 프로젝트 생성 등 저장 및 배포 지점에 대한 공격은 빈틈을 찾아가며 계속되고 있다.
파이썬 악성코드 패키지
최근 ESET2에서 발표한 내용에 따르면, 파이썬 패키지 인덱스에서도 116개의 악성코드 패키지가 확인되었다. 이렇게 유포된 악성코드 패키지는 5월 이후 약 10,000 회 이상 다운로드 되었다.
악성코드 패키지는 다운로드 된 시스템의 운영체제를 확인해 Windows, Linux 시스템 모두를 공격하며, 백도어를 다운로드해 감염시킨다. 일부 공격 사례에서는 암호화폐를 훔치기 위한 간단한 클립보드 모니터링 프로그램을 심거나, W4SP Stealer
3를 설치한다.
탐지를 위한 침해지표(IoCs)
ESET에서 분석 리포트에 함께 공개한 침해지표(IoC, Indicator of Compromise) 목록을 보면, 시스템 침해 여부를 쉽게 확인할 수 있다. 침해지표 리스트에는 마지막 페이로드의 SHA-1 해쉬 정보와 페이로드 다운로드를 위해 통신하는 도메인과 아이피의 정보까지 포함하고 있다.
탐지된 116개의 전체 프로젝트 및 패키지 파일 정보, 마지막 스테이지 파일 정보, 네트워크 정보는 ESET Github
4에서 확인할 수 있다.
참고자료
- npm 감염 사례 (phyum.io)
https://blog.phylum.io/encrypted-npm-packages-found-targeting-major-financial-institution/ ↩︎ - A pernicious potpourri of Python packages in PyPI (welivesecurity.com)
https://www.welivesecurity.com/en/eset-research/pernicious-potpourri-python-packages-pypi/ ↩︎ - Two more malicious Python packages in the PyPI (securelist.com)
https://securelist.com/two-more-malicious-python-packages-in-the-pypi/107218/ ↩︎ - A pernicious potpourri of Python packages in PyPI –- Indicators of Compromise
https://github.com/eset/malware-ioc/tree/master/pypi_backdoor ↩︎