
웹 애플리케이션 보안은 단순한 선택이 아닌 필수 항목이다. 취약점을 조기에 발견하고 수정하면 큰 보안 사고를 예방할 수 있다. 이 글은 웹사이트 보안을 점검하는 실무 도구들을 정리하고 활용 방법을 안내한다.
1. 보안 스캔 도구 개요
OWASP ZAP
타입: 오픈소스 웹 애플리케이션 보안 스캐너
플랫폼: 데스크톱, Docker, CI/CD
가격: 무료
Snyk
타입: 의존성 취약점 스캐너
플랫폼: CLI, IDE, CI/CD
가격: 무료 플랜 + 유료
npm audit
타입: npm 패키지 취약점 스캐너
플랫폼: CLI
가격: 무료
2. 주요 보안 스캔 도구
OWASP ZAP
주요 기능
- 자동 보안 스캔
- 수동 보안 테스트
- API 보안 테스트
- CI/CD 통합
설치 및 사용
# Docker로 실행
docker run -t owasp/zap2docker-stable zap-baseline.py -t https://example.com
# 데스크톱 애플리케이션
# https://www.zaproxy.org/download/ 에서 다운로드스캔 유형
- Quick Start: 빠른 기본 스캔
- Full Scan: 전체 스캔 (시간 소요)
- API Scan: API 엔드포인트 스캔
검출 항목
- SQL 인젝션
- XSS (Cross-Site Scripting)
- CSRF (Cross-Site Request Forgery)
- 인증/인가 취약점
- 보안 헤더 누락
Snyk
URL: https://snyk.io/
주요 기능
- 의존성 취약점 스캔
- 라이선스 검사
- 컨테이너 이미지 스캔
- 코드 스캔 (SAST)
설치 및 사용
# 설치
npm install -g snyk
# 인증
snyk auth
# 프로젝트 테스트
snyk test
# 모니터링 설정
snyk monitor지원 플랫폼
- npm, yarn, pip, Maven, Gradle
- Docker 이미지
- Kubernetes
- Terraform
npm audit
사용법
# 취약점 확인
npm audit
# 자동 수정 (가능한 경우)
npm audit fix
# 강제 수정
npm audit fix --force
# 상세 정보
npm audit --json출력 예시
=== npm audit security report ===
High Regular Expression Denial of Service
Package minimatch
Dependency of webpack
Path webpack > enhanced-resolve > micromatch > minimatch
More info https://npmjs.com/advisories/1183. 추가 보안 도구
Burp Suite
타입: 웹 보안 테스팅 프록시
가격: Community (무료), Professional (유료)
주요 기능
- HTTP 요청/응답 가로채기
- 취약점 스캔
- 수동 보안 테스트
- 확장 프로그램 지원
Nessus
타입: 취약점 스캐너
가격: 유료 (무료 플랜 제한적)
주요 기능
- 네트워크 스캔
- 웹 애플리케이션 스캔
- 컴플라이언스 검사
OWASP Dependency-Check
타입: 의존성 취약점 스캐너
가격: 무료
사용법
# Maven 프로젝트
mvn org.owasp:dependency-check-maven:check
# Gradle 프로젝트
./gradlew dependencyCheckAnalyze4. 보안 체크리스트
OWASP Top 10 (2021)
주요 취약점
- Broken Access Control
- Cryptographic Failures
- Injection (SQL, XSS 등)
- Insecure Design
- Security Misconfiguration
- Vulnerable Components
- Authentication Failures
- Software and Data Integrity Failures
- Security Logging Failures
- Server-Side Request Forgery
입력 검증
- 모든 사용자 입력 검증
- SQL 인젝션 방지 (Prepared Statements)
- XSS 방지 (입력 이스케이프, CSP)
- 파일 업로드 검증
- 경로 탐색 공격 방지
예시: SQL 인젝션 방지
// 나쁜 예시
const query = `SELECT * FROM users WHERE id = ${userId}`;
// 좋은 예시
const query = 'SELECT * FROM users WHERE id = ?';
db.query(query, [userId]);인증 및 세션 관리
- 강력한 비밀번호 정책
- 비밀번호 해싱 (bcrypt, argon2)
- 세션 토큰 안전한 생성 및 관리
- 세션 타임아웃 설정
- 로그아웃 기능 구현
보안 헤더
- Content-Security-Policy (CSP)
- X-Frame-Options
- X-Content-Type-Options
- Strict-Transport-Security (HSTS)
- Referrer-Policy
예시: Express.js 보안 헤더
const helmet = require('helmet');
app.use(helmet());의존성 관리
- 정기적인 의존성 업데이트
- 취약점 스캔 (npm audit, Snyk)
- 불필요한 의존성 제거
- 신뢰할 수 있는 소스에서만 설치
5. 실무 활용 가이드
개발 단계별 보안 점검
1. 개발 중
- 정적 분석 도구 (ESLint 보안 플러그인)
- 코드 리뷰 시 보안 체크리스트
- 로컬에서 npm audit 실행
2. 테스트 단계
- OWASP ZAP 자동 스캔
- Snyk 의존성 스캔
- 수동 보안 테스트
3. 배포 전
- 전체 보안 스캔
- 취약점 수정 확인
- 보안 헤더 검증
4. 배포 후
- 정기적인 모니터링
- 취약점 알림 설정
- 보안 로그 모니터링
CI/CD 통합
GitHub Actions 예시
name: Security Scan
on: [push, pull_request]
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run npm audit
run: npm audit --audit-level=moderate
- name: Run Snyk
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
- name: OWASP ZAP Scan
run: |
docker run -t owasp/zap2docker-stable zap-baseline.py \
-t ${{ secrets.TARGET_URL }}6. 보안 도구 비교
| 도구 | 타입 | 가격 | 강점 | 약점 |
|---|---|---|---|---|
| OWASP ZAP | 웹 스캐너 | 무료 | 강력한 기능, 오픈소스 | 설정 복잡 |
| Snyk | 의존성 스캔 | 무료+유료 | 사용 쉬움, CI/CD 통합 | 유료 플랜 필요 |
| npm audit | 의존성 스캔 | 무료 | 간단, 빠름 | npm만 지원 |
| Burp Suite | 프록시 | 무료+유료 | 강력한 수동 테스트 | 학습 곡선 |
| Dependency-Check | 의존성 스캔 | 무료 | 다양한 언어 지원 | 느림 |
7. 일반적인 취약점 및 대응
SQL 인젝션
취약한 코드
const query = `SELECT * FROM users WHERE email = '${email}'`;안전한 코드
const query = 'SELECT * FROM users WHERE email = ?';
db.query(query, [email]);XSS (Cross-Site Scripting)
취약한 코드
document.innerHTML = userInput;안전한 코드
document.textContent = userInput;
// 또는
const safe = DOMPurify.sanitize(userInput);
document.innerHTML = safe;CSRF (Cross-Site Request Forgery)
대응 방법
// CSRF 토큰 사용
const csrfToken = generateCSRFToken();
// 요청 시 토큰 포함하여 검증인증 우회
체크리스트
- 모든 보호된 엔드포인트에 인증 확인
- 권한 검사 (역할 기반 접근 제어)
- 세션 만료 처리
- 토큰 검증
8. 보안 모니터링
로깅
보안 이벤트 로깅
- 로그인 시도 (성공/실패)
- 권한 변경
- 민감한 작업 수행
- 비정상적인 접근 패턴
알림 설정
Snyk 알림
# GitHub 통합
snyk monitor --org=my-org정기적인 스캔
- 주간 보안 스캔
- 월간 전체 감사
- 취약점 발견 시 즉시 알림
FAQ
Q: 모든 도구를 사용해야 하나요?
A: 아니요. 프로젝트 규모와 요구사항에 따라 선택한다. 소규모 프로젝트는 npm audit과 OWASP ZAP만으로도 충분하다.
Q: 얼마나 자주 스캔해야 하나요?
A: 의존성 스캔은 CI/CD에 통합하여 매번 실행하고, 전체 보안 스캔은 주간 또는 배포 전에 실행한다.
Q: 무료 도구로 충분한가요?
A: 대부분의 경우 무료 도구로 충분하다. OWASP ZAP, npm audit, Snyk 무료 플랜으로 기본적인 보안 점검은 가능하다.
Q: 자동화된 스캔만으로 충분한가요?
A: 자동화된 스캔은 많은 취약점을 찾지만, 수동 테스트도 필요하다. 특히 비즈니스 로직 취약점은 수동 테스트가 중요하다.
Q: 보안 스캔 결과를 어떻게 해석하나요?
A: 위험도(High/Medium/Low)에 따라 우선순위를 정하고, 프로젝트에 실제 영향을 주는 취약점부터 수정한다.
Q: 취약점이 발견되면 어떻게 하나요?
A: 즉시 수정 가능한 것은 바로 수정하고, 복잡한 경우는 보안 패치를 적용하거나 대안을 찾는다. 심각한 취약점은 즉시 조치한다.
보안 점검 역량을 프로젝트에 활용
웹 보안 스캔과 취약점 점검 기술을 습득했다면, 실제 프로젝트에서 보안 감사나 보안 강화 작업을 수행해보자. 블루버튼 같은 플랫폼에서 웹 애플리케이션 보안 강화, 보안 감사, 취약점 수정, OWASP Top 10 대응 등 보안 관련 프로젝트를 찾을 수 있다. 특히 금융, 의료, 전자상거래 등 보안이 중요한 프로젝트에서 이 글에서 배운 도구와 방법론을 바로 적용할 수 있다.