의존성 혼동(Dependency confusion)이란 소프트웨어 개발 도구가 공개 및 비공개 저장소에서 서드파티 패키지를 끌어오는 기본 방식에서 새롭게 발견된 논리적 결함이다. 공격자들은 이 문제를 이용해 개발 환경을 속일 수 있다. 즉, 비공개 저장소에 호스팅된 커스텀 패키지 대신에 커뮤니티 저장소에 게시된 악성 패키지를 끌어오도록 만드는 것이다.


소프트웨어 공급망의 복잡성

시놉시스(Synopsys)의 2020년 연구에 따르면, 기업이 사용하는 상용 애플리케이션 가운데 99% 이상에 오픈소스 코드가 들어 있으며, 이런 코드는 기업의 전체 코드에서 최소한 70%를 차지한다. 이는 모든 프로그래밍 언어에 이용 가능한 서드파티 구성요소와 패키지로 구성된 거대한 생태계 덕분이다. 

자바(Java)에는 중앙 저장소가 있고 자바스크립트(JavaScript)에는 npm이 있으며, 파이썬(Python)에는 PyPI(Python Package Index, 파이썬 패키지 인덱스), 루비(Ruby)에는 루비젬(RubyGems)이 있는 식이다. 이들은 모두 커뮤니티에서 유지 관리하는 공개 저장소로서 패키지가 의존성으로 정의될 때 개발 도구는 이 곳으로부터 패키지를 끌어온다.

패키지 사이의 관계가 복잡하다는 것은 한 구성요소를 애플리케이션 내에 의존성으로 끌어올 경우 수십 개 내지 수백 개의 다른 애플리케이션을 가져오는 결과를 낳을 수 있다는 의미다. 이런 점은 특히 저장소의 감시가 잘 이루어지지 않을 경우, 공격자들이 악용할 소지가 있다고 보안 연구원들이 오래 전부터 경고해 왔다.

과거에 해커들은 정상적인 패키지 개발자들을 해킹해 패키지에 악성코드를 주입했다. 그 결과, 해당 패키지를 의존성으로 갖고 있는 다른 많은 정상적인 패키지도 피해를 입었다. 공격자들은 개발자들이 애플리케이션 의존성을 정의할 때 이름을 잘못 입력하기를 기대하면서 정상적인 이름과 비슷한 이름의 구성요소를 업로드하기도 했다. 이런 공격을 '타이포스쿼팅(Typosquatting)'이라고 한다.  [기사 더보기]

 

 

[출처 : IT WORLD(https://www.itworld.co.kr/)]

[기자 : Lucian Constantin(editor@itworld.co.kr)]