개발자 생태계 노리는 악성 NPM 패키지 해킹

꾸준히 개발자들을 공격하는 해킹 모듈

image nodejs 의 인기 모듈에 코인 해킹 모듈이 들어가있다는 경고 알림

image 인기 NPM 라이브러리에 포함된 하이잭, 패스워드 스틸러/채굴기

개발자들이 해킹에 당하는 이유?

자신이 개발하는 것보다, 남들이 미리 개발해놓은 함수들을 가지고 프로그램을 만든다면 좀 더 시간을 효율적으로 사용할 수 있을 것이다. 어쩌면 이 미리 개발해놓은 함수의 모음(모듈, 라이브러리)라는 개념을 만든 사람이 생각했던 것보다 현재의 개발자들은 외부의 함수에 의존성이 매우 높고, 외부의 함수는 외부의 함수에.. 외부의 함수에.. 이런식으로 엮이고 엮이며 현재의 인기있는 라이브러리들이 만들어지곤 한다. 생태계가 큰 Python이나 JavaScript는 유저가 많은 만큼 모듈도 많고, 모듈을 훑어보지않고 기능만 보고 다운로드해서 사용하기 때문에 생기는 해킹 이슈다.

Supply Chain Attack

크래커들도 이러한 사실을 알아차렸다.

‘얘네 그냥 기능만 다운로드하고 함수 내용은 보지도 않네?’

그래서 크래커들은 이러한 사실을 기반으로 간단하지만 많이 사용하는 함수(leftpad같은 단순한), 인기 있는 모듈의 이름을 베끼는 식으로 (ex) pygame —> pygamenew ) 모듈들을 만들어내고, 그 안에 패스워드를 해킹할 수 있는 키로거나, 화면을 볼 수 있는 트로이목마, 아니면 코인을 채굴하는 코드들을 삽입해서 해킹들을 하기 시작했다.

그리고 서버를 직접적으로 공격하는게 아니기 때문에, Supply Chain Attack(공급망 공격)이라고 부른다. 서버를 직접적으로 공격하는 방식 대신 소프트웨어를 실행시켜 사용하는 소프트웨어 구성 요소를 손상시키고, 개발자의 컴퓨터나 환경 변수등을 해킹하기 시작했다.

위에서 언급했듯이, 패키지는 다른 패키지(서드파티 패키지라고 부름)에 의존한다. 2019년의 논문에 따르면 패키지는 다른 79개의 서드파티 패키지와 39명의 관리자를 신뢰해야한다고 한다.

함수를 만들어내거나, 인기있는 모듈의 이름을 베끼는 것외에도 인기있는 모듈의 서드파티 패키지에 자신의 해킹 패키지가 포함되도록 설계해서, 인기있는 모듈의 관리자 신뢰를 얻어낸다면 인기있는 모듈 개발자 전부의 코드와 패스워드를 해킹할 수 있는 것이다.

예방 방법

  • 가장 필요한 서드파티 패키지만 설치하기

  • 패키지 이름의 철자 정확하게 입력하기

  • 이상한 확장자, 게시자 신뢰하지 않기

  • nodejs 에서 사용가능한 예방방법 –ignore-scripts 패키지를 설치할 때 –ignore-scripts를 사용하면 스크립트의 실행을 건너뛰도록 지시할 수 있다.

  • Github의 Dependabot의 알림에 주의하기

참고 동영상

댓글남기기