it ·

웹 취약점 점검 가이드 (실무 체크리스트 + 보고서 템플릿)

728x90
반응형
웹 취약점 점검 가이드 - 보안 점검 개념 이미지
웹 취약점 점검은 “자동화 스캔 + 수동 검증 + 재현 가능한 보고서”가 핵심입니다.

웹 취약점 점검 가이드 (실무 체크리스트 + 보고서 템플릿)

이 글은 웹 서비스(프론트/백엔드/API/인프라)를 대상으로 취약점 점검을 설계 → 검증 → 최적화 흐름으로 수행하는 실무 가이드입니다. “대충 스캔 한번 돌리고 끝”이 아니라, 실제로 재현되는 증거개선 우선순위까지 한 번에 정리할 수 있도록 구성했습니다.

이 글에서 얻는 것
  • 점검 범위/규칙을 먼저 확정하는 방법(실수 방지)
  • 자동화 스캔과 수동 검증을 섞는 현실적인 절차
  • 빈번한 웹 취약점 체크리스트(로그인/세션/입력/파일업로드/API 등)
  • 보고서(증거/재현/영향/수정안) 템플릿
  • 개선 후 재점검(Regression)까지 마무리하는 방법

1) 점검 전에 반드시 정해야 할 6가지

취약점 점검은 “기술”이기 전에 “정의(스코프)” 싸움입니다. 아래가 정해지지 않으면 결과가 흔들리고, 점검자가 바뀌면 재현도 안 됩니다.

  1. 대상 범위: 도메인/서브도메인, API 베이스 URL, 관리자 페이지, 모바일 웹 포함 여부
  2. 인증 정보: 테스트 계정(일반/관리자), 2FA 우회 여부, OAuth/SSO 사용 여부
  3. 금지 행동: 대량 트래픽, 크롤링 제한, 파일 업로드/삭제 제한, 실데이터 수정 금지
  4. 환경: 운영/스테이징 중 어디를 점검할지, WAF/레이트리밋 적용 여부
  5. 우선순위 기준: 데이터 노출/권한 상승/결제·계정 탈취를 가장 높게 볼지
  6. 산출물: 보고서 형식(요약+상세), 재현 절차(요청/응답 캡처) 필수 여부
실무 팁
“스캔은 했는데 서비스가 느려졌어요” 같은 이슈를 막으려면, 점검 시작 전에 동시 요청 수, 요청 빈도, 점검 시간대를 합의해두는 게 안전합니다.

2) 전체 점검 흐름: 설계 → 검증 → 최적화

