웹사이트 보안 스캔 도구와 취약점 점검 가이드 - 실무에서 바로 쓰는 보안 도구들

December 23, 2025

웹사이트 보안 스캔 도구와 취약점 점검 가이드

웹 애플리케이션 보안은 단순한 선택이 아닌 필수 항목이다. 취약점을 조기에 발견하고 수정하면 큰 보안 사고를 예방할 수 있다. 이 글은 웹사이트 보안을 점검하는 실무 도구들을 정리하고 활용 방법을 안내한다.

1. 보안 스캔 도구 개요

OWASP ZAP

타입: 오픈소스 웹 애플리케이션 보안 스캐너
플랫폼: 데스크톱, Docker, CI/CD
가격: 무료

Snyk

타입: 의존성 취약점 스캐너
플랫폼: CLI, IDE, CI/CD
가격: 무료 플랜 + 유료

npm audit

타입: npm 패키지 취약점 스캐너
플랫폼: CLI
가격: 무료

2. 주요 보안 스캔 도구

OWASP ZAP

URL: https://www.zaproxy.org/

주요 기능

  • 자동 보안 스캔
  • 수동 보안 테스트
  • 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/118

3. 추가 보안 도구

Burp Suite

타입: 웹 보안 테스팅 프록시
가격: Community (무료), Professional (유료)

주요 기능

  • HTTP 요청/응답 가로채기
  • 취약점 스캔
  • 수동 보안 테스트
  • 확장 프로그램 지원

Nessus

타입: 취약점 스캐너
가격: 유료 (무료 플랜 제한적)

주요 기능

  • 네트워크 스캔
  • 웹 애플리케이션 스캔
  • 컴플라이언스 검사

OWASP Dependency-Check

타입: 의존성 취약점 스캐너
가격: 무료

사용법

# Maven 프로젝트
mvn org.owasp:dependency-check-maven:check

# Gradle 프로젝트
./gradlew dependencyCheckAnalyze

4. 보안 체크리스트

OWASP Top 10 (2021)

주요 취약점

  1. Broken Access Control
  2. Cryptographic Failures
  3. Injection (SQL, XSS 등)
  4. Insecure Design
  5. Security Misconfiguration
  6. Vulnerable Components
  7. Authentication Failures
  8. Software and Data Integrity Failures
  9. Security Logging Failures
  10. 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 대응 등 보안 관련 프로젝트를 찾을 수 있다. 특히 금융, 의료, 전자상거래 등 보안이 중요한 프로젝트에서 이 글에서 배운 도구와 방법론을 바로 적용할 수 있다.


Written by Jeon Byung Hun 개발을 즐기는 bottlehs - Engineer, MS, AI, FE, BE, OS, IOT, Blockchain, 설계, 테스트