오늘은 유튜브를 보던 중 굉장히 흥미로운 영상을 보고 package manager을 사용할 때 주의할 점에 대해 알아보려고 한다.
Package manager란?
Python이나 Nodejs를 이용한 개발을 한 번쯤 해봤으면 들어봤을 것이다. package manager란 해당 언어의 package를 관리해 주는 소프트웨어이다. package란 이미 만들어진 기능들의 모음이라고 생각하면 편할 것이다.
예를 하나 들어보자. 만약 내가 nodejs를 이용해서 mysql을 컨트롤하고 싶다면 그에 맞는 코드를 짜야할 것이다. 하지만 우리는 힘들게 기능들을 구현할 필요가 없다.
이처럼 npm에 해당 기능만 검색해도 내가 원하는 기능들을 나보다 똑똑한 사람들이 짜놨다. 우리는 이것을 설치만 해서 사용하면 된다.
만약 이런 package가 없다면 우리는 단지 mysql을 사용하기 위해 이런 방대한 양의 코드를 작성해야 할 것이다.
보안문제
그렇다면 이렇게 편리하고 쉽게 개발을 도와주는 기능에 어떤 문제가 있다는 것일까?
Left-pad 사건
이런 편리한 기능은 우리를 그곳에 의존하게 만든다. Left-pad 사건이 이것을 설명하는 가장 좋은 예시이다.
https://www.bloter.net/news/articleView.html?idxno=22900
11줄의 코드, 인터넷을 패닉에 빠뜨리다
지난 3월 말, NPM 커뮤니티를 달궜던 ‘left-pad 사건’에 대해 독자인 오상준 님이 글을 보내왔습니다. 필자 동의를 얻어 게재합니다._편집자지난 3월22일 오후 5시 30분경(미국 동부시각), 전세계 Nod
www.bloter.net
자세한 내용은 위의 글에서 확인할 수 있고 간단하게 설명을 해보면 left-pad package는 아래와 같은 기능을 하는 간단한 코드이다.
2 ==> 0002
23 ==> 0023
234 ==> 0234
2345 ==> 2345
이 package는 단순히 11줄로 이루어져 있었다. 하지만 이 package의 편의성 때문에 많은 다른 package에서도 이것을 설치해 사용하고 있었고 어떤 사건으로 인해 이 package가 삭제되자 그에 의존되어 있는 모든 프로그램(페이스북, 링크드인, 스포티파이 등)에서 문제가 나타났던 것이다.
Supplly Chain Attack
위의 Left-pad사건에서도 나타났던 문제이다. 어떤 큰 package에서 다른 여러 개의 작은 package에 의존하고 있는 경우 생길 수 있다.
일반적인 package가 79개의 다른 package에 의존하고 있다고 한다. 79개 중 하나에서 보안적인 문제나 혹여 위의 경우처럼 그중 하나의 package가 npm에서 삭제된다면 Left-pad과 같은 문제가 생길 수 있는 것이다.
Typosquatting
npm을 이용해서 request라는 package를 설치한다고 가정해 보면
npm install request
이런 식의 과정이 될 것이다.
npm install reqiest
만약 개발자가 실수해서 이런 식으로 오타가 난다면 전혀 다른 package가 설치된다. 이렇게 설치된 package는 공격자가 악의적으로 request package와 같은 기능을 하게 만들어놓고 뒤에서는 정보를 수집하는 등의 기능을 하도록 만들어 놓을 수 있다. 간단하게 설치하고 업로드할 수 있는 만큼 주의를 기울여야 한다.
MathJS 공격사례
이 공격사례도 Typosquatting과 비슷하다. mathjs라는 굉장히 유용한 수학 관련 package인데 이것의 소형과 버전을 가장한 mathjs-min이라는 package가 npm에 업로드되었다.
당연히 소프트웨어의 크기를 작게 만들고 싶었던 많은 사용자들이 이 package를 설치하여 사용하였다. 하지만 이 package는 mathjs를 가장한 멀웨어였고 mathjs와 같은 기능을 하지만 discord의 토큰을 훔칠 수 있도록 설계되어 있었다.