본문으로 건너뛰기

보안 스캔 설정

보안 취약점은 빨리 발견할수록 수정 비용이 적습니다. KIWI의 보안 스캔 기능을 사용하면 개발 초기 단계부터 취약점을 자동으로 탐지하여 안전한 서비스를 만들 수 있습니다.


왜 보안 스캔이 필요한가요?

취약점을 발견하는 시점에 따라 수정 비용이 크게 달라집니다:

  • 개발 중 발견: 수정 비용이 가장 낮습니다. 코드 몇 줄만 수정하면 됩니다.
  • 테스트 중 발견: 중간 수준의 비용이 듭니다. 기능 재작업이 필요할 수 있습니다.
  • 운영 중 발견: 비용이 가장 높습니다. 긴급 패치와 데이터 유출 대응이 필요합니다.

KIWI는 DevSecOps 원칙에 따라 개발 파이프라인에 보안을 자연스럽게 통합합니다.

DevSecOps란?

DevSecOps는 Development(개발), Security(보안), Operations(운영)를 결합한 접근 방식입니다. "나중에 보안"이 아닌 "처음부터 보안"을 실현합니다.


보안 개요

보안 스캔 유형

KIWI는 세 가지 유형의 보안 스캔을 제공합니다:

  • SAST (Static Application Security Testing): 소스 코드를 분석합니다. 빌드 전에 실행되며, SQL Injection, XSS, 하드코딩된 비밀번호 등을 발견할 수 있습니다.
  • SCA (Software Composition Analysis): 오픈소스 라이브러리를 분석합니다. 빌드 시 실행되며, 알려진 CVE 취약점과 라이선스 위반을 검사합니다.
  • DAST (Dynamic Application Security Testing): 실행 중인 애플리케이션을 분석합니다. 배포 후 실행되며, 인증 우회, 보안 헤더 누락, CSRF 등을 발견합니다.
어떤 스캔부터 시작해야 하나요?

SAST → SCA → DAST 순서를 권장합니다. SAST와 SCA는 빌드 파이프라인에 자동화하고, DAST는 스테이징 환경에 배포 후 실행하세요.


SAST 스캔 실행하기

SAST(Static Application Security Testing)는 소스 코드를 실행하지 않고 분석하여 취약점을 찾습니다. SQL Injection, XSS, 하드코딩된 비밀번호 등을 발견할 수 있습니다.

Step 1: 보안 탭에서 SAST 실행

[서비스 관리] 페이지에서 서비스를 클릭 → 보안 탭 → SAST 섹션의 스캔 실행 버튼을 클릭합니다.

Step 2: 분석 도구 확인

KIWI는 다음 도구를 사용하여 코드를 분석합니다:

  • CodeQL: Java, JavaScript, Python, Go, C/C++를 지원합니다. GitHub의 정적 분석 도구로 높은 정확도를 제공합니다.
  • Semgrep: 거의 모든 언어를 지원합니다. 빠른 스캔 속도와 커스텀 규칙 지원이 특징입니다.

Step 3: 스캔 결과 확인

스캔이 완료되면 취약점이 심각도에 따라 분류됩니다:

  • Critical: 즉시 악용 가능한 치명적 취약점입니다. 즉시 수정이 필수입니다.
  • High: 높은 위험도의 취약점입니다. 가능한 빨리 수정하세요.
  • Medium: 중간 위험도의 취약점입니다. 계획을 세워 순차적으로 수정하세요.
  • Low: 낮은 위험도의 취약점입니다. 검토 후 필요 시 수정하세요.

Step 4: 취약점 상세 확인

취약점 항목을 클릭하면 상세 정보를 확인할 수 있습니다:

  • 파일 경로와 라인 번호: 정확한 취약점 위치
  • 상세 설명: 취약점의 원인과 영향
  • 수정 가이드: 코드를 어떻게 수정해야 하는지 안내
  • CWE 참조: 표준 취약점 분류 정보
