공식 파이썬 패키지 저장소 '파이썬패키지인덱스(PyPI)'에서 데이터를 탈취하거나 비트코인 지갑 주소를 바꿔치기해 암호화폐를 가로채는 악성 라이브러리 12개가 발견됐다. 악성 라이브러리는 기존 유명 패키지를 베낀 코드에 이름만 살짝 바꾸는 식으로 위장해 등록됐다.
지난 27일 미국 지디넷은 '버투스(Bertus)'라는 이름을 쓰는 소프트웨어 보안 엔지니어가 직접 2차례 스캐닝을 수행해 PyPI에 업로드된 파이썬 패키지 가운데 악성코드를 포함한 라이브러리 12건을 찾아냈다고 보도했다.
PyPI에서 발견된 악성 파이썬 패키지는 모두 비슷한 유형으로 제작됐다. 제작자는 인기 패키지 코드를 복사해 새로운 라이브러리를 만들면서 원본의 패키지 명칭을 살짝 바꿔 유사한 이름을 썼다. 예를 들어 패키지 4개(diango, djago, dajngo, djanga)의 명칭은 인기 파이썬 프레임워크 장고(Django)와 철자가 유사했다.
악성 패키지를 만든 이들은 새로 제작된 패키지의 온전한 기능을 갖춘 프로젝트 가운데 setup.py 파일에 악성코드를 삽입했다. 이 파일은 파이썬 프로젝트 안에서 새 패키지를 내려받아 설치할 때 사용하는 'pip'같은 명령어를 실행할 때 파이썬 라이브러리 인스톨러가 자동으로 수행하는 명령어 세트를 포함한다.
악성 패키지 제작자가 덧붙인 코드는 각각의 악성 라이브러리마다 다양한 악성 동작을 수행하도록 만들어졌다. 버투스는 지난 13일에 11개 악성 패키지를, 지난 21일에 다른 1개 악성 패키지를 찾아냈다. 먼저 발견된 패키지는 smplejson, pkgutil, timeit, diango, djago, dajngo, djanga, easyinstall, libpeshka, pyconaufuntimes, mybiubiubiu, 11개다. 나중에 발견된 패키지는 colourama, 1개다.
먼저 발견된 악성 패키지 11개는 감염된 환경에서 데이터를 수집하거나, 부트 영속성(boot persistence)을 갖거나, 원격 워크스테이션에서 리버스셸(reverse shell)을 열 수 있게 만든다. 나머지 패키지 1개는 감염된 이용자 운영체제(OS) 클립보드에서 500밀리초마다 비트코인 지갑주소같은 문자열을 찾아 공격자의 주소로 바꿔치기를 시도한다. 이용자가 비트코인 결제나 송금을 수행할 때 그 암호화폐를 가로채는 것이다.
암호화폐를 가로채는 악성 패키지의 colourama라는 이름은 역시 인기 파이썬 라이브러리인 colorama를 흉내낸 것이다. 이는 현재 공식 PyPI 저장소에서 내려간 상태다. PyPI 통계서비스에 따르면 저장소에서 내려가기 전까지 1개월간 이 악성 패키지를 54명의 이용자가 내려받았다. 공격자의 비트코인 주소 잔액은 40달러에 불과한 것으로 파악됐는데 이는 colourama 패키지 제작자가 큰 돈을 벌진 못했음을 시사한다.
버투스는 이메일을 통해 "PyPI 관리자들에게 발견된 패키지 이름을 알려 줬고 그들은 패키지를 제거했다"며 "그들은 패키지 등록시 앞으로도 colourama같은 이름을 쓰지 못하도록 차단했다"고 덧붙였다. 그는 자신이 직접 개발한 자동화 시스템을 이용해 PyPI 저장소에서 유사한 명칭의 패키지를 탐색했다. 이런 패키지 명칭은 실수로 발생하는 오타를 이용해 하이재킹을 시도하는 '타이포스쿼팅(typosquating)' 사례다.
지난해 슬로바키아 국가안보국(NBU)에서 먼저 PyPI 저장소에 악성 파이썬 라이브러리 10건 가량이 등재돼 있다고 경고한 바 있다. 버투스는 슬로바키아 NBU가 내놓은 해당 보안경고를 접한 뒤 저장소에서 타이포스쿼팅을 이용하려는 패키지를 찾는 스캐너를 제작했다고 밝혔다. NBU 경고 당시 발견된 악성 라이브러리도 제거되기 전까지 기존 패키지의 오타를 낸듯한 이름을 통해 수주간 이용자의 설치를 기다렸다.
관련기사
- 훌쩍 큰 파이썬, 해커 사랑도 폭증2018.10.29
- "개발언어 '파이썬' 인기몰이...C++도 앞지를 기세"2018.10.29
- MS, 파이썬 개발자 구애2018.10.29
- 파이썬 창시자 귀도 반 로섬, BDFL 사임2018.10.29
버투스는 현재 PyPI 스캐너를 향상시키는 데 주력하고 있고 좀 더 정기적으로 스캔을 수행할 것이라고 언급했다. 루비젬스(RubyGems)나 자바스크립트 npm 같은 다른 프로그래밍 관련 패키지 저장소에서도 활용할 수 있도록 만들 생각이지만, 그러자면 해당 저장소와 프로그래밍 언어별로 조금씩 다르게 스캐너를 구현해야 하기 때문에 시간이 더 필요하다고 덧붙였다.
미국 지디넷 보도에 따르면 npm 패키지 저장소에는 버투스의 스캐너같은 자동화시스템이 필요한 상황이다. 지난해 8월 한 스웨덴 개발자도 npm 저장소에 업로드된 자바스크립트 라이브러리 중 38개의 타이포스쿼팅 사례를 발견했다. 해당 패키지의 악성코드는 로컬 환경 변수를 수집해 공격자의 서버에 그 데이터를 업로드하는 동작을 수행했다.