Offcanvas

머신러닝|딥러닝 / 보안 / 악성코드

ML 프레임워크 파이토치, 연말에 ‘의존성 혼동 공격’ 받아

2023.01.04 Lucian Constantin  |  CSO
해커는 머신러닝 프레임워크 파이토치(PyTorch)에 악성 패킷을 심어 SSH 키를 포함한 데이터를 유출할 수 있었다. 
 
ⓒPytorch Org

크리스마스와 새해 전날 밤사이에 파이토치(Pytorch)의 나이틀리(nightly) 빌드를 설치한 사용자는 시스템에서 중요한 데이터를 빼돌리는 악성 패키지를 받았을 가능성이 크다. 패키지 관리자와 개발 환경에 지속적으로 영향을 미치는 의존성 혼동 공격(dependency confusion attack)으로 드러났다. 

파이토치 재단은 메인테이너 보안 자문에서 "2022년 12월 25일부터 2022년 12월 30일 사이에 pip을 통해 밤마다 리눅스에 파이토치를 설치했다면 즉시 제거하고 최신 나이틀리 바이너리(2022년 12월 30일 이후)를 사용해달라"라고 당부했다.
 

악성 토치트리톤 라이브러리

파이토치는 컴퓨터 비전 및 자연어 처리 분야에서 머신러닝 응용 프로그램을 개발하기 위한 프레임워크다. 파이토치는 원래 메타(Meta, Inc.)의 인공지능 연구소인 메타 AI에서 개발되었지만, 현재는 리눅스 재단 산하의 파이토치 재단이 유지하는 오픈소스 프로젝트다.

대부분의 파이썬 프로그램과 마찬가지로 PyTorch는 pip(퍼블릭 PyPi를 사용하는 패키지 관리 도구 및 설치 프로그램)를 주 저장소로 삼아 설치된다. 그러나 문제는 대부분의 패키지 관리 도구와 같이 pip를 사용하면 추가 저장소를 정의할 수 있다는 점이다. 이는 기업이 일반적으로 애플리케이션에 사용되며 공개용이 아닌 내부 개발 구성 요소를 호스팅하는 데 사용하는 기능이다.

대부분의 파이썬 프로그램과 마찬가지로 파이토치는 공용 PyPi(Python Package Index)를 주 저장소로 사용하는 패키지 관리 도구이자 설치 프로그램인 pip를 통해 설치된다. 그러나 대부분의 패키지 관리 도구와 마찬가지로 pip를 사용하면 추가 저장소를 정의할 수 있다. 이 기능은 기업이 공개용이 아닌 내부 개발 구성요소를 호스팅하는 데 사용된다. 

파이토치의 종속 체인(설치 중 다운로드되는 추가 패키지)에는 나이틀리 빌드를 위해 파이토치 자체 인덱스에 호스팅된 토치트리톤(torchtriton)이라는 라이브러리가 포함되어 있다. 12월 25일까지 PyPi에는 토치트리톤 라이브러리가 없었기 때문에 pip는 파이토치의 대체 저장소에서 라이브러리를 찾았다.

그러나 공격자는 토치트리톤 패키지 이름을 PyPi에 등록하고 악의적인 패키지를 업로드했다. 그다음 파이토치의 나이틀리 빌드에 대한 설치 루틴을 속여 PyPi에서 로그 버전을 다운로드했다. 파이토치의 안정적인 빌드는 영향을 받지 않았다.

파이토치 메인테이너들은 "PyPI 인덱스가 우선이기 때문에 공식 저장소의 버전 대신 이 악성 패키지가 설치되고 있었다“라며 “이 설계를 통해 다른 사용자가 타사 인덱스에 존재하는 패키지와 동일한 이름으로 패키지를 등록할 수 있으며, pip는 기본적으로 해당 버전을 설치한다”라고 말했다. 

악성 토치트리톤 패키지는 사용된 네임 서버, 컴퓨터 호스트 이름, 현재 사용자 이름, 작업 디렉터리 및 환경 변수와 같은 시스템에 대한 정보를 수집하도록 설계되었다. 또한 /etc/hosts(내부적으로 정의된 호스트), /etc/passwd(로컬 사용자 목록), 사용자의 홈 디렉토리에 있는 파일, .gitconfig 디렉토리 및 SSH 키가 포함된 .ssh 디렉토리의 내용을 읽는다. 그런 다음 이 모든 정보가 암호화된 DNS 쿼리를 통해 원격 서버로 업로드된다. 데이터를 몰래 빼내는 방법이다.