SAST 모범 사례
  1. PR 생성 시 자동 실행: CI 파이프라인에 SAST를 포함하세요
  2. Critical/High는 블로커로 설정: 심각한 취약점이 있으면 머지를 차단하세요
  3. 정기적으로 규칙 업데이트: 새로운 취약점 패턴을 탐지할 수 있습니다 .

SCA 스캔 실행하기

SCA(Software Composition Analysis)는 프로젝트에서 사용하는 오픈소스 라이브러리의 알려진 취약점(CVE)을 검사합니다. 최근 공급망 공격이 증가하면서 SCA의 중요성이 더욱 커지고 있습니다.

Step 1: 보안 탭에서 SCA 실행

[서비스 관리] 페이지에서 서비스를 선택 → 보안 탭 → SCA 섹션의 스캔 실행 버튼을 클릭합니다.

Step 2: 분석 대상 확인

SCA는 프로젝트의 의존성 파일을 자동으로 찾아 분석합니다:

  • Node.js: package.json, package-lock.json, yarn.lock
  • Python: requirements.txt, Pipfile, poetry.lock
  • Java: pom.xml, build.gradle
  • Go: go.mod, go.sum

Step 3: 취약점 결과 확인

스캔 결과에서 취약한 의존성 목록을 확인합니다:

  • 패키지명: 취약점이 발견된 라이브러리입니다.
  • 현재 버전: 프로젝트에 설치된 버전입니다.
  • 수정 버전: 취약점이 해결된 최소 버전입니다.
  • CVE ID: 공개된 취약점 식별자입니다.
  • CVSS 점수: 위험도 점수입니다. (0~10, 높을수록 위험)
CVE와 CVSS란?
  • CVE (Common Vulnerabilities and Exposures): 공개적으로 알려진 보안 취약점의 고유 식별자입니다. (예: CVE-2021-44228)
  • CVSS (Common Vulnerability Scoring System): 취약점의 심각도를 0~10 점수로 나타냅니다. 9.0 이상은 Critical입니다.

Step 4: VEX 필터 적용 (선택사항)

취약점이 발견되어도 실제로 해당 코드 경로를 사용하지 않으면 영향을 받지 않습니다. VEX 필터를 활성화하면 이런 취약점을 제외할 수 있습니다.

라이브러리 업데이트 시 주의사항
  1. 주요 버전 업데이트(1.x → 2.x): Breaking changes가 있을 수 있으므로 테스트 필수
  2. 보안 패치 버전(1.0.0 → 1.0.1): 보통 안전하게 업데이트 가능
  3. 의존성 충돌 확인: 다른 라이브러리와 버전 호환성 확인

SBOM 생성하기

SBOM(Software Bill of Materials)은 소프트웨어에 포함된 모든 구성요소의 목록입니다. 마치 식품의 성분표처럼, 서비스에 어떤 라이브러리가 사용되었는지 투명하게 보여줍니다.

SBOM이 왜 필요한가요?
  • 규정 준수: 미국 연방 정부 납품 시 SBOM 제출 의무화 (Executive Order 14028)
  • 취약점 대응: 새로운 취약점 발견 시 영향받는 서비스를 빠르게 식별
  • 라이선스 관리: 오픈소스 라이선스 의무 확인

Step 1: SBOM 유형 선택

[서비스 관리] → 서비스 선택 → 보안 탭에서 SBOM 생성 버튼을 클릭합니다.

  • 소스 SBOM: 소스 코드의 의존성 파일을 분석합니다. 빌드 전에 생성됩니다.
  • 이미지 SBOM: 빌드된 컨테이너 이미지를 분석합니다. 빌드 후에 생성되며, 실제 배포 구성을 반영합니다.

Step 2: 포맷 선택 및 다운로드

  • CycloneDX: 보안 분석과 컴플라이언스에 적합합니다. 보안 취약점 정보 포함에 최적화되어 있습니다.
  • SPDX: 라이선스 컴플라이언스에 적합합니다. 업계 표준으로 광범위한 도구에서 지원됩니다.

