News Feed

PyPI 보안 강화를 위한 새로운 전략 ‘프로젝트 쿼런틴’

컨텐츠 정보

  • 조회 755

본문

파이썬 패키지 인덱스(Python Package Index, PyPI)의 관리자들이 수십만 개에 달하는 소프트웨어 패키지를 개선하기 위한 노력을 시작했다. 이 시도는 2024년 초에 시작됐으며, 파이썬 소프트웨어에 기여하고 이를 소비하는 오픈소스 커뮤니티에서 멀웨어가 포함된 패키지 확산을 식별하고 차단하는 데 목적을 두고 있다. 이전에 보도된 바와 같이 파이썬 프로그램을 탈취하는 사례가 점점 더 널리 퍼지고 있는 상황이다.

현재 파이썬의 보안과 관련해서는 ‘프로젝트 쿼런틴(Project Quarantine)’이라는 노력이 진행 중이다. 이는 파이썬 보안을 전담하는 유일한 관리자인 마이크 피들러의 주도로 진행되고 있다. PyPl 관리자와 일부 선정된 개발자 그룹이 특정 프로젝트를 잠재적으로 유해한 것으로 표시할 수 있도록 하며, 이를 통해 사용자가 해당 프로젝트를 쉽게 설치하지 못하도록 막아 추가적인 피해를 방지할 수 있게 한다.

사이버 공격자에게 PyPl가 흥미로운 이유

파이썬은 성공의 대가를 치르고 있다. PyPI에는 62만 5,000개 이상의 패키지가 등록돼 있으며, 매일 새로운 패키지가 추가된다. 멀웨어 제작자에게 이런 점은 자신의 코드를 패키지에 주입할 수 있는 매력적인 기회를 제공한다. 이렇게 주입된 악성코드는 그 존재를 알지 못한 채 사용하는 개발자에 의해 인터넷을 통해 배포된다.

방대한 패키지의 양은 PyPI가 지속적인 위협에 노출되어 있음을 의미한다. 2023년 톰 캘러웨이가 블로그에 쓴 것처럼 이런 공격에는 유사한 이름을 사용해 합법적인 패키지를 위조하는 방식이나 추가적인 종속성 혼란을 야기하는 공격이 포함된다. 캘러웨이는 “파이썬은 본질적으로 모듈식이기 때문에 파이썬 애플리케이션 대부분은 기능을 매번 새로 개발하는 대신 PyPI를 통해 핵심 기능에 필요한 의존성을 제공받는다. 또한 PyPI는 파이썬 애플리케이션과 라이브러리의 주요 배포 지점이다”라고 언급했다.

공격형 보안 전문가인 에드 우드러프는 필자와의 인터뷰에서 “파이썬은 배우기 쉬워 새로운 프로그래머가 매력을 느끼는 언어다. 이는 많은 개발자가 보안을 우선적으로 고려하지 않는다는 것을 의미한다. 쿼런틴 프로젝트 이전에는 보안에 대한 강조가 크지 않았으나, 이번 프로젝트가 주도적으로 나서고 있는 점이 반갑다”라고 전했다.

다른 오픈소스는 어떻게 대응하고 있을까?

다른 오픈소스 프로젝트는 파이썬과 상황이 다소 다른다. 일부 프로젝트는 신규 패키지 양이 적거나, 상업적 조직이 자금과 자원을 바탕으로 감시 역할을 수행하기 때문이다. 예를 들어, 자바스크립트 소프트웨어 인덱스인 NPM은 깃허브가 관리한다. 이에 대해 포레스터 리서치 애널리스트 재닛 워딩턴은 “깃허브는 악성코드 검열에 매우 뛰어나며, 세계 최고 보안 연구원들을 보유하고 있다”라고 언급했다.

제이프로그(Jfrog)의 보안 연구 부문 부사장인 샤차르 메나셰에 따르면, NPM은 손상된 패키지를 방지하기 위한 자원이 훨씬 더 풍부하다. 메나셰는 “PyPI에는 풀타임 관리자가 단 4명뿐이며, 그중 피들러만이 유일한 보안 전문가다”라고 설명했다. 하지만 이런 많은 자원을 보유한 NPM조차도 매일 약 12개의 악성 자바스크립트 패키지가 발견되고 있다고 덧붙였다.