파이토치 메인테이너들은 관리자가 시스템을 검색해 악성 토치트리톤 버전을 찾을 수 있는 명령어를 게시했다. 악성 패키지가 발견되면 즉시 제거해야 하며 잠재적으로 손상된 인증 정보 또는 키를 변경하기 위한 단계를 수행해야 한다.

파이토치는 토치트리톤에 대한 의존성을 제거하고 이전 패키지의 이름이 변경된 버전인 pytorch-triton으로 대체했다. 이 패키지는 여전히 자체 인덱스에서 제공되지만 메인테이너들은 PyPi에 파이토치트리톤 이름을 등록해 향후 유사한 데이터 탈취가 발생하지 않도록 했다. 

토치트리톤 의존성이 있는 모든 파이토치 빌드는 배포에서 제거되었으며, 그동안 토치트리톤 패키지는 PyPi에서 제거되었다. 그러나 공급망 보안 업체 스닉크(Synk)의 자동 모니터링에 따르면 토치트리톤 패키지는 2,717회 다운로드되었으며, 12월 26일에만 2,500회 다운로드가 발생했다. 

또한 PyPi의 토치트리톤 패키지 설명은 다음과 같다. "이것은 실제 토치트리톤 패키지가 아니지만 종속성 혼동 취약성을 발견하기 위해 여기에 업로드되었다." 

데이터가 유출된 도메인에는 다음과 같은 알림이 표시된다: 

"안녕하세요, 로그에서 이 문제를 발견했다면 파이썬이 잘못 구성되어 의존성 혼동 공격에 노출됐기 때문입니다. 취약한 회사를 식별하기 위해 이 스크립트는 호스트에 대한 메타데이터(예: 호스트 이름 및 현재 작업 디렉토리)를 나에게 보냅니다. 취약한 사용자를 확인하고 서버에 대한 메타데이터를 모두 검색한 후 삭제됩니다.”

이는 악성 패키지가 취약성을 증명하려는 버그 헌터의 소행일 수 있음을 시사한다. 여전히 시스템에서 홈 디렉토리 파일, SSH 키 및 Git 구성을 유출하는 것은 의심스러운 행동이다.
 

여전히 위험으로 남은 의존성 혼동 공격 

다운로드할 패키지 버전과 위치를 결정하는 패키지 관리자의 자동화 과정을 악용하는 공격 방식은 이미 알려져 있다. 이는 2021년 보안 연구원 알렉스 버산이 의존성 혼동이라고 밝힌 공격 수법으로, pip 및 PyPi뿐만 아니라 npm 같은 다른 패키지 관리자에게도 영향을 미친다. 

이는 패키지 관리자가 단지 개인 인덱스보다 공개 인덱스를 우선시해서 해결될 문제가 아니다. 실제로 pip 개발자들은 2020년 7월(버산이 공개적으로 이 공격을 강조하기도 전)부터 이 문제를 논의해 왔으며, pip이 인덱스를 동등하게 취급한다고 지적했다. 그러나 패키지 관리자는 패키지 버전 및 호환성 태그와 같은 요소를 포함할 수 있는 지정된 모든 인덱스에서 패키지에 가장 적합한 항목을 찾는다. 

npm은 "Scope"의 개념을 도입하여 이 문제를 해결했다. "Scope"는 패키지를 동일한 조직 네임스페이스 아래에 함께 번들하는 방법을 제공한다. 조직은 공용 npm 저장소에 범위를 등록하여 해당 네임스페이스 아래에 패키지를 게시한 다음 공용 또는 내부의 모든 패키지가 범위를 사용하도록 할 수 있다. 이렇게 되면 내부 패키지는 npm에 게시될 필요가 없거나, 다른 누구도 동일한 범위에서 패키지를 게시할 수 없으므로 하이잭킹을 방지하기 위해서는 아무도 같은 범위에서 패키지를 게시할 수 없기 때문이다.

한편, pip 개발자들은 저장소/인덱스 우선순위를 도입하려 하지 않는 것으로 보인다. 따라서 이 기능은 devpi, Pipenv 또는 JFrog Artifactory와 같은 외부 개발 도구에 달려있다. ciokr@idg.co.kr
CIO Korea 뉴스레터 및 IT 트랜드 보고서 무료 구독하기
추천 테크라이브러리

회사명:한국IDG 제호: CIO Korea 주소 : 서울시 중구 세종대로 23, 4층 우)04512
등록번호 : 서울 아01641 등록발행일자 : 2011년 05월 27일

발행인 : 박형미 편집인 : 천신응 청소년보호책임자 : 한정규
사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.