2-1. 설계: 자산(Asset) 목록 만들기

  • 엔드포인트: /api/v1/*, /admin, /auth, /upload, /download, /payments
  • 데이터 흐름: 입력 → 저장(DB/캐시) → 출력(웹/앱/API) 경로 표시
  • 권한 모델: 게스트/일반/관리자 + 리소스 소유권(본인 글/본인 주문)
  • 신뢰 경계: 브라우저 ↔ 서버, 서버 ↔ 외부 API, 내부망 ↔ 공개망

2-2. 검증: 자동화 스캔 + 수동 재현

자동화는 “후보”를 찾고, 수동은 “진짜 취약점인지”를 확정합니다. 특히 인증/권한/비즈니스 로직은 수동 검증이 핵심입니다.

2-3. 최적화: 수정 후 재점검(Regression)

  • 패치 후 동일 시나리오 재현 테스트
  • 부작용 확인: 로그인 깨짐, 파일 업로드 실패, 권한 로직 오동작
  • 테스트 케이스를 CI에 고정(가능하면 자동화)

3) 핵심 체크리스트 (가장 많이 터지는 영역)

3-1. 인증(Authentication) 점검

  • 계정 열거: “존재하지 않는 이메일”과 “비밀번호 틀림” 메시지가 구분되는지
  • 브루트포스 방어: 로그인 실패 횟수 제한, 지연(Delay), CAPTCHA/레이트리밋
  • 비밀번호 정책: 최소 길이/복잡도, 유출 비밀번호 차단(가능하면)
  • 비밀번호 재설정: 토큰 만료, 1회성, 추측 불가, 이메일 링크 재사용 방지
  • 2FA: 백업 코드 관리, 우회 가능한 엔드포인트 존재 여부

3-2. 세션(Session) / 토큰 점검

  • 쿠키 속성: HttpOnly, Secure, SameSite 설정
  • 세션 고정(Session Fixation): 로그인 전후 세션 ID가 바뀌는지
  • 로그아웃: 서버 측 세션 무효화(토큰 블랙리스트/만료 처리)
  • 토큰 저장 위치: 브라우저 localStorage 남발(특히 XSS와 결합 시 위험)

3-3. 권한(Authorization) / 접근 제어

가장 중요한 1줄
“프론트에서 버튼을 숨겼다”는 보안이 아닙니다. 서버가 리소스 접근을 강제해야 합니다.
  • IDOR(Insecure Direct Object Reference): /users/123 → /users/124 바꿨을 때 남의 정보가 보이는지
  • 수평 권한 상승: 일반 사용자가 다른 사용자 리소스를 수정/삭제 가능한지
  • 수직 권한 상승: 일반 계정이 관리자 기능(/admin, role=admin)을 호출 가능한지
  • 멀티테넌트: companyId, tenantId 변경으로 타 조직 데이터 접근 가능한지

3-4. 입력 검증(Input) / 인젝션

  • SQL/NoSQL 인젝션: 필터/정렬/검색 파라미터가 쿼리에 직접 붙는지
  • Command/Template 인젝션: 서버에서 쉘/템플릿을 실행하는 경로가 있는지
  • SSRF: URL을 입력받아 서버가 요청하는 기능(미리보기, 이미지 fetch, webhook 테스트)
  • XXE: XML 업로드/파싱 기능(있다면)에서 외부 엔티티 차단

3-5. XSS / CSRF

  • 반사형/저장형 XSS: 게시글/댓글/프로필/검색어/관리자 페이지에서 출력 인코딩 여부
  • DOM 기반 XSS: 프론트에서 innerHTML, dangerouslySetInnerHTML, 취약한 템플릿 사용 여부
  • CSRF: 쿠키 기반 인증이면 CSRF 토큰/Origin·Referer 검증/SameSite 적용 여부

3-6. 파일 업로드 / 다운로드

  • 업로드 확장자/콘텐츠 검사: 확장자만 보고 통과시키지 않는지(MIME + 시그니처)
  • 업로드 경로: 웹 루트에 바로 접근 가능한지(스크립트 실행 위험)
  • 파일명 처리: 경로 조작(../) 차단, UUID 파일명 강제
  • 다운로드: 임의 파일 읽기(경로 조작), 권한 없는 파일 접근 가능 여부

3-7. 보안 헤더 / 설정

  • CSP(Content-Security-Policy): XSS 방어에 큰 도움(가능하면 단계적으로 강화)
  • HSTS: HTTPS 강제
  • X-Content-Type-Options: nosniff
  • Referrer-Policy, Permissions-Policy 적용
  • CORS: Access-Control-Allow-Origin 와 credentials 조합이 위험하게 열려있지 않은지

4) 실전 점검용 요청/응답 확인 템플릿

아래 템플릿대로 “요청을 어떻게 바꿨고”, “응답이 어떻게 달라졌는지”를 남기면 보고서 품질이 확 올라갑니다.

요청/응답 기록 템플릿
[요약]
- 취약점 종류:
- 영향:
- 재현 난이도:
- 우선순위:

[재현 환경]
- URL:
- 계정 권한: (게스트/일반/관리자)
- 브라우저/클라이언트:

[Step-by-step]
1) 정상 요청
   - Request: (method, path, params)
   - Response: (status, 핵심 필드)
2) 조작 요청
   - 바꾼 값: (예: userId=123 -> 124)
   - Response: (증거)
3) 기대 동작
   - 서버가 반환해야 하는 것:

[개선안]
- 서버 측 검증 로직:
- 로그/모니터링:
- 테스트 케이스:

5) 자동화 점검을 “현실적으로” 섞는 방법

자동화는 강력하지만, 오탐/과탐도 많습니다. 그래서 실무에서는 아래처럼 “빠른 후보 찾기 → 수동 확정” 구조를 씁니다.

  1. 크롤링/수집: 사이트맵, 라우트, API 문서(OpenAPI/Swagger)로 엔드포인트 목록 확보
  2. 스캔 1차: 저강도(낮은 요청량)로 실행해 장애 위험을 줄임
  3. 후보 선별: 인증/권한/입력/업로드 관련 항목 우선 확인
  4. 수동 재현: 증거가 남는 요청/응답 캡처 중심
  5. 패치 + 재점검: 동일 시나리오 재시도 + 연관 기능 회귀 테스트

도구 예시는 아래처럼 많이 씁니다(도구 자체가 목적이 아니라, 결과를 “재현 가능하게” 만드는 게 목적입니다): :contentReference[oaicite:0]{index=0} 기준 체크리스트, :contentReference[oaicite:1]{index=1} 같은 프록시 기반 수동 검증, :contentReference[oaicite:2]{index=2} 같은 네트워크 표면 확인, 그리고 API는 curl/HTTPie로 재현을 고정하는 식입니다.

curl 재현 예시(보고서에 그대로 붙여넣기 좋음)
# 1) 정상 호출
curl -i "https://example.com/api/v1/users/me" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

# 2) IDOR 의심: userId만 바꿔보기
curl -i "https://example.com/api/v1/users/124" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

# 기대: 403 Forbidden 또는 최소 정보만 반환

6) 취약점 우선순위 잡는 법 (현장 기준)

동일한 “취약점”이라도 영향이 다릅니다. 아래 기준으로 우선순위를 정하면 개발 리소스를 가장 효율적으로 씁니다.

  • P0: 계정 탈취, 권한 상승(관리자), 결제/정산 조작, 대량 개인정보 유출
  • P1: 특정 사용자 정보 노출, 제한된 권한 상승, 중요한 설정 변경 가능
  • P2: 제한적 XSS(특정 조건), 정보 노출 범위 작음, 악용 난이도 높음
  • P3: 보안 헤더 미흡, 경미한 정보 노출, 운영 영향 낮음
우선순위의 핵심 공식
영향(Impact) × 악용 가능성(Likelihood) × 탐지/차단 가능성(Detectability)

7) 개발팀에 바로 먹히는 “수정 가이드” 형태

보고서가 “지적”으로 끝나면 패치가 늦어집니다. 아래처럼 코드/설계 레벨의 수정안을 같이 주면 처리 속도가 확 올라갑니다.

7-1. 권한 문제(IDOR/권한 상승) 수정안

  • 서버에서 리소스 조회 시 항상 (요청자ID == 리소스 소유자ID) 또는 role 기반 정책을 검사
  • 프론트에서 숨기는 UI는 참고일 뿐, 서버 정책이 기준
  • 정책을 코드로 분산하지 말고, 공통 미들웨어/가드로 통합

7-2. XSS 수정안

  • 출력 인코딩(escape)을 “기본값”으로, HTML 삽입은 “예외”로
  • 사용자 입력을 innerHTML로 넣는 구조 최소화
  • 가능하면 CSP를 단계적으로 강화(리포트 모드 → 차단 모드)

7-3. 파일 업로드 수정안

  • 확장자/헤더/MIME/시그니처 다중 검사
  • 업로드 파일은 실행 불가 위치에 저장 + 파일명은 UUID 강제
  • 다운로드는 권한 체크 후 “서버가 파일을 스트리밍”

8) (선택) 점검 자동화를 위한 최소 스크립트 아이디어

팀에서 반복 점검을 한다면, 아래처럼 “엔드포인트에 대해 보안 헤더/기본 응답”을 빠르게 확인하는 스크립트를 하나 만들어두면 좋습니다. (서비스에 무리를 주지 않도록 저빈도로만 실행하세요.)

Bash 예시(저강도 헤더 점검)
#!/usr/bin/env bash
set -euo pipefail

URLS=(
  "https://example.com/"
  "https://example.com/login"
  "https://example.com/api/health"
)

for u in "${URLS[@]}"; do
  echo "== $u"
  curl -sI "$u" | egrep -i "content-security-policy|strict-transport-security|x-content-type-options|referrer-policy|permissions-policy|set-cookie" || true
  echo
  sleep 1
done

9) 마무리: 점검 품질을 올리는 3가지 습관

  1. 재현 가능하게: “누가 해도 같은 결과”가 나오도록 요청/응답을 남기기
  2. 영향 중심으로: 기술 설명보다 “무슨 피해가 가능한지”를 먼저 적기
  3. 패치 후 재점검: 수정이 끝이 아니라, 같은 유형이 재발하지 않게 테스트로 고정

SEO 메타 / 태그

Meta Description (160자 내외)

웹 취약점 점검을 설계→검증→재점검 흐름으로 정리한 실무 가이드. 인증/세션/권한/입력검증/XSS/CSRF/파일업로드/API 체크리스트와 보고서 템플릿까지 한 번에 제공합니다.

관련 키워드 태그 10개

웹취약점점검, 보안점검, 웹해킹대응, OWASP, 인증보안, 세션관리, 권한검증, XSS, CSRF, 파일업로드보안
728x90
반응형