오픈소스 프로젝트를 보호하는 다른 방법

이 방대한 오픈소스 코드 컬렉션을 더 안전하게 보호하기 위해 격리 메커니즘 외에도 보완적인 방법이 존재한다. 예를 들어 여러 업체가 제공하는 정적 및 동적 애플리케이션 스캐너가 있으며, 종속 프로젝트에 대한 가시성을 제공하기 위해 SBOM(software bill of materials)를 수집하는 도구도 있다. 후자는 2021년 아파치 로그4j(Log4j) 취약점 악용 사태 이후 큰 주목을 받았으며, 소프트웨어 보안을 강화하기 위한 최근 바이든 행정명령에서도 주요 초점 중 하나로 다뤄졌다. 또한, 소냐타입(Sonatype)의 리포지토리 파이어월(Repository Firewall)처럼 개발 생애 주기 초기에 악성코드를 차단할 수 있다고 주장하는 상용 스캐닝 도구도 있다.

또 다른 방법은 개발자 교육이다. 워딩턴은 “개발자들이 코드 작성 초기 단계에서부터 보안을 고려하도록 교육하는 것이 중요하다. 또한, 기업은 일반적인 베스트 프랙티스로서 패키지를 사용하기 전에 미리 검토해야 한다”라고 강조했다. 그러나 안타깝게도 이런 ‘설계상의 보안(Security by Design)’ 개념은 수십 년간 개발 업계에서 논의되어 왔음에도 여전히 충분히 자리 잡지 못하고 있다.

쿼런틴 기능은 2024년 8월 도입돼 초기 약 140개의 프로젝트를 식별했으며, 이 중 하나를 제외한 모든 프로젝트에서 악성코드가 발견돼 이후 삭제됐다. 격리 기능이 도입되기 전에는 PyPI 관리자가 의심스러운 패키지를 처리하기 위해 사용했던 단순한 도구가 있었는데, 이는 데이터베이스에서 패키지를 영구적으로 삭제하는 방식이었다. 해당 패키지가 실제로 악성코드를 포함하고 있었다면 이 방식이 적합했지만, 때로는 이런 판단이 오탐(False Positive)으로 이어져 복구가 쉽지 않았다.

쿼런틴 프로세스는 패키지를 분석 중인 상태로 두어 유예 기간을 제공하며, 악성 패키지를 사용할 수 있는 시간을 줄이는 데 도움이 된다. 또한 “PyPI를 배포 수단으로 사용하려는 위협 행위자의 동기를 더욱 줄이는 데 기여한다”라고 피들러는 자신의 게시글에서 설명했다. 피들러는 다양한 파이썬 패키지를 검사해 악성 행동을 조기에 식별할 수 있도록 자동화를 보다 효과적으로 활용하는 방안을 모색 중이라고 언급했다.

메나셰는 “쿼런틴 프로세스는 오탐을 줄이는 데 도움이 된다. 코드를 면밀히 검토하지 않고 무조건 차단할 수는 없다. 이는 시간이 걸리는 작업”이라고 강조했다.

컨트라스트 시큐리티(Contrast Security) CTO 제프 윌리엄스는 “쿼런틴은 복잡한 문제를 해결하는 매우 실용적인 접근 방식으로 보인다. 이 방식이 악성코드 문제를 완전히 해결하는 만병통치약은 아니지만, 응급 처치용 지혈대 역할을 한다. 더 엄격한 평가가 이루어질 때까지 사용자를 일시적으로 보호하는 훌륭한 방법이다”라고 평가했다.

이어 “악성코드는 자동 탐지가 불가능하다. 공격자는 코드를 무해한 것처럼 보이게 만들 수 있으며, 오픈소스 프로젝트에 기여되는 코드의 출처가 매우 다양하기 때문이다. 따라서 컨트라스트 시큐리티의 툴을 포함한 기존의 방어 시스템은 멀웨어를 차단하려고 시도하지 않는다. 수동 프로세스가 있어야 한다”라고 강조했다.
dl-itworldkorea@foundryco.com

관련자료

댓글 0
등록된 댓글이 없습니다.
Member Rank