NPM 리포지터리의 비공개 패키지도 감염시킬 수 있다

2022-10-14 17:55
  • 카카오톡
  • 네이버 블로그
  • url
작년 소프트웨어 디펜던시들을 혼동시키는 공격 방법이 개발됐다. 그리고 최근에는 이를 응용하여 비공개 패키지까지 감염시키는 방법이 나왔다. NPM이라는 플랫폼에서 실험되었는데, 아직까지 이렇다 할 방어법이 존재하지 않는다.

[보안뉴스 문가용 기자] 기업이 NPM 리포지터리에 호스팅한 비공개 소프트웨어 패키지를 공략하는 방법이 보안 업체 아쿠아시큐리티(Aqua Security)에 의해 개발됐다. 실제로 존재하는 비공개 소프트웨어 패키지의 이름을 알아낸 후, 똑같은 이름으로 공개 패키지를 악성으로 만들어 원래의 비공개 소프트웨어 패키지를 이용하는 사람들 중 누군가 실수로 악성 패키지를 다운로드 받게 만드는 것이라고 한다. 코드 디펜던시를 혼동시키는 것이다. 


[이미지 = utoimage]

보통 회사에서 내부 개발을 진행할 때는 비공개 리포지터리를 NPM과 같은 플랫폼들에 마련하고, 그 리포지터리에 내부적으로 신뢰할 수 있는 코드들을 두고 활용한다. 그렇게 함으로써 외부인이 소프트웨어를 구성하는 코드 요소들을 건드리지 못하게 하고, 따라서 공급망 공격의 가능성을 최소화 하는 것이다. 공급망 공격을 하려고 하는 해커들에게 있어 이런 비공개 리포지터리들은 꽤나 가치가 높은 표적이 될 수밖에 없다.

지난 해 보안 전문가 알렉스 버산(Alex Birsan)은 ‘코드 디펜던시 혼동 공격(code dependency confusion attack)’이라는 개념을 만들어냈다. 당시 아마존, 리프트, 슬랙, 질로우와 같은 회사들의 내부 프로그램 개발 프로젝트에 사용되는 비공개 패키지들과 똑같은 패키지를 가짜로 만들고, 이를 회사 내부로 유입시키는 데 성공했었다. 실험이었기에 가짜 패키지에는 악성 요소가 없었다. 하지만 아무리 비공개로 리포지터리를 관리하더라도 외부 패키지를 내부로 집어넣을 방법이 완전히 사라지는 건 아니라는 게 공개됐었다. 공격 난이도가 높지도 않고, 시간이 오래 걸리지도 않았다.

이런 류의 공격으로부터 안전해지려면 내부적으로만 사용하는 패키지의 이름을 외부로 유출시키지 않아야 한다. 그래야 비슷한 이름에 속는 일이 없어진다. 아쿠아시큐리티가 이번에 발견한 방법은, 그 비밀스러운 정보인 패키지 이름을 억지로 알아내고, 그것을 활용하여 코드 디펜던시 혼동 공격을 이어가는 것이라고 말할 수 있다. 아쿠아시큐리티가 이렇게 할 수 있는 건 NPM 레지스트리 API의 취약점 때문이다.

새로운 유형의 타이밍 공격
NPM의 API는 사용자들이 특정 패키지가 존재하는지 확인하고 다운로드 할 수 있게 해 주는 기능을 가지고 있다. 패키지에 대한 정보를 얻어갈 때도 이 API를 활용하는 게 가능하다. 그런데 사용자가 비공개 처리된 패키지를 검색하거나 아예 존재하지 않는 패키지를 검색하면, 404 HTTP 오류 메시지가 나타난다. 다만 비공개 패키지에 대한 오류가 출력되는 시간과, 존재하지 않는 패키지에 대한 오류가 출력되는 시간에 차이가 있다고 한다.

“비공개 패키지에 대한 오류 메시지일 경우 평균 648밀리세컨드가 걸렸습니다. 존재하지 않는 패키지의 경우 101 밀리세컨드가 걸렸습니다.” 아쿠아 측의 설명이다. “만약 공격자가 패키지를 다섯 번 정도 연속으로 검색하고, 404 오류 메시지가 뜨는 시간을 측정하면 높은 확률로 자신이 요청한 패키지가 존재하는지 하지 않는지 확인할 수 있게 됩니다.” 잘만 맞춘다면 패키지 비공개로 존재하는 패키지의 존재를 알아낼 수 있는 것이다.