DAST 스캔 실행하기

DAST(Dynamic Application Security Testing)는 실행 중인 애플리케이션에 실제 공격을 시뮬레이션하여 취약점을 찾습니다. SAST/SCA로 발견하지 못하는 런타임 취약점을 찾을 수 있습니다.

중요한 주의사항

DAST는 실제 공격을 시뮬레이션합니다. 반드시 테스트/스테이징 환경에서만 실행하세요. 운영 환경에서 실행하면 서비스 장애나 데이터 손상이 발생할 수 있습니다.

Step 1: DAST 설정

[서비스 관리] → 서비스 선택 → 보안 탭 → DAST 섹션의 설정 버튼을 클릭합니다.

  • 대상 URL: 스캔할 웹 애플리케이션 URL입니다. (예: https://staging.company.com)
  • 인증 설정: 로그인이 필요한 경우 사용자명/비밀번호 또는 토큰을 설정합니다.
  • 스캔 범위: 특정 경로만 스캔합니다. (예: /api/*, /admin/*)

Step 2: DAST 스캔 실행

스캔 실행 버튼을 클릭합니다. DAST는 다음 취약점을 검사합니다:

  • SQL Injection: 악의적인 SQL 쿼리 삽입 여부를 검사합니다.
  • XSS: 악성 스크립트 삽입 여부를 검사합니다.
  • CSRF: 사용자 권한을 도용한 요청이 가능한지 검사합니다.
  • 보안 헤더 누락: CSP, X-Frame-Options 등의 보안 헤더가 설정되어 있는지 검사합니다.
  • 인증/인가 취약점: 세션 관리, 권한 검증 문제를 검사합니다.

Step 3: 결과 확인 및 조치

DAST 결과에서 다음 정보를 확인합니다:

  • 취약한 URL: 공격이 성공한 엔드포인트
  • 재현 방법: 취약점을 확인할 수 있는 요청 예시
  • 수정 가이드: 코드 또는 설정 수정 방법
DAST 모범 사례
  1. 스테이징 배포 후 자동 실행: CI/CD 파이프라인에 포함
  2. 인증된 스캔 사용: 로그인 후에만 접근 가능한 페이지도 검사
  3. 정기 스케줄 스캔: 주 1회 이상 정기 스캔 권장

자주 묻는 질문

SAST 스캔이 너무 오래 걸립니다

원인 및 해결 방법:

  • 저장소 크기가 큼: 불필요한 디렉토리(node_modules, vendor 등)를 제외하세요.
  • 전체 파일 스캔: 증분 스캔 옵션을 사용하여 변경된 파일만 스캔하세요.
  • 모든 규칙 활성화: 프로젝트에 필요한 규칙만 선택하세요.

거짓 양성(False Positive)이 많습니다

거짓 양성을 줄이는 방법:

  1. VEX 필터 활성화: 실제로 사용하지 않는 코드 경로 제외
  2. 규칙 예외 처리: 서비스 설정에서 특정 규칙 비활성화
  3. 인라인 주석: 코드에 // nosec 같은 주석으로 특정 라인 제외
예외 처리 시 주의

예외 사유를 반드시 기록하세요. 나중에 감사 시 왜 예외 처리했는지 설명할 수 있어야 합니다.

특정 취약점을 무시하고 싶습니다

취약점 상세 화면에서 예외 처리 버튼을 클릭합니다. 다음 정보를 입력하세요:

  • 예외 사유: 왜 이 취약점이 현재 환경에서 영향이 없는지
  • 만료일: 예외 처리의 유효 기간 (정기 검토 권장)
  • 담당자: 예외 처리 결정자

스캔 결과를 보고서로 내보내고 싶습니다

보안 탭에서 보고서 내보내기 버튼을 클릭하면 다음 형식으로 다운로드할 수 있습니다:

  • PDF: 경영진 보고, 감사 제출용
  • CSV: 스프레드시트에서 분석용
  • JSON: 다른 도구와 연동용

관련 가이드

추천 다음 단계