DAST 스캔
코드만 봐서는 발견할 수 없는 취약점도 있습니다. DAST(Dynamic Application Security Testing)는 실제로 실행 중인 애플리케이션에 HTTP 요청을 보내 취약점을 탐지하는 방법입니다. 마치 해커가 외부에서 공격하는 것처럼 애플리케이션을 테스트합니다.
SAST는 코드를 분석하지만, 서버 설정 오류나 배포 환경의 문제는 발견하지 못합니다. 예를 들어 보안 헤더 누락, 쿠키 설정 오류, CORS 설정 문제 등은 애플리케이션이 실제로 실행되어야만 확인할 수 있습니다. DAST는 이러한 런타임 취약점을 찾아줍니다.

개요
- 분석 대상: 배포되어 실행 중인 웹 애플리케이션
- 분석 엔진: OWASP ZAP + Nuclei (동시 실행)
- 분석 방식: 실제 HTTP 요청을 보내 응답을 분석
OWASP ZAP과 Nuclei는 같은 대상 도메인에 대해 동시에 실행되며, 결과는 하나의 통합 뷰에 표시됩니다. 두 도구는 서로 다른 관점의 분석을 제공하므로 함께 보면 더 종합적인 위험 평가가 가능합니다. 한 도구가 실패해도 다른 도구는 계속 진행됩니다 (Promise.allSettled 패턴, SecurityScanTriggerBar.tsx line 367).
DAST의 특징
장점
- 실제 환경 테스트: 프로덕션과 동일한 환경에서 테스트하여 실제 위험을 파악
- 설정 오류 탐지: 웹 서버, 프레임워크, 클라우드 설정의 보안 문제 발견
- 인증 테스트: 로그인 우회, 세션 관리 취약점 등 인증 관련 문제 검증
- 런타임 취약점: 코드만 봐서는 알 수 없는, 실행 중에만 나타나는 문제 탐지
SAST vs DAST
- SAST: 소스 코드를 개발 중에 분석합니다. 전체 코드베이스를 다루며 개발 초기에 문제를 발견합니다.
- DAST: 실행 중인 앱을 배포 후에 분석합니다. 접근 가능한 엔드포인트만 다루며 설정 오류와 런타임 취약점을 발견합니다.
SAST와 DAST는 상호 보완적입니다. SAST는 개발 단계에서, DAST는 배포 후에 실행하여 각각 다른 유형의 취약점을 커버하세요.
Step 1: DAST 스캔 진입
- 사이드바의 "보안" 그룹 > [보안 분석] 메뉴를 클릭합니다.
- 페이지 상단의 카드 캐러셀에서 분석할 서비스를 선택합니다.
- DAST 탭을 선택합니다.
/security?id={서비스ID}&area=dast URL로 진입하면 해당 서비스의 DAST 탭이 바로 열립니다.
Step 2: 스캔 실행 준비
DAST 모달([도메인 분석 (DAST) · OWASP ZAP + Nuclei])을 열면 다음을 설정합니다:
- 스캔 대상 URL: 서비스에 등록된 도메인 중 하나를 선택하거나 수동으로 URL 입력
- ZAP 스캔 타입: baseline(기본, 450초) / full(900초) / api(450초) 선택. Nuclei는 항상 default 타입으로 고정 실행
DAST 모달은 두 가지 도메인 선택 모드(select / manual)를 토글할 수 있습니다.
- select: 자동 감지된 도메인 목록에서 선택. 서비스에 매핑된 외부 Nginx 도메인이 카드 스트립으로 표시되며, 각 카드는 도메인명, 마지막 스캔 상태 및 시간, 재스캔 버튼을 제공합니다. 여러 도메인이 있는 경우 카드를 클릭하여 스캔 대상 도메인을 전환할 수 있습니다.
- manual:
target_url필드에 수동으로 URL 입력
ZAP 스캔 타입은 목적에 맞게 선택합니다.
- Baseline (짧은 액티브 스캔): 전체 타임아웃 450초. 짧게 제한된 액티브 스캔으로 보안 헤더 누락, 쿠키 설정 문제, 기본 인젝션/XSS 패턴 등을 탐지합니다. 개발 환경, CI 파이프라인에 권장됩니다.
- Full (액티브 스캔): 전체 타임아웃 900초. SQL Injection, XSS 등을 테스트하기 위해 악성 페이로드를 전송합니다. 스테이징 환경에 권장됩니다.
- API (API 전용 스캔): 전체 타임아웃 450초. REST API 엔드포인트에 최적화된 스캔입니다.
Full 스캔은 실제 공격 페이로드를 전송하므로, 프로덕션 환경에서는 서버 부하 증가, 데이터 변경, 일시적 오류 등이 발생할 수 있습니다. 프로덕션에서는 Baseline 스캔만 실행하거나, Full 스캔은 스테이징 환경에서 실행하세요.
도메인이 미등록 상태라면 보안 분석 페이지 내에서 "여기서 도메인 등록" 버튼으로 인라인 도메인 추가가 가능합니다. 페이지 이탈 없이 등록되며(DomainAddModal 통합), 외부 Nginx, K8s Ingress 등 다양한 인프라 유형을 지원합니다.
DAST 스캔은 SBOM이나 라이선스 정보를 만들지 않습니다. SBOM/라이선스는 SAST·SCA·DAST와 무관한 별개의 독립 스캔으로, SBOM / 라이선스 탭에서 직접 실행합니다(소스 SBOM·이미지 SBOM 모두).
Step 3: 스캔 실행 및 실시간 진행률
스캔 시작 버튼을 클릭하면 WebSocket을 통해 진행률이 실시간으로 표시됩니다. 스캔 진행 중에는 버튼 라벨이 변경되며, 진행률(0~100%)과 함께 현재 수행 중인 단계 라벨이 동적으로 노출됩니다.
WebSocket 진행 중 단계
ZAP는 spider(크롤링)와 active_scan(능동 보안 스캔)을 순차적으로 수행하며, 진행 중에는 다음 단계 라벨이 순서대로 표시됩니다.
- ZAP 환경 준비 중
- 스캔 옵션 구성 중
- ZAP 데몬 시작 중
- 사이트 탐색(크롤링) 중
- 능동 보안 스캔 중
- 보고서 생성 중
- 결과 파싱 중
ZAP와 Nuclei가 동시에 실행되므로, Nuclei 측의 단계 라벨(예: Nuclei 템플릿 점검 중)도 함께 진행될 수 있습니다.
결과(완료/실패)
WebSocket을 통해 실시간 진행 메시지가 표시되며, 스캔이 끝나면 최종적으로 완료 또는 오류 상태로 전환됩니다. 완료 시 결과를 확인할 수 있고, 실패 시 오류 메시지가 표시됩니다.
Step 4: 결과 확인
4.1 결과 요약
스캔이 완료되면 위험도별 알림 수와 스캔 소요 시간 등의 메트릭이 노출됩니다.
4.2 카테고리별 결과 보기
각 알림은 다음 상태로 분류 및 처리할 수 있습니다.
- open: 새로 발견된 미처리 알림
- resolved: 수정 완료
- false_positive: 오탐으로 확인됨
- accepted_risk: 위험 수용 (인지했으나 수정하지 않음)
4.3 알림 상세
각 알림을 클릭하면 취약점 유형, 위험도, URL, 파라미터, 증거(요청/응답), 권장 해결 방법, 참조 링크를 확인할 수 있습니다.
Evidence에는 실제 요청과 응답이 포함되어 있습니다. 이를 통해 취약점을 재현하고 수정 후 검증할 수 있습니다. 개발자에게 취약점을 전달할 때 Evidence를 함께 공유하면 이해가 빠릅니다.
4.4 스캔 이력 조회
페이지 하단의 '스캔 이력' 테이블에서 과거 스캔 기록을 확인합니다.
- 그룹화된 행: 한 번의 DAST 트리거에서 ZAP과 Nuclei를 동시에 실행한 경우, 이 두 행은 하나의 그룹(group_id)으로 묶여 한 행에 표시됩니다 (commit a3be8037)
- 도구별 배지: 각 행에 'ZAP', 'Nuclei' 배지가 표시되어 어떤 도구의 스캔인지 명확함
- 누적 결과: 같은 도메인의 ZAP과 Nuclei 결과가 같은 dast_results 행에 저장되므로, 도메인별 두 도구 카운트를 한 번에 확인 가능
- 행 클릭: 이력 행을 클릭하면 그 스캔 시점의 결과를 조회할 수 있습니다 (보는 중 라벨 표시)
주요 탐지 취약점
- 인젝션: SQL Injection, OS Command Injection, LDAP Injection
- XSS: Reflected XSS, Stored XSS, DOM-based XSS
- 설정 오류: Missing Security Headers, Cookie Flags 미설정, CORS Misconfiguration, Directory Listing
- 인증/세션: Broken Authentication, Session Fixation, CSRF
문제 해결
스캔 실패
-
URL 접근 불가: 외부 Nginx에 도메인이 연결되어 있지 않거나, KIOPS 서버에서 해당 URL로 접근할 수 없는 경우입니다. 도메인이 외부 Nginx에 정상 등록되어 있는지 먼저 확인하세요.
-
타임아웃: Baseline/API 스캔은 450초, Full 스캔은 900초 후 타임아웃됩니다. 대상 사이트가 너무 크거나 응답이 느린 경우 스캔 대상 도메인을 좁혀보세요.
-
SSL 오류: 자체 서명 인증서를 사용하는 경우 대상 도메인의 인증서 설정을 확인하세요.
-
도메인 미등록: 스캔 대상 도메인이 없는 경우 보안 분석 페이지의 사전 조건 패널에서 "여기서 도메인 등록" 버튼을 클릭해 인라인 도메인 추가. 외부 Nginx, K8s Ingress 등 다양한 인프라 유형을 지원합니다.
오탐(False Positive) 처리
DAST도 때때로 실제로는 취약하지 않은 것을 취약점으로 보고할 수 있습니다. 알림을 false_positive 또는 accepted_risk 상태로 변경하면 이후 스캔에서 동일 항목이 자동 분류됩니다.