아쿠아시큐리티의 전문가는 비공개 패키지 이름을 어느 정도 조합할 수 있는 방법들이 공격자들 사이에 알려져 있다고 설명한다. 즉 아쿠아 측이 제시한 공격 방법이 이론상으로만 존재 가능한 것이 아니라는 뜻이다. 패키지 이름 추측의 방법에는 대표적으로 다음 두 가지가 있다.

1) 공격 대상이 되는 조직 내에서 통용되는 이름 짓기 패턴을 파악하고, 이를 기반으로 사전 공격을 실시해 패키지 이름을 추측한다.
2) 라이브러리 등 온라인을 통해 공개된 데이터셋을 활용해 공공 패키지들 중 삭제된 것들이 무엇이 있는지 확인한다. 공공 패키지였다가 비공개로 전환되면서 삭제된 것들이 존재하는 게 가능하다.

아쿠아시큐리티는 이러한 공격 기법을 정리해 깃허브의 버그바운티 프로그램에 제출했다. 그리고 깃허브로부터 다음과 같은 응답을 받았다. “아키텍처 자체의 제한이 있기 때문에 NPM 내에 특정 비공개 패키지가 존재한다는 걸 제3자가 확인하는 것까지 막을 수 없습니다.” 공격의 가능성이 충분하지만 실제적인 방어책이 존재할 수 없는 공격 기법이라고 판단했다는 뜻이다.

기업들은 그러면 속수무책으로 당해야 할까? 아쿠아시큐리티는 “공공 패키지들을 주기적으로 검사해 내부 패키지와 이름이 비슷한 것들이 존재하는지, 있다면 언제부터 등록되어 있었는지 파악해야 한다”고 말한다. “의심가는 패키지들을 추려내고, 분석을 통해 악성 요소가 존재하는지를 파악하는 작업을 이뤄내야 합니다.”

3줄 요약
1. 소프트웨어 개발 프로젝트에 사용되는 비공개 리포지터리와 패키지, 이름을 알아낼 수 있음.
2. 이름을 알아내면 똑같은 이름으로 공공 리포지터리 만들어 악성 패키지 삽입함.
3. 그러면 누군가 착각해서 악성 패키지를 다운로드 받아 사용함.

[국제부 문가용 기자(globoan@boannews.com)]

<저작권자: 보안뉴스(www.boannews.com) 무단전재-재배포금지>

헤드라인 뉴스

TOP 뉴스

이전 스크랩하기


과월호 eBook List 정기구독 신청하기

    • 유니뷰

    • 인콘

    • 제네텍

    • 핀텔

    • KCL

    • 아이디스

    • 씨프로

    • 웹게이트

    • 엔토스정보통신

    • 하이크비전

    • 한화비전

    • ZKTeco

    • 비엔에스테크

    • 지오멕스소프트

    • 원우이엔지

    • 지인테크

    • 아이원코리아

    • 이화트론

    • 다누시스

    • 테크스피어

    • 비전정보통신

    • 슈프리마

    • 인텔리빅스

    • 시큐인포

    • 미래정보기술(주)

    • 트루엔

    • 인터엠

    • 경인씨엔에스

    • 동양유니텍

    • 성현시스템

    • 세연테크

    • 투윈스컴

    • 스피어AX

    • 다후아테크놀로지코리아

    • 한결피아이에프

    • 프로브디지털

    • 디비시스

    • 위트콘

    • 구네보코리아주식회사

    • 주식회사 에스카

    • 넥스트림

    • 포엠아이텍

    • 엔텍디바이스코리아

    • 윈스

    • 벨로크

    • 스템소프트

    • 시큐아이

    • 위드네트웍스

    • 신우테크
      팬틸드 / 하우징

    • 에프에스네트워크

    • 네티마시스템

    • 케이제이테크

    • 알에프코리아

    • (주)일산정밀

    • 아이엔아이

    • 이스트컨트롤

    • 새눈

    • 현대틸스
      팬틸트 / 카메라

    • 유투에스알

    • 한국씨텍

    • 미래시그널

    • 엘림광통신

    • 태정이엔지

    • 에이앤티글로벌

    • 두레옵트로닉스

    • 넥스텝

    • 지에스티엔지니어링
      게이트 / 스피드게이트

    • 레이어스

    • 에이티앤넷

    • 포커스에이치앤에스

    • 티에스아이솔루션

    • 휴젠

    • 메트로게이트
      시큐리티 게이트

    • 글로넥스

    • 신화시스템

    • 세환엠에스(주)

    • 유진시스템코리아

    • 카티스

    • 유니온커뮤니티

Copyright thebn Co., Ltd. All Rights Reserved.

MENU

회원가입

Passwordless 설정

PC버전

닫기