NPM (Node Package Manager)


패키지를 관리하는 매니저이며, 각 언어별로 pip, gem, maven등이 같은 역활을 수행하고 있습니다.

불편한점, 버그는 github, twitter를 사용하여 문의를 합니다. 필자가 사용을 시작했을때는 주로 NPM V2를 사용하였는데 dependence tree가 가장 큰 문제점이였습니다. "npm install package" 형태로 설치를 진행하는데 각 패키지가 하위로 꼬리를 물고 포함되어 있기 때문입니다.

아래 그림은 패키지의 관계를 설명하고 있습니다. A v1.0 → B v1.0 하위로 패키지가 의존하게 되는데, A → B → C → N 까지 의존하여도 제약이 없었고, N 까지 내려가는 경우, 너무 깊숙히 폴더를 생성하기 때문에 문제 발생은 빈번했습니다. 

이 점을 극복한게 NPM V3으로 패키지는 모두 동일선상에 위치하고, 버전이 다른경우에만 하위로 패키지를 이동시켜서 해소되었습니다.




패키지가 하위로 서로 의존하고 있기때문에, 하위 패키지가 취약점을 가지고 있는 경우 쉽게 발견하기가 어렵습니다. 패키지를 도입할때에는 "package.json"의 "dependencies"를 꼭 참고하여 추가확인하는 습관을 갖는편이 좋습니다.

NSP (Node Security Platform)


패키지의 취약점을 발견하여 알려주는 플랫폼입니다. 하위 패키지 정보를 모두 검색하여 취약점을 찾습니다.

프로젝트 경로에서 "nsp check" 명령어를 실행하면 하위 패키지와 관련정보가 기록된 주소를 출력합니다.


$ nsp check --output summary
(+) 1 vulnerabilities found
 Name    Installed   Patched   Path                                             More Info
 growl   1.9.2       None      mocha@3.5.0 > growl@1.9.2                        https://nodesecurity.io/advisories/14


웹 브라우저로 들어가서 확인하면 아래와 같은 화면이 나오는데, Command Injection 으로 분류되어 있고, Critical 9.8점을 기록하고 있습니다.

growl 라이브러리는 알람을 지원하는 기능을 지원하는데, 임의의 명령을 수행할 수 있는 취약점이 있습니다. 

취약점을 해결한 버전은 나오지 않았으며, 신뢰할 수 없는 명령어를 사용할 수 있다면 패키지 사용을 권장하지 않고 있습니다.

다른 취약점들도 https://nodesecurity.io/advisories 권고사항 목록을 참고하면 사전에 예방할 수 있을 것 입니다.



Retire 


NSP와 동일한 기능을 제공하며, 하위 패키지 정보를 모두 검색하여 취약점을 찾습니다.

프로젝트 경로에서 "retire" 명령어를 실행하면 동일하게 실행합니다.

출력방식만 다르고 관련정보는 nsp와 동일한 nodesecurity를 사용하고 있습니다.


$ retire
growl 1.9.2 has known vulnerabilities:  severity: high; summary: growl_command-injection; https://nodesecurity.io/advisories/146
growl 1.9.2


패키지를 도입할 때에는 마지막 Commit이 언제인지, 이슈는 정상적으로 처리되고 있는지 확인이 필요합니다.

위 조건이 성립했다면, NSP, Retire 툴을 이용하여 추가로 검사한다면 크리티컬한 위험요소는 많이 상쇄될 것으로 기대합니다.


관련 링크


  • npm: https://www.npmjs.com/
  • nodesecurity: https://nodesecurity.io


'Nodejs' 카테고리의 다른 글

Node.js Error 처리방법  (0) 2017.05.18
Node.js 설치하기  (0) 2017.03.26
Node.js certificate has expired Error 해결하기  (0) 2016.06.17
Node.js Callback에 관한 고찰  (0) 2016.05.30
Node.js v6 버전 업그레이드 후기  (0) 2016.05.29

+ Recent posts