Node Hero의 11번째 시리즈로, Node.js 보안 튜토리얼로 가장 일반적인 공격 경로로 부터 애플리케이션 방어를 위한 방법을 설명하고 있다.
원문: https://blog.risingstack.com/node-hero-node-js-security-tutorial/
규칙 1: eval을 사용하지 말것
eval은 코드 인젝션 공격에 취약하다.
명시적으로 eval을 사용하지 않는것 뿐만 아니라 백그라운드에서 eval을 사용하는 함수들도 사용하지 않는것이 좋다.
setInterval(String,2)
setTimeout(String, 2)
new Function(String)
규칙 2: 항상 'use strict' 모드를 사용하라.
'use strict'을 사용하면 코드내에 존재하는 몇몇 암묵적인 에러를 제거해주고, 에러로그를 출력해 준다.
'use strict'
delete Object.prototype
// TypeError
var obj = {
a: 1,
a: 2
}
// syntax error
규칙 3: 에러처리에 주의하라
에러처리를 통해 민감한 정보가 노출될 수 있다.
ex) X-Powered-By:Express
출력되는 스택정보는 공격자들에게 흥미로운 정보로 제공될 수 있다. 에러 발생에 관련된 내용을 디버깅 정보로 제공하는 좋지 않은 습관이다.
규칙 4: 코드 정적분석을 통해 코드 보안을 강화할 수 있다.
ESLint 와 Standard code style 조합으로 코드 정적분석을 수행하게 되면 많은 버그를 개발단계에서 제거할 수 있다.
규칙 5: 슈퍼유저의 권한으로 프로세스를 실행하지 말라
Node.js 애플리케이션을 superuser권한으로 실행하고 직접적으로 80번이나 443포트를 사용하여 사용자의 요청을 받아서 처리하는 경우, 특정 상황이나 에러, 버그가 발생하는 경우 전체 시스템에 영향을 미칠 수 있다. HTTP요청을 전달하기 위해 HTTP서버나 프록시 설정을 사용하는것이 좋다.
규칙 6: 보안에 관련된 HTTP 헤더 정보를 설정하라
다음은 보안을 강화할 수 있는 HTTP 헤더 설정이다. Node.js에서는 Helmet 모듈을 사용해 헤더들을 쉽게 설정할 수 있다.
Strict-Transport-Security: 서버에 연결할 때 SSL/TLS 연결을 강제한다.
X-XSS-Protection: 크로스사이트스크립팅(XSS) 필터를 대부분의 최신 브라우저에 삽입한다.
X-Content-Type-Options: 선언된 content-type과 다른 응답이 내려오는 경우 브라우저에서 MIME-sniffing 공격을 방지한다.
Content-Security-Policy: 넓은 범위의 공격을 방지한다. 크로스사이트 스크립팅 및 다른 크로스사이트 인젝션들이 포함된다.
var express = require('express')
var helmet = require('helmet')
var app = express()
app.use(helmet())
규칙 7: 적절한 세션관리를 수행한다.
다음은 각 쿠키에서 설정할수 있는 속성들이다.
secure : 브라우저에게 HTTPS 요청이 들어왔을 때만 쿠키를 전송하도록 설정한다.
HttpOnly : JavaScript에서 쿠키에 접근하는 것을 허용하지 않는다. XSS 공격을 방지하는데 도움이 된다.
규칙 8: 쿠키(cookie)의 유효범위를 설정한다.
domain : 요청한 URL과 서버의 도메인이 동일한지 비교한다. 만약 도메인이 일치하거나 도메인의 서브 도메인인 경우 path 속성 검사로 넘어간다.
path: 덧붙여 도메인에 접근 가능한 쿠키의 URL path(e.g: /article/1)를 명시할 수 있다. 만약 도메인과 URL path가 일치한다면 요청 시 쿠키를 전송한다.
expires : 쿠키를 지속적으로(persistent) 사용하기 위해 설정이다. 민감한 정보가 포함된 쿠키는 세션쿠키로만 사용되도록 설정해야 한다.
규칙 9: Retire.js로 취약점을 찾는다.
Retire.js는 사용하고 있는 모듈 버전들에 대해 알려진 취약점을 탐지하는 모듈이다. 다음과 같이 간단히 설치 할 수 있다.
npm install -g retire
설치후 retire 명령을 실행하여 mod_modules 디렉토리 내의 모듈들의 취약점을 찾을 수 있다.
규칙 10: Node Security Platform CLI로 사용하고 있는 module들을 감사한다.
Node Security Platform의 주요 명령어라인 인터페이스인 nsp를 사용하여 프로젝트 디렉토리안의 취약한 모듈을 점검 할 수 있다.
npm install nsp --global
# From inside your project directory
nsp check
'보안 > 시큐어코딩' 카테고리의 다른 글
BSIMM은 무엇? (0) | 2018.03.05 |
---|---|
[Angular JS] 앵귤라JS 시큐어코딩 (0) | 2018.01.03 |
SonarQube 설치 및 사용법 (0) | 2017.12.12 |
OWASP TOP 10 2017 (0) | 2017.12.12 |
잘정리된 XXE인젝션 (0) | 2017.12.